编译器专用类型
除普通脚本类型外,LIR 还允许后端拥有的 compiler::<Name> 类型:
compiler::GdccForRangeIter:for范围迭代状态。compiler::GdccForPacked*ArrayIter:按 packed 元素族区分的迭代状态,例如compiler::GdccForPackedInt32ArrayIter。compiler::GdccCoroState:隐藏的协程状态对象引用,见 LIR 参考的协程指令。
这些类型是 LIR-only 的文本类型,不复用源码类型解析,并且只允许出现在函数 <variables> 中。它们不得出现在函数参数、返回类型、类属性、信号参数或 lambda 捕获上,也不参与普通的 ABI 可见类型放宽。
compiler::GdccCoroState 的所有权
Section titled “compiler::GdccCoroState 的所有权”compiler::GdccCoroState 是单消费者所有权引用:合法的消费者只有 await(消费引用并把源槽留在 moved-from 的 NULL 状态)和 destruct(释放引用,也就是 statement 位置协程调用的 fire-and-forget detach)。它不能被 assign 复制或移动,不能与 Variant 互相打包/解包,不能作为调用参数、返回值、属性或容器元素,也不能标记为 ref。