public PropertyDeclarationNode(Token token, ParseNodeList attributes, Modifiers modifiers, ParseNode type, NameNode interfaceType, AtomicNameNode name, AccessorNode getOrRemove, AccessorNode setOrAdd) : this(ParseNodeType.PropertyDeclaration, token, attributes, modifiers, type, interfaceType, getOrRemove, setOrAdd) { _name = (AtomicNameNode)GetParentedNode(name); }
public IndexerDeclarationNode(Token token, ParseNodeList attributes, Modifiers modifiers, ParseNode type, NameNode interfaceType, ParseNodeList parameters, AccessorNode get, AccessorNode set) : base(ParseNodeType.IndexerDeclaration, token, attributes, modifiers, type, interfaceType, get, set) { _parameters = GetParentedNodeList(parameters); }
protected PropertyDeclarationNode(ParseNodeType nodeType, Token token, ParseNodeList attributes, Modifiers modifiers, ParseNode type, NameNode interfaceType, AccessorNode getOrRemove, AccessorNode setOrAdd) : base(nodeType, token) { _attributes = GetParentedNodeList(AttributeNode.GetAttributeList(attributes)); _modifiers = modifiers; _type = GetParentedNode(type); _interfaceType = (NameNode)GetParentedNode(interfaceType); _getOrRemove = (AccessorNode)GetParentedNode(getOrRemove); _setOrAdd = (AccessorNode)GetParentedNode(setOrAdd); }
private void ParseAccessors(bool isEvent, out AccessorNode get, out AccessorNode set) { get = null; set = null; Eat(TokenType.OpenCurly); // first accessor Token token = PeekToken(); ParseNodeList attributes = ParseAttributes(); while (attributes.Count != 0 || PeekType() == TokenType.Identifier || (!isEvent && PeekModifier())) { Modifiers modifiers = 0; if (!isEvent) { modifiers = ParseModifiers(); } AtomicNameNode name = ParseIdentifier(); BlockStatementNode body = ParseBlockOpt(); if ((name.Identifier.Symbol == getName && !isEvent) || (name.Identifier.Symbol == removeName && isEvent)) { if (get != null) { ReportError(ParseError.DuplicateAccessor, name.Identifier.Symbol); } else { get = new AccessorNode(token, attributes, name, body, modifiers); } } else if ((name.Identifier.Symbol == setName && !isEvent) || (name.Identifier.Symbol == addName && isEvent)) { if (set != null) { ReportError(ParseError.DuplicateAccessor, name.Identifier.Symbol, modifiers); } else { set = new AccessorNode(token, attributes, name, body, modifiers); } } else { if (!isEvent) ReportError(ParseError.GetOrSetExpected); else ReportError(ParseError.AddOrRemoveExpected); } // next accessor token = PeekToken(); attributes = ParseAttributes(); } if (get == null && set == null) { ReportError(ParseError.NeedAtLeastOneAccessor); } else if (isEvent && (get == null || set == null)) { ReportError(ParseError.EventMissingAcessor); } Eat(TokenType.CloseCurly); }