builtup4/bu4/linkable/extensions/xcall.py
2021-09-08 13:49:09 +03:00

34 lines
1.2 KiB
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pcall import PCall
from bu4.parsing.codes import CODE_CALL
from bu4.parsing.extensions.extension import Extension
from bu4.parsing.states.parsingread import ParsingRead
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XCall',)
class XCall(Extension[Parsed], code=CODE_CALL):
def apply(self) -> TransformState[Parsed]:
return AfterTransform(
ParsingRead(self.parser),
ATLambda(
lambda argument: AfterTransform(
ParsingRead(self.parser),
ATLambda(
lambda lambda_: TransformFinished(
PCall(
argument,
lambda_
)
)
)
)
)
)