From e9fd3555430ed70f6e019e1fcc2fe86b7b5c7e44 Mon Sep 17 00:00:00 2001 From: Boris Shingarov Date: Wed, 28 Feb 2024 07:04:59 -0500 Subject: [PATCH] Implement EBin>>evaluateIn: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NB: EBin refers to some polymorphic bop in an abstract way. EBins are created in Sprite, which instantiates ΛPrimOps to serve for this purpose. This is a problem along the lines of #194. --- src/Refinements/EBin.class.st | 7 +++++++ src/SpriteLang/BGe.class.st | 5 +++++ src/SpriteLang/BGt.class.st | 5 +++++ src/SpriteLang/BLe.class.st | 5 +++++ src/SpriteLang/BLt.class.st | 5 +++++ src/SpriteLang/BMinus.class.st | 5 +++++ src/SpriteLang/BPlus.class.st | 5 +++++ src/SpriteLang/BTimes.class.st | 5 +++++ 8 files changed, 42 insertions(+) diff --git a/src/Refinements/EBin.class.st b/src/Refinements/EBin.class.st index c6377d3bf..c0388b65d 100644 --- a/src/Refinements/EBin.class.st +++ b/src/Refinements/EBin.class.st @@ -28,6 +28,13 @@ EBin >> bop: anObject [ bop := anObject ] +{ #category : #'term rewriting' } +EBin >> evaluateIn: anEvalEnv [ + ^(left evaluateIn: anEvalEnv) + perform: bop class smalltalkSelector + with: (right evaluateIn: anEvalEnv) +] + { #category : #accessing } EBin >> left [ ^ left diff --git a/src/SpriteLang/BGe.class.st b/src/SpriteLang/BGe.class.st index 1c5d035d8..2505ada1e 100644 --- a/src/SpriteLang/BGe.class.st +++ b/src/SpriteLang/BGe.class.st @@ -13,3 +13,8 @@ BGe class >> operator [ BGe class >> rTypeSrc [ ^'x:''a => y:''a => bool[zzz|zzz <=> (x >= y)]' ] + +{ #category : #'reflect - embedding' } +BGe class >> smalltalkSelector [ + ^#>= +] diff --git a/src/SpriteLang/BGt.class.st b/src/SpriteLang/BGt.class.st index ceb073155..f9bcac100 100644 --- a/src/SpriteLang/BGt.class.st +++ b/src/SpriteLang/BGt.class.st @@ -13,3 +13,8 @@ BGt class >> operator [ BGt class >> rTypeSrc [ ^'x:''a => y:''a => bool[zzz|zzz <=> (x > y)]' ] + +{ #category : #'reflect - embedding' } +BGt class >> smalltalkSelector [ + ^#> +] diff --git a/src/SpriteLang/BLe.class.st b/src/SpriteLang/BLe.class.st index 7b4dcb97f..2364d236f 100644 --- a/src/SpriteLang/BLe.class.st +++ b/src/SpriteLang/BLe.class.st @@ -13,3 +13,8 @@ BLe class >> operator [ BLe class >> rTypeSrc [ ^'x:''a => y:''a => bool[zzz|zzz <=> (x <= y)]' ] + +{ #category : #'reflect - embedding' } +BLe class >> smalltalkSelector [ + ^#<= +] diff --git a/src/SpriteLang/BLt.class.st b/src/SpriteLang/BLt.class.st index 00d81b3cd..6dde83c0e 100644 --- a/src/SpriteLang/BLt.class.st +++ b/src/SpriteLang/BLt.class.st @@ -13,3 +13,8 @@ BLt class >> operator [ BLt class >> rTypeSrc [ ^'x:''a => y:''a => bool[zzz|zzz <=> (x < y)]' ] + +{ #category : #'reflect - embedding' } +BLt class >> smalltalkSelector [ + ^#< +] diff --git a/src/SpriteLang/BMinus.class.st b/src/SpriteLang/BMinus.class.st index 4680e7376..b8acb4e41 100644 --- a/src/SpriteLang/BMinus.class.st +++ b/src/SpriteLang/BMinus.class.st @@ -13,3 +13,8 @@ BMinus class >> operator [ BMinus class >> rTypeSrc [ ^'x:int => y:int => int[v|v===(x-y)]' ] + +{ #category : #'reflect - embedding' } +BMinus class >> smalltalkSelector [ + ^#- +] diff --git a/src/SpriteLang/BPlus.class.st b/src/SpriteLang/BPlus.class.st index fbf1a539e..b2bc4e8ae 100644 --- a/src/SpriteLang/BPlus.class.st +++ b/src/SpriteLang/BPlus.class.st @@ -13,3 +13,8 @@ BPlus class >> operator [ BPlus class >> rTypeSrc [ ^'x:int => y:int => int[v|v===(x+y)]' ] + +{ #category : #'reflect - embedding' } +BPlus class >> smalltalkSelector [ + ^#+ +] diff --git a/src/SpriteLang/BTimes.class.st b/src/SpriteLang/BTimes.class.st index b206eefc7..3088666db 100644 --- a/src/SpriteLang/BTimes.class.st +++ b/src/SpriteLang/BTimes.class.st @@ -13,3 +13,8 @@ BTimes class >> operator [ BTimes class >> rTypeSrc [ ^'x:int => y:int => int[v|v===(x*y)]' ] + +{ #category : #'reflect - embedding' } +BTimes class >> smalltalkSelector [ + ^#* +]