cs: improve #%variable-reference-constant?

Repair constant detection for unmodified imports.
This commit is contained in:
Matthew Flatt 2018-06-30 20:32:01 -06:00
parent 64b2694986
commit d5bb22c2d9
6 changed files with 24 additions and 8 deletions

View File

@ -5,7 +5,7 @@ RACKET = ../../bin/racket
SCHEME = scheme SCHEME = scheme
# Controls whether Racket layers are built as unsafe: # Controls whether Racket layers are built as unsafe:
UNSAFE_COMP = --unsafe UNSAFE_COMP = # --unsafe
# Controls whether Racket layers are built with expression-level debugging: # Controls whether Racket layers are built with expression-level debugging:
DEBUG_COMP = # --debug DEBUG_COMP = # --debug

View File

@ -176,6 +176,11 @@
(define (compile-to-port* s o) (define (compile-to-port* s o)
(call-with-system-wind (lambda () (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 primitives (make-hasheq))
(define (install-linklet-primitive-tables! . tables) (define (install-linklet-primitive-tables! . tables)
(for-each (for-each
@ -827,6 +832,8 @@
(generate-inspector-information (not omit-debugging?)) (generate-inspector-information (not omit-debugging?))
(generate-procedure-source-information #t)) (generate-procedure-source-information #t))
(set-foreign-eval! eval/foreign)
(expand-omit-library-invocations #t) (expand-omit-library-invocations #t)
(install-linklet-bundle-write!)) (install-linklet-bundle-write!))

View File

@ -1,5 +1,7 @@
(define (read-compiled-linklet in) (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?) (define (read-compiled-linklet-or-directory in initial?)
;; `#~` has already been read ;; `#~` has already been read

View File

@ -576,9 +576,10 @@
ptr-set! saved-errno set-cpointer-tag! set-ptr-offset! vector->cpointer ptr-set! saved-errno set-cpointer-tag! set-ptr-offset! vector->cpointer
unsafe-register-process-global unsafe-register-process-global
(rename [ffi-lib* ffi-lib]) (rename [ffi-lib* ffi-lib])
set-ffi-get-lib-and-obj! ; not exported to Racket set-ffi-get-lib-and-obj! ; not exported to Racket
poll-async-callbacks ; not exported to Racket poll-async-callbacks ; not exported to Racket
set-async-callback-poll-wakeup! ; not exported to Racket set-async-callback-poll-wakeup! ; not exported to Racket
set-foreign-eval! ; not exported to racket
unsafe-unbox unsafe-unbox
unsafe-unbox* unsafe-unbox*

View File

@ -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 (define/who ffi-call
(case-lambda (case-lambda
[(p in-types out-type) [(p in-types out-type)
@ -1385,7 +1392,7 @@
(make-ftype-pointer ,id p)))) (make-ftype-pointer ,id p))))
ids) 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)] [gen-proc (car gen-proc+ret-maker+arg-makers)]
[ret-maker (cadr gen-proc+ret-maker+arg-makers)] [ret-maker (cadr gen-proc+ret-maker+arg-makers)]
[arg-makers (cddr gen-proc+ret-maker+arg-makers)] [arg-makers (cddr gen-proc+ret-maker+arg-makers)]

View File

@ -152,10 +152,9 @@
(define v (known-inline->export-known (hash-ref defn-info id #f) (define v (known-inline->export-known (hash-ref defn-info id #f)
prim-knowns imports exports)) prim-knowns imports exports))
(cond (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)) (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])))])) [else knowns])))]))
;; ---------------------------------------- ;; ----------------------------------------