Example #1
0
        /// <summary>
        /// Evaluate object[index]
        /// </summary>
        /// <returns></returns>
        public object VisitIndex(IndexExpr expr)
        {
            var ndxVal = expr.IndexExp.Evaluate(this);
            var listObject = expr.VarExp.Evaluate(this);

            // Check for empty objects.
            ExceptionHelper.NotNull(expr, listObject, "indexing");
            ExceptionHelper.NotNull(expr, ndxVal, "indexing");

            var lobj = (LObject)listObject;

            // CASE 1. Access 
            //      e.g. Array: users[0] 
            //      e.g. Map:   users['total']
            if (!expr.IsAssignment)
            {
                var result = EvalHelper.AccessIndex(Ctx.Methods, expr, lobj, (LObject)ndxVal);
                return result;
            }

            // CASE 2.  Assignment
            //      e.g. Array: users[0]        = 'john'
            //      e.g. Map:   users['total']  = 200
            // NOTE: In this case of assignment, return back a MemberAccess object descripting what is assign
            var indexAccess = new IndexAccess();
            indexAccess.Instance = lobj;
            indexAccess.MemberName = (LObject)ndxVal;
            return indexAccess;
        }
Example #2
0
 /// <summary>
 /// Creates an index expression from the parameters supplied.
 /// </summary>
 /// <param name="varExp"></param>
 /// <param name="indexExp"></param>
 /// <param name="isAssignment"></param>
 /// <param name="token"></param>
 /// <returns></returns>
 public static Expr Index(Expr varExp, Expr indexExp, bool isAssignment, TokenData token)
 {
     var exp = new IndexExpr();
     exp.IsAssignment = isAssignment;
     exp.VarExp = varExp;
     exp.IndexExp = indexExp;
     SetupContext(exp, token);
     return exp;
 }
Example #3
0
 /// <summary>
 /// Visits the function call expression tree
 /// </summary>
 /// <param name="exp"></param>
 public object VisitIndex(IndexExpr exp)
 {
     _callBackOnNodeStart(exp);            
     _callBackOnNodeStart(exp.VarExp);
     _callBackOnNodeStart(exp.IndexExp);
     return null;
 }