From efc86b5c7625cf4c7074319f42f68807a25bde9d Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 26 Jul 2026 12:04:56 +0000 Subject: refactor: single builtin registry, retire keyword route for builtins All 11 builtins now live in one static {Name, Arity, ReturnTypeName} table in CodeGen.cc: emitExpr checks arity against it (uniform "Error: X expects N args" diagnostics) and getExprTypeInfo reads return types from it, removing the duplicated hard-coded table. LENGTH/MID/RIGHT/LEFT/LCASE/UCASE lose their lexer tokens and ParseStringBuiltin; they parse as ordinary identifier calls exactly like ASC/CHR/IS_NUM/NUM_TO_STR/STR_TO_NUM already did. Behavior note: these six names are no longer reserved words. AGENTS docs updated for the new builtin story and the batch-1 error contract (exit codes, verifyModule, fixed descending FOR). Co-Authored-By: Claude Fable 5 --- include/cps/Parser.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'include/cps/Parser.h') diff --git a/include/cps/Parser.h b/include/cps/Parser.h index 87d1dee..c83be8b 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -29,8 +29,6 @@ class Parser { std::unique_ptr ParseIdentifierExpr(); std::unique_ptr ParseParenExpr(); std::string ParseTypeName(bool AllowVoid = false); - - std::unique_ptr ParseStringBuiltin(const std::string &FuncName); std::unique_ptr ParseStatement(); std::unique_ptr ParseStatementImpl(); -- cgit v1.3.1-4-g156e