public void GenerateFromAst(FunctionDef function) { var state = new FunctionGeneratorState(function); _llvmGenerator.Emit(Utils.AstToLlvmString.FunctionHeader(function, state)); _llvmGenerator.Emit(FunctionGeneratorState.EntryLabel + ":"); new StmtGeneratorVisitor(state).Visit(function.Block); if (function.Type is LatteParser.TVoidContext && _llvmGenerator.LastEmitted() != "ret void") { _llvmGenerator.Emit("ret void"); } if (_llvmGenerator.LastEmitted().Contains(":")) { _llvmGenerator.Emit($"br label %{state.CurrentLabel}"); } _llvmGenerator.Emit("}"); }
public StmtGeneratorVisitor(FunctionGeneratorState state) { _state = state; }
public ExpressionGeneratorVisitor(FunctionGeneratorState state) { _state = state; }