private void parseAccessorDeclaration(IAccessorsOwner declaration, bool inInterface) { var accessor = new AccessorDeclarationNode(); while (lexicalUnit == LexicalUnit.OpenBracket) { accessor.Annotations.add(parseAnnotationSection()); } setScannerState(accessor); switch (lexicalUnit) { case Keyword: switch (scanner.Keyword) { case Protected: accessor.Modifiers.add(Modifier.Protected); nextLexicalUnit(true); break; case Private: accessor.Modifiers.add(Modifier.Private); nextLexicalUnit(true); break; } break; } switch (lexicalUnit) { case ContextualKeyword: switch (scanner.Keyword) { case Get: if (declaration.GetAccessor != null) { throw error(ParseErrorId.DuplicateAccessor); } declaration.GetAccessor = accessor; nextLexicalUnit(true); break; case Set: if (declaration.SetAccessor != null) { throw error(ParseErrorId.DuplicateAccessor); } declaration.SetAccessor = accessor; nextLexicalUnit(true); break; default: throw error(ParseErrorId.AccessorExpected); } break; default: throw error(ParseErrorId.AccessorExpected); } switch (lexicalUnit) { case SemiColon: accessor.EndPosition = scanner.EndPosition; nextLexicalUnit(false); break; case OpenBrace: if (!inInterface) { accessor.Body = parseBlockStatement(); accessor.EndPosition = accessor.Body.EndPosition; break; } goto default; default: throw error(ParseErrorId.SemiColonExpected); } }
private void fakeParseShortProperty(IAccessorsOwner declaration, Modifier setterAccess, bool inInterface) { var accessor = new AccessorDeclarationNode(); setScannerState(accessor); declaration.GetAccessor = accessor; accessor.EndPosition = scanner.EndPosition; if (!inInterface || setterAccess == Modifier.Public) { accessor = new AccessorDeclarationNode(); setScannerState(accessor); if (declaration.Modifiers.any(x => isLess(x, setterAccess))) accessor.Modifiers.add(setterAccess); declaration.SetAccessor = accessor; accessor.EndPosition = scanner.EndPosition; } }