Exemple #1
0
 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);
        }
Exemple #3
0
 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));
     }
 }
Exemple #4
0
        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));
            }
        }
Exemple #5
0
        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);
            }
        }
Exemple #6
0
        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
        }