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);
 }
Example #3
0
 protected virtual TResult handleSuperAccess(SuperAccessExpressionNode superAccess, TSource source, bool nested)
 {
     return(defaultHandler());
 }