feat(VM): 吃透 Chaos VM 程序结构层 —— 模块注册表 + collect 槽位表可静态导出
补上 VM_SPEC §5/§6 自己点出的缺口("不是 VM 的问题, 而是模块系统 + 宿主调用序列")。
新增 tools/tdc_program.py(程序结构分析器):
* closures / entries / 字面串折叠 / 边界感知的函数体切分
* module_registry(): 识别顶层 "registry[id] = factory" 装配模式 -> 62 个模块工厂
* call_graph / shared_bodies / find_strings / --func 导出自身指令
修掉两个真 bug:
* tdc_disasm: RET_TRUE / THROW 未当终结符 -> 控制流穿过函数结尾线性走下去,
把父函数续段误判给夹在中间的兄弟函数(@4940 曾误归 @4362, 实为 @4160)
* tdc_lift: 终结符判定写死 opcode 数值 19/49 -> 改为按语义名
新增 tools/tdc_layout.py(静态导出 cd 槽位表):
装配链已完全厘清:
顶层 = 62 个模块工厂的注册表(工厂形参 (module, exports, require))
-> 清单模块 arr[arr.length] = require(N) <<< 这串 require 的顺序就是 cd 槽位序
-> 分发模块按 .on/.reset/.get 分三数组
-> 装配模块 r3='{"cd":[' + for(...) r3 += r8.get() + '],"sd":{...}'
跨构建实测: core_js 的 require 串与线上构建的串**不同**(槽位序按构建随机化, 与 #31 一致);
语义对位已验证若干槽(userAgent->cd[3], href->cd[4], languages->cd[5] 命中)。
VM_SPEC 新增 §9 程序结构层(模块系统 / 入口 / collect 装配 / 为何决定 12)。
selftest 全绿。
This commit is contained in:
@@ -3696,7 +3696,6 @@
|
||||
@06336: CALL_METHOD [1]
|
||||
@06338: POP_TRY
|
||||
@06339: RET_TRUE
|
||||
@06340: JUMP target=@6564
|
||||
@06343: ALLOC_REG [9]
|
||||
@06345: PUSH_TRY catchTarget=@6274 catchVarReg=r9
|
||||
@06348: PUSH_EMPTY_STR
|
||||
@@ -7430,7 +7429,6 @@
|
||||
@12694: PUSH_IMM [0]
|
||||
@12696: POP_TRY
|
||||
@12697: RET_TRUE
|
||||
@12698: JUMP target=@12789
|
||||
@12701: ALLOC_REG [5]
|
||||
@12703: PUSH_TRY catchTarget=@12690 catchVarReg=r5
|
||||
@12706: PUSH_IMM_ARRAY [3]
|
||||
@@ -7620,7 +7618,6 @@
|
||||
@13033: PUSH_STR_CHAR [112]
|
||||
@13035: POP_TRY
|
||||
@13036: RET_TRUE
|
||||
@13037: JUMP target=@13357
|
||||
@13040: ALLOC_REG [6]
|
||||
@13042: PUSH_TRY catchTarget=@13024 catchVarReg=r6
|
||||
@13045: PUSH_IMM_ARRAY [3]
|
||||
@@ -8358,7 +8355,6 @@
|
||||
@14327: PUSH_TRUE
|
||||
@14328: POP_TRY
|
||||
@14329: RET_TRUE
|
||||
@14330: JUMP target=@14518
|
||||
@14333: ALLOC_REG [5]
|
||||
@14335: PUSH_TRY catchTarget=@14323 catchVarReg=r5
|
||||
@14338: PUSH_IMM_ARRAY [3]
|
||||
@@ -9904,7 +9900,6 @@
|
||||
@17076: PUSH_UNDEFINED
|
||||
@17077: POP_TRY
|
||||
@17078: RET_TRUE
|
||||
@17079: JUMP target=@17101
|
||||
@17082: ALLOC_REG [11]
|
||||
@17084: PUSH_TRY catchTarget=@17072 catchVarReg=r11
|
||||
@17087: PUSH_IMM_ARRAY [8]
|
||||
@@ -10715,7 +10710,6 @@
|
||||
@18571: PUSH_UNDEFINED
|
||||
@18572: POP_TRY
|
||||
@18573: RET_TRUE
|
||||
@18574: JUMP target=@18892
|
||||
@18577: ALLOC_REG [6]
|
||||
@18579: PUSH_TRY catchTarget=@18567 catchVarReg=r6
|
||||
@18582: PUSH_IMM_ARRAY [3]
|
||||
@@ -15799,7 +15793,6 @@
|
||||
@27198: PUSH_FALSE
|
||||
@27199: POP_TRY
|
||||
@27200: RET_TRUE
|
||||
@27201: JUMP target=@27362
|
||||
@27204: ALLOC_REG [5]
|
||||
@27206: PUSH_TRY catchTarget=@27194 catchVarReg=r5
|
||||
@27209: PUSH_IMM_ARRAY [3]
|
||||
@@ -16195,7 +16188,6 @@
|
||||
@27855: POP
|
||||
@27856: POP_TRY
|
||||
@27857: RET_TRUE
|
||||
@27858: JUMP target=@27900
|
||||
@27861: ALLOC_REG [5]
|
||||
@27863: PUSH_TRY catchTarget=@27829 catchVarReg=r5
|
||||
@27866: PUSH_IMM_ARRAY [3]
|
||||
@@ -16262,7 +16254,6 @@
|
||||
@27972: PUSH_FALSE
|
||||
@27973: POP_TRY
|
||||
@27974: RET_TRUE
|
||||
@27975: JUMP target=@28477
|
||||
@27978: ALLOC_REG [9]
|
||||
@27980: PUSH_TRY catchTarget=@27968 catchVarReg=r9
|
||||
@27983: PUSH_IMM_ARRAY [3]
|
||||
@@ -16604,7 +16595,6 @@
|
||||
@28575: PUSH_FALSE
|
||||
@28576: POP_TRY
|
||||
@28577: RET_TRUE
|
||||
@28578: JUMP target=@29390
|
||||
@28581: ALLOC_REG [12]
|
||||
@28583: PUSH_TRY catchTarget=@28571 catchVarReg=r12
|
||||
@28586: PUSH_IMM_ARRAY [3]
|
||||
@@ -17157,7 +17147,6 @@
|
||||
@29482: PUSH_FALSE
|
||||
@29483: POP_TRY
|
||||
@29484: RET_TRUE
|
||||
@29485: JUMP target=@29919
|
||||
@29488: ALLOC_REG [9]
|
||||
@29490: PUSH_TRY catchTarget=@29478 catchVarReg=r9
|
||||
@29493: PUSH_IMM_ARRAY [3]
|
||||
@@ -17502,7 +17491,6 @@
|
||||
@30087: PUSH_FALSE
|
||||
@30088: POP_TRY
|
||||
@30089: RET_TRUE
|
||||
@30090: JUMP target=@30935
|
||||
@30093: ALLOC_REG [10]
|
||||
@30095: PUSH_TRY catchTarget=@30083 catchVarReg=r10
|
||||
@30098: PUSH_IMM_ARRAY [3]
|
||||
@@ -18345,7 +18333,6 @@
|
||||
@31579: POP_TRY
|
||||
@31580: POP_TRY
|
||||
@31581: RET_TRUE
|
||||
@31582: JUMP target=@31627
|
||||
@31585: ALLOC_REG [10]
|
||||
@31587: PUSH_TRY catchTarget=@31574 catchVarReg=r10
|
||||
@31590: PUSH_IMM_ARRAY [4]
|
||||
@@ -19626,7 +19613,6 @@
|
||||
@33841: PUSH_EMPTY_STR
|
||||
@33842: POP_TRY
|
||||
@33843: RET_TRUE
|
||||
@33844: JUMP target=@34228
|
||||
@33847: ALLOC_REG [8]
|
||||
@33849: PUSH_TRY catchTarget=@33837 catchVarReg=r8
|
||||
@33852: PUSH_IMM_ARRAY [3]
|
||||
@@ -24144,7 +24130,6 @@
|
||||
@42082: POP
|
||||
@42083: PUSH_TRUE
|
||||
@42084: RET_TRUE
|
||||
@42085: JUMP target=@42025
|
||||
@42088: PUSH_FALSE
|
||||
@42089: RET_TRUE
|
||||
@42090: CREATE_CLOSURE target=@41870 caps=[r5=r3,r6=r4] params=[p0->r3]
|
||||
@@ -25676,7 +25661,6 @@
|
||||
@44769: PUSH_STR_CHAR [114]
|
||||
@44771: NEW_METHOD [1]
|
||||
@44773: THROW
|
||||
@44774: POP_TRY
|
||||
@44775: IS_EXCEPTION
|
||||
@44776: PUSH_UNDEFINED
|
||||
@44777: RET_TRUE
|
||||
|
||||
Reference in New Issue
Block a user