Parse member access after array element indexing

This commit is contained in:
Alexander Luzgarev 2018-04-01 10:50:41 +02:00
parent d781f8a469
commit 0b343873fc
2 changed files with 14 additions and 1 deletions

View File

@ -225,5 +225,17 @@ namespace Parser.Tests
Assert.IsInstanceOf<IdentifierNameNode>(a.LeftOperand); Assert.IsInstanceOf<IdentifierNameNode>(a.LeftOperand);
Assert.IsInstanceOf<IndirectMemberAccessNode>(a.RightOperand); Assert.IsInstanceOf<IndirectMemberAccessNode>(a.RightOperand);
} }
[Test]
public void ParseMemberAccessAfterElementAccess()
{
var text = "a(1).b";
var sut = CreateParser(text);
var actual = sut.ParseExpression();
Assert.IsInstanceOf<MemberAccessNode>(actual);
var m = (MemberAccessNode) actual;
Assert.IsInstanceOf<FunctionCallExpressionNode>(m.LeftOperand);
Assert.IsInstanceOf<IdentifierNameNode>(m.RightOperand);
}
} }
} }

View File

@ -297,7 +297,8 @@ namespace Parser
break; break;
case TokenKind.Dot: // member access case TokenKind.Dot: // member access
if (expression is IdentifierNameNode if (expression is IdentifierNameNode
|| expression is MemberAccessNode) || expression is MemberAccessNode
|| expression is FunctionCallExpressionNode)
{ {
var dot = EatToken(); var dot = EatToken();
var member = ParseMember(); var member = ParseMember();