protected MemberNode(MemberReference member, ExpressionNode instance, ContextNode scope, SequencePoint point) : base(point) { Scope = scope; DeclaringType = member.DeclaringType; Member = member; TypeUtils.VerifyAccessible(Member, scope.GetClass().TypeReference, point); Instance = instance; }
public static FunctionDeclarationNode ParseAsFunctor(ContextNode context, IAbstractSyntaxTree function) { Contract.Requires(function.Type == Lexer.TokenType.Function); var instance = new FunctionDeclarationNode(context, Modifiers.NoInstance | Modifiers.Private, context.GetClass().NewFunctionName(), function); context.GetClass().AddLambda(instance); instance.Emit(); return(instance); }
public static ThisNode Create(ContextNode scope, SequencePoint point) { if (scope.IsStaticContext()) { ErrorCode.MissingInstance.ReportAndThrow(point, "Cannot use 'this' inside a static context"); return(null);//unreachable } else { return(new ThisNode(scope.GetClass().TypeReference, point)); } }
private static ExpressionNode CreateOverload(ContextNode context, ExpressionNode expression, InternalUnaryOperatorType op, MethodReference method) { var point = expression.SequencePoint; if (IsIncrementDecrement(op)) { TypeUtils.VerifyAccessible(method, context.GetClass().TypeReference, point); return(new IncrementDecrementOperatorNode(op, expression, method)); } else { return(MethodCallNode.Create(context, new MethodNode(method, null, context, point), expression.Enumerate(), point)); } }
public static void Parse(ContextNode context, IAbstractSyntaxTree lexerNode) { Contract.Requires(lexerNode.Type == TokenType.UseNode); string ns = AstUtils.GetFullSymbolTextContent(lexerNode.Children[1]); var point = context.Parser.GetSequencePoint(lexerNode); if (AssemblyRegistry.IsNamespaceKnown(ns)) { context.GetClass().AddImport(ns, point); } else { ErrorCode.SymbolNotFound.ReportAndThrow(point, "Namespace {0} not found", ns); } }
protected static ExpressionNode GetInstance(MemberReference member, ExpressionNode specifiedInstance, ContextNode context, SequencePoint point) { if (specifiedInstance != null) { return(specifiedInstance); } if (member.IsStatic()) { return(null); } if (!context.IsStaticContext() && context.GetClass().TypeReference.IsAssignableTo(member.DeclaringType)) { return(ThisNode.Create(context, null)); } ErrorCode.MissingInstance.ReportAndThrow(point, "Cannot access non-static member {0} from a static context", member.FullName); return(null);//unreachable }