protected override Expression[] OnGetExpressions(PackagesContext packagesContext, IContext expContext)
        {
            var prefixList = this.Objectexp.Symbol.GetExpressions(packagesContext, expContext);

            if (prefixList.Length != 1)
            {
                throw new SyntaxException(string.Format("Cannot resolve symbol {0}", this.MemberValue), this.Member.Line, this.Member.Column);
            }
            var prefix = prefixList[0];

            switch (prefix.Classify)
            {
            case ExpressionType.Value:
                if (prefix.Type.Name == Type.Function.Name && prefix.Type.PackageName == Type.Function.PackageName)
                {
                    throw new SyntaxException(string.Format("Cannot resolve global symbol {0}", this.MemberValue), this.Member.Line, this.Member.Column);
                }
                if (prefix.Type == Type.Table || prefix.Type == Type.Any)
                {
                    return(new[] { new Expression()
                                   {
                                       Classify = ExpressionType.Value, Type = Type.Any
                                   } });
                }
                var c = packagesContext.GetClass(prefix.Type.Name);
                if (c == null)
                {
                    throw new SyntaxException(string.Format("Cannot resolve symbol {0}", this.MemberValue), this.Member.Line, this.Member.Column);
                }
                return(this.GetExpTypeAsVariable(packagesContext, expContext, c));

            case ExpressionType.Class:
                if (prefix.Type == Type.Any)
                {
                    this.accessType = "";
                    return(this.GetExpressionsWithValue(Type.Any));
                }
                if (prefix.Type == Type.Table)
                {
                    return(this.GetExpressionsWithValue(Type.Any));
                }
                c = packagesContext.GetClass(prefix.Type.Name);
                if (c == null)
                {
                    throw new SyntaxException(string.Format("Cannot resolve symbol {0}", this.MemberValue), this.Member.Line, this.Member.Column);
                }
                return(this.GetExpTypeAsClass(packagesContext, expContext, c));

            case ExpressionType.This:
                return(this.GetExpTypeAsVariable(packagesContext, expContext, expContext.ClassContext));

            case ExpressionType.Super:
                if (expContext.ParentContext != null && expContext.ParentContext is Class)
                {
                    return(this.GetExpTypeAsVariable(packagesContext, expContext, expContext.ParentContext));
                }
                break;
            }
            throw new SyntaxException(string.Format("Cannot resolve symbol {0}", this.MemberValue), this.Member.Line, this.Member.Column);
        }
        protected override Expression[] OnGetExpressions(PackagesContext packagesContext, IContext expContext)
        {
            var c = packagesContext.GetClass(this.Identifier.Symbol);

            if (c == null)
            {
                throw new SyntaxException(string.Format("Cannot resolve symbol {0}", this.Identifier.Symbol), this.Identifier.Line, this.Identifier.Column);
            }
            return(this.GetExpressionsWithValue(packagesContext.GetTLType(this.Identifier.Symbol)));
        }