summaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-05-07 19:10:16 +0200
committerMike Vink <mike1994vink@gmail.com>2023-05-07 19:10:16 +0200
commitd6752a78aa1dd2483a943acd2c3d8bb5fa6e8d2d (patch)
treebdb880c3d3fdd84c91522ab7caea06e307fdb929 /shared
parentef8fd9c3e94f37ab4cdd73601cef9d35724ff79a (diff)
make raising and dropping more robust
Diffstat (limited to 'shared')
-rw-r--r--shared/data-directed-programming.rkt15
1 files changed, 7 insertions, 8 deletions
diff --git a/shared/data-directed-programming.rkt b/shared/data-directed-programming.rkt
index decdf0f..3e555ee 100644
--- a/shared/data-directed-programming.rkt
+++ b/shared/data-directed-programming.rkt
@@ -121,7 +121,6 @@
(define (make-apply-with-coercion get get-coercion)
(define (make-apply get)
(lambda (op . args)
- ;; (display args)
(let ((type-tags (map type-tag args)))
(let ((proc (get op type-tags)))
(if proc
@@ -153,7 +152,6 @@
(iter type-tags))
(lambda (op . args)
- ;; (display args)
(let ((type-tags (map type-tag args)))
(let ((proc (get op type-tags)))
(if proc
@@ -229,11 +227,15 @@
(define (equ? d1 d2)
(local-apply 'equ? d1 d2))
+ (define (raisable? datum)
+ (get 'raise (list (type-tag datum))))
(define (can-drop? datum)
(let ((dropped (project datum)))
- (let ((raised (raisetower dropped)))
- (and (get 'equ? (list (type-tag raised) (type-tag datum)))
- (equ? raised datum)))))
+ (if (raisable? dropped)
+ (let ((raised (raisetower dropped)))
+ (and (get 'equ? (list (type-tag raised) (type-tag datum)))
+ (equ? raised datum)))
+ false)))
(define (projectable? datum)
(get 'project (list (type-tag datum))))
@@ -249,9 +251,6 @@
(if proc
(towerdrop (apply proc (map contents args)))
(let ((raised-args (raise-until-type-match get (highest-type get args) args)))
- (newline)
- (display (list "RAISED -- " raised-args))
- (newline)
(let ((raised-proc (get op (map type-tag raised-args))))
(if raised-proc
(towerdrop (apply raised-proc (map contents raised-args)))