# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.linking.constructs.lcall import LCall from bu4.linking.constructs.linked import Linked from bu4.linkable.constructs.parsed import Parsed 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_)) ) ) ) )