move memq and memv back to core

This commit partly reverts c305dba649 and 88fc9a979f, which was
discusssed in #366.

The original discussion was about allowing an extra argument to
`member` to pick the equality predicate. That change is still in place
in the same (private) Racket module.

The `memq` and `memv` functions are in Scheme for Racket CS and back
to being and in C for Racket BC. The old motivation for moving `memv`
and `memq` --- to get them out of C --- is subsumed by the switch to
CS (granting that some C code got added back to BC meanwhile). The
advantage of moving `memq` and `memv` back to the runtime core is that
the compiler can do more with them, at least in CS.

When `memq` and `memv` were moved previously, they lost checking for
cyclic lists. That wasn't discussed and presumably wasn't on purpose;
check is restored here, including for `member`.

There's no significant performance change in CS, except in cases like
`(memq x '(a b c))` that the compiler unpacks into a combination of
`eq?`s. For BC, the C version is a little faster (10-40%, depending on
the length of the list), but still slower than CS (probably because
`pair?` is slower, which due to representation differences).
This commit is contained in:
Matthew Flatt 2021-03-17 12:52:46 -06:00
parent db34c62241
commit d0feb5c75a
18 changed files with 822 additions and 1212 deletions

View File

@ -14,7 +14,7 @@
;; In the Racket source repo, this version should change only when
;; "racket_version.h" changes:
(define version "8.0.0.11")
(define version "8.0.0.12")
(define deps `("racket-lib"
["racket" #:version ,version]))

View File

@ -328,8 +328,9 @@
(if (eq? memq-name 'member)
(arity-test memq 2 3)
(arity-test memq 2 2))
(err/rt-test (memq 'a 1) exn:application:mismatch?)
(err/rt-test (memq 'a '(1 . 2)) exn:application:mismatch?))
(err/rt-test (memq 'a 1) exn:fail:contract? #rx"not a proper list")
(err/rt-test (memq 'a '(1 . 2)) exn:fail:contract? #rx"not a proper list")
(err/rt-test (memq 'a (read (open-input-string "#0=(1 . #0#)"))) exn:fail:contract? #rx"not a proper list"))
(test-mem memq 'memq)
(test-mem memv 'memv)

View File

@ -1,57 +1,38 @@
(module member '#%kernel
(#%require "cond.rkt" "qq-and-or.rkt"
(for-syntax '#%kernel "qq-and-or.rkt"))
(#%provide memq memv member)
(#%require "cond.rkt" "qq-and-or.rkt")
(#%provide member)
;; helper for memq/v/ber error cases
;; helper for member error cases
(define-values (bad-list)
(λ (who orig-l)
(raise-mismatch-error who "not a proper list: " orig-l)))
(define-values (memq memv member)
(let-values ()
;; Create the mem functions
(define-syntaxes (mk mk-member)
(values
(λ (stx)
(define-values (forms) (syntax-e stx))
(define-values (id eq?)
(values (syntax-e (cadr forms))
(syntax-e (caddr forms))))
(datum->syntax
stx
`(let-values ([(,id)
(lambda (v orig-l)
(let loop ([ls orig-l])
(cond
(define-values (member)
(letrec-values ([(member)
(lambda (v orig-l eql?)
(let loop ([ls orig-l] [turtle orig-l])
(cond
[(null? ls) #f]
[(not (pair? ls))
(bad-list 'member orig-l)]
[(eql? v (car ls)) ls]
[else
(let ([ls (cdr ls)])
(cond
[(null? ls) #f]
[(not (pair? ls))
(bad-list ',id orig-l)]
[(,eq? v (car ls)) ls]
[else (loop (cdr ls))])))])
,id)))
;; Create the `member` function that takes an extra argument
;; Uses `mk` to construct the body
(λ (stx)
(define-values (forms) (syntax-e stx))
(define-values (id) (syntax-e (cadr forms)))
(datum->syntax
stx
`(let* ([default (mk member equal?)]
[,id (case-lambda
([v orig-l] (default v orig-l))
([v orig-l eq?]
(if (and (procedure? eq?)
(procedure-arity-includes? eq? 2))
(void)
(raise-argument-error
'member
"(procedure-arity-includes/c 2)"
eq?))
((mk member eq?) v orig-l)))])
,id)))))
(values (mk memq eq?)
(mk memv eqv?)
;; Note that this uses `mk-member`
(mk-member member)))))
[(or (not (pair? ls))
(eq? ls turtle))
(bad-list 'member orig-l)]
[(eql? v (car ls)) ls]
[else (loop (cdr ls) (cdr turtle))]))])))])
(case-lambda
[(v ls) (member v ls equal?)]
[(v ls eql?)
(if (and (procedure? eql?)
(procedure-arity-includes? eql? 2))
(void)
(raise-argument-error
'member
"(procedure-arity-includes/c 2)"
eq?))
(member v ls eql?)]))))

View File

@ -50,6 +50,8 @@ static Scheme_Object *immutablep (int argc, Scheme_Object *argv[]);
static Scheme_Object *length_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *append_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *reverse_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *memv (int argc, Scheme_Object *argv[]);
static Scheme_Object *memq (int argc, Scheme_Object *argv[]);
static Scheme_Object *assv (int argc, Scheme_Object *argv[]);
static Scheme_Object *assq (int argc, Scheme_Object *argv[]);
static Scheme_Object *assoc (int argc, Scheme_Object *argv[]);
@ -345,6 +347,17 @@ scheme_init_list (Scheme_Startup_Env *env)
| SCHEME_PRIM_AD_HOC_OPT);
scheme_addto_prim_instance ("list-ref",p, env);
scheme_addto_prim_instance ("memq",
scheme_make_immed_prim(memq,
"memq",
2, 2),
env);
scheme_addto_prim_instance ("memv",
scheme_make_immed_prim(memv,
"memv",
2, 2),
env);
scheme_addto_prim_instance ("assq",
scheme_make_immed_prim(assq,
"assq",
@ -1735,6 +1748,39 @@ static void mem_past_end(const char *name, Scheme_Object *s_arg, Scheme_Object *
NULL);
}
#define GEN_MEM(name, scheme_name, comp) \
static Scheme_Object * \
name (int argc, Scheme_Object *argv[]) \
{ \
Scheme_Object *list, *turtle; \
list = turtle = argv[1]; \
while (SCHEME_PAIRP(list)) \
{ \
if (comp (argv[0], SCHEME_CAR (list))) \
{ \
return list; \
} \
list = SCHEME_CDR (list); \
if (SCHEME_PAIRP(list)) { \
if (comp (argv[0], SCHEME_CAR (list))) \
{ \
return list; \
} \
if (SAME_OBJ(list, turtle)) break; \
list = SCHEME_CDR (list); \
turtle = SCHEME_CDR (turtle); \
SCHEME_USE_FUEL(1); \
} \
} \
if (!SCHEME_NULLP(list)) { \
mem_past_end(#scheme_name, argv[0], argv[1]); \
} \
return (scheme_false); \
}
GEN_MEM(memv, memv, scheme_eqv)
GEN_MEM(memq, memq, SAME_OBJ)
static void ass_non_pair(const char *name, Scheme_Object *np, Scheme_Object *s_arg, Scheme_Object *arg)
{
scheme_contract_error(name,

View File

@ -15,7 +15,7 @@
#define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 1501
#define EXPECTED_PRIM_COUNT 1503
#ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP

View File

@ -77,94 +77,43 @@ static const char *startup_source =
"(bad-list$1)"
" (lambda (who_0 orig-l_0) (begin 'bad-list (raise-mismatch-error who_0 \"not a proper list: \" orig-l_0))))"
"(define-values"
"(memq memv member)"
"(let-values()"
"(let-values()"
"(values"
"(let-values(((memq_0)"
"(lambda(v_0 orig-l_0)"
"(begin"
" 'memq"
"((letrec-values(((loop_0)"
"(lambda(ls_0)"
"(begin"
" 'loop"
"(if(null? ls_0)"
"(let-values() #f)"
"(if(not(pair? ls_0))"
"(let-values()(bad-list$1 'memq orig-l_0))"
"(if(eq? v_0(car ls_0))"
"(let-values() ls_0)"
"(let-values()(loop_0(cdr ls_0))))))))))"
" loop_0)"
" orig-l_0)))))"
" memq_0)"
"(let-values(((memv_0)"
"(lambda(v_0 orig-l_0)"
"(begin"
" 'memv"
"((letrec-values(((loop_0)"
"(lambda(ls_0)"
"(begin"
" 'loop"
"(if(null? ls_0)"
"(let-values() #f)"
"(if(not(pair? ls_0))"
"(let-values()(bad-list$1 'memv orig-l_0))"
"(if(eqv? v_0(car ls_0))"
"(let-values() ls_0)"
"(let-values()(loop_0(cdr ls_0))))))))))"
" loop_0)"
" orig-l_0)))))"
" memv_0)"
"(let-values(((default_0)"
"(let-values(((member_0)"
"(lambda(v_0 orig-l_0)"
"(member)"
"(letrec-values(((member_0)"
"(lambda(v_0 orig-l_0 eql?_0)"
"(begin"
" 'member"
"((letrec-values(((loop_0)"
"(lambda(ls_0)"
"(lambda(ls_0 turtle_0)"
"(begin"
" 'loop"
"(if(null? ls_0)"
"(let-values() #f)"
"(if(not(pair? ls_0))"
"(let-values()(bad-list$1 'member orig-l_0))"
"(if(equal? v_0(car ls_0))"
"(if(eql?_0 v_0(car ls_0))"
"(let-values() ls_0)"
"(let-values()(loop_0(cdr ls_0))))))))))"
" loop_0)"
" orig-l_0)))))"
" member_0)))"
"(let-values(((member_0)"
"(case-lambda"
"((v_0 orig-l_0)(begin 'member(default_0 v_0 orig-l_0)))"
"((v_0 orig-l_0 eq?_0)"
"(begin"
"(if(if(procedure? eq?_0)(procedure-arity-includes? eq?_0 2) #f)"
"(void)"
" (raise-argument-error 'member \"(procedure-arity-includes/c 2)\" eq?_0))"
"((let-values(((member_0)"
"(lambda(v_1 orig-l_1)"
"(begin"
" 'member"
"((letrec-values(((loop_0)"
"(lambda(ls_0)"
"(begin"
" 'loop"
"(if(null? ls_0)"
"(let-values()"
"(let-values(((ls_1)(cdr ls_0)))"
"(if(null? ls_1)"
"(let-values() #f)"
"(if(not(pair? ls_0))"
"(let-values()(bad-list$1 'member orig-l_1))"
"(if(eq?_0 v_1(car ls_0))"
"(let-values() ls_0)"
"(let-values()(loop_0(cdr ls_0))))))))))"
"(if(let-values(((or-part_0)(not(pair? ls_1))))"
"(if or-part_0 or-part_0(eq? ls_1 turtle_0)))"
"(let-values()(bad-list$1 'member orig-l_0))"
"(if(eql?_0 v_0(car ls_1))"
"(let-values() ls_1)"
"(let-values()"
"(loop_0(cdr ls_1)(cdr turtle_0)))))))))))))))"
" loop_0)"
" orig-l_1)))))"
" member_0)"
" v_0"
" orig-l_0))))))"
" member_0))))))"
" orig-l_0"
" orig-l_0)))))"
"(case-lambda"
"((v_0 ls_0)(begin(member_0 v_0 ls_0 equal?)))"
"((v_0 ls_0 eql?_0)"
"(begin"
"(if(if(procedure? eql?_0)(procedure-arity-includes? eql?_0 2) #f)"
"(void)"
" (raise-argument-error 'member \"(procedure-arity-includes/c 2)\" eq?))"
"(member_0 v_0 ls_0 eql?_0))))))"
"(define-values(current-parameterization)(lambda()(begin(continuation-mark-set-first #f parameterization-key))))"
"(define-values"
"(call-with-parameterization)"
@ -556,6 +505,15 @@ static const char *startup_source =
"(if(let-values(((or-part_0)(bytes? s_0)))(if or-part_0 or-part_0(string? s_0)))"
"(void)"
" (let-values () (raise-argument-error 'path-list-string->path-list \"(or/c bytes? string?)\" s_0)))"
" (if (regexp-match? '#rx#\"\\0\" s_0)"
"(let-values()"
" (let-values (((label_0) (if (bytes? s_0) \"byte string\" \"string\")))"
"(raise-arguments-error"
" 'path-list-string->path-list"
" (format \"given ~a contains a nul character\" label_0)"
" label_0"
" s_0)))"
"(void))"
"(if(if(list? default_0)"
"(andmap"
"(lambda(p_0)(let-values(((or-part_0)(eq? p_0 'same)))(if or-part_0 or-part_0 path?)))"
@ -620,7 +578,7 @@ static const char *startup_source =
"(if(if(relative-path? program_0)"
"(let-values(((base_0 name_0 dir?_0)(split-path program_0)))(eq? base_0 'relative))"
" #f)"
" (let-values (((paths-str_0) (environment-variables-ref (current-environment-variables) #\"PATH\"))"
" (let-values (((paths-bstr_0) (environment-variables-ref (current-environment-variables) #\"PATH\"))"
"((win-add_0)"
"(lambda(s_0)"
" (begin 'win-add (if (eq? (system-type) 'windows) (cons (bytes->path #\".\") s_0) s_0)))))"
@ -634,8 +592,7 @@ static const char *startup_source =
"(let-values(((name_0)(build-path base_0 program_0)))"
"(if(file-exists? name_0)(found-exec_0 name_0)(loop_0(cdr paths_0))))))))))"
" loop_0)"
"(win-add_0"
"(if paths-str_0(path-list-string->path-list(bytes->string/locale paths-str_0 '#\\?) null) null))))"
"(win-add_0(if paths-bstr_0(path-list-string->path-list paths-bstr_0 null) null))))"
"(let-values(((p_0)(path->complete-path program_0)))(if(file-exists? p_0)(found-exec_0 p_0) #f)))))))"
"((program_0 libpath_0)(find-executable-path program_0 libpath_0 #f))"
"((program_0)(find-executable-path program_0 #f #f))))"

View File

@ -78,8 +78,6 @@
[delete-directory chez:delete-directory]
[filter chez:filter]
[member chez:member]
[memv chez:memv]
[memq chez:memq]
[error chez:error]
[raise chez:raise]
[exit-handler chez:exit-handler]

View File

@ -559,6 +559,8 @@
[mcons (known-procedure/allocates 4)]
[memory-order-acquire (known-procedure/single-valued 1)]
[memory-order-release (known-procedure/single-valued 1)]
[memq (known-procedure/single-valued 4)]
[memv (known-procedure/single-valued 4)]
[min (known-procedure/folding -2)]
[modulo (known-procedure/folding 4)]
[mpair? (known-procedure/pure/folding 2)]

View File

@ -59,7 +59,7 @@
(check who
:test (and (pair? errno)
(exact-integer? (car errno))
(chez:memq (cdr errno) '(posix windows gai)))
(#%memq (cdr errno) '(posix windows gai)))
:contract "(cons/c exact-integer? (or/c 'posix 'windows 'gai))"
errno))

View File

@ -110,6 +110,8 @@
" index: ~s\n"
" in: ~s")
irritants)]
[(or (eq? who 'memq) (eq? who 'memv))
(values "not a proper list: ~s" irritants)]
[(equal? str "~s is not a valid index for ~s")
(cond
[(exact-nonnegative-integer? (car irritants))

View File

@ -24,7 +24,7 @@
(raise-arguments-error 'prop:cpointer
"index is out of range"
"index" v))
(unless (chez:memv v (list-ref info 5))
(unless (#%memv v (list-ref info 5))
(raise-arguments-error 'prop:cpointer
"index does not refer to an immutable field"
"index" v))
@ -1485,9 +1485,9 @@
(make-cpointer/cell (addr->vector a) #f))
(define (malloc-mode? v)
(chez:memq v '(raw atomic nonatomic tagged
atomic-interior interior
stubborn uncollectable eternal)))
(#%memq v '(raw atomic nonatomic tagged
atomic-interior interior
stubborn uncollectable eternal)))
(define (end-stubborn-change p)
(raise-unsupported-error 'end-stubborn-change))
@ -1609,7 +1609,7 @@
;; An 'array rep is compound, but should be
;; passed as a pointer, so only pass 'struct and
;; 'union "by value":
(chez:memq (ctype-host-rep type) '(struct union)))]
(#%memq (ctype-host-rep type) '(struct union)))]
[array-rep-to-pointer-rep (lambda (host-rep)
(if (eq? host-rep 'array)
'void*
@ -2120,7 +2120,7 @@
;; function is called with interrupts disabled
(define get-errno
(cond
[(not (chez:memq (machine-type) '(a6nt ta6nt i3nt ti3nt)))
[(not (#%memq (machine-type) '(a6nt ta6nt i3nt ti3nt)))
(foreign-procedure "(cs)s_errno" () int)]
[else
;; On Windows, `errno` could be a different one from

View File

@ -9,7 +9,7 @@
"field index >= initialized-field count for structure type"
"field index" v
"initialized-field count" (list-ref info 1)))
(unless (chez:memv v (list-ref info 5))
(unless (#%memv v (list-ref info 5))
(raise-arguments-error 'guard-for-prop:object-name "field index not declared immutable"
"field index" v))
(+ v (let ([p (list-ref info 6)])

View File

@ -329,7 +329,7 @@
"index for procedure >= initialized-field count"
"index" v
"field count" init-count))
(unless (or (eq? v proc-spec) (chez:memv v immutables))
(unless (or (eq? v proc-spec) (#%memv v immutables))
(raise-arguments-error who
"field is not specified as immutable for a prop:procedure index"
"index" v))]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,113 +12,6 @@
(define fixnum-for-every-system?
(lambda (v_0)
(if (fixnum? v_0) (if (fx>= v_0 -536870912) (fx<= v_0 536870911) #f) #f)))
(define bad-list$1
(|#%name|
bad-list
(lambda (who_0 orig-l_0)
(begin (raise-mismatch-error who_0 "not a proper list: " orig-l_0)))))
(define memq
(|#%name|
memq
(lambda (v_0 orig-l_0)
(begin
(letrec*
((loop_0
(|#%name|
loop
(lambda (ls_0)
(begin
(if (null? ls_0)
#f
(if (not (pair? ls_0))
(begin-unsafe
(raise-mismatch-error
'memq
"not a proper list: "
orig-l_0))
(if (eq? v_0 (car ls_0)) ls_0 (loop_0 (cdr ls_0))))))))))
(loop_0 orig-l_0))))))
(define memv
(|#%name|
memv
(lambda (v_0 orig-l_0)
(begin
(letrec*
((loop_0
(|#%name|
loop
(lambda (ls_0)
(begin
(if (null? ls_0)
#f
(if (not (pair? ls_0))
(begin-unsafe
(raise-mismatch-error
'memv
"not a proper list: "
orig-l_0))
(if (eqv? v_0 (car ls_0)) ls_0 (loop_0 (cdr ls_0))))))))))
(loop_0 orig-l_0))))))
(define member
(let ((default_0
(|#%name|
member
(lambda (v_0 orig-l_0)
(begin
(letrec*
((loop_0
(|#%name|
loop
(lambda (ls_0)
(begin
(if (null? ls_0)
#f
(if (not (pair? ls_0))
(begin-unsafe
(raise-mismatch-error
'member
"not a proper list: "
orig-l_0))
(if (equal? v_0 (car ls_0))
ls_0
(loop_0 (cdr ls_0))))))))))
(loop_0 orig-l_0)))))))
(|#%name|
member
(case-lambda
((v_0 orig-l_0) (begin (default_0 v_0 orig-l_0)))
((v_0 orig-l_0 eq?_0)
(begin
(if (if (procedure? eq?_0) (procedure-arity-includes? eq?_0 2) #f)
(void)
(raise-argument-error
'member
"(procedure-arity-includes/c 2)"
eq?_0))
((|#%name|
member
(lambda (v_1 orig-l_1)
(begin
(letrec*
((loop_0
(|#%name|
loop
(lambda (ls_0)
(begin
(if (null? ls_0)
#f
(if (not (pair? ls_0))
(begin-unsafe
(raise-mismatch-error
'member
"not a proper list: "
orig-l_1))
(if (|#%app| eq?_0 v_1 (car ls_0))
ls_0
(loop_0 (cdr ls_0))))))))))
(loop_0 orig-l_1)))))
v_0
orig-l_0)))))))
(define call-with-exception-handler
(lambda (exnh_0 thunk_0)
(begin0
@ -1957,7 +1850,7 @@
(define reannotate/new-srcloc
(lambda (old-term_0 new-term_0 new-srcloc_0)
(datum->syntax #f new-term_0 new-srcloc_0 old-term_0)))
(define finish56
(define finish48
(make-struct-type-install-properties
'(known-constant)
0
@ -1978,7 +1871,7 @@
#f
0
0))
(define effect_2537 (finish56 struct:known-constant))
(define effect_2537 (finish48 struct:known-constant))
(define known-constant
(|#%name|
known-constant
@ -1996,7 +1889,7 @@
(if (impersonator? v)
(known-constant?_2598 (impersonator-val v))
#f))))))
(define finish59
(define finish51
(make-struct-type-install-properties
'(known-consistent)
0
@ -2029,7 +1922,7 @@
#f
0
0))
(define effect_2382 (finish59 struct:known-consistent))
(define effect_2382 (finish51 struct:known-consistent))
(define known-consistent
(|#%name|
known-consistent
@ -2047,7 +1940,7 @@
(if (impersonator? v)
(known-consistent?_3048 (impersonator-val v))
#f))))))
(define finish62
(define finish54
(make-struct-type-install-properties
'(known-authentic)
0
@ -2080,7 +1973,7 @@
#f
0
0))
(define effect_2570 (finish62 struct:known-authentic))
(define effect_2570 (finish54 struct:known-authentic))
(define known-authentic
(|#%name|
known-authentic
@ -2098,7 +1991,7 @@
(if (impersonator? v)
(known-authentic?_3119 (impersonator-val v))
#f))))))
(define finish65
(define finish57
(make-struct-type-install-properties
'(known-copy)
1
@ -2131,7 +2024,7 @@
#f
1
1))
(define effect_2542 (finish65 struct:known-copy))
(define effect_2542 (finish57 struct:known-copy))
(define known-copy
(|#%name|
known-copy
@ -2163,7 +2056,7 @@
s
'known-copy
'id))))))
(define finish69
(define finish61
(make-struct-type-install-properties
'(known-literal)
1
@ -2196,7 +2089,7 @@
#f
1
1))
(define effect_2788 (finish69 struct:known-literal))
(define effect_2788 (finish61 struct:known-literal))
(define known-literal
(|#%name|
known-literal
@ -2230,7 +2123,7 @@
s
'known-literal
'value))))))
(define finish73
(define finish65
(make-struct-type-install-properties
'(known-procedure)
1
@ -2263,7 +2156,7 @@
#f
1
1))
(define effect_2677 (finish73 struct:known-procedure))
(define effect_2677 (finish65 struct:known-procedure))
(define known-procedure
(|#%name|
known-procedure
@ -2299,7 +2192,7 @@
s
'known-procedure
'arity-mask))))))
(define finish77
(define finish69
(make-struct-type-install-properties
'(known-procedure/single-valued)
0
@ -2332,7 +2225,7 @@
#f
0
0))
(define effect_2532 (finish77 struct:known-procedure/single-valued))
(define effect_2532 (finish69 struct:known-procedure/single-valued))
(define known-procedure/single-valued
(|#%name|
known-procedure/single-valued
@ -2355,7 +2248,7 @@
(if (impersonator? v)
(known-procedure/single-valued?_3105 (impersonator-val v))
#f))))))
(define finish80
(define finish72
(make-struct-type-install-properties
'(known-procedure/no-prompt)
0
@ -2388,7 +2281,7 @@
#f
0
0))
(define effect_1771 (finish80 struct:known-procedure/no-prompt))
(define effect_1771 (finish72 struct:known-procedure/no-prompt))
(define known-procedure/no-prompt
(|#%name|
known-procedure/no-prompt
@ -2411,7 +2304,7 @@
(if (impersonator? v)
(known-procedure/no-prompt?_2036 (impersonator-val v))
#f))))))
(define finish83
(define finish75
(make-struct-type-install-properties
'(known-procedure/no-prompt/multi)
0
@ -2444,7 +2337,7 @@
#f
0
0))
(define effect_2793 (finish83 struct:known-procedure/no-prompt/multi))
(define effect_2793 (finish75 struct:known-procedure/no-prompt/multi))
(define known-procedure/no-prompt/multi
(|#%name|
known-procedure/no-prompt/multi
@ -2467,7 +2360,7 @@
(if (impersonator? v)
(known-procedure/no-prompt/multi?_2394 (impersonator-val v))
#f))))))
(define finish86
(define finish78
(make-struct-type-install-properties
'(known-procedure/no-return)
0
@ -2500,7 +2393,7 @@
#f
0
0))
(define effect_2517 (finish86 struct:known-procedure/no-return))
(define effect_2517 (finish78 struct:known-procedure/no-return))
(define known-procedure/no-return
(|#%name|
known-procedure/no-return
@ -2523,7 +2416,7 @@
(if (impersonator? v)
(known-procedure/no-return?_1763 (impersonator-val v))
#f))))))
(define finish89
(define finish81
(make-struct-type-install-properties
'(known-procedure/can-inline)
1
@ -2556,7 +2449,7 @@
#f
1
1))
(define effect_2308 (finish89 struct:known-procedure/can-inline))
(define effect_2308 (finish81 struct:known-procedure/can-inline))
(define known-procedure/can-inline
(|#%name|
known-procedure/can-inline
@ -2597,7 +2490,7 @@
s
'known-procedure/can-inline
'expr))))))
(define finish93
(define finish85
(make-struct-type-install-properties
'(known-procedure/can-inline/need-imports)
1
@ -2630,7 +2523,7 @@
#f
1
1))
(define effect_2618 (finish93 struct:known-procedure/can-inline/need-imports))
(define effect_2618 (finish85 struct:known-procedure/can-inline/need-imports))
(define known-procedure/can-inline/need-imports
(|#%name|
known-procedure/can-inline/need-imports
@ -2671,7 +2564,7 @@
s
'known-procedure/can-inline/need-imports
'needed))))))
(define finish97
(define finish89
(make-struct-type-install-properties
'(known-procedure/folding)
0
@ -2704,7 +2597,7 @@
#f
0
0))
(define effect_2478 (finish97 struct:known-procedure/folding))
(define effect_2478 (finish89 struct:known-procedure/folding))
(define known-procedure/folding
(|#%name|
known-procedure/folding
@ -2727,7 +2620,7 @@
(if (impersonator? v)
(known-procedure/folding?_2882 (impersonator-val v))
#f))))))
(define finish100
(define finish92
(make-struct-type-install-properties
'(known-procedure/folding/limited)
1
@ -2760,7 +2653,7 @@
#f
1
1))
(define effect_2518 (finish100 struct:known-procedure/folding/limited))
(define effect_2518 (finish92 struct:known-procedure/folding/limited))
(define known-procedure/folding/limited
(|#%name|
known-procedure/folding/limited
@ -2801,7 +2694,7 @@
s
'known-procedure/folding/limited
'kind))))))
(define finish104
(define finish96
(make-struct-type-install-properties
'(known-procedure/succeeds)
0
@ -2834,7 +2727,7 @@
#f
0
0))
(define effect_2467 (finish104 struct:known-procedure/succeeds))
(define effect_2467 (finish96 struct:known-procedure/succeeds))
(define known-procedure/succeeds
(|#%name|
known-procedure/succeeds
@ -2857,7 +2750,7 @@
(if (impersonator? v)
(known-procedure/succeeds?_3041 (impersonator-val v))
#f))))))
(define finish107
(define finish99
(make-struct-type-install-properties
'(known-procedure/allocates)
0
@ -2890,7 +2783,7 @@
#f
0
0))
(define effect_2336 (finish107 struct:known-procedure/allocates))
(define effect_2336 (finish99 struct:known-procedure/allocates))
(define known-procedure/allocates
(|#%name|
known-procedure/allocates
@ -2913,7 +2806,7 @@
(if (impersonator? v)
(known-procedure/allocates?_2244 (impersonator-val v))
#f))))))
(define finish110
(define finish102
(make-struct-type-install-properties
'(known-procedure/pure)
0
@ -2946,7 +2839,7 @@
#f
0
0))
(define effect_3058 (finish110 struct:known-procedure/pure))
(define effect_3058 (finish102 struct:known-procedure/pure))
(define known-procedure/pure
(|#%name|
known-procedure/pure
@ -2966,7 +2859,7 @@
(if (impersonator? v)
(known-procedure/pure?_2240 (impersonator-val v))
#f))))))
(define finish113
(define finish105
(make-struct-type-install-properties
'(known-procedure/pure/folding)
0
@ -2999,7 +2892,7 @@
#f
0
0))
(define effect_2264 (finish113 struct:known-procedure/pure/folding))
(define effect_2264 (finish105 struct:known-procedure/pure/folding))
(define known-procedure/pure/folding
(|#%name|
known-procedure/pure/folding
@ -3022,7 +2915,7 @@
(if (impersonator? v)
(known-procedure/pure/folding?_2719 (impersonator-val v))
#f))))))
(define finish116
(define finish108
(make-struct-type-install-properties
'(known-procedure/pure/folding-unsafe)
1
@ -3055,7 +2948,7 @@
#f
1
1))
(define effect_2657 (finish116 struct:known-procedure/pure/folding-unsafe))
(define effect_2657 (finish108 struct:known-procedure/pure/folding-unsafe))
(define known-procedure/pure/folding-unsafe
(|#%name|
known-procedure/pure/folding-unsafe
@ -3096,7 +2989,7 @@
s
'known-procedure/pure/folding-unsafe
'safe))))))
(define finish120
(define finish112
(make-struct-type-install-properties
'(known-procedure/has-unsafe)
1
@ -3129,7 +3022,7 @@
#f
1
1))
(define effect_1752 (finish120 struct:known-procedure/has-unsafe))
(define effect_1752 (finish112 struct:known-procedure/has-unsafe))
(define known-procedure/has-unsafe
(|#%name|
known-procedure/has-unsafe
@ -3170,7 +3063,7 @@
s
'known-procedure/has-unsafe
'alternate))))))
(define finish124
(define finish116
(make-struct-type-install-properties
'(known-procedure/has-unsafe/folding)
0
@ -3203,7 +3096,7 @@
#f
0
0))
(define effect_2489 (finish124 struct:known-procedure/has-unsafe/folding))
(define effect_2489 (finish116 struct:known-procedure/has-unsafe/folding))
(define known-procedure/has-unsafe/folding
(|#%name|
known-procedure/has-unsafe/folding
@ -3226,7 +3119,7 @@
(if (impersonator? v)
(known-procedure/has-unsafe/folding?_2169 (impersonator-val v))
#f))))))
(define finish127
(define finish119
(make-struct-type-install-properties
'(known-procedure/has-unsafe/folding/limited)
1
@ -3260,7 +3153,7 @@
1
1))
(define effect_2512
(finish127 struct:known-procedure/has-unsafe/folding/limited))
(finish119 struct:known-procedure/has-unsafe/folding/limited))
(define known-procedure/has-unsafe/folding/limited
(|#%name|
known-procedure/has-unsafe/folding/limited
@ -3302,7 +3195,7 @@
s
'known-procedure/has-unsafe/folding/limited
'kind))))))
(define finish131
(define finish123
(make-struct-type-install-properties
'(known-struct-type)
4
@ -3335,7 +3228,7 @@
#f
4
15))
(define effect_2667 (finish131 struct:known-struct-type))
(define effect_2667 (finish123 struct:known-struct-type))
(define known-struct-type
(|#%name|
known-struct-type
@ -3425,7 +3318,7 @@
s
'known-struct-type
'sealed?))))))
(define finish138
(define finish130
(make-struct-type-install-properties
'(known-constructor)
1
@ -3458,7 +3351,7 @@
#f
1
1))
(define effect_1913 (finish138 struct:known-constructor))
(define effect_1913 (finish130 struct:known-constructor))
(define known-constructor
(|#%name|
known-constructor
@ -3494,7 +3387,7 @@
s
'known-constructor
'type))))))
(define finish142
(define finish134
(make-struct-type-install-properties
'(known-predicate)
1
@ -3527,7 +3420,7 @@
#f
1
1))
(define effect_2144 (finish142 struct:known-predicate))
(define effect_2144 (finish134 struct:known-predicate))
(define known-predicate
(|#%name|
known-predicate
@ -3561,7 +3454,7 @@
s
'known-predicate
'type))))))
(define finish146
(define finish138
(make-struct-type-install-properties
'(known-accessor)
1
@ -3594,7 +3487,7 @@
#f
1
1))
(define effect_2905 (finish146 struct:known-accessor))
(define effect_2905 (finish138 struct:known-accessor))
(define known-accessor
(|#%name|
known-accessor
@ -3628,7 +3521,7 @@
s
'known-accessor
'type))))))
(define finish150
(define finish142
(make-struct-type-install-properties
'(known-mutator)
1
@ -3661,7 +3554,7 @@
#f
1
1))
(define effect_2521 (finish150 struct:known-mutator))
(define effect_2521 (finish142 struct:known-mutator))
(define known-mutator
(|#%name|
known-mutator
@ -3695,7 +3588,7 @@
s
'known-mutator
'type))))))
(define finish154
(define finish146
(make-struct-type-install-properties
'(known-struct-constructor)
1
@ -3728,7 +3621,7 @@
#f
1
1))
(define effect_3238 (finish154 struct:known-struct-constructor))
(define effect_3238 (finish146 struct:known-struct-constructor))
(define known-struct-constructor
(|#%name|
known-struct-constructor
@ -3769,7 +3662,7 @@
s
'known-struct-constructor
'type-id))))))
(define finish158
(define finish150
(make-struct-type-install-properties
'(known-struct-predicate)
3
@ -3802,7 +3695,7 @@
#f
3
7))
(define effect_2384 (finish158 struct:known-struct-predicate))
(define effect_2384 (finish150 struct:known-struct-predicate))
(define known-struct-predicate
(|#%name|
known-struct-predicate
@ -3876,7 +3769,7 @@
s
'known-struct-predicate
'sealed?))))))
(define finish164
(define finish156
(make-struct-type-install-properties
'(known-field-accessor)
4
@ -3909,7 +3802,7 @@
#f
4
15))
(define effect_2259 (finish164 struct:known-field-accessor))
(define effect_2259 (finish156 struct:known-field-accessor))
(define known-field-accessor
(|#%name|
known-field-accessor
@ -4001,7 +3894,7 @@
s
'known-field-accessor
'known-immutable?))))))
(define finish171
(define finish163
(make-struct-type-install-properties
'(known-field-mutator)
3
@ -4034,7 +3927,7 @@
#f
3
7))
(define effect_2603 (finish171 struct:known-field-mutator))
(define effect_2603 (finish163 struct:known-field-mutator))
(define known-field-mutator
(|#%name|
known-field-mutator
@ -4108,7 +4001,7 @@
s
'known-field-mutator
'pos))))))
(define finish177
(define finish169
(make-struct-type-install-properties
'(known-struct-constructor/need-imports)
1
@ -4141,7 +4034,7 @@
#f
1
1))
(define effect_2146 (finish177 struct:known-struct-constructor/need-imports))
(define effect_2146 (finish169 struct:known-struct-constructor/need-imports))
(define known-struct-constructor/need-imports
(|#%name|
known-struct-constructor/need-imports
@ -4182,7 +4075,7 @@
s
'known-struct-constructor/need-imports
'needed))))))
(define finish181
(define finish173
(make-struct-type-install-properties
'(known-struct-predicate/need-imports)
1
@ -4215,7 +4108,7 @@
#f
1
1))
(define effect_3156 (finish181 struct:known-struct-predicate/need-imports))
(define effect_3156 (finish173 struct:known-struct-predicate/need-imports))
(define known-struct-predicate/need-imports
(|#%name|
known-struct-predicate/need-imports
@ -4256,7 +4149,7 @@
s
'known-struct-predicate/need-imports
'needed))))))
(define finish185
(define finish177
(make-struct-type-install-properties
'(known-field-accessor/need-imports)
1
@ -4289,7 +4182,7 @@
#f
1
1))
(define effect_2513 (finish185 struct:known-field-accessor/need-imports))
(define effect_2513 (finish177 struct:known-field-accessor/need-imports))
(define known-field-accessor/need-imports
(|#%name|
known-field-accessor/need-imports
@ -4330,7 +4223,7 @@
s
'known-field-accessor/need-imports
'needed))))))
(define finish189
(define finish181
(make-struct-type-install-properties
'(known-field-mutator/need-imports)
1
@ -4363,7 +4256,7 @@
#f
1
1))
(define effect_2273 (finish189 struct:known-field-mutator/need-imports))
(define effect_2273 (finish181 struct:known-field-mutator/need-imports))
(define known-field-mutator/need-imports
(|#%name|
known-field-mutator/need-imports
@ -4404,7 +4297,7 @@
s
'known-field-mutator/need-imports
'needed))))))
(define finish193
(define finish185
(make-struct-type-install-properties
'(known-struct-type-property/immediate-guard)
0
@ -4432,7 +4325,7 @@
0
0))
(define effect_2294
(finish193 struct:known-struct-type-property/immediate-guard))
(finish185 struct:known-struct-type-property/immediate-guard))
(define known-struct-type-property/immediate-guard
(|#%name|
known-struct-type-property/immediate-guard
@ -4473,7 +4366,7 @@
(let ((app_0
(if (string? prefix_0) prefix_0 (symbol->string prefix_0))))
(string-append app_0 (number->string (unbox b_0)))))))))
(define finish197
(define finish189
(make-struct-type-install-properties
'(import)
4
@ -4494,7 +4387,7 @@
#f
4
0))
(define effect_2192 (finish197 struct:import))
(define effect_2192 (finish189 struct:import))
(define import1.1
(|#%name|
import
@ -4560,7 +4453,7 @@
s
'import
'ext-id))))))
(define finish204
(define finish196
(make-struct-type-install-properties
'(import-group)
6
@ -4581,7 +4474,7 @@
#f
6
60))
(define effect_2739 (finish204 struct:import-group))
(define effect_2739 (finish196 struct:import-group))
(define import-group2.1
(|#%name|
import-group
@ -4930,7 +4823,7 @@
(|#%app| inc-index!_0)
(|#%app| add-group!_0 grp_0)
grp_0))))))
(define finish218
(define finish210
(make-struct-type-install-properties
'(export)
2
@ -4951,7 +4844,7 @@
#f
2
0))
(define effect_2782 (finish218 struct:export))
(define effect_2782 (finish210 struct:export))
(define export1.1
(|#%name|
export
@ -4991,7 +4884,7 @@
s
'export
'ext-id))))))
(define finish223
(define finish215
(make-struct-type-install-properties
'(too-early)
2
@ -5012,7 +4905,7 @@
#f
2
0))
(define effect_2833 (finish223 struct:too-early))
(define effect_2833 (finish215 struct:too-early))
(define too-early1.1
(|#%name|
too-early
@ -7300,7 +7193,7 @@
(case-lambda
((k_0 im_0) k_0)
(args (raise-binding-result-arity-error 2 args))))))
(define finish311
(define finish303
(make-struct-type-install-properties
'(struct-type-info)
11
@ -7321,7 +7214,7 @@
#f
11
0))
(define effect_2037 (finish311 struct:struct-type-info))
(define effect_2037 (finish303 struct:struct-type-info))
(define struct-type-info1.1
(|#%name|
struct-type-info
@ -30749,7 +30642,7 @@
(schemify-body_0 (cdr l_0) wcm-state_2))))))))))
(schemify_0 v_1 wcm-state_1)))))))
(schemify/knowns_0 knowns_0 8 wcm-state_0 v_0))))
(define finish1676
(define finish1668
(make-struct-type-install-properties
'(convert-mode)
4
@ -30770,7 +30663,7 @@
#f
4
0))
(define effect_2443 (finish1676 struct:convert-mode))
(define effect_2443 (finish1668 struct:convert-mode))
(define convert-mode1.1
(|#%name|
convert-mode
@ -39893,7 +39786,7 @@
(if (|#%app| need-exposed?_0 q_0)
#t
(if (extflonum? q_0) #t #f))))))))))))))
(define finish2146
(define finish2138
(make-struct-type-install-properties
'(to-unfasl)
3
@ -39914,7 +39807,7 @@
#f
3
0))
(define effect_2898 (finish2146 struct:to-unfasl))
(define effect_2898 (finish2138 struct:to-unfasl))
(define to-unfasl1.1
(|#%name|
to-unfasl
@ -40044,7 +39937,7 @@
'write
"cannot marshal value that is embedded in compiled code\n value: ~v"
v_0)))
(define finish2154
(define finish2146
(make-struct-type-install-properties
'(node)
5
@ -40065,7 +39958,7 @@
#f
5
0))
(define effect_2547 (finish2154 struct:node))
(define effect_2547 (finish2146 struct:node))
(define node1.1
(|#%name|
node
@ -40366,7 +40259,7 @@
app_2
(stack-set stack_1 pos_1 (car vals_1))))))))))))
(loop_0 pos_0 vals_0 count_0 stack_0))))))
(define finish2200
(define finish2192
(make-struct-type-install-properties
'(stack-info)
5
@ -40387,7 +40280,7 @@
#f
5
28))
(define effect_2334 (finish2200 struct:stack-info))
(define effect_2334 (finish2192 struct:stack-info))
(define stack-info4.1
(|#%name|
stack-info
@ -40724,7 +40617,7 @@
(define stack-info-non-tail!
(lambda (stk-i_0 stack-depth_0)
(set-stack-info-non-tail-call-later?! stk-i_0 #t)))
(define finish2214
(define finish2206
(make-struct-type-install-properties
'(indirect)
2
@ -40745,7 +40638,7 @@
#f
2
0))
(define effect_2125 (finish2214 struct:indirect))
(define effect_2125 (finish2206 struct:indirect))
(define indirect1.1
(|#%name|
indirect
@ -40792,7 +40685,7 @@
s
'indirect
'element))))))
(define finish2219
(define finish2211
(make-struct-type-install-properties
'(boxed)
1
@ -40813,7 +40706,7 @@
#f
1
0))
(define effect_2970 (finish2219 struct:boxed))
(define effect_2970 (finish2211 struct:boxed))
(define boxed2.1
(|#%name|
boxed
@ -40837,7 +40730,7 @@
(boxed-pos_2515 s)
($value
(impersonate-ref boxed-pos_2515 struct:boxed 0 s 'boxed 'pos))))))
(define finish2223
(define finish2215
(make-struct-type-install-properties
'(boxed/check)
0
@ -40858,7 +40751,7 @@
#f
0
0))
(define effect_2937 (finish2223 struct:boxed/check))
(define effect_2937 (finish2215 struct:boxed/check))
(define boxed/check3.1
(|#%name|
boxed/check

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,7 @@
#define MZSCHEME_VERSION_X 8
#define MZSCHEME_VERSION_Y 0
#define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 11
#define MZSCHEME_VERSION_W 12
/* A level of indirection makes `#` work as needed: */
#define AS_a_STR_HELPER(x) #x