跳转到内容

编译器专用类型

除普通脚本类型外,LIR 还允许后端拥有的 compiler::<Name> 类型:

  • compiler::GdccForRangeIter:for 范围迭代状态。
  • compiler::GdccForPacked*ArrayIter:按 packed 元素族区分的迭代状态,例如 compiler::GdccForPackedInt32ArrayIter。
  • compiler::GdccCoroState:隐藏的协程状态对象引用,见 LIR 参考的协程指令。

这些类型是 LIR-only 的文本类型,不复用源码类型解析,并且只允许出现在函数 <variables> 中。它们不得出现在函数参数、返回类型、类属性、信号参数或 lambda 捕获上,也不参与普通的 ABI 可见类型放宽。

compiler::GdccCoroState 是单消费者所有权引用:合法的消费者只有 await(消费引用并把源槽留在 moved-from 的 NULL 状态)和 destruct(释放引用,也就是 statement 位置协程调用的 fire-and-forget detach)。它不能被 assign 复制或移动,不能与 Variant 互相打包/解包,不能作为调用参数、返回值、属性或容器元素,也不能标记为 ref。