public object Evaluate(UnityELEvaluator context, ArgumentGroupToken group)
        {
            int arg1 = TypeCoercer.CoerceToType <int>(group, group.Children[0].Evaluate(context));
            int arg2 = TypeCoercer.CoerceToType <int>(group, group.Children[1].Evaluate(context));

            return(new TestObject(arg1, arg2));
        }
Exemple #2
0
    public override bool Parse(ExpressionCompiler compiler)
    {
        int symbolPos = compiler.Pos;

        if (!base.Parse(compiler))
        {
            return(false);
        }

        // The argument group becomes the new parent token
        ArgumentGroupToken group = new ArgumentGroupToken(symbolPos);

        compiler.Parent.AddChild(group);
        compiler.ParentTokens.Push(group);

        // Keep parsing until we are closed
        while (!group.IsClosed)
        {
            if (!compiler.ParseNextToken())
            {
                throw new ParserException(group, "Unclosed argument group");
            }
        }

        return(true);
    }
Exemple #3
0
        public object Evaluate(UnityELEvaluator context, ArgumentGroupToken group)
        {
            // Assume its a vector if there are three arguments
            if (group.Children.Count == 3)
            {
                float x = TypeCoercer.CoerceToType <float>(group, group.Children[0].Evaluate(context));
                float y = TypeCoercer.CoerceToType <float>(group, group.Children[1].Evaluate(context));
                float z = TypeCoercer.CoerceToType <float>(group, group.Children[2].Evaluate(context));

                return(new Vector3(x, y, z));
            }
            else
            {
                return(null);
            }
        }
Exemple #4
0
    public void TestValidStartArgumentGroup()
    {
        InitCompiler("{a,b} * 2", 0);

        Assert.IsTrue(parser.Parse(compiler));

        Assert.AreEqual(1, root.Children.Count);
        Assert.AreEqual(5, compiler.Pos);

        ArgumentGroupToken expected = new ArgumentGroupToken(0);

        expected.Children.Add(new IdentifierToken("a", 1));
        expected.Children.Add(new IdentifierToken("b", 3));
        Assert.AreEqual(expected, root.Children[0]);

        Assert.AreSame(root, compiler.Parent);
    }
Exemple #5
0
 public object EvaluateForArgument(UnityELEvaluator context, string functionname, int argumentIndex, ArgumentGroupToken group)
 {
     // Just delegate to the normal Evaluate method for now
     return(Evaluate(context, group));
 }
        public object EvaluateForArgument(UnityELEvaluator context, string functionname, int argumentIndex, ArgumentGroupToken group)
        {
            if (functionname.Equals("myFunction"))
            {
                int arg1 = TypeCoercer.CoerceToType <int>(group, group.Children[0].Evaluate(context));
                int arg2 = TypeCoercer.CoerceToType <int>(group, group.Children[1].Evaluate(context));

                return(new TestObject2(arg1, arg2));
            }
            else
            {
                return(null);
            }
        }