- 作者:老汪软件技巧
- 发表时间:2023-12-25 16:00
- 浏览量:
原文
上周,我开始从我之前的PR中的{i,}T实现开始,把{i,}T转换为模板.目前,我已实现了新勾挂并更新了降级,但在编译器中遇见了一些测试失败.
修复它们之前,出现了该错误,它是因为我降级到{T,cTX}引起的.
我前段时间处理了这些勾挂,并用AST自身中勾挂调用替换了~=.
这在CTFE时产生了问题,因为它们经常调用libc函数,一般不可解释勾挂.
现在正在实现的方法是,在中的降级字段中,存储~=降级.然后,CTFE可求值原始式并忽略降级,胶水层可从降级而不是中生成其IR.arr~=elem的降级式不变,仍为(arr,1),arr[$-1]=elem.
但是,现在当arr是函数调用时,会导致后端错误,如foo().为了避免两次调用foo(),在临时变量中保存其返回值,并在中如下使用它:
foo() ~= elem;
//降级为:
_tmp = foo(), _d_arrayappendcTX(_tmp, 1), _tmp[$ - 1] = elem
不知何故,后端找不到_tmp符号.我仍在调查该问题,及把降级移动到另一个导致它的式.
谢谢
特奥多尔(土豆)