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