builtup4/bu4/linkable/constructs/pcall.py
2021-09-09 08:16:01 +03:00

32 lines
1.1 KiB
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.linkable.constructs.parsed import Parsed
from bu4.linking.constructs.lcall import LCall
from bu4.linking.constructs.linked import Linked
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstart import TransformStart
from bu4.transform.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('PCall',)
class PCall(Parsed):
def __init__(self, argument: Parsed, lambda_: Parsed):
self.argument = argument
self.lambda_ = lambda_
def link(self, promise: set[bytes]) -> TransformState[Linked]:
return AfterTransform(
TransformStart(lambda: self.argument.link(promise)),
ATLambda(
lambda argument: AfterTransform(
TransformStart(lambda: self.lambda_.link(promise)),
ATLambda(
lambda lambda_: TransformFinished(LCall(argument, lambda_))
)
)
)
)