aboutsummaryrefslogtreecommitdiff
path: root/include/cps/CodeGen.h
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-07-26 17:13:15 +0000
committer_ov4 <ov4@ov4.org>2026-07-26 17:13:15 +0000
commit0fef2986daa2945c9e3d050c0f750d56792b30bd (patch)
tree4db469725cc64bb0c45978951e071dacaf58a687 /include/cps/CodeGen.h
parent344206d57e834b2394cbe2ec0df50b04a8b3c171 (diff)
refactor: groundwork for TYPE — sizeof constants, string guard, array scoping
- Element sizes now flow as target-folded null-GEP sizeof constants (TypeSystem::getSizeOfConstant); the module has no DataLayout string, so host-side size math would diverge from the backend on padded structs. - Extract the triplicated STRING null->"" select into CodeGen::emitStringNullGuard. - Scope ArrayTable per function via ArrayHandler::exchangeTable, mirroring the Symbols save/clear/restore discipline. - Promote checked element addressing to public ArrayHandler::emitElementAddress for the upcoming lvalue layer. 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 43d3a32..2451cbd 100644
--- a/include/cps/CodeGen.h
+++ b/include/cps/CodeGen.h
@@ -87,6 +87,9 @@ public:
llvm::Value *emitExpr(ExprAST *Expr);
void emitStmt(StmtAST *Stmt);
+ // STRING slots zero-init to null; normalize null to "" at load/print sites.
+ llvm::Value *emitStringNullGuard(llvm::Value *StrVal);
+
const TypeInfo *resolveType(const std::string &TypeName) const;
llvm::Type *getLLVMType(const std::string &TypeName) const;
llvm::Value *getNamedValue(const std::string &Name) const;