From 766a4b8e5236bffb40984439a79186c5ee823ff8 Mon Sep 17 00:00:00 2001 From: ov-4 Date: Fri, 30 Jan 2026 02:06:37 +0000 Subject: Added runtime check for array index and division --- lib/CodeGen/CodeGen.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/CodeGen/CodeGen.cc') diff --git a/lib/CodeGen/CodeGen.cc b/lib/CodeGen/CodeGen.cc index 57d76eb..e2c959e 100644 --- a/lib/CodeGen/CodeGen.cc +++ b/lib/CodeGen/CodeGen.cc @@ -13,7 +13,9 @@ CodeGen::CodeGen() { TheModule = std::make_unique("cps_module", *TheContext); Builder = std::make_unique>(*TheContext); - Arrays = std::make_unique(*TheContext, *Builder, *TheModule, NamedValues); + RuntimeChecker = std::make_unique(*TheModule, *TheContext, *Builder); + + Arrays = std::make_unique(*TheContext, *Builder, *TheModule, NamedValues, *RuntimeChecker); SetupExternalFunctions(); } @@ -89,7 +91,9 @@ Value *CodeGen::emitExpr(ExprAST *Expr) { case '+': return Builder->CreateAdd(L, R, "addtmp"); case '-': return Builder->CreateSub(L, R, "subtmp"); case '*': return Builder->CreateMul(L, R, "multmp"); - case '/': return Builder->CreateSDiv(L, R, "divtmp"); + case '/': + RuntimeChecker->emitDivZeroCheck(R, Bin->getLine()); + return Builder->CreateSDiv(L, R, "divtmp"); case tok_eq: return Builder->CreateICmpEQ(L, R, "eqtmp"); case tok_ne: return Builder->CreateICmpNE(L, R, "netmp"); case '<': return Builder->CreateICmpSLT(L, R, "slttmp"); -- cgit v1.3.1-4-g156e