CS bootstrap: avoid pessimizing primitives
Speed up the bootstrap process by more directly referencing primitives that won't be replaced in the top-lvel namespace for simulating Chez Scheme.
This commit is contained in:
parent
1e7dbbe020
commit
c0104a29ef
|
@ -66,7 +66,34 @@
|
||||||
(namespace-attach-module (current-namespace) r6rs-lang-mod ns)
|
(namespace-attach-module (current-namespace) r6rs-lang-mod ns)
|
||||||
(namespace-attach-module (current-namespace) scheme-lang-mod ns)
|
(namespace-attach-module (current-namespace) scheme-lang-mod ns)
|
||||||
|
|
||||||
(namespace-require/copy r6rs-lang-mod ns) ; get `library`
|
(namespace-require r6rs-lang-mod ns) ; get `library`
|
||||||
|
|
||||||
|
;; Change some bindings from imported to top-level references so that
|
||||||
|
;; expressions are compiled to reference variables that are updated by
|
||||||
|
;; loading the Chez Scheme compiler. This approach is better than
|
||||||
|
;; using `namespace-require/copy`, because we want most primitives to
|
||||||
|
;; be referenced directly to make the compiler run faster.
|
||||||
|
(define (reset-toplevels [more '()])
|
||||||
|
(for-each (lambda (sym)
|
||||||
|
(eval `(define ,sym ,sym) ns))
|
||||||
|
(append
|
||||||
|
more
|
||||||
|
'(identifier?
|
||||||
|
datum->syntax
|
||||||
|
syntax->list
|
||||||
|
syntax->datum
|
||||||
|
generate-temporaries
|
||||||
|
free-identifier=?
|
||||||
|
bound-identifier=?
|
||||||
|
make-compile-time-value
|
||||||
|
current-eval
|
||||||
|
eval
|
||||||
|
expand
|
||||||
|
compile
|
||||||
|
error
|
||||||
|
format))))
|
||||||
|
|
||||||
|
(reset-toplevels)
|
||||||
|
|
||||||
(status "Load nanopass")
|
(status "Load nanopass")
|
||||||
(define (load-nanopass)
|
(define (load-nanopass)
|
||||||
|
@ -88,9 +115,14 @@
|
||||||
(load/cd (build-path nano-dir "nanopass/implementation-helpers.ikarus.ss"))
|
(load/cd (build-path nano-dir "nanopass/implementation-helpers.ikarus.ss"))
|
||||||
(load-nanopass))
|
(load-nanopass))
|
||||||
|
|
||||||
(namespace-require/copy ''nanopass ns)
|
(namespace-require ''nanopass ns)
|
||||||
|
|
||||||
(namespace-require/copy scheme-lang-mod ns)
|
(namespace-require scheme-lang-mod ns)
|
||||||
|
(reset-toplevels '(run-cp0
|
||||||
|
errorf
|
||||||
|
$oops
|
||||||
|
$undefined-violation
|
||||||
|
generate-interrupt-trap))
|
||||||
|
|
||||||
(namespace-require `(for-syntax ,r6rs-lang-mod) ns)
|
(namespace-require `(for-syntax ,r6rs-lang-mod) ns)
|
||||||
(namespace-require `(for-syntax ,scheme-lang-mod) ns)
|
(namespace-require `(for-syntax ,scheme-lang-mod) ns)
|
||||||
|
|
|
@ -18,7 +18,10 @@
|
||||||
do-$make-record-type
|
do-$make-record-type
|
||||||
register-rtd-name!
|
register-rtd-name!
|
||||||
register-rtd-fields!
|
register-rtd-fields!
|
||||||
s:struct-type?)
|
s:struct-type?
|
||||||
|
record-predicate
|
||||||
|
record-accessor
|
||||||
|
record-mutator)
|
||||||
(only-in "immediate.rkt"
|
(only-in "immediate.rkt"
|
||||||
base-rtd)
|
base-rtd)
|
||||||
(only-in "scheme-struct.rkt"
|
(only-in "scheme-struct.rkt"
|
||||||
|
@ -45,7 +48,8 @@
|
||||||
if
|
if
|
||||||
sort
|
sort
|
||||||
fixnum?
|
fixnum?
|
||||||
open-output-file)
|
open-output-file
|
||||||
|
dynamic-wind)
|
||||||
library import export
|
library import export
|
||||||
(rename-out [patch:define define]
|
(rename-out [patch:define define]
|
||||||
[s:syntax syntax]
|
[s:syntax syntax]
|
||||||
|
@ -61,7 +65,8 @@
|
||||||
[s:splicing-let-syntax let-syntax]
|
[s:splicing-let-syntax let-syntax]
|
||||||
[s:splicing-letrec-syntax letrec-syntax]
|
[s:splicing-letrec-syntax letrec-syntax]
|
||||||
[let trace-let]
|
[let trace-let]
|
||||||
[define trace-define])
|
[define trace-define]
|
||||||
|
[s:dynamic-wind dynamic-wind])
|
||||||
guard
|
guard
|
||||||
identifier-syntax
|
identifier-syntax
|
||||||
(for-syntax datum)
|
(for-syntax datum)
|
||||||
|
@ -79,6 +84,9 @@
|
||||||
record-constructor-descriptor
|
record-constructor-descriptor
|
||||||
record-constructor
|
record-constructor
|
||||||
(rename-out [record-constructor r6rs:record-constructor])
|
(rename-out [record-constructor r6rs:record-constructor])
|
||||||
|
record-predicate
|
||||||
|
record-accessor
|
||||||
|
record-mutator
|
||||||
record-constructor-descriptor?
|
record-constructor-descriptor?
|
||||||
syntax-violation
|
syntax-violation
|
||||||
port-position
|
port-position
|
||||||
|
@ -372,6 +380,11 @@
|
||||||
[(_ else) #t]
|
[(_ else) #t]
|
||||||
[(_ e) e]))
|
[(_ e) e]))
|
||||||
|
|
||||||
|
(define s:dynamic-wind
|
||||||
|
(case-lambda
|
||||||
|
[(pre thunk post) (dynamic-wind pre thunk post)]
|
||||||
|
[(critical? pre thunk post) (dynamic-wind pre thunk post)]))
|
||||||
|
|
||||||
(begin-for-syntax
|
(begin-for-syntax
|
||||||
(define-syntax-rule (with-implicit (tid id ...) body ...)
|
(define-syntax-rule (with-implicit (tid id ...) body ...)
|
||||||
(with-syntax ([id (datum->syntax (syntax tid) 'id)] ...)
|
(with-syntax ([id (datum->syntax (syntax tid) 'id)] ...)
|
||||||
|
|
|
@ -32,8 +32,7 @@
|
||||||
[s:define define-who]
|
[s:define define-who]
|
||||||
[gen-let-values let-values]
|
[gen-let-values let-values]
|
||||||
[s:module module]
|
[s:module module]
|
||||||
[s:parameterize parameterize]
|
[s:parameterize parameterize])
|
||||||
[s:dynamic-wind dynamic-wind])
|
|
||||||
set-who!
|
set-who!
|
||||||
import
|
import
|
||||||
include
|
include
|
||||||
|
@ -67,9 +66,6 @@
|
||||||
with-values
|
with-values
|
||||||
make-record-type
|
make-record-type
|
||||||
type-descriptor
|
type-descriptor
|
||||||
record-predicate
|
|
||||||
record-accessor
|
|
||||||
record-mutator
|
|
||||||
csv7:record-field-accessor
|
csv7:record-field-accessor
|
||||||
csv7:record-field-mutator
|
csv7:record-field-mutator
|
||||||
csv7:record-field-mutable?
|
csv7:record-field-mutable?
|
||||||
|
@ -586,11 +582,6 @@
|
||||||
(lambda lhs (values . flat-lhs)))])]))])
|
(lambda lhs (values . flat-lhs)))])]))])
|
||||||
#'(let-values ([lhs rhs] ...) body ...))]))
|
#'(let-values ([lhs rhs] ...) body ...))]))
|
||||||
|
|
||||||
(define s:dynamic-wind
|
|
||||||
(case-lambda
|
|
||||||
[(pre thunk post) (dynamic-wind pre thunk post)]
|
|
||||||
[(critical? pre thunk post) (dynamic-wind pre thunk post)]))
|
|
||||||
|
|
||||||
(define-values (prim-flags->bits primvec get-priminfo)
|
(define-values (prim-flags->bits primvec get-priminfo)
|
||||||
(get-primdata $sputprop scheme-dir))
|
(get-primdata $sputprop scheme-dir))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user