[RFC 10/14] Hack cos.scm to work with new Guile
Tom Tromey <[email protected]> Sat, 19 Aug 2023 11:42:09 -0600
| Newsgroups | gmane.comp.tools.cgen.devel |
|---|---|
| Message-ID | <[email protected]> |
cos.scm calls procedure->memoizing-macro, which no longer exists in Guile. This patch hacks around this by having the member accessors always use the "slow" path. In practice, with Guile 3.0, this is still fast enough on my machine. Longer term this code should all be removed in favor of GOOPS. --- cos.scm | 56 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/cos.scm b/cos.scm index 1ba4c54..34f1848 100644 --- a/cos.scm +++ b/cos.scm @@ -905,16 +905,16 @@ ;; Subroutine of elm-get. -(define (/elm-make-method-getter self elm-name) - (/object-check self "elm-get") - (let ((index (/class-lookup-element (/object-class-desc self) elm-name))) - (if index - (procedure->memoizing-macro - (lambda (exp env) - `(lambda (obj) - (/object-elm-get obj ,index)))) - (/object-error "elm-get" self "element not present: " elm-name))) -) +;; (define (/elm-make-method-getter self elm-name) +;; (/object-check self "elm-get") +;; (let ((index (/class-lookup-element (/object-class-desc self) elm-name))) +;; (if index +;; (procedure->memoizing-macro +;; (lambda (exp env) +;; `(lambda (obj) +;; (/object-elm-get obj ,index)))) +;; (/object-error "elm-get" self "element not present: " elm-name))) +;; ) ;; Get an element from an object. ;; If OBJ is `self' then the caller is required to be a method and we emit @@ -929,33 +929,33 @@ ;; operation with O(1). Cute, but I'm hoping there's an easier/better way. (defmacro elm-get (self elm-name) - (if (eq? self 'self) - `(((/elm-make-method-getter ,self ,elm-name)) ,self) - `(elm-xget ,self ,elm-name)) -) + ;; (if (eq? self 'self) + ;; `(((/elm-make-method-getter ,self ,elm-name)) ,self) + `(elm-xget ,self ,elm-name) + ) ;; Subroutine of elm-set!. -(define (/elm-make-method-setter self elm-name) - (/object-check self "elm-set!") - (let ((index (/class-lookup-element (/object-class-desc self) elm-name))) - (if index - (procedure->memoizing-macro - (lambda (exp env) - `(lambda (obj new-val) - (/object-elm-set! obj ,index new-val)))) - (/object-error "elm-set!" self "element not present: " elm-name))) -) +;; (define (/elm-make-method-setter self elm-name) +;; (/object-check self "elm-set!") +;; (let ((index (/class-lookup-element (/object-class-desc self) elm-name))) +;; (if index +;; (procedure->memoizing-macro +;; (lambda (exp env) +;; `(lambda (obj new-val) +;; (/object-elm-set! obj ,index new-val)))) +;; (/object-error "elm-set!" self "element not present: " elm-name))) +;; ) ;; Set an element in an object. ;; This can only be used by methods. ;; See the comments for `elm-get'! (defmacro elm-set! (self elm-name new-val) - (if (eq? self 'self) - `(((/elm-make-method-setter ,self ,elm-name)) ,self ,new-val) - `(elm-xset! ,self ,elm-name ,new-val)) -) + ;; (if (eq? self 'self) + ;; `(((/elm-make-method-setter ,self ,elm-name)) ,self ,new-val) + `(elm-xset! ,self ,elm-name ,new-val) + ) ;; Get an element from an object. ;; This is for invoking from outside a method, and without having to -- 2.41.0