Skip to content

Commit

Permalink
fix: use more general approach
Browse files Browse the repository at this point in the history
  • Loading branch information
Jabolol committed Dec 25, 2024
1 parent 978d0c3 commit 8fe3e4e
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions lib/Codegen/Codegen.hs
Original file line number Diff line number Diff line change
Expand Up @@ -405,23 +405,21 @@ generateCast expr =

-- | Generate LLVM code for for loops.
generateForLoop :: (MonadCodegen m) => AT.Expr -> m AST.Operand
generateForLoop (AT.For _ forInit forCond forStep forBody) = mdo
_ <- generateExpr forInit
generateForLoop (AT.For _ init' cond step body) = mdo
_ <- generateExpr init'

I.br condBlock

condBlock <- IRM.block `IRM.named` U.stringToByteString "for.cond"
condResult <- generateExpr forCond
condResult <- generateExpr cond
I.condBr condResult bodyBlock exitBlock

bodyBlock <- IRM.block `IRM.named` U.stringToByteString "for.body"
case forBody of
AT.Block exprs -> mapM_ generateExpr exprs
expr -> CM.void $ generateExpr expr
CM.void $ generateExpr body
I.br stepBlock

stepBlock <- IRM.block `IRM.named` U.stringToByteString "for.step"
_ <- generateExpr forStep
_ <- generateExpr step
I.br condBlock

exitBlock <- IRM.block `IRM.named` U.stringToByteString "for.exit"
Expand All @@ -439,9 +437,7 @@ generateWhileLoop (AT.While _ cond body) = mdo
I.condBr condOperand bodyBlock exitBlock

bodyBlock <- IRM.block `IRM.named` U.stringToByteString "while.body"
case body of
AT.Block stmts -> mapM_ generateExpr stmts
_ -> CM.void $ generateExpr body
CM.void $ generateExpr body
I.br condBlock

exitBlock <- IRM.block `IRM.named` U.stringToByteString "while.exit"
Expand Down

0 comments on commit 8fe3e4e

Please # to comment.