public static DekiScriptLiteral Constant(XUri value, DekiScriptLiteral[] items) { DekiScriptLiteral args = DekiScriptNil.Value; if (!ArrayUtil.IsNullOrEmpty(items)) { args = List(items); } else { // BUGBUGBUG (steveb): we should NOT do execution when building the model! if (value.Fragment != null) { DekiScriptExpression expr = DekiScriptParser.TryParse(value.Fragment) ?? DekiScriptNil.Value; args = EvalRuntime.Evaluate(expr, DekiScriptEvalMode.EvaluateSafeMode, new DekiScriptEnv()); } } if ((args.ScriptType != DekiScriptType.NIL) && (args.ScriptType != DekiScriptType.LIST) && (args.ScriptType != DekiScriptType.MAP)) { throw new DekiScriptBadTypeException(Location.None, args.ScriptType, new[] { DekiScriptType.NIL, DekiScriptType.LIST, DekiScriptType.MAP }); } return(new DekiScriptUri(value.WithoutFragment(), args)); }
public static DekiScriptExpression BlockWithDeclaration(Location location, DekiScriptExpression declaration, DekiScriptExpression body) { List <DekiScriptExpression> items = new List <DekiScriptExpression> { DiscardStatement(location, declaration), body }; return(Block(location, items)); }
public static DekiScriptExpression IfElseStatement(Location location, DekiScriptExpression test, DekiScriptExpression left, DekiScriptExpression right) { return(new DekiScriptTernary(test, left, right, true) { Location = location }); }
public static DekiScriptExpression XmlElement(Location location, string prefix, DekiScriptExpression name, DekiScriptXmlElement.Attribute[] attributes, DekiScriptExpression value) { return(new DekiScriptXmlElement(prefix, name, attributes, value) { Location = location }); }
public static DekiScriptExpression UnaryOp(Location location, DekiScriptUnary.Op opcode, DekiScriptExpression value) { return(new DekiScriptUnary(opcode, value) { Location = location }); }
public static DekiScriptExpression TernaryOp(Location location, DekiScriptExpression test, DekiScriptExpression left, DekiScriptExpression right) { return(new DekiScriptTernary(test, left, right, false) { Location = location }); }
public static DekiScriptSwitch.CaseBlock SwitchCaseBlock(Location location, IEnumerable <DekiScriptExpression> conditions, DekiScriptExpression body) { return(new DekiScriptSwitch.CaseBlock(location, conditions.ToArray(), body)); }
//--- Constructors --- internal Attribute(Location location, string prefix, DekiScriptExpression name, DekiScriptExpression value) { if (name == null) { throw new ArgumentNullException("name"); } if (value == null) { throw new ArgumentNullException("value"); } this.Location = location; this.Prefix = prefix; this.Name = name; this.Value = value; if (string.IsNullOrEmpty(Prefix)) { if (name is DekiScriptString) { string text = ((DekiScriptString)name).Value; this.IsNamespaceDefinition = text.EqualsInvariant(XMLNS); } } else { this.IsNamespaceDefinition = Prefix.EqualsInvariant(XMLNS); } }
public static DekiScriptExpression BinaryOp(Location location, DekiScriptBinary.Op opcode, DekiScriptExpression left, DekiScriptExpression right) { return(new DekiScriptBinary(opcode, left, right) { Location = location }); }
public static DekiScriptExpression VarStatement(Location location, DekiScriptExpression target, DekiScriptExpression value) { if (!(target is DekiScriptVar)) { throw new ArgumentException("must be a variable name", "target"); } string variable = ((DekiScriptVar)target).Name; return(new DekiScriptAssign(variable, value, true) { Location = location }); }
public static DekiScriptExpression Access(Location location, DekiScriptExpression prefix, DekiScriptExpression index) { return(new DekiScriptAccess(prefix, index) { Location = location }); }
public static DekiScriptExpression Curry(Location location, DekiScriptExpression prefix, DekiScriptExpression arguments) { return(new DekiScriptCall(prefix, arguments, true) { Location = location }); }
//--- Constructors --- internal DekiScriptXmlElement(string prefix, DekiScriptExpression name, Attribute[] attributes, DekiScriptExpression node) { if (name == null) { throw new ArgumentNullException("name"); } if (node == null) { throw new ArgumentNullException("node"); } this.Prefix = prefix; this.Name = name; this.Attributes = attributes ?? new Attribute[0]; this.Node = node; }
public static DekiScriptExpression TryCatchFinally(Location location, DekiScriptExpression @try, DekiScriptExpression @catch, DekiScriptExpression @finally) { return(new DekiScriptTryCatchFinally(@try, @catch, null, @finally) { Location = location }); }
public static DekiScriptExpression ForeachStatement(Location location, DekiScriptGenerator generator, DekiScriptExpression body) { return(new DekiScriptForeach(generator, body) { Location = location }); }
//--- Constructors --- public DekiScriptGeneratorForeachKeyValue(Location location, string key, string value, DekiScriptExpression collection, DekiScriptGenerator next) : base(location, next) { if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } if (string.IsNullOrEmpty(value)) { throw new ArgumentNullException("value"); } if (collection == null) { throw new ArgumentNullException("collection"); } this.Key = key; this.Value = value; this.Collection = collection; }
//--- Constructors --- internal DekiScriptTryCatchFinally(DekiScriptExpression @try, DekiScriptExpression @catch, string variable, DekiScriptExpression @finally) { if (@try == null) { throw new ArgumentNullException("try"); } if (@catch == null) { throw new ArgumentNullException("catch"); } if (@finally == null) { throw new ArgumentNullException("finally"); } this.Try = @try; this.Catch = @catch; this.Variable = variable ?? DEFAULT_VARIALBE; this.Finally = @finally; }