Code Generation
Overview
codegen :: AT.Program -> Either CC.CodegenError AST.Module
codegen program =
E.runExcept $
M.buildModuleT (U.stringToByteString $ AT.sourceFile program) $
IRM.runIRBuilderT IRM.emptyIRBuilder $
S.evalStateT
(mapM_ (EG.generateGlobal . snd) (AT.globals program))
(CS.CodegenState [] [] Nothing [] 0)Key Components
State Management
data CodegenState = CodegenState
{ localState :: LocalState,
globalState :: GlobalState,
loopState :: LoopState,
allocatedVars :: LocalState,
uniqueNameState :: UniqueNameState
}Expression Generation
Error Handling
Code Generation Process
Best Practices
Last updated