2310d模板替换运行时

原文

上周,我开始从我之前PR中的_d_newarray{i,}T实现开始,把_d_newarraym{i,}T转换为模板.目前,我已实现了新勾挂并更新了降级,但在编译器中遇见了一些测试失败.

修复它们之前,出现了该错误,它是因为我降级_d_arrayappend{T,cTX}引起的.

我前段时间处理了这些勾挂,并用AST自身中勾挂调用替换了~=.

这在CTFE时产生了问题,因为它们经常调用libc函数,一般不可解释勾挂.

现在正在实现的方法是,在CatAssignExP中的降级字段中,存储~=降级.然后,CTFE可求值原始式并忽略降级,胶水层可从降级而不是CatAssignExp中生成其IR.arr~=elem的降级式不变,仍为_d_arrayappendcTX(arr,1),arr[$-1]=elem.

但是,现在当arr函数调用时,会导致后端错误,如foo().为了避免两次调用foo(),在临时变量中保存其返回值,并在CommaExp中如下使用它:

cpp 复制代码
foo() ~= elem;
//降级为:
_tmp = foo(), _d_arrayappendcTX(_tmp, 1), _tmp[$ - 1] = elem

不知何故,后端找不到_tmp符号.我仍在调查该问题,及把降级移动到另一个导致它的.

谢谢

特奥多尔(土豆)

相关推荐
fqbqrr4 个月前
2407d,D2024三月会议
d
fqbqrr7 个月前
2403d,d的com哪里错了
d
fqbqrr9 个月前
2402d,d的变参
d
fqbqrr10 个月前
2401d,ddip1027如何支持sql
d
fqbqrr10 个月前
2401d,讨论d串滑动参数
d
fqbqrr1 年前
2312d,D语言单元测试等
d
fqbqrr1 年前
2312d,d语言作为胶水,用C++调用rust
c++·rust·d
fqbqrr1 年前
2312d,把alloca注入调用者域
d
fqbqrr1 年前
2312d,d语言来绑定C++和rust
c++·rust·d
fqbqrr1 年前
2311ddip1000不能从函数返回域引用
d