首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从DMD mars.d访问模块AST

如何从DMD mars.d访问模块AST
EN

Stack Overflow用户
提问于 2021-03-30 18:08:02
回答 2查看 68关注 0票数 1

在DMD源代码中,tryMain函数在AST上运行几次优化。我要做的就是抓取AST,手动运行passes并检查AST模块。是仅仅修改了tryMain函数,还是在DMD中有一些专门用于此目的的钩子?我想保留所有预先完成的命令行处理,然后获取AST。我不反对DMD继续它的快乐之路,只要我能事先让AST检查它。

EN

回答 2

Stack Overflow用户

发布于 2021-04-16 18:03:12

你可以得到答案,在forum.dlang.org,Discord (https://discord.gg/bMZk9Q4)或者IRC (irc://irc.freenode.net/d)中提出这个问题,你会在几分钟内得到答案<3

票数 1
EN

Stack Overflow用户

发布于 2021-04-30 03:11:00

TL;DR

如果你想弄清楚编译器在做什么,那么你可能需要向你想要检查的dmd部分注入一些代码。

dmd编译器(如果设计的话)在编写时并没有考虑到基于pass的体系结构,超出了语义1/2/3的一些非常模糊的概念,因此您可能需要在这里轻描淡写。

如果你只是想使用自动测试语言,编译器即库的功能已经足够好用了,你可以在ASTBase-form中(也就是只使用语法)或者在执行完所有的语义分析和降级之后获得这个测试语言。

实践

例如,对于指针生存期检查器的当前实现,本身没有“指针分析”传递,而是隐藏在实现Semantic3的访问器中的函数调用。

代码语言:javascript
复制
// Do live analysis
if (global.params.useDIP1021 && funcdecl.fbody && funcdecl.type.ty != Terror &&
    funcdecl.type.isTypeFunction().islive)
{
    oblive(funcdecl)
}

位于池塘中的奇怪函数分布式语义分析不是编译器…的基础

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66868878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档