private ExpressionNode parseSuperAccessExpression() { ExpressionNode result = null; var superAccess = new SuperAccessExpressionNode(); setScannerState(superAccess); superAccess.EndPosition = scanner.EndPosition; switch (nextLexicalUnit(true)) { case Dot: if (!isIdentifier(nextLexicalUnit(true))) { throw error(ParseErrorId.IdentifierExpected); } var memberAccess = new MemberAccessExpressionNode { TargetObject = superAccess, Member = new SimpleNameExpressionNode { NameOffset = scanner.StartPosition, NameLength = getLexicalUnitLength() } }; copyScannerState(superAccess, memberAccess); copyScannerState(superAccess, memberAccess.Member); memberAccess.Member.EndPosition = scanner.EndPosition; result = memberAccess; int endPosition = scanner.EndPosition; nextLexicalUnit(false); memberAccess.EndPosition = parseTypeArguments(memberAccess.Member.TypeArguments, true, endPosition); break; case NullSafeMemberAccess: if (!isIdentifier(nextLexicalUnit(true))) { throw error(ParseErrorId.IdentifierExpected); } var nullSafeMemberAccess = new NullSafeMemberAccessExpressionNode { TargetObject = superAccess, Member = new SimpleNameExpressionNode { NameOffset = scanner.StartPosition, NameLength = getLexicalUnitLength() } }; copyScannerState(superAccess, nullSafeMemberAccess); copyScannerState(superAccess, nullSafeMemberAccess.Member); nullSafeMemberAccess.Member.EndPosition = scanner.EndPosition; result = nullSafeMemberAccess; int endPosition2 = scanner.EndPosition; nextLexicalUnit(false); nullSafeMemberAccess.EndPosition = parseTypeArguments(nullSafeMemberAccess.Member.TypeArguments, true, endPosition2); break; case OpenBracket: nextLexicalUnit(true); var elementAccess = new ElementAccessExpressionNode { TargetObject = superAccess }; copyScannerState(superAccess, elementAccess); result = elementAccess; result.EndPosition = parseExpressionList(elementAccess.Indexes); break; default: throw error(ParseErrorId.DotExpected); } return result; }
protected override AssignmentState handleSuperAccess(SuperAccessExpressionNode superAccess, HashSet <StatementNode> visited, bool nested) { return(AssignmentState.NotAssigned); }
protected virtual TResult handleSuperAccess(SuperAccessExpressionNode superAccess, TSource source, bool nested) { return(defaultHandler()); }