32 lines
1.1 KiB
Python
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.new(argument, lambda_))
|
|
)
|
|
)
|
|
)
|
|
)
|