diff --git a/smnp/ast/node/function.py b/smnp/ast/node/function.py index 82981cf..30bf3a4 100644 --- a/smnp/ast/node/function.py +++ b/smnp/ast/node/function.py @@ -103,7 +103,7 @@ def ArgumentParser(input): return Parser.allOf( Parser.optional(TypeParser), - IdentifierLiteralParser, + Parser.doAssert(IdentifierLiteralParser, "argument name"), Parser.optional(Parser.terminal(TokenType.DOTS, lambda val, pos: True)), createNode=createNode, name="function argument" @@ -115,24 +115,26 @@ def ArgumentsDeclarationParser(input): ArgumentsDeclaration, TokenType.OPEN_PAREN, TokenType.CLOSE_PAREN, - ArgumentParser + Parser.doAssert(ArgumentParser, "function/method argument") )(input) def FunctionDefinitionParser(input): return Parser.allOf( Parser.terminal(TokenType.FUNCTION), - IdentifierLiteralParser, - ArgumentsDeclarationParser, - MethodBodyParser, + Parser.doAssert(IdentifierLiteralParser, "function/method name"), + Parser.doAssert(ArgumentsDeclarationParser, "function/method arguments"), + Parser.doAssert(MethodBodyParser, "function/method body"), createNode=lambda _, name, args, body: FunctionDefinition.withValues(name, args, body), name="function definition" )(input) + def MethodBodyParser(input): bodyItem = Parser.oneOf( - StatementParser, ReturnParser, + StatementParser, + assertExpected="statement", name="function body item" ) diff --git a/smnp/ast/node/imports.py b/smnp/ast/node/imports.py index b16afb9..8305cf9 100644 --- a/smnp/ast/node/imports.py +++ b/smnp/ast/node/imports.py @@ -27,7 +27,7 @@ class Import(Node): def ImportParser(input): return Parser.allOf( Parser.terminal(TokenType.IMPORT), - StringParser, + Parser.doAssert(StringParser, "import source as string"), createNode=lambda imp, source: Import.withValue(source), name="import" )(input) diff --git a/smnp/token/tokenizers/note.py b/smnp/token/tokenizers/note.py index 672d66f..6454aba 100644 --- a/smnp/token/tokenizers/note.py +++ b/smnp/token/tokenizers/note.py @@ -14,7 +14,7 @@ def noteTokenizer(input, current, line): rawValue = '' if input[current] == '@': rawValue += input[current+consumedChars] - consumedChars += 1 + consumedChars += 1 # TODO: Check if next item does even exist if input[current+consumedChars] in ('C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'A', 'a', 'H', 'h', 'B', 'b'): rawValue += input[current + consumedChars] notePitch = input[current+consumedChars]