From b22b907663c9da0ccea98f2d1be4f2c9ea514ea6 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 4 Dec 2018 10:13:57 -0800 Subject: [PATCH] promises --- sugar/unstable/js.rkt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sugar/unstable/js.rkt b/sugar/unstable/js.rkt index e9d86a1..cd39409 100644 --- a/sugar/unstable/js.rkt +++ b/sugar/unstable/js.rkt @@ -1,5 +1,8 @@ #lang racket/base -(require racket/class (for-syntax racket/base racket/syntax) racket/dict) +(require (for-syntax racket/base racket/syntax) + racket/class + racket/promise + racket/dict) (provide (all-defined-out)) @@ -44,7 +47,7 @@ (define ·-helper (procedure-rename (λ (x . refs) - (for/fold ([x x]) + (for/fold ([x (force x)]) ([ref (in-list refs)] #:break (not x)) (cond @@ -55,7 +58,7 @@ [(dict? x) (dict-ref x ref #f)] [(object? x) (cond [(memq ref (field-names x)) (dynamic-get-field ref x)] - [else #f])] + [else #f])] [else (raise-argument-error '· "object or dict" x)]))) '·)) (define-syntax-rule (· X REF ...) (·-helper X 'REF ...)) @@ -83,7 +86,7 @@ (field [foo 'field]) (define/public (bar) 'method) (define/public (zam) (hasheq 'zoom 'hash)))) - (define h (hasheq 'bam (new C) 'foo 'hashlet)) + (define h (delay (hasheq 'bam (new C) 'foo 'hashlet))) (define o (new C)) (check-equal? (· o foo) 'field) (check-equal? (· o bar) 'method)