Пример #1
0
        //--- Methods ---
        public DekiScriptDom Visit(DekiScriptDomBlock expr, DekiScriptOptimizerState state)
        {
            state = new DekiScriptOptimizerState(state.Mode, state.Env.NewLocalScope());
            DekiScriptExpression value = expr.Value.VisitWith(DekiScriptExpressionOptimizer.Instance, state);
            DekiScriptDom        node  = expr.Node.VisitWith(this, state);

            return(new DekiScriptDomBlock(expr.Location, value, node));
        }
        //--- Methods ---
        public Empty Visit(DekiScriptDomBlock expr, DekiScriptDomEvaluationState state)
        {
            var context = state.Context;
            var env     = state.Env;
            var parent  = state.Parent;

            try {
                DekiScriptEnv locals = env.NewLocalScope();

                // check if we need to evaluate the block 'Value'
                if (expr.IsDynamic)
                {
                    expr.Value.VisitWith(DekiScriptExpressionEvaluation.Instance, locals);
                }
                expr.Node.VisitWith(this, new DekiScriptDomEvaluationState(context, parent, locals));
            } catch (Exception e) {
                EmbedExceptionMessage(expr, env, context, e, parent);
            }
            return(Empty.Value);
        }