.\icu

Blog of @megakite.


January 1, 0001

# Lv2.1. 处理Koopa IR

文本形式IR确实好做啊,这一点问题没有;但是这C/C++的FFI基建是不是未免有点太缺了…… 实际上koopa.h里基本上只提供了raw program(以下简称RP)的一些数据结构。如果想从AST生成RP的话,那么以下的内容都是需要你自己去实现的:

  1. 处理这些数据结构的方式,类比构造函数——但是我感觉AST和RP之间的耦合度还是有的,所以就没单独写;
  2. debug信息打印机构,类比debug!宏(一个visit);
  3. 从AST到RP的转换(两个visit);
  4. 清理手动生成的RP的函数……这为什么不给啊! 行吧,我的memir.hdebug.h献给你。 顺便,由于trailing comma、单引号和16进制数字支持的存在,JSON5在被当作debug信息格式的时候意外地好用…… 此外,__VA_OPT__竟然是C23特性。

# Lv2.2. 目标代码生成

我写了一大堆类似visit的东西,我在想要不要整个超级高阶函数给封一下,不过感觉还是算了。 Lv3回顾:事实上这个决定是正确的——你真的非常难对这些「看上去好像只是visit的东西」进行良好的抽象。

# Lv2.3. 测试

autotest用的是qemu-riscv32-static,但我好像没找到这个static在Nix上要怎么实现,偷懒patch一下算了,反正只是linkage的区别。