public void ExitHandleTopLevelExpression(FunctionAST data) { this.visitor.Visit(data); LLVM.DumpValue(this.visitor.ResultStack.Pop()); }
public void ExitHandleDefinition(FunctionAST data) { this.visitor.Visit(data); LLVM.DumpValue(this.visitor.ResultStack.Pop()); }
public void EnterHandleDefinition(FunctionAST data) { }
public void EnterHandleTopLevelExpression(FunctionAST data) { }
protected override ExprAST VisitFunctionAST(FunctionAST node) { this.namedValues.Clear(); this.Visit(node.Proto); LLVMValueRef function = this.valueStack.Pop(); // Create a new basic block to start insertion into. LLVM.PositionBuilderAtEnd(this.builder, LLVM.AppendBasicBlock(function, "entry")); try { this.Visit(node.Body); } catch (Exception) { LLVM.DeleteFunction(function); throw; } // Finish off the function. LLVM.BuildRet(this.builder, this.valueStack.Pop()); // Validate the generated code, checking for consistency. LLVM.VerifyFunction(function, LLVMVerifierFailureAction.LLVMPrintMessageAction); this.valueStack.Push(function); return node; }