上周,我开始从我之前的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
符号.我仍在调查该问题,及把降级
移动到另一个导致它的式
.
谢谢
特奥多尔(土豆)