From d5bb22c2d97cab32c80fc303304967eb27bc250b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 30 Jun 2018 20:32:01 -0600 Subject: [PATCH] cs: improve `#%variable-reference-constant?` Repair constant detection for unmodified imports. --- racket/src/cs/Makefile | 2 +- racket/src/cs/linklet.sls | 7 +++++++ racket/src/cs/linklet/read.ss | 4 +++- racket/src/cs/rumble.sls | 5 +++-- racket/src/cs/rumble/foreign.ss | 9 ++++++++- racket/src/schemify/schemify.rkt | 5 ++--- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/racket/src/cs/Makefile b/racket/src/cs/Makefile index db44c75d8b..adc27acdb9 100644 --- a/racket/src/cs/Makefile +++ b/racket/src/cs/Makefile @@ -5,7 +5,7 @@ RACKET = ../../bin/racket SCHEME = scheme # Controls whether Racket layers are built as unsafe: -UNSAFE_COMP = --unsafe +UNSAFE_COMP = # --unsafe # Controls whether Racket layers are built with expression-level debugging: DEBUG_COMP = # --debug diff --git a/racket/src/cs/linklet.sls b/racket/src/cs/linklet.sls index bbaa92ead0..456cfdc112 100644 --- a/racket/src/cs/linklet.sls +++ b/racket/src/cs/linklet.sls @@ -176,6 +176,11 @@ (define (compile-to-port* s o) (call-with-system-wind (lambda () (compile-to-port s o)))) + (define (eval/foreign e mode) + (performance-region + mode + (compile* e))) + (define primitives (make-hasheq)) (define (install-linklet-primitive-tables! . tables) (for-each @@ -827,6 +832,8 @@ (generate-inspector-information (not omit-debugging?)) (generate-procedure-source-information #t)) + (set-foreign-eval! eval/foreign) + (expand-omit-library-invocations #t) (install-linklet-bundle-write!)) diff --git a/racket/src/cs/linklet/read.ss b/racket/src/cs/linklet/read.ss index bea0ec04d4..11ac2711e9 100644 --- a/racket/src/cs/linklet/read.ss +++ b/racket/src/cs/linklet/read.ss @@ -1,5 +1,7 @@ (define (read-compiled-linklet in) - (read-compiled-linklet-or-directory in #t)) + (performance-region + 'read + (read-compiled-linklet-or-directory in #t))) (define (read-compiled-linklet-or-directory in initial?) ;; `#~` has already been read diff --git a/racket/src/cs/rumble.sls b/racket/src/cs/rumble.sls index 1c4b8e6925..0ed6102385 100644 --- a/racket/src/cs/rumble.sls +++ b/racket/src/cs/rumble.sls @@ -576,9 +576,10 @@ ptr-set! saved-errno set-cpointer-tag! set-ptr-offset! vector->cpointer unsafe-register-process-global (rename [ffi-lib* ffi-lib]) - set-ffi-get-lib-and-obj! ; not exported to Racket - poll-async-callbacks ; not exported to Racket + set-ffi-get-lib-and-obj! ; not exported to Racket + poll-async-callbacks ; not exported to Racket set-async-callback-poll-wakeup! ; not exported to Racket + set-foreign-eval! ; not exported to racket unsafe-unbox unsafe-unbox* diff --git a/racket/src/cs/rumble/foreign.ss b/racket/src/cs/rumble/foreign.ss index 698500ef98..aacb205aa0 100644 --- a/racket/src/cs/rumble/foreign.ss +++ b/racket/src/cs/rumble/foreign.ss @@ -1279,6 +1279,13 @@ ;; ---------------------------------------- +(define eval/foreign + (lambda (expr mode) + (call-with-system-wind (lambda () (eval expr))))) + +(define (set-foreign-eval! proc) + (set! eval/foreign proc)) + (define/who ffi-call (case-lambda [(p in-types out-type) @@ -1385,7 +1392,7 @@ (make-ftype-pointer ,id p)))) ids) '())))]) - (call-with-system-wind (lambda () (eval expr))))] + (eval/foreign expr (if call? 'comp-ffi 'comp-ffi-back)))] [gen-proc (car gen-proc+ret-maker+arg-makers)] [ret-maker (cadr gen-proc+ret-maker+arg-makers)] [arg-makers (cddr gen-proc+ret-maker+arg-makers)] diff --git a/racket/src/schemify/schemify.rkt b/racket/src/schemify/schemify.rkt index 3c44a7fb67..69793959d4 100644 --- a/racket/src/schemify/schemify.rkt +++ b/racket/src/schemify/schemify.rkt @@ -152,10 +152,9 @@ (define v (known-inline->export-known (hash-ref defn-info id #f) prim-knowns imports exports)) (cond - [(and v - (not (set!ed-mutated-state? (hash-ref mutated id #f)))) + [(not (set!ed-mutated-state? (hash-ref mutated id #f))) (define ext-id (ex-ext-id ex-id)) - (hash-set knowns ext-id v)] + (hash-set knowns ext-id (or v a-known-constant))] [else knowns])))])) ;; ----------------------------------------