January 1, 0001
# Lv2.1. 处理Koopa IR
文本形式IR确实好做啊,这一点问题没有;但是这C/C++的FFI基建是不是未免有点太缺了……
实际上koopa.h
里基本上只提供了raw program(以下简称RP)的一些数据结构。如果想从AST生成RP的话,那么以下的内容都是需要你自己去实现的:
- 处理这些数据结构的方式,类比构造函数——但是我感觉AST和RP之间的耦合度还是有的,所以就没单独写;
- debug信息打印机构,类比
debug!
宏(一个visit); - 从AST到RP的转换(两个visit);
- 清理手动生成的RP的函数……这为什么不给啊!
行吧,我的
memir.h
和debug.h
献给你。 顺便,由于trailing comma、单引号和16进制数字支持的存在,JSON5在被当作debug信息格式的时候意外地好用…… 此外,__VA_OPT__
竟然是C23特性。
# Lv2.2. 目标代码生成
我写了一大堆类似visit的东西,我在想要不要整个超级高阶函数给封一下,不过感觉还是算了。 Lv3回顾:事实上这个决定是正确的——你真的非常难对这些「看上去好像只是visit的东西」进行良好的抽象。
# Lv2.3. 测试
autotest
用的是qemu-riscv32-static
,但我好像没找到这个static
在Nix上要怎么实现,偷懒patch一下算了,反正只是linkage的区别。