From a1c6da26dbb9d8683b2fc1719bf6d927a3984706 Mon Sep 17 00:00:00 2001 From: timotheyca Date: Sat, 4 Dec 2021 19:44:06 +0300 Subject: [PATCH] LLambda constructor may return LDelayed --- bu4/combinatory/lic.py | 2 +- bu4/combinatory/lkc.py | 2 +- bu4/combinatory/lsc.py | 2 +- bu4/linking/constructs/lcall.py | 2 +- bu4/linking/constructs/ldelayed.py | 2 +- bu4/linking/constructs/lexception.py | 2 +- bu4/linking/constructs/linked.py | 2 +- bu4/linking/constructs/llambda.py | 12 ++++++++---- bu4/linking/constructs/lname.py | 2 +- bu4/linking/constructs/lnull.py | 2 +- bu4/linking/evaluable_from_parsed.py | 2 +- bu4/{linkable => linking}/evaluation/ellambda.py | 4 ++-- bu4/{linkable => linking}/evaluation/elvtype.py | 0 bu4/{linkable => linking}/evaluation/lambdaelv.py | 2 +- bu4/tracing/trace.py | 2 +- 15 files changed, 22 insertions(+), 18 deletions(-) rename bu4/{linkable => linking}/evaluation/ellambda.py (88%) rename bu4/{linkable => linking}/evaluation/elvtype.py (100%) rename bu4/{linkable => linking}/evaluation/lambdaelv.py (95%) diff --git a/bu4/combinatory/lic.py b/bu4/combinatory/lic.py index e53b36a..ec8a4b3 100644 --- a/bu4/combinatory/lic.py +++ b/bu4/combinatory/lic.py @@ -6,7 +6,7 @@ from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished diff --git a/bu4/combinatory/lkc.py b/bu4/combinatory/lkc.py index 8015ad0..9c9bd8d 100644 --- a/bu4/combinatory/lkc.py +++ b/bu4/combinatory/lkc.py @@ -7,7 +7,7 @@ from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished diff --git a/bu4/combinatory/lsc.py b/bu4/combinatory/lsc.py index 610d248..6c600c4 100644 --- a/bu4/combinatory/lsc.py +++ b/bu4/combinatory/lsc.py @@ -9,7 +9,7 @@ from bu4.evaluation.targets.avanonymouscontainer import AVAnonymousContainer from bu4.evaluation.targets.avcall import AVCall from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished diff --git a/bu4/linking/constructs/lcall.py b/bu4/linking/constructs/lcall.py index 7b18a37..6811cc2 100644 --- a/bu4/linking/constructs/lcall.py +++ b/bu4/linking/constructs/lcall.py @@ -6,8 +6,8 @@ from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.targets.avcall import AVCall from bu4.indexing.constructs.icall import ICall from bu4.indexing.constructs.indexed import Indexed -from bu4.linkable.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.aftertransform import AfterTransform from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstart import TransformStart diff --git a/bu4/linking/constructs/ldelayed.py b/bu4/linking/constructs/ldelayed.py index 7d777e7..4d52bd9 100644 --- a/bu4/linking/constructs/ldelayed.py +++ b/bu4/linking/constructs/ldelayed.py @@ -5,8 +5,8 @@ from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.idelayed import IDelayed from bu4.indexing.constructs.indexed import Indexed -from bu4.linkable.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.aftertransform import AfterTransform from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstart import TransformStart diff --git a/bu4/linking/constructs/lexception.py b/bu4/linking/constructs/lexception.py index 27e7c8f..e7b6904 100644 --- a/bu4/linking/constructs/lexception.py +++ b/bu4/linking/constructs/lexception.py @@ -4,8 +4,8 @@ from bu4.evaluation.constructs.eexception import EException from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.iexception import IException from bu4.indexing.constructs.indexed import Indexed -from bu4.linkable.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/linking/constructs/linked.py b/bu4/linking/constructs/linked.py index 00cbc34..1108982 100644 --- a/bu4/linking/constructs/linked.py +++ b/bu4/linking/constructs/linked.py @@ -3,7 +3,7 @@ from bu4.evaluation.constructs.attachable import Attachable from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.transformstate import TransformState __all__ = ('Linked',) diff --git a/bu4/linking/constructs/llambda.py b/bu4/linking/constructs/llambda.py index 48b2509..ac6ec9a 100644 --- a/bu4/linking/constructs/llambda.py +++ b/bu4/linking/constructs/llambda.py @@ -6,9 +6,10 @@ from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.idelayed import IDelayed from bu4.indexing.constructs.ilambda import ILambda from bu4.indexing.constructs.indexed import Indexed -from bu4.linkable.evaluation.ellambda import ELLambda -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.constructs.ldelayed import LDelayed from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.ellambda import ELLambda +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.aftertransform import AfterTransform from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstart import TransformStart @@ -21,13 +22,16 @@ __all__ = ('LLambda',) class LLambda(Linked): value: Linked + def __new__(cls, name: bytes, value: Linked): + return Linked.__new__(LLambda) if name in value.future else LDelayed(value) + def __init__(self, name: bytes, value: Linked): self.name = name self.value = value - self.future = self.value.future - {name} - self.multifuture = self.future self.used = name in value.future self.memoize = name in value.multifuture + self.future = self.value.future - {name} + self.multifuture = self.future if self.used else self.value.multifuture def attach(self, env: elvtype) -> Evaluable: return ( diff --git a/bu4/linking/constructs/lname.py b/bu4/linking/constructs/lname.py index 8c29ef7..dc611c6 100644 --- a/bu4/linking/constructs/lname.py +++ b/bu4/linking/constructs/lname.py @@ -3,8 +3,8 @@ 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.linking.evaluation.elvtype import elvtype from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/linking/constructs/lnull.py b/bu4/linking/constructs/lnull.py index 98e934d..175e679 100644 --- a/bu4/linking/constructs/lnull.py +++ b/bu4/linking/constructs/lnull.py @@ -4,8 +4,8 @@ from bu4.evaluation.constructs.enull import ENull from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.inull import INull -from bu4.linkable.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/linking/evaluable_from_parsed.py b/bu4/linking/evaluable_from_parsed.py index 2689454..ceafd72 100644 --- a/bu4/linking/evaluable_from_parsed.py +++ b/bu4/linking/evaluable_from_parsed.py @@ -2,7 +2,7 @@ from bu4.evaluation.constructs.eattachable import EAttachable from bu4.linkable.constructs.parsed import Parsed -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype from bu4.transform.transform import transform __all__ = ('evaluable_from_parsed',) diff --git a/bu4/linkable/evaluation/ellambda.py b/bu4/linking/evaluation/ellambda.py similarity index 88% rename from bu4/linkable/evaluation/ellambda.py rename to bu4/linking/evaluation/ellambda.py index e8b2ab8..7e62e01 100644 --- a/bu4/linkable/evaluation/ellambda.py +++ b/bu4/linking/evaluation/ellambda.py @@ -3,9 +3,9 @@ from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue -from bu4.linkable.evaluation.elvtype import elvtype -from bu4.linkable.evaluation.lambdaelv import LambdaElv from bu4.linking.constructs.linked import Linked +from bu4.linking.evaluation.elvtype import elvtype +from bu4.linking.evaluation.lambdaelv import LambdaElv __all__ = ('ELLambda',) diff --git a/bu4/linkable/evaluation/elvtype.py b/bu4/linking/evaluation/elvtype.py similarity index 100% rename from bu4/linkable/evaluation/elvtype.py rename to bu4/linking/evaluation/elvtype.py diff --git a/bu4/linkable/evaluation/lambdaelv.py b/bu4/linking/evaluation/lambdaelv.py similarity index 95% rename from bu4/linkable/evaluation/lambdaelv.py rename to bu4/linking/evaluation/lambdaelv.py index ba19ce6..d726f70 100644 --- a/bu4/linkable/evaluation/lambdaelv.py +++ b/bu4/linking/evaluation/lambdaelv.py @@ -4,7 +4,7 @@ from typing import Mapping, Iterator from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.targets.avnamedcontainer import AVNamedContainer -from bu4.linkable.evaluation.elvtype import elvtype +from bu4.linking.evaluation.elvtype import elvtype __all__ = ('LambdaElv',) diff --git a/bu4/tracing/trace.py b/bu4/tracing/trace.py index e973fdb..47ca225 100644 --- a/bu4/tracing/trace.py +++ b/bu4/tracing/trace.py @@ -7,7 +7,7 @@ from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evalue import EValue from bu4.evaluation.sync import sync from bu4.indexing.evaluation.eilambda import EILambda -from bu4.linkable.evaluation.ellambda import ELLambda +from bu4.linking.evaluation.ellambda import ELLambda from bu4.tracing.probe import Probe __all__ = ('trace', 'probe_index_reset',)