예제 #1
0
 public void ExitHandleTopLevelExpression(FunctionAST data)
 {
     this.visitor.Visit(data);
     LLVM.DumpValue(this.visitor.ResultStack.Pop());
 }
예제 #2
0
 public void ExitHandleDefinition(FunctionAST data)
 {
     this.visitor.Visit(data);
     LLVM.DumpValue(this.visitor.ResultStack.Pop());
 }
예제 #3
0
 public void EnterHandleDefinition(FunctionAST data)
 {
 }
예제 #4
0
 public void EnterHandleTopLevelExpression(FunctionAST data)
 {
 }
예제 #5
0
        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;
        }