Parse base class invokation expression
This commit is contained in:
parent
5e8a1a0abe
commit
ae90b27b41
@ -465,5 +465,18 @@ namespace Parser.Tests
|
|||||||
Assert.IsInstanceOf<IfStatementNode>(actual);
|
Assert.IsInstanceOf<IfStatementNode>(actual);
|
||||||
Assert.AreEqual(text, actual.FullText);
|
Assert.AreEqual(text, actual.FullText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ParseBaseClassInvokation()
|
||||||
|
{
|
||||||
|
var text = "a@b.c.d(e, f)";
|
||||||
|
var sut = CreateParser(text);
|
||||||
|
var actual = sut.ParseExpression();
|
||||||
|
Assert.IsInstanceOf<BaseClassInvokationNode>(actual);
|
||||||
|
var e = (BaseClassInvokationNode) actual;
|
||||||
|
Assert.AreEqual("a", e.MethodName.Token.PureToken.LiteralText);
|
||||||
|
Assert.IsInstanceOf<FunctionCallExpressionNode>(e.BaseClassNameAndArguments);
|
||||||
|
Assert.AreEqual(text, actual.FullText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -360,7 +360,19 @@ namespace Parser
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new ParsingException($"Unexpected token \"{CurrentToken.PureToken.LiteralText}\" during parsing expression \"{expression.FullText}\" at {CurrentToken.PureToken.Position}.");
|
throw new ParsingException($"Unexpected token \"{CurrentToken.PureToken.LiteralText}\" while parsing expression \"{expression.FullText}\" at {CurrentToken.PureToken.Position}.");
|
||||||
|
}
|
||||||
|
case TokenKind.At:
|
||||||
|
if (expression is IdentifierNameNode idNameNode2
|
||||||
|
&& !expression.TrailingTrivia.Any())
|
||||||
|
{
|
||||||
|
var atToken = Factory.Token(EatToken());
|
||||||
|
var baseClassNameWithArguments = ParseExpression();
|
||||||
|
return Factory.BaseClassInvokation(idNameNode2, atToken, baseClassNameWithArguments);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ParsingException($"Unexpected token \"{CurrentToken.PureToken.LiteralText}\" at {CurrentToken.PureToken.Position}.");
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return expression;
|
return expression;
|
||||||
|
@ -679,5 +679,25 @@ namespace Parser
|
|||||||
SetParent(result);
|
SetParent(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BaseClassInvokationNode BaseClassInvokation(
|
||||||
|
IdentifierNameNode methodName,
|
||||||
|
TokenNode atToken,
|
||||||
|
ExpressionNode baseClassNameAndArguments)
|
||||||
|
{
|
||||||
|
var children = new List<SyntaxNode>
|
||||||
|
{
|
||||||
|
methodName,
|
||||||
|
atToken,
|
||||||
|
baseClassNameAndArguments
|
||||||
|
};
|
||||||
|
var result = new BaseClassInvokationNode(
|
||||||
|
children,
|
||||||
|
methodName,
|
||||||
|
atToken,
|
||||||
|
baseClassNameAndArguments);
|
||||||
|
SetParent(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -720,4 +720,23 @@ namespace Parser
|
|||||||
Arguments = arguments;
|
Arguments = arguments;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class BaseClassInvokationNode : ExpressionNode
|
||||||
|
{
|
||||||
|
public IdentifierNameNode MethodName { get; }
|
||||||
|
public TokenNode AtToken { get; }
|
||||||
|
public ExpressionNode BaseClassNameAndArguments { get; }
|
||||||
|
|
||||||
|
public BaseClassInvokationNode(
|
||||||
|
List<SyntaxNode> children,
|
||||||
|
IdentifierNameNode methodName,
|
||||||
|
TokenNode atToken,
|
||||||
|
ExpressionNode baseClassNameAndArguments
|
||||||
|
) : base(children)
|
||||||
|
{
|
||||||
|
MethodName = methodName;
|
||||||
|
AtToken = atToken;
|
||||||
|
BaseClassNameAndArguments = baseClassNameAndArguments;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user