aboutsummaryrefslogtreecommitdiff
path: root/lib/Parser/Parser.cc
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-07-26 12:04:56 +0000
committer_ov4 <ov4@ov4.org>2026-07-26 12:04:56 +0000
commitefc86b5c7625cf4c7074319f42f68807a25bde9d (patch)
tree0e2e1b5d9d336b1744602b3e47817f8a6b9c15f2 /lib/Parser/Parser.cc
parent4df7c22b99349dcf2175d69679eafa175d49aa9f (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.cc35
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);