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); }
protected internal virtual ExprAST VisitFunctionAST(FunctionAST node) { this.Visit(node.Proto); this.Visit(node.Body); return(node); }
protected internal virtual ExprAST VisitFunctionAST(FunctionAST node) { this.Visit(node.Proto); this.Visit(node.Body); return node; }
public FunctionAST GenerateFunctionAST() { localVariables.Clear(); var modifier = modifierGenerator.GenerateModifier(); var prototype = GenerateFunctionPrototype(modifier); var functionAst = new FunctionAST(); functionAst.Prototype = prototype; // 中身をパース var expressions = new List <ExpressionAST>(); while (parser.LastToken.TokenType != TokenType.BlockEnd) { expressions.Add(expressionGenerator.GenerateExpressionAST()); } functionAst.Expressions = expressions; parser.ProceedToken(); // end を消費 functionAst.Variables = localVariables; return(functionAst); }
public void ExitHandleDefinition(FunctionAST data) { this.visitor.Visit(data); var function = this.visitor.ResultStack.Pop(); LLVM.DumpValue(function); LLVM.RunFunctionPassManager(this.passManager, function); LLVM.DumpValue(function); // Dump the function for exposition purposes. }
public void ExitHandleTopLevelExpression(FunctionAST data) { this.visitor.Visit(data); var anonymousFunction = this.visitor.ResultStack.Pop(); LLVM.DumpValue(anonymousFunction); // Dump the function for exposition purposes. var dFunc = (Program.D)Marshal.GetDelegateForFunctionPointer(LLVM.GetPointerToGlobal(this.ee, anonymousFunction), typeof(Program.D)); LLVM.RunFunctionPassManager(this.passManager, anonymousFunction); LLVM.DumpValue(anonymousFunction); // Dump the function for exposition purposes. Console.WriteLine("Evaluated to " + dFunc()); }
public ExprAST ParseTopLevelExpr() { var e = ParseExpression(); if (e == null) { return(LogError("Expression failed")); } var func = new FunctionAST(new PrototypeAST(Type.Void, "", new List <ArgTypePair>()), e); Visit(func); return(func); }
public FunctionAST FunctionASTVisit(FunctionAST node) { this.namedValues.Clear(); this.Visit(node.Proto); LLVMValueRef function = valueStack.Pop(); this.ReturnType = node.Proto.ReturnType; try { Visit(node.Body); } catch (Exception) { LLVM.DeleteFunction(function); throw new Exception("Block Parsing Failed"); } LLVM.VerifyFunction(function, LLVMVerifierFailureAction.LLVMPrintMessageAction); LLVM.RunFunctionPassManager(FPM, function); this.valueStack.Push(function); return(node); }
public void ExitHandleTopLevelExpression(FunctionAST data) { this.visitor.Visit(data); LLVM.DumpValue(this.visitor.ResultStack.Pop()); }
public void EnterHandleTopLevelExpression(FunctionAST data) { }
public void ExitHandleDefinition(FunctionAST data) { this.visitor.Visit(data); LLVM.DumpValue(this.visitor.ResultStack.Pop()); }
public void EnterHandleDefinition(FunctionAST data) { }