コード例 #1
0
        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));
        }
コード例 #2
0
        public static DekiScriptExpression BlockWithDeclaration(Location location, DekiScriptExpression declaration, DekiScriptExpression body)
        {
            List <DekiScriptExpression> items = new List <DekiScriptExpression> {
                DiscardStatement(location, declaration),
                body
            };

            return(Block(location, items));
        }
コード例 #3
0
 public static DekiScriptExpression IfElseStatement(Location location, DekiScriptExpression test, DekiScriptExpression left, DekiScriptExpression right)
 {
     return(new DekiScriptTernary(test, left, right, true)
     {
         Location = location
     });
 }
コード例 #4
0
 public static DekiScriptExpression XmlElement(Location location, string prefix, DekiScriptExpression name, DekiScriptXmlElement.Attribute[] attributes, DekiScriptExpression value)
 {
     return(new DekiScriptXmlElement(prefix, name, attributes, value)
     {
         Location = location
     });
 }
コード例 #5
0
 public static DekiScriptExpression UnaryOp(Location location, DekiScriptUnary.Op opcode, DekiScriptExpression value)
 {
     return(new DekiScriptUnary(opcode, value)
     {
         Location = location
     });
 }
コード例 #6
0
 public static DekiScriptExpression TernaryOp(Location location, DekiScriptExpression test, DekiScriptExpression left, DekiScriptExpression right)
 {
     return(new DekiScriptTernary(test, left, right, false)
     {
         Location = location
     });
 }
コード例 #7
0
 public static DekiScriptSwitch.CaseBlock SwitchCaseBlock(Location location, IEnumerable <DekiScriptExpression> conditions, DekiScriptExpression body)
 {
     return(new DekiScriptSwitch.CaseBlock(location, conditions.ToArray(), body));
 }
コード例 #8
0
 //--- 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);
     }
 }
コード例 #9
0
 public static DekiScriptExpression BinaryOp(Location location, DekiScriptBinary.Op opcode, DekiScriptExpression left, DekiScriptExpression right)
 {
     return(new DekiScriptBinary(opcode, left, right)
     {
         Location = location
     });
 }
コード例 #10
0
        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
            });
        }
コード例 #11
0
 public static DekiScriptExpression Access(Location location, DekiScriptExpression prefix, DekiScriptExpression index)
 {
     return(new DekiScriptAccess(prefix, index)
     {
         Location = location
     });
 }
コード例 #12
0
 public static DekiScriptExpression Curry(Location location, DekiScriptExpression prefix, DekiScriptExpression arguments)
 {
     return(new DekiScriptCall(prefix, arguments, true)
     {
         Location = location
     });
 }
コード例 #13
0
 //--- 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;
 }
コード例 #14
0
 public static DekiScriptExpression TryCatchFinally(Location location, DekiScriptExpression @try, DekiScriptExpression @catch, DekiScriptExpression @finally)
 {
     return(new DekiScriptTryCatchFinally(@try, @catch, null, @finally)
     {
         Location = location
     });
 }
コード例 #15
0
 public static DekiScriptExpression ForeachStatement(Location location, DekiScriptGenerator generator, DekiScriptExpression body)
 {
     return(new DekiScriptForeach(generator, body)
     {
         Location = location
     });
 }
コード例 #16
0
 //--- 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;
 }
コード例 #17
0
 //--- 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;
 }