builtup4/bu4/linking/constructs/lname.py

28 lines
900 B
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.iname import IName
from bu4.indexing.constructs.indexed import Indexed
from bu4.linkable.evaluation.elvtype import elvtype
from bu4.linking.constructs.linked import Linked
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('LName',)
class LName(Linked):
def __init__(self, name: bytes):
self.name = name
self.future = {name}
self.multifuture = set()
def attach(self, env: elvtype) -> Evaluable:
return env[self.name]
def index(self, promise: list[bytes]) -> TransformState[Indexed]:
return TransformFinished(IName(promise.index(self.name)))
def __str__(self):
return f'[{self.name.decode()}]'