aboutsummaryrefslogtreecommitdiff
path: root/include/cps/CodeGen.h
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-07-26 12:07:51 +0000
committer_ov4 <ov4@ov4.org>2026-07-26 12:07:51 +0000
commit4a25b279d8f6c662fa8152cfe42e038d1ea06901 (patch)
tree58223f2db133a10827e0a6d0c18c33f04bbc2527 /include/cps/CodeGen.h
parentefc86b5c7625cf4c7074319f42f68807a25bde9d (diff)
refactor: keep pseudocode signatures, single call-marshalling path
emitPrototype now records each FUNCTION/PROCEDURE's pseudocode signature (FuncSig: return type + per-param type/BYREF flag). CodeGen:: marshalCallArgs replaces the two verbatim-duplicated marshalling blocks and dispatches on the declared signature instead of inferring BYREF from pointer-typed LLVM params: BYVAL STRING params now receive the string data pointer (no more runtime garbage), and BYVAL args are coerced to the declared type (INTEGER->REAL args no longer emit invalid IR). Top-level prototypes are pre-registered in compile(), so calls may precede definitions; GenerateCall no longer fabricates i64 externs for unknown names - an unregistered callee is a compile error. OUTPUT reports an error when it cannot infer the expression type instead of printing with the INTEGER format. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'include/cps/CodeGen.h')
-rw-r--r--include/cps/CodeGen.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/cps/CodeGen.h b/include/cps/CodeGen.h
index 268ba7e..b1d3831 100644
--- a/include/cps/CodeGen.h
+++ b/include/cps/CodeGen.h
@@ -69,6 +69,9 @@ class CodeGen {
const SymbolInfo *getSymbolInfo(const std::string &Name) const;
const TypeInfo *getExprTypeInfo(ExprAST *Expr) const;
llvm::Value *coerceValueToType(llvm::Value *Val, const TypeInfo *TargetInfo);
+ bool marshalCallArgs(const std::string &Callee,
+ const std::vector<std::unique_ptr<ExprAST>> &ArgExprs,
+ std::vector<llvm::Value*> &Out);
void emitDeclareStmt(DeclareStmtAST *Stmt);
void emitOutputValue(llvm::Value *Val, const TypeInfo *TypeInfo, bool AppendNewline = true);