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)