# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.evaluation.av.envtype import envtype from bu4.evaluation.constructs.evaluable import Evaluable from bu4.linking.states.linkingfinished import LinkingFinished from bu4.linking.states.linkingstate import LinkingState from bu4.parsing.constructs.linked import Linked, Parsed __all__ = ('PName',) class LName(Linked): def __init__(self, promise: set[bytes], name: bytes): assert name in promise, f'undefined: {name}' self.name = name self.future = {name} def link(self) -> LinkingState: return LinkingFinished(self) def evaluable(self, env: envtype) -> Evaluable: return env[self.name] def __str__(self): return f'[{self.name.decode()}]' def unlink(self) -> Parsed: return PName(self.name) class PName(Parsed): def __init__(self, name: bytes): self.name = name def link(self, promise: set[bytes]) -> Linked: return LName(promise, self.name)