private void EmbedExceptionMessage(DekiScriptDom expr, DekiScriptEnv env, DekiScriptEvalContext context, Exception exception, XmlNode parent)
 {
     if (exception is DreamRequestFatalException)
     {
         exception.Rethrow();
     }
     context.InsertExceptionMessageBeforeNode(env, parent, null, expr.Location, exception);
 }
        public XDoc Evaluate(DekiScriptDom expr, DekiScriptEvalMode mode, bool fallthrough, DekiScriptEnv env)
        {
            DekiScriptEvalContext context = new DekiScriptEvalContext(mode, fallthrough);

            try {
                expr.VisitWith(this, new DekiScriptDomEvaluationState(context, context.Document, env));
            } catch (DekiScriptDocumentTooLargeException) {
                // this exception is thrown to unwind the DOM stack; we can safely ignore it
            }
            context.MergeContextIntoDocument(context.Document);
            return(new XDoc(context.Document));
        }
        public DekiScriptExpression Visit(DekiScriptXmlConstructor expr, DekiScriptOptimizerState state)
        {
            var           mode  = state.Mode;
            var           env   = state.Env;
            DekiScriptDom value = expr.Value.VisitWith(DekiScriptDomOptimizer.Instance, state);

            if (!value.IsDynamic)
            {
                // we can simply take the result to an expression
                return(new DekiScriptXml(DekiScriptDomEvaluation.Instance.Evaluate(value, mode, true, env)));
            }
            return(new DekiScriptXmlConstructor(value));
        }
Beispiel #4
0
 //--- Constructors ---
 public DekiScriptXmlConstructor(DekiScriptDom value)
 {
     this.Value = value;
 }