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)); }
//--- Constructors --- public DekiScriptXmlConstructor(DekiScriptDom value) { this.Value = value; }