private static void SetValue(DotExpression expression, object value, IContext context)
        {
            if (expression.Arguments != null)
            {
                throw new InvalidOperationException("Invalid left value");
            }

            object obj = ResolveToObject(expression.Expression, context);

            ObjectUtilities.SetValue(obj, expression.Name, value);
        }
        private static IDictionary ResolveToDictionary(DotExpression expression, IContext context)
        {
            object obj = ResolveToObject(expression.Expression, context);

            if (obj is DynamicObject)
            {
                DynamicObject dynobj = (DynamicObject)obj;

                obj = dynobj.GetValue(expression.Name);

                if (obj == null || obj == Undefined.Instance)
                {
                    obj = new Hashtable();
                    dynobj.SetValue(expression.Name, obj);
                }

                return((IDictionary)obj);
            }

            return((IDictionary)ObjectUtilities.GetValue(obj, expression.Name));
        }
        private static IList ResolveToList(DotExpression expression, IContext context)
        {
            object obj = ResolveToObject(expression.Expression, context);

            if (obj is DynamicObject)
            {
                DynamicObject dynobj = (DynamicObject)obj;

                obj = dynobj.GetValue(expression.Name);

                if (obj == null || obj == Undefined.Instance)
                {
                    obj = new ArrayList();
                    dynobj.SetValue(expression.Name, obj);
                }

                return((IList)obj);
            }

            return((IList)ObjectUtilities.GetValue(obj, expression.Name));
        }