From 0c722035514c8fa8a28bceb3f6a21d60747408e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 12 Jul 2019 17:10:47 +0200 Subject: [PATCH] Create assertions on extend statements --- smnp/ast/node/extend.py | 12 ++++++------ smnp/ast/node/function.py | 3 +-- smnp/ast/node/iterable.py | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/smnp/ast/node/extend.py b/smnp/ast/node/extend.py index 5a23763..2ebdfbe 100644 --- a/smnp/ast/node/extend.py +++ b/smnp/ast/node/extend.py @@ -54,17 +54,17 @@ def ExtendParser(input): Parser.terminal(TokenType.AS), IdentifierLiteralParser, Parser.terminal(TokenType.WITH), - Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)), + Parser.doAssert(Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)), "method definition"), createNode=lambda extend, type, _, variable, __, methods: Extend.withValues(extend.pos, type, variable, methods), name="simple extend" ) multiExtend = Parser.allOf( Parser.terminal(TokenType.EXTEND), - TypeParser, - Parser.terminal(TokenType.AS), - IdentifierLiteralParser, - MethodsDeclarationParser, + Parser.doAssert(TypeParser, "type being extended"), + Parser.terminal(TokenType.AS, doAssert=True), + Parser.doAssert(IdentifierLiteralParser, "variable name"), + Parser.doAssert(MethodsDeclarationParser, f"block with methods definitions or '{TokenType.WITH.key}' keyword"), createNode=lambda extend, type, _, variable, methods: Extend.withValues(extend.pos, type, variable, methods), name="multiple extend" ) @@ -80,7 +80,7 @@ def ExtendParser(input): def MethodsDeclarationParser(input): return Parser.loop( Parser.terminal(TokenType.OPEN_CURLY), - FunctionDefinitionParser, + Parser.doAssert(FunctionDefinitionParser, f"method definition or '{TokenType.CLOSE_CURLY.key}'"), Parser.terminal(TokenType.CLOSE_CURLY), createNode=lambda open, methods, close: Block.withChildren(methods, open.pos), name="methods block" diff --git a/smnp/ast/node/function.py b/smnp/ast/node/function.py index 30bf3a4..9b506ae 100644 --- a/smnp/ast/node/function.py +++ b/smnp/ast/node/function.py @@ -134,13 +134,12 @@ def MethodBodyParser(input): bodyItem = Parser.oneOf( ReturnParser, StatementParser, - assertExpected="statement", name="function body item" ) return Parser.loop( Parser.terminal(TokenType.OPEN_CURLY), - bodyItem, + Parser.doAssert(bodyItem, f"statement or '{TokenType.CLOSE_CURLY.key}'"), Parser.terminal(TokenType.CLOSE_CURLY), createNode=lambda open, statements, close: Block.withChildren(statements, open.pos), name="function body" diff --git a/smnp/ast/node/iterable.py b/smnp/ast/node/iterable.py index 031510b..caa0ac8 100644 --- a/smnp/ast/node/iterable.py +++ b/smnp/ast/node/iterable.py @@ -78,7 +78,7 @@ def abstractIterableParser(iterableNodeType, openTokenType, closeTokenType, item return node return Parser.allOf( - Parser.terminal(TokenType.COMMA, doAssert=True), + Parser.doAssert(Parser.terminal(TokenType.COMMA), f"'{TokenType.COMMA.key}' or '{closeTokenType.key}'"), itemParser, abstractIterableTailParser, createNode=createNode