Ejemplo n.º 1
0
 public Field Invoke(Runner runner, Node node)
 {
     try {
         runner.PushContext();
         for (int i = 0, l = Math.Min(arguments.Count, node.Count); i < l; i++)
         {
             runner.SetField(
                 runner.Eval(arguments[i]).StringValue,
                 runner.Eval(node[i]));
         }
         return(runner.Eval(body));
     } finally {
         runner.PopContext();
     }
 }
Ejemplo n.º 2
0
        public static Field SetValue(Runner runner, Node block)
        {
            if (block.Count < 2)
            {
                throw new ArgumentException();
            }
            var tag = Convert.ToString(block[0]);

            if (block.Count == 2)
            {
                return(runner.SetField(tag, runner.Eval(block[1])));
            }
            Field field = runner.GetFieldOrInit(tag, FieldType.Object);

            for (int i = 1, l = block.Count - 2; i < l; i++)
            {
                field = field.GetAndEnsureType(runner.Eval(block[i]), FieldType.Object);
            }
            return(field[runner.Eval(block[block.Count - 2])] =
                       runner.Eval(block[block.Count - 1]));
        }