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)); }
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); }
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); } }
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); }
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); } }