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