Example #1
0
        public static SymbolDeclarationNode Parse(ContextNode context, IAbstractSyntaxTree lexerNode)
        {
            Contract.Requires(lexerNode.Type == Lexer.TokenType.DeclarationNode);
            var            info         = DeclarationInfo.Parse(context.Parser, lexerNode);
            var            name         = info.SymbolName.GetSingleSymbolOrThrow();
            var            declaredType = TypeNode.Parse(context, info.Type);
            var            point        = context.Parser.GetSequencePoint(lexerNode);
            ExpressionNode initializer  = info.Initializer == null ? null : ExpressionNode.Parse(context, info.Initializer, declaredType);

            return(Create(context, info.Modifiers, declaredType, name, initializer, point));
        }
        private void ParseDeclaration(IAbstractSyntaxTree lexerNode)
        {
            var declaration = DeclarationInfo.Parse(Parser, lexerNode);

            if (declaration.Initializer != null && declaration.Initializer.IsFunctionDeclaration() && !declaration.Modifiers.HasFlag(Modifiers.Mutable))
            {
                //method
                var method = FunctionDeclarationNode.ParseAsMethod(this, declaration);
                declaredMethods.Add(method);
            }
            else
            {
                //field
                var field = new FieldDeclarationNode(this, declaration, Parser.GetSequencePoint(lexerNode));
                fields.Add(field);
            }
        }