在DMD源代码中,tryMain函数在AST上运行几次优化。我要做的就是抓取AST,手动运行passes并检查AST模块。是仅仅修改了tryMain函数,还是在DMD中有一些专门用于此目的的钩子?我想保留所有预先完成的命令行处理,然后获取AST。我不反对DMD继续它的快乐之路,只要我能事先让AST检查它。
发布于 2021-04-16 18:03:12
你可以得到答案,在forum.dlang.org,Discord (https://discord.gg/bMZk9Q4)或者IRC (irc://irc.freenode.net/d)中提出这个问题,你会在几分钟内得到答案<3
发布于 2021-04-30 03:11:00
TL;DR
如果你想弄清楚编译器在做什么,那么你可能需要向你想要检查的dmd部分注入一些代码。
dmd编译器(如果设计的话)在编写时并没有考虑到基于pass的体系结构,超出了语义1/2/3的一些非常模糊的概念,因此您可能需要在这里轻描淡写。
如果你只是想使用自动测试语言,编译器即库的功能已经足够好用了,你可以在ASTBase-form中(也就是只使用语法)或者在执行完所有的语义分析和降级之后获得这个测试语言。
实践
例如,对于指针生存期检查器的当前实现,本身没有“指针分析”传递,而是隐藏在实现Semantic3的访问器中的函数调用。
// Do live analysis
if (global.params.useDIP1021 && funcdecl.fbody && funcdecl.type.ty != Terror &&
funcdecl.type.isTypeFunction().islive)
{
oblive(funcdecl)
}位于池塘中的奇怪函数分布式语义分析不是编译器…的基础
https://stackoverflow.com/questions/66868878
复制相似问题