Improve 'extend' statement

This commit is contained in:
Bartłomiej Pluta
2019-07-12 14:19:21 +02:00
parent b7192ea52b
commit ac8b46b077
3 changed files with 23 additions and 1 deletions

View File

@@ -45,14 +45,34 @@ class Extend(Node):
node.methods = methods
return node
def ExtendParser(input):
return Parser.allOf(
simpleExtend = Parser.allOf(
Parser.terminal(TokenType.EXTEND),
TypeParser,
Parser.terminal(TokenType.AS),
IdentifierLiteralParser,
Parser.terminal(TokenType.WITH),
Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)),
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,
createNode=lambda extend, type, _, variable, methods: Extend.withValues(extend.pos, type, variable, methods),
name="multiple extend"
)
return Parser.oneOf(
simpleExtend,
multiExtend,
name="extend"
)(input)

View File

@@ -51,6 +51,7 @@ tokenizers = (
separated(defaultTokenizer(TokenType.EXTEND)),
separated(defaultTokenizer(TokenType.IMPORT)),
separated(defaultTokenizer(TokenType.FROM)),
separated(defaultTokenizer(TokenType.WITH)),
separated(defaultTokenizer(TokenType.ELSE)),
separated(defaultTokenizer(TokenType.AND)),
separated(defaultTokenizer(TokenType.NOT)),

View File

@@ -36,6 +36,7 @@ class TokenType(Enum):
EXTEND = 'extend'
IMPORT = 'import'
FROM = 'from'
WITH = 'with'
ELSE = 'else'
IF = 'if'
AS = 'as'