示例#1
0
        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;
 }
示例#3
0
 public ExpressionGeneratorVisitor(FunctionGeneratorState state)
 {
     _state = state;
 }