背景
当前 layout 用 opcode 清单判定「native vs 扩展 vs 用户函数」,做包名前缀:
- 曾用
native_rwir_set / is_native_rwir 硬编码 native opcode; - 后改
user_pkg map(name→pkg)正向识别用户函数再加包前缀。
这些都是在 layout 层静态猜 opcode 归属,与「核心不预知扩展、不预知 builtin」的定位相悖。
目标
kvlang/layout 不再检查 builtin opcode、不再用 map 匹配。凡「看起来像函数调用」的 op(含 +-÷>< 等运算符),一律 layout 为 kindexp rwir|rwfunc 并列,不做任何静态归类/前缀。
判定留给 runtime
- 扩展 rwir 只以 kvspace 某 key 的 XValue kind=
rwir 出现(/lib/<opcode>)。 - runtime 执行时按
kvlangBuiltinIsNative(正向 native 表)+ 查 /lib/<opcode> 的 XValue kind 反向判定:kind=rwir → 扩展 handoff;kind=rwfunc → 用户函数 OP_CALL。 - 运算符(
+/-/÷/>/<…)同样走该路径,或在 runtime 的 native 表里明确列示,layout 不再单独知晓。
现状关联
- 已删
native_rwir_set/is_native_rwir/global_rwir_set 死代码,改用 user_pkg(正向识别用户函数加包前缀)——本 issue 进一步要求连 user_pkg 前缀匹配也去掉。 - 见 [[extension-rwir-not-hardcoded]] 原则。
承接
背景
当前 layout 用 opcode 清单判定「native vs 扩展 vs 用户函数」,做包名前缀:
native_rwir_set/is_native_rwir硬编码 native opcode;user_pkgmap(name→pkg)正向识别用户函数再加包前缀。这些都是在 layout 层静态猜 opcode 归属,与「核心不预知扩展、不预知 builtin」的定位相悖。
目标
kvlang/layout 不再检查 builtin opcode、不再用 map 匹配。凡「看起来像函数调用」的 op(含
+-÷><等运算符),一律 layout 为 kindexprwir|rwfunc并列,不做任何静态归类/前缀。判定留给 runtime
rwir出现(/lib/<opcode>)。kvlangBuiltinIsNative(正向 native 表)+ 查/lib/<opcode>的 XValue kind 反向判定:kind=rwir → 扩展 handoff;kind=rwfunc → 用户函数 OP_CALL。+/-/÷/>/<…)同样走该路径,或在 runtime 的 native 表里明确列示,layout 不再单独知晓。现状关联
native_rwir_set/is_native_rwir/global_rwir_set死代码,改用user_pkg(正向识别用户函数加包前缀)——本 issue 进一步要求连user_pkg前缀匹配也去掉。承接
rwir|rwfunc是 union kindexp,但当前 head 的kind[32]只能表达单一具体类型、落不下|并集,定义侧须拆出 DefHeader。