diff options
| author | _ov4 <ov4@ov4.org> | 2026-07-26 12:04:56 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-07-26 12:04:56 +0000 |
| commit | efc86b5c7625cf4c7074319f42f68807a25bde9d (patch) | |
| tree | 0e2e1b5d9d336b1744602b3e47817f8a6b9c15f2 /lib/Parser/Parser.cc | |
| parent | 4df7c22b99349dcf2175d69679eafa175d49aa9f (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'lib/Parser/Parser.cc')
| -rw-r--r-- | lib/Parser/Parser.cc | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/lib/Parser/Parser.cc b/lib/Parser/Parser.cc index 049f99d..320fdf4 100644 --- a/lib/Parser/Parser.cc +++ b/lib/Parser/Parser.cc @@ -132,34 +132,6 @@ std::string Parser::ParseTypeName(bool AllowVoid) { return ""; } -std::unique_ptr<ExprAST> Parser::ParseStringBuiltin(const std::string &FuncName) { - getNextToken(); - if (CurTok != '(') { - fprintf(stderr, "Error: Expected '(' after %s\n", FuncName.c_str()); - return nullptr; - } - getNextToken(); - - std::vector<std::unique_ptr<ExprAST>> Args; - if (CurTok != ')') { - while (true) { - if (auto Arg = ParseExpression()) - Args.push_back(std::move(Arg)); - else - return nullptr; - - if (CurTok == ')') break; - if (CurTok != ',') { - fprintf(stderr, "Error: Expected ',' or ')' in %s\n", FuncName.c_str()); - return nullptr; - } - getNextToken(); - } - } - getNextToken(); - return std::make_unique<CallExprAST>(FuncName, std::move(Args)); -} - std::unique_ptr<ExprAST> Parser::ParseParenExpr() { getNextToken(); auto V = ParseExpression(); @@ -187,13 +159,6 @@ std::unique_ptr<ExprAST> Parser::ParsePrimary() { getNextToken(); return Res; } - case tok_length: return ParseStringBuiltin("LENGTH"); - case tok_mid: return ParseStringBuiltin("MID"); - case tok_right: return ParseStringBuiltin("RIGHT"); - case tok_left: return ParseStringBuiltin("LEFT"); - case tok_lcase: return ParseStringBuiltin("LCASE"); - case tok_ucase: return ParseStringBuiltin("UCASE"); - case tok_true: { getNextToken(); return std::make_unique<BooleanExprAST>(true); |
