コード例 #1
0
ファイル: AstAnalyzer.Function.cs プロジェクト: dlurton/Happy
 public override void BeforeVisit(Function node)
 {
     base.BeforeVisit(node);
     //_currentOutputExp = Expression.Parameter(typeof (TextWriter), CurrentOutputIdentifier);
     //Create return target
     _returnLabelTarget = Expression.Label(typeof(object), "lambdaReturn");
 }
コード例 #2
0
ファイル: Module.cs プロジェクト: dlurton/Happy
        internal Module(LoadDirective[] loadStmts, UseStatementList useStmts, DefStatement[] globalDefStmts, Function[] functions)
            : base(HappySourceLocation.None, HappySourceLocation.None)
        {
            ContractUtils.RequiresNotNull(loadStmts, "loadStmts");
            ContractUtils.RequiresNotNull(useStmts, "useStmts");
            ContractUtils.RequiresNotNull(globalDefStmts, "globalDefStmts");
            ContractUtils.RequiresNotNull(functions,  "functions");

            this.LoadDirectives = loadStmts;
            this.UseStatements = useStmts;
            this.GlobalDefStatements = globalDefStmts;
            this.Functions = functions;
        }
コード例 #3
0
ファイル: AstAnalyzer.Function.cs プロジェクト: dlurton/Happy
        public override void AfterVisit(Function node)
        {
            Expression expression = _expressionStack.Pop(); //Should be a BlockExpression
            List<ParameterExpression> parameters = null;
            if (node.ParameterList != null)
                parameters = _expressionStack.Pop(node.ParameterList.Count, false).Cast<ParameterExpression>().ToList();

            List<Expression> outerExpressions = new List<Expression>();

            LabelExpression returnLabel = Expression.Label(_returnLabelTarget, Expression.Default(typeof(object)));

            outerExpressions.Add(expression);
            outerExpressions.Add(returnLabel);

            var completeFunctionBody = MaybeBlock(outerExpressions);
            LambdaExpression funcLambda = Expression.Lambda(completeFunctionBody, node.Name.Text, parameters);
            _expressionStack.Push(node, this.PropertyOrFieldSet(node.Name.Text, _globalScopeExp, funcLambda));
            base.AfterVisit(node);
        }
コード例 #4
0
ファイル: AstVisitorBase.cs プロジェクト: dlurton/Happy
 public virtual void AfterVisit(Function node)
 {
     this.AfterVisitCatchAll(node);
 }
コード例 #5
0
ファイル: AstVisitorBase.cs プロジェクト: dlurton/Happy
 public virtual void BeforeVisit(Function node)
 {
     this.BeforeVisitCatchAll(node);
 }
コード例 #6
0
ファイル: SemanticVisitor.cs プロジェクト: dlurton/Happy
 public override void BeforeVisit(Function node)
 {
     base.BeforeVisit(node);
     _loopStack = new Stack<LoopStatementBase>();
 }
コード例 #7
0
ファイル: SemanticVisitor.cs プロジェクト: dlurton/Happy
 public override void AfterVisit(Function node)
 {
     base.AfterVisit(node);
     DebugAssert.AreEqual(0, _loopStack.Count, "_loopStack not empty");
     _loopStack = null;
 }