更新 2.202
2026/8/1
v2.202.0.0BETAMINOR
Seymour2026年8月1日
F5-L3: 完整編譯器 — 持久變數、while (jump-table 迴圈)、func/call (內嵌巨集) + 9 個測試
FfxLib/Ai/AtelScript/AtelProgramCompiler.cs(新): 步驟 0 收集func(具名區塊);步驟 1 持久變數 —var name = expr;解析 AiFile 表中的名稱,或建立一個私有變數 (AppendPrivateVariableDescriptor+TryFindFreePrivateVariableSlot) 並初始化;步驟 2 if/while/賦值/呼叫。EmitWhile: jump-table 迴圈遵循經過驗證的AppendGuardedAction模式 (守衛 → 跳轉至原始流程的D7→ 主體 →B0跳回守衛;Rebuild+GrowWorkerJumpTable+ 進入點重新指向 — 在測試中驗證目標:出口=原始進入點,迴圈=baseRel)。call name;將函式內嵌展開 (巨集 — 無 JSR/RTS 堆疊,已有文件說明)。- AST/解析器擴展:
AtelWhile/AtelFuncDecl/AtelCall+while/func/call解析 (詞法分析器中的call關鍵字)。 - 測試 (9 + 1 個更新後的解析器測試): 變數建立私有 (m001) / 不重複 (已存在名稱) / m000 沒有私有儲存 → 明確的誠實錯誤;while round-trips 使用跳躍表 +2 個槽位且目標已驗證;func/call 內嵌展開;呼叫無 func → 錯誤;if+while 組合;while 主體內含呼叫;while 內的
>守衛 (順序交換)。 - 基準: 324/324 PASS (312 + 12 個新)。 ### MINOR ### MINOR
v2.201.0.0