From 56fe13e6f702e4ecd7d35661696d42fe54d097f4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 10 Feb 2020 20:11:18 -0700 Subject: [PATCH] cs: small interpreter clean-ups --- racket/src/cs/convert.rkt | 10 ++++++++++ racket/src/schemify/interpret.rkt | 8 ++++++-- racket/src/schemify/literal.rkt | 2 +- racket/src/schemify/schemify.rkt | 3 +++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/racket/src/cs/convert.rkt b/racket/src/cs/convert.rkt index 3af5287504..da184f2959 100644 --- a/racket/src/cs/convert.rkt +++ b/racket/src/cs/convert.rkt @@ -147,6 +147,11 @@ (list-of-keywords? (cadr v)) (extflonum? (cadr v)))) 10] + [(and (pair? v) + (pair? (cdr v)) + (eq? 'quote (car v)) + (void? (cadr v))) + 6] [(bytes? v) (* 3 (bytes-length v))] [(and (symbol? v) (regexp-match? #rx"#" (symbol->string v))) (+ 2 (string-length (symbol->string v)))] @@ -175,6 +180,11 @@ (list-of-keywords? (cadr v)) (extflonum? (cadr v)))) (write (hash-ref lifts (cadr v)) out)] + [(and (pair? v) + (pair? (cdr v)) + (eq? 'quote (car v)) + (void? (cadr v))) + (write '(void) out)] [(bytes? v) (display "#vu8") (write (bytes->list v) out)] diff --git a/racket/src/schemify/interpret.rkt b/racket/src/schemify/interpret.rkt index 3a6054d0bf..40f67a05bf 100644 --- a/racket/src/schemify/interpret.rkt +++ b/racket/src/schemify/interpret.rkt @@ -302,7 +302,7 @@ (compile-expr `(call-with-values (lambda () ,rhs) (lambda ,gen-ids ,@(if (null? ids) - '((void)) + (list (void)) (for/list ([id (in-list ids)] [gen-id (in-list gen-ids)]) `(set! ,id ,gen-id))))) @@ -548,7 +548,11 @@ (define pos (stack->pos (if (boxed? var) (boxed-pos var) var) stk-i)) ; box result means unused (cond [(box? pos) - (vector 'clear (list (unbox pos)) e)] + (cond + [(and (vector? e) (eq? 'clear (vector-ref e 0))) + (vector 'clear (cons (unbox pos) (vector-ref e 1)) (vector-ref e 2))] + [else + (vector 'clear (list (unbox pos)) e)])] [(not (hash-ref mutated u #f)) e] [else diff --git a/racket/src/schemify/literal.rkt b/racket/src/schemify/literal.rkt index a0701ae6d7..35f6ff26a5 100644 --- a/racket/src/schemify/literal.rkt +++ b/racket/src/schemify/literal.rkt @@ -43,7 +43,7 @@ (cond [(or (string? x) (bytes? x) (boolean? x) (number? x)) x] - [(void? x) '(void)] + [(void? x) `(quote ,(void))] [(eof-object? x) 'eof] [else `(quote ,x)])) diff --git a/racket/src/schemify/schemify.rkt b/racket/src/schemify/schemify.rkt index 4465d3a557..9b51eb7d54 100644 --- a/racket/src/schemify/schemify.rkt +++ b/racket/src/schemify/schemify.rkt @@ -396,6 +396,9 @@ [`,_ (finish-definition ids)])] [else (finish-wrapped-definition ids rhs)])] + [`(quote ,_) ; useful to drop #s for the interpreter + #:guard (or (pair? (cdr l)) (pair? accum-ids)) + (loop (cdr l) mut-l accum-exprs accum-ids knowns)] [`,_ (match form [`(define-values ,ids ,_)