add `unsafe-cons-pair'

Also, make `list?' more optimistic about checking is  the "is list?"
flag on a pair.
This commit is contained in:
Matthew Flatt 2012-11-13 10:23:04 -07:00
parent 9e3f9fbe3e
commit 5400b41bce
19 changed files with 241 additions and 142 deletions

View File

@ -192,6 +192,12 @@ Unsafe variants of @racket[car], @racket[cdr], @racket[mcar],
@racket[mcdr], @racket[set-mcar!], and @racket[set-mcdr!].}
@defproc[(unsafe-cons [v any/c] [rest list?]) (and/c pair? list?)]{
Unsafe variant of @racket[cons] that produces a pair that claims to be
a list---without checking whether @racket[rest] is a list.}
@deftogether[(
@defproc[(unsafe-list-ref [lst pair?] [pos (and/c exact-nonnegative-integer? fixnum?)]) any/c]
@defproc[(unsafe-list-tail [lst any/c] [pos (and/c exact-nonnegative-integer? fixnum?)]) any/c]

View File

@ -1,3 +1,6 @@
Version 5.3.1.6
racket/unsafe/ops: added unsafe-cons-list
Version 5.3.1.5
racket/gui: added get-current-mouse-state

View File

@ -271,6 +271,7 @@ EXPORTS
scheme_prim_is_method
scheme_make_pair
scheme_make_mutable_pair
scheme_make_list_pair
scheme_make_raw_pair
scheme_make_byte_string
scheme_make_sized_byte_string

View File

@ -286,6 +286,7 @@ EXPORTS
scheme_prim_is_method
scheme_make_pair
scheme_make_mutable_pair
scheme_make_list_pair
scheme_make_raw_pair
scheme_make_byte_string
scheme_make_sized_byte_string

View File

@ -288,6 +288,7 @@ scheme_make_closed_prim_w_everything
scheme_prim_is_method
scheme_make_pair
scheme_make_mutable_pair
scheme_make_list_pair
scheme_make_raw_pair
scheme_make_byte_string
scheme_make_sized_byte_string

View File

@ -294,6 +294,7 @@ scheme_make_closed_prim_w_everything
scheme_prim_is_method
scheme_make_pair
scheme_make_mutable_pair
scheme_make_list_pair
scheme_make_raw_pair
scheme_make_byte_string
scheme_make_sized_byte_string

View File

@ -1,5 +1,5 @@
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,53,84,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,54,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14,0,
21,0,28,0,33,0,37,0,40,0,45,0,58,0,62,0,67,0,74,0,83,
0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149,0,
@ -27,32 +27,32 @@
248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22,89,
2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81,248,
22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,
81,194,248,22,163,17,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248,
22,163,17,199,249,22,79,2,6,248,22,164,17,201,11,18,100,10,13,16,6,
81,194,248,22,164,17,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248,
22,164,17,199,249,22,79,2,6,248,22,165,17,201,11,18,100,10,13,16,6,
36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,
20,3,1,8,101,110,118,49,55,51,51,57,16,4,11,11,2,21,3,1,8,
101,110,118,49,55,51,52,48,27,248,22,81,248,22,163,4,196,28,248,22,87,
193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,163,17,193,249,
193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,164,17,193,249,
22,156,4,80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,
2,23,248,22,163,17,201,251,22,89,2,18,2,23,2,23,249,22,79,2,7,
248,22,164,17,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,
2,23,248,22,164,17,201,251,22,89,2,18,2,23,2,23,249,22,79,2,7,
248,22,165,17,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,
8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,51,
52,50,16,4,11,11,2,21,3,1,8,101,110,118,49,55,51,52,51,248,22,
163,4,193,27,248,22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,
164,17,195,27,248,22,81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,
165,17,195,27,248,22,81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,
36,28,248,22,64,248,22,157,4,248,22,80,23,198,2,27,249,22,2,32,0,
88,163,8,36,37,43,11,9,222,33,40,248,22,163,4,248,22,104,23,200,2,
250,22,89,2,24,248,22,89,249,22,89,248,22,89,248,22,163,17,23,204,2,
250,22,89,2,24,248,22,89,249,22,89,248,22,89,248,22,164,17,23,204,2,
250,22,90,2,25,249,22,2,22,80,23,204,2,248,22,106,23,206,2,249,22,
79,248,22,163,17,23,202,1,249,22,2,22,104,23,200,1,250,22,90,2,22,
79,248,22,164,17,23,202,1,249,22,2,22,104,23,200,1,250,22,90,2,22,
249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,41,248,22,163,4,248,
22,163,17,201,248,22,164,17,198,27,248,22,163,4,194,249,22,79,248,22,89,
248,22,80,196,248,22,164,17,195,27,248,22,81,248,22,163,4,23,197,1,249,
22,164,17,201,248,22,165,17,198,27,248,22,163,4,194,249,22,79,248,22,89,
248,22,80,196,248,22,165,17,195,27,248,22,81,248,22,163,4,23,197,1,249,
22,156,4,80,158,39,36,250,22,90,2,24,249,22,2,32,0,88,163,8,36,
37,47,11,9,222,33,43,248,22,163,4,248,22,80,201,248,22,164,17,198,27,
37,47,11,9,222,33,43,248,22,163,4,248,22,80,201,248,22,165,17,198,27,
248,22,81,248,22,163,4,196,27,248,22,163,4,248,22,80,195,249,22,156,4,
80,158,40,36,28,248,22,87,195,250,22,90,2,22,9,248,22,81,199,250,22,
89,2,10,248,22,89,248,22,80,199,250,22,90,2,5,248,22,164,17,201,248,
89,2,10,248,22,89,248,22,80,199,250,22,90,2,5,248,22,165,17,201,248,
22,81,202,27,248,22,81,248,22,163,4,23,197,1,27,249,22,1,22,93,249,
22,2,22,163,4,248,22,163,4,248,22,80,199,248,22,183,4,249,22,156,4,
80,158,41,36,251,22,89,1,22,119,105,116,104,45,99,111,110,116,105,110,117,
@ -65,15 +65,15 @@
9,62,61,62,248,22,157,4,248,22,104,196,250,22,89,2,22,248,22,89,249,
22,89,21,93,2,27,248,22,80,199,250,22,90,2,11,249,22,89,2,27,249,
22,89,248,22,113,203,2,27,248,22,81,202,251,22,89,2,18,28,249,22,152,
9,248,22,157,4,248,22,80,200,64,101,108,115,101,10,248,22,163,17,197,250,
22,90,2,22,9,248,22,164,17,200,249,22,79,2,11,248,22,81,202,99,13,
9,248,22,157,4,248,22,80,200,64,101,108,115,101,10,248,22,164,17,197,250,
22,90,2,22,9,248,22,165,17,200,249,22,79,2,11,248,22,81,202,99,13,
16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,
11,2,20,3,1,8,101,110,118,49,55,51,54,53,16,4,11,11,2,21,3,
1,8,101,110,118,49,55,51,54,54,18,158,94,10,64,118,111,105,100,8,48,
27,248,22,81,248,22,163,4,196,249,22,156,4,80,158,39,36,28,248,22,64,
248,22,157,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,163,17,199,
248,22,104,198,27,248,22,157,4,248,22,163,17,197,250,22,89,2,28,248,22,
89,248,22,80,197,250,22,90,2,25,248,22,164,17,199,248,22,164,17,202,159,
248,22,157,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,164,17,199,
248,22,104,198,27,248,22,157,4,248,22,164,17,197,250,22,89,2,28,248,22,
89,248,22,80,197,250,22,90,2,25,248,22,165,17,199,248,22,165,17,202,159,
36,20,113,159,36,16,1,11,16,0,20,26,149,9,2,1,2,1,2,2,9,
9,11,11,11,10,36,80,158,36,36,20,113,159,36,16,0,16,0,38,39,36,
16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,
@ -100,7 +100,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 2048);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,53,84,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,54,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,126,0,0,0,1,0,0,8,0,21,0,
26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181,0,203,
0,219,0,236,0,2,1,13,1,19,1,28,1,35,1,42,1,54,1,70,1,
@ -343,7 +343,7 @@
115,105,111,110,248,22,191,5,193,28,248,22,88,23,194,2,28,28,249,22,191,
3,38,248,22,92,23,196,2,10,249,22,191,3,39,248,22,92,23,196,2,28,
28,248,22,142,7,248,22,80,23,195,2,10,249,22,152,9,64,114,111,111,116,
248,22,163,17,23,196,2,28,27,248,22,104,194,28,248,22,184,14,23,194,2,
248,22,164,17,23,196,2,28,27,248,22,104,194,28,248,22,184,14,23,194,2,
10,28,248,22,142,7,23,194,2,28,248,22,142,15,23,194,2,10,248,22,143,
15,23,194,1,11,27,248,22,87,248,22,106,195,28,192,192,248,22,186,15,248,
22,113,195,11,11,11,11,250,22,158,2,196,197,249,22,79,197,200,28,28,248,
@ -351,7 +351,7 @@
160,8,27,248,22,147,15,249,22,145,15,248,22,104,23,200,2,23,198,1,28,
248,22,64,248,22,80,23,198,2,86,94,23,196,1,86,94,28,250,22,160,2,
196,11,11,12,250,22,158,2,196,11,9,249,22,164,2,195,88,163,8,36,38,
50,11,9,224,3,2,33,94,27,248,22,67,248,22,163,17,23,199,1,250,22,
50,11,9,224,3,2,33,94,27,248,22,67,248,22,164,17,23,199,1,250,22,
158,2,23,198,2,23,196,2,249,22,79,248,22,131,2,23,200,1,250,22,160,
2,23,203,1,23,201,1,9,12,250,22,158,2,195,196,248,22,94,198,20,13,
159,80,159,37,58,37,88,163,36,37,54,8,240,0,144,0,0,9,225,1,0,
@ -392,11 +392,11 @@
102,88,163,8,36,37,47,11,2,41,222,33,105,32,103,88,163,36,37,43,11,
69,116,111,45,115,116,114,105,110,103,222,33,104,28,248,22,184,14,193,248,22,
188,14,193,192,28,248,22,87,248,22,81,23,195,2,248,22,89,248,2,103,248,
22,163,17,23,196,1,250,22,90,248,2,103,248,22,163,17,23,198,2,2,50,
248,2,102,248,22,164,17,23,198,1,249,22,190,7,2,51,194,32,107,88,163,
22,164,17,23,196,1,250,22,90,248,2,103,248,22,164,17,23,198,2,2,50,
248,2,102,248,22,165,17,23,198,1,249,22,190,7,2,51,194,32,107,88,163,
36,38,48,11,66,102,105,108,116,101,114,222,33,108,28,248,22,87,23,195,2,
9,28,248,23,194,2,248,22,80,23,196,2,249,22,79,248,22,163,17,23,197,
2,249,2,107,23,197,1,248,22,164,17,23,199,1,249,2,107,194,248,22,164,
9,28,248,23,194,2,248,22,80,23,196,2,249,22,79,248,22,164,17,23,197,
2,249,2,107,23,197,1,248,22,165,17,23,199,1,249,2,107,194,248,22,165,
17,196,249,22,190,7,2,51,248,22,134,2,23,196,1,28,248,22,87,23,199,
2,86,94,23,198,1,28,23,199,2,28,196,249,22,138,15,200,198,198,27,28,
248,22,87,23,197,2,2,49,249,22,1,22,165,7,248,2,102,23,199,2,248,
@ -581,34 +581,37 @@
EVAL_ONE_SIZED_STR((char *)expr, 10019);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,53,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,
57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,179,
1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,
116,114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,
108,76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,77,84,72,
45,112,108,97,99,101,45,99,104,97,110,110,101,108,63,1,20,84,72,45,112,
108,97,99,101,45,99,104,97,110,110,101,108,45,114,101,102,1,21,84,72,45,
112,108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116,33,79,84,72,
45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110,1,20,84,72,
45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117,116,249,80,158,
38,39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,37,159,36,20,
113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,
9,11,11,11,10,45,80,158,36,36,20,113,159,36,16,7,2,2,2,3,2,
4,2,5,2,6,2,7,2,8,16,0,37,39,36,16,0,36,16,2,2,5,
2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5,11,
11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12,11,
11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,
16,2,20,15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249,22,
79,22,186,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37,80,
159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20,15,
16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37,45,
44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65,113,
117,111,116,101,68,35,37,107,101,114,110,101,108,11,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 501);
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,54,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,14,0,0,0,1,0,0,15,0,40,0,
57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,190,0,197,
0,0,0,222,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,
116,1,23,115,116,114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104,
97,110,110,101,108,76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,
108,77,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,63,1,20,
84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,114,101,102,1,
21,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116,
33,79,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110,
1,20,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117,
116,249,80,158,38,39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,
36,249,80,158,38,39,195,37,249,80,158,38,39,195,37,159,36,20,113,159,36,
16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,
11,10,45,80,158,36,36,20,113,159,36,16,7,2,2,2,3,2,4,2,5,
2,6,2,7,2,8,16,0,37,39,36,16,0,36,16,2,2,5,2,6,38,
11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5,11,11,11,11,
11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12,11,11,16,0,
16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,3,20,
15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249,22,79,22,186,
10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37,80,159,36,37,
37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20,15,16,2,20,
27,158,88,163,36,37,45,44,9,223,0,33,10,88,163,36,37,45,44,9,223,
0,33,11,80,159,36,41,37,20,15,16,2,20,27,158,88,163,36,37,45,44,
9,223,0,33,12,88,163,36,37,45,44,9,223,0,33,13,80,159,36,42,37,
93,29,94,65,113,117,111,116,101,68,35,37,107,101,114,110,101,108,11,9,9,
9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 548);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,53,84,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,54,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,89,0,0,0,1,0,0,7,0,18,0,
45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0,187,
0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101,1,
@ -682,7 +685,7 @@
97,116,104,45,115,116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248,
22,64,23,196,2,10,28,248,22,88,23,196,2,28,249,22,129,4,248,22,92,
23,198,2,37,28,28,248,22,64,248,22,80,23,197,2,10,248,22,150,9,248,
22,163,17,23,197,2,249,22,4,22,64,248,22,164,17,23,198,2,11,11,11,
22,164,17,23,197,2,249,22,4,22,64,248,22,165,17,23,198,2,11,11,11,
10,12,250,22,189,9,2,26,6,71,71,40,111,114,47,99,32,35,102,32,115,
121,109,98,111,108,63,32,40,99,111,110,115,47,99,32,40,111,114,47,99,32,
35,102,32,115,121,109,98,111,108,63,41,32,40,110,111,110,45,101,109,112,116,
@ -750,7 +753,7 @@
11,80,159,8,32,38,37,22,189,4,11,20,13,159,80,159,8,27,38,37,250,
80,159,8,30,39,37,249,22,33,11,80,159,8,32,38,37,22,172,5,28,248,
22,184,14,23,218,2,23,217,1,86,94,23,217,1,247,22,161,15,249,247,22,
170,5,248,22,163,17,195,23,31,86,94,23,193,1,27,28,23,197,1,28,23,
170,5,248,22,164,17,195,23,31,86,94,23,193,1,27,28,23,197,1,28,23,
201,1,27,249,22,5,20,20,95,88,163,36,37,48,8,128,3,9,226,31,26,
25,22,33,53,23,215,1,23,219,1,23,220,1,27,28,23,205,2,11,193,28,
192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81,23,15,193,
@ -761,9 +764,9 @@
28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33,38,37,22,
189,4,23,217,1,20,13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,
249,22,33,11,80,159,8,33,38,37,22,172,5,28,248,22,184,14,23,219,2,
23,218,1,86,94,23,218,1,247,22,161,15,249,247,22,170,5,248,22,163,17,
23,218,1,86,94,23,218,1,247,22,161,15,249,247,22,170,5,248,22,164,17,
195,23,32,86,94,23,193,1,28,28,248,22,77,23,224,32,0,0,0,2,248,
22,163,17,23,224,32,0,0,0,2,10,27,28,23,199,2,86,94,23,215,1,
22,164,17,23,224,32,0,0,0,2,10,27,28,23,199,2,86,94,23,215,1,
23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224,33,0,0,
0,2,248,22,150,9,248,22,132,15,23,195,2,11,12,20,13,159,80,159,8,
29,38,37,250,80,159,8,32,39,37,249,22,33,11,80,159,8,34,38,37,22,
@ -787,13 +790,13 @@
193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2,59,248,22,
113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22,89,194,32,
61,88,163,36,37,55,11,2,31,222,33,62,28,248,22,87,248,22,81,23,195,
2,249,22,7,9,248,22,163,17,195,90,159,38,11,89,161,38,36,11,27,248,
22,164,17,196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,163,
17,195,90,159,38,11,89,161,38,36,11,27,248,22,164,17,196,28,248,22,87,
248,22,81,23,195,2,249,22,7,9,248,22,163,17,195,90,159,38,11,89,161,
38,36,11,248,2,61,248,22,164,17,196,249,22,7,249,22,79,248,22,163,17,
199,196,195,249,22,7,249,22,79,248,22,163,17,199,196,195,249,22,7,249,22,
79,248,22,163,17,199,196,195,27,27,249,22,173,15,2,58,23,197,2,28,23,
2,249,22,7,9,248,22,164,17,195,90,159,38,11,89,161,38,36,11,27,248,
22,165,17,196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,164,
17,195,90,159,38,11,89,161,38,36,11,27,248,22,165,17,196,28,248,22,87,
248,22,81,23,195,2,249,22,7,9,248,22,164,17,195,90,159,38,11,89,161,
38,36,11,248,2,61,248,22,165,17,196,249,22,7,249,22,79,248,22,164,17,
199,196,195,249,22,7,249,22,79,248,22,164,17,199,196,195,249,22,7,249,22,
79,248,22,164,17,199,196,195,27,27,249,22,173,15,2,58,23,197,2,28,23,
193,2,86,94,23,195,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,
197,1,27,249,22,173,15,2,58,23,196,2,28,23,193,2,86,94,23,194,1,
249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,
@ -801,20 +804,20 @@
196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,58,23,196,2,28,23,
193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2,59,248,22,
113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22,89,195,28,
23,195,1,192,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,163,
17,195,27,248,22,164,17,194,90,159,38,11,89,161,38,36,11,28,248,22,87,
248,22,81,23,197,2,249,22,7,9,248,22,163,17,197,27,248,22,164,17,196,
23,195,1,192,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,164,
17,195,27,248,22,165,17,194,90,159,38,11,89,161,38,36,11,28,248,22,87,
248,22,81,23,197,2,249,22,7,9,248,22,164,17,197,27,248,22,165,17,196,
90,159,38,11,89,161,38,36,11,28,248,22,87,248,22,81,23,197,2,249,22,
7,9,248,22,163,17,197,90,159,38,11,89,161,38,36,11,248,2,61,248,22,
164,17,198,249,22,7,249,22,79,248,22,163,17,201,196,195,249,22,7,249,22,
79,248,22,163,17,202,196,195,249,22,7,249,22,79,248,22,163,17,200,196,195,
7,9,248,22,164,17,197,90,159,38,11,89,161,38,36,11,248,2,61,248,22,
165,17,198,249,22,7,249,22,79,248,22,164,17,201,196,195,249,22,7,249,22,
79,248,22,164,17,202,196,195,249,22,7,249,22,79,248,22,164,17,200,196,195,
28,24,194,2,12,20,13,159,80,159,36,57,37,80,158,36,55,89,161,37,37,
10,249,22,190,4,21,94,2,32,6,19,19,112,108,97,110,101,116,47,114,101,
115,111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111,
100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,27,28,
23,195,2,28,249,22,152,9,23,197,2,80,158,39,52,86,94,23,195,1,80,
158,37,53,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22,
163,17,23,195,1,23,194,1,28,248,22,184,14,23,194,2,90,159,39,11,89,
164,17,23,195,1,23,194,1,28,248,22,184,14,23,194,2,90,159,39,11,89,
161,39,36,11,248,22,141,15,23,197,1,86,95,20,18,159,11,80,158,42,52,
199,20,18,159,11,80,158,42,53,192,192,11,11,28,23,193,2,192,86,94,23,
193,1,27,247,22,172,5,28,192,192,247,22,161,15,90,159,39,11,89,161,39,
@ -834,7 +837,7 @@
22,148,5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201,1,23,
198,1,27,250,22,160,2,80,159,44,41,38,248,22,134,16,23,204,1,11,28,
23,193,2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250,22,158,
2,248,22,164,17,199,197,195,12,12,12,251,211,197,198,199,10,32,71,88,163,
2,248,22,165,17,199,197,195,12,12,12,251,211,197,198,199,10,32,71,88,163,
36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104,
222,33,74,32,72,88,163,36,40,54,11,2,31,222,33,73,28,248,22,87,23,
197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,154,9,
@ -843,8 +846,8 @@
46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97,116,
104,58,32,126,46,115,250,22,90,2,34,28,249,22,154,9,23,201,2,2,36,
198,28,248,22,184,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37,200,
199,251,2,72,196,197,248,22,81,199,248,22,164,17,200,251,2,72,196,197,249,
22,79,248,22,163,17,202,200,248,22,164,17,200,251,2,72,196,197,9,197,27,
199,251,2,72,196,197,248,22,81,199,248,22,165,17,200,251,2,72,196,197,249,
22,79,248,22,164,17,202,200,248,22,165,17,200,251,2,72,196,197,9,197,27,
249,22,165,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,
101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,250,
22,187,9,11,195,196,248,22,185,9,193,28,249,22,148,7,194,2,36,2,28,
@ -856,7 +859,7 @@
11,2,31,222,33,81,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,
32,32,32,248,22,188,14,248,22,105,23,198,2,248,2,80,248,22,81,23,198,
1,28,249,22,154,9,248,22,81,23,200,2,23,197,1,28,249,22,152,9,248,
22,163,17,23,200,1,23,196,1,251,22,185,9,2,22,6,41,41,99,121,99,
22,164,17,23,200,1,23,196,1,251,22,185,9,2,22,6,41,41,99,121,99,
108,101,32,105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,
116,104,58,32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,
22,1,22,165,7,248,2,80,248,22,94,23,201,1,12,12,247,192,20,13,159,
@ -868,47 +871,47 @@
28,248,22,156,5,23,196,2,12,28,23,197,2,250,22,187,9,11,6,15,15,
98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,189,
9,2,22,2,33,23,198,2,28,28,248,22,77,23,196,2,249,22,152,9,248,
22,163,17,23,198,2,2,4,11,248,22,147,5,248,22,104,196,28,28,248,22,
77,23,196,2,28,249,22,152,9,248,22,163,17,23,198,2,2,34,28,248,22,
22,164,17,23,198,2,2,4,11,248,22,147,5,248,22,104,196,28,28,248,22,
77,23,196,2,28,249,22,152,9,248,22,164,17,23,198,2,2,34,28,248,22,
77,248,22,104,23,197,2,249,22,152,9,248,22,108,23,198,2,2,4,11,11,
11,86,97,23,198,1,23,197,1,23,196,1,23,193,1,248,22,147,5,249,2,
71,248,22,121,23,199,2,248,22,106,23,199,1,28,28,248,22,77,23,196,2,
28,249,22,152,9,248,22,163,17,23,198,2,2,34,28,28,249,22,154,9,248,
28,249,22,152,9,248,22,164,17,23,198,2,2,34,28,28,249,22,154,9,248,
22,104,23,198,2,2,36,10,249,22,154,9,248,22,104,23,198,2,2,35,28,
23,196,2,27,248,22,148,5,23,198,2,28,248,22,64,193,10,28,248,22,77,
193,248,22,64,248,22,163,17,194,11,11,11,11,11,86,96,23,198,1,23,197,
193,248,22,64,248,22,164,17,194,11,11,11,11,11,86,96,23,198,1,23,197,
1,23,193,1,27,248,22,148,5,23,198,1,248,22,147,5,249,2,71,28,248,
22,77,23,197,2,248,22,163,17,23,197,2,23,196,2,27,28,249,22,154,9,
248,22,104,23,203,2,2,35,248,22,164,17,200,248,22,106,200,28,248,22,77,
23,198,2,249,22,93,248,22,164,17,199,194,192,28,28,248,22,77,23,196,2,
249,22,152,9,248,22,163,17,23,198,2,2,38,11,86,94,248,80,159,38,8,
22,77,23,197,2,248,22,164,17,23,197,2,23,196,2,27,28,249,22,154,9,
248,22,104,23,203,2,2,35,248,22,165,17,200,248,22,106,200,28,248,22,77,
23,198,2,249,22,93,248,22,165,17,199,194,192,28,28,248,22,77,23,196,2,
249,22,152,9,248,22,164,17,23,198,2,2,38,11,86,94,248,80,159,38,8,
28,39,193,253,213,200,201,202,203,11,80,158,43,55,28,28,248,22,77,23,196,
2,28,249,22,152,9,248,22,163,17,23,198,2,2,34,28,248,22,77,248,22,
2,28,249,22,152,9,248,22,164,17,23,198,2,2,34,28,248,22,77,248,22,
104,23,197,2,249,22,152,9,248,22,108,23,198,2,2,38,11,11,11,86,94,
248,80,159,38,8,28,39,193,253,213,248,22,104,201,201,202,203,248,22,106,201,
80,158,43,55,86,94,23,193,1,27,88,163,8,36,37,47,11,79,115,104,111,
119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,75,27,
28,248,22,77,23,198,2,28,249,22,152,9,2,34,248,22,163,17,23,200,2,
28,248,22,77,23,198,2,28,249,22,152,9,2,34,248,22,164,17,23,200,2,
27,248,22,104,23,199,2,28,28,249,22,154,9,23,195,2,2,36,10,249,22,
154,9,23,195,2,2,35,86,94,23,193,1,28,23,199,2,27,248,22,148,5,
23,201,2,28,248,22,77,193,248,22,163,17,193,192,250,22,185,9,2,22,6,
23,201,2,28,248,22,77,193,248,22,164,17,193,192,250,22,185,9,2,22,6,
45,45,110,111,32,98,97,115,101,32,112,97,116,104,32,102,111,114,32,114,101,
108,97,116,105,118,101,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,
58,32,126,46,115,23,201,2,192,23,197,2,23,197,2,27,28,248,22,77,23,
199,2,28,249,22,152,9,2,34,248,22,163,17,23,201,2,27,28,28,28,249,
199,2,28,249,22,152,9,2,34,248,22,164,17,23,201,2,27,28,28,28,249,
22,154,9,248,22,104,23,202,2,2,36,10,249,22,154,9,248,22,104,23,202,
2,2,35,23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22,154,9,
248,22,104,23,204,2,2,35,248,22,164,17,23,202,1,248,22,106,23,202,1,
28,248,22,77,23,195,2,249,2,71,248,22,163,17,23,197,2,249,22,93,248,
22,164,17,23,199,1,23,197,1,249,2,71,23,196,1,23,195,1,249,2,71,
2,36,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,164,17,23,202,
1,248,22,106,23,202,1,28,248,22,77,193,248,22,164,17,193,11,11,11,27,
248,22,104,23,204,2,2,35,248,22,165,17,23,202,1,248,22,106,23,202,1,
28,248,22,77,23,195,2,249,2,71,248,22,164,17,23,197,2,249,22,93,248,
22,165,17,23,199,1,23,197,1,249,2,71,23,196,1,23,195,1,249,2,71,
2,36,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,165,17,23,202,
1,248,22,106,23,202,1,28,248,22,77,193,248,22,165,17,193,11,11,11,27,
28,248,22,64,23,196,2,27,248,80,159,43,48,39,249,22,79,23,199,2,247,
22,162,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,
11,249,80,159,46,54,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195,
2,2,39,249,22,165,7,23,197,2,2,40,251,80,159,49,59,39,23,204,1,
28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2,
28,248,22,87,23,199,2,86,94,23,198,1,9,248,22,164,17,23,199,1,23,
28,248,22,87,23,199,2,86,94,23,198,1,9,248,22,165,17,23,199,1,23,
197,1,28,248,22,142,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,
29,39,23,202,2,27,248,80,159,44,48,39,249,22,79,23,200,2,23,197,2,
28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,
@ -928,7 +931,7 @@
249,22,1,22,93,249,22,2,80,159,53,8,31,39,248,22,106,23,208,2,23,
197,1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,
94,23,196,1,23,195,1,251,80,159,51,59,39,23,206,1,248,22,80,23,198,
2,248,22,164,17,23,198,1,23,198,1,28,249,22,152,9,248,22,163,17,23,
2,248,22,165,17,23,198,1,23,198,1,28,249,22,152,9,248,22,164,17,23,
198,2,2,37,248,80,159,42,8,30,39,248,22,147,15,249,22,145,15,248,22,
149,15,248,22,104,23,201,2,248,80,159,46,8,29,39,23,205,2,12,86,94,
28,28,248,22,184,14,23,194,2,10,248,22,167,8,23,194,2,86,94,23,201,
@ -956,7 +959,7 @@
20,20,96,88,163,36,36,56,8,240,12,64,0,0,9,230,19,15,13,12,8,
7,5,2,33,84,23,195,1,23,198,1,23,208,1,12,28,28,248,22,167,8,
23,204,1,11,28,248,22,142,7,23,206,2,10,28,248,22,64,23,206,2,10,
28,248,22,77,23,206,2,249,22,152,9,248,22,163,17,23,208,2,2,32,11,
28,248,22,77,23,206,2,249,22,152,9,248,22,164,17,23,208,2,2,32,11,
249,80,159,53,49,39,28,248,22,142,7,23,208,2,249,22,79,23,209,1,248,
80,159,56,8,29,39,23,215,1,86,94,23,212,1,249,22,79,23,209,1,247,
22,162,15,252,22,169,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203,
@ -1017,7 +1020,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 8518);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,53,84,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,54,84,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,
29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1,0,
0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,

View File

@ -1228,7 +1228,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
int dest);
int scheme_generate_inlined_test(mz_jit_state *jitter, Scheme_Object *obj, int branch_short,
Branch_Info *for_branch, int need_sync);
int scheme_generate_cons_alloc(mz_jit_state *jitter, int rev, int inline_retry, int dest);
int scheme_generate_cons_alloc(mz_jit_state *jitter, int rev, int inline_retry, int known_list, int dest);
int scheme_generate_struct_alloc(mz_jit_state *jitter, int num_args,
int inline_slow, int pop_and_jump,
int is_tail, int multi_ok, int dest);
@ -1238,7 +1238,7 @@ int scheme_generate_struct_alloc(mz_jit_state *jitter, int num_args,
/**********************************************************************/
#ifdef CAN_INLINE_ALLOC
int scheme_inline_alloc(mz_jit_state *jitter, int amt, Scheme_Type ty, int immut,
int scheme_inline_alloc(mz_jit_state *jitter, int amt, Scheme_Type ty, int flags,
int keep_r0_r1, int keep_fpr1, int inline_retry);
int scheme_generate_alloc_retry(mz_jit_state *jitter, int i);
#else

View File

@ -2168,7 +2168,7 @@ static int common5(mz_jit_state *jitter, void *_data)
jit_ldxr_p(JIT_R1, JIT_RUNSTACK, JIT_R2);
mz_set_local_p(JIT_R2, JIT_LOCAL3);
scheme_generate_cons_alloc(jitter, 1, 1, JIT_R0);
scheme_generate_cons_alloc(jitter, 1, 1, !i, JIT_R0);
CHECK_LIMIT();
mz_get_local_p(JIT_R2, JIT_LOCAL3);

View File

@ -1053,7 +1053,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
scheme_generate_arith(jitter, rator, app->rand, NULL, 1, 0, CMP_ODDP, 0, for_branch, branch_short, 0, 0, NULL, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "list?")) {
GC_CAN_IGNORE jit_insn *ref0, *ref1, *ref3, *ref4;
GC_CAN_IGNORE jit_insn *ref0, *ref1, *ref3, *ref4, *ref6;
mz_runstack_skipped(jitter, 1);
@ -1077,11 +1077,16 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
ref4 = jit_bnei_p(jit_forward(), JIT_R1, scheme_pair_type);
CHECK_LIMIT();
/* We have a pair. Optimistically check for PAIR_IS_LIST: */
jit_ldxi_s(JIT_R2, JIT_R0, &MZ_OPT_HASH_KEY(&((Scheme_Stx *)0x0)->iso));
ref6 = jit_bmsi_ul(jit_forward(), JIT_R2, PAIR_IS_LIST);
if (for_branch) {
ref0 = jit_patchable_movi_p(JIT_V1, jit_forward());
(void)jit_calli(sjc.list_p_branch_code);
mz_patch_branch(ref3);
mz_patch_branch(ref6);
scheme_add_branch_false_movi(for_branch, ref0);
scheme_add_branch_false(for_branch, ref1);
@ -1100,6 +1105,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
ref1 = jit_jmpi(jit_forward());
mz_patch_branch(ref3);
mz_patch_branch(ref6);
(void)jit_movi_p(dest, scheme_true);
mz_patch_ucbranch(ref5);
@ -1721,7 +1727,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
mz_rs_sync();
mz_runstack_unskipped(jitter, 1);
(void)jit_movi_p(JIT_R1, &scheme_null);
return scheme_generate_cons_alloc(jitter, 0, 0, dest);
return scheme_generate_cons_alloc(jitter, 0, 0, 1, dest);
} else if (IS_NAMED_PRIM(rator, "box")) {
mz_runstack_skipped(jitter, 1);
scheme_generate_non_tail(app->rand, jitter, 0, 1, 0);
@ -3023,14 +3029,28 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
return 1;
} else if (IS_NAMED_PRIM(rator, "cons")
|| IS_NAMED_PRIM(rator, "list*")) {
int dir;
int dir, known_list;
LOG_IT(("inlined cons\n"));
dir = generate_two_args(app->rand1, app->rand2, jitter, 0, 2);
CHECK_LIMIT();
mz_rs_sync();
if (scheme_is_list(app->rand2))
known_list = 1;
else
known_list = 2;
return scheme_generate_cons_alloc(jitter, dir == -1, 0, dest);
return scheme_generate_cons_alloc(jitter, dir == -1, 0, known_list, dest);
} else if (IS_NAMED_PRIM(rator, "unsafe-cons-list")) {
int dir;
LOG_IT(("inlined unsafe-cons-list\n"));
dir = generate_two_args(app->rand1, app->rand2, jitter, 0, 2);
CHECK_LIMIT();
mz_rs_sync();
return scheme_generate_cons_alloc(jitter, dir == -1, 0, 1, dest);
} else if (IS_NAMED_PRIM(rator, "mcons")) {
LOG_IT(("inlined mcons\n"));
@ -3074,7 +3094,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
CHECK_LIMIT();
mz_rs_sync();
scheme_generate_cons_alloc(jitter, 1, 0, JIT_R0);
scheme_generate_cons_alloc(jitter, 1, 0, 1, JIT_R0);
CHECK_LIMIT();
jit_ldr_p(JIT_R1, JIT_RUNSTACK);
@ -3082,7 +3102,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
mz_runstack_popped(jitter, 1);
CHECK_LIMIT();
return scheme_generate_cons_alloc(jitter, 1, 0, dest);
return scheme_generate_cons_alloc(jitter, 1, 0, 1, dest);
} else if (IS_NAMED_PRIM(rator, "vector-immutable")
|| IS_NAMED_PRIM(rator, "vector")) {
return generate_vector_alloc(jitter, rator, NULL, NULL, app, dest);
@ -3780,28 +3800,50 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
CHECK_LIMIT();
mz_rs_sync();
if (c <= 4) {
/* fully inline a small list */
int i, c2 = c, known_list;
if (star) {
c2--;
mz_rs_ldxi(JIT_R1, c2);
known_list = scheme_is_list(app->args[c2]);
} else {
known_list = 1;
if (c)
(void)jit_movi_p(JIT_R1, scheme_null);
else
(void)jit_movi_p(dest, scheme_null);
}
for (i = c2; i--; ) {
mz_rs_ldxi(JIT_R0, i);
scheme_generate_cons_alloc(jitter, 0, 0, known_list, (i > 0) ? JIT_R1 : dest);
CHECK_LIMIT();
}
} else {
#ifdef CAN_INLINE_ALLOC
jit_movi_l(JIT_R2, c);
if (star)
(void)jit_calli(sjc.make_list_star_code);
else
(void)jit_calli(sjc.make_list_code);
jit_movr_p(dest, JIT_R0);
#else
JIT_UPDATE_THREAD_RSPTR_IF_NEEDED();
jit_movi_l(JIT_R0, c);
mz_prepare(2);
jit_pusharg_l(JIT_R0);
jit_pusharg_p(JIT_RUNSTACK);
{
GC_CAN_IGNORE jit_insn *refr;
jit_movi_l(JIT_R2, c);
if (star)
(void)mz_finish_lwe(ts_scheme_jit_make_list_star, refr);
(void)jit_calli(sjc.make_list_star_code);
else
(void)mz_finish_lwe(ts_scheme_jit_make_list, refr);
}
jit_retval(dest);
(void)jit_calli(sjc.make_list_code);
jit_movr_p(dest, JIT_R0);
#else
JIT_UPDATE_THREAD_RSPTR_IF_NEEDED();
jit_movi_l(JIT_R0, c);
mz_prepare(2);
jit_pusharg_l(JIT_R0);
jit_pusharg_p(JIT_RUNSTACK);
{
GC_CAN_IGNORE jit_insn *refr;
if (star)
(void)mz_finish_lwe(ts_scheme_jit_make_list_star, refr);
else
(void)mz_finish_lwe(ts_scheme_jit_make_list, refr);
}
jit_retval(dest);
#endif
}
if (c) {
mz_rs_inc(c); /* no sync */
@ -3877,12 +3919,13 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
return 0;
}
int scheme_generate_cons_alloc(mz_jit_state *jitter, int rev, int inline_retry, int dest)
int scheme_generate_cons_alloc(mz_jit_state *jitter, int rev, int inline_retry, int known_list, int dest)
/* Args must be in R0 (car) and R1 (cdr); uses R2 and V1 as temporaries */
{
#ifdef CAN_INLINE_ALLOC
/* Inlined alloc */
scheme_inline_alloc(jitter, sizeof(Scheme_Simple_Object), scheme_pair_type, 0, 1, 0, inline_retry);
scheme_inline_alloc(jitter, sizeof(Scheme_Simple_Object), scheme_pair_type, 0, 1,
known_list ? PAIR_IS_LIST : 0, inline_retry);
CHECK_LIMIT();
if (rev) {

View File

@ -37,6 +37,7 @@ READ_ONLY Scheme_Object *scheme_list_star_proc;
READ_ONLY Scheme_Object *scheme_box_proc;
READ_ONLY Scheme_Object *scheme_box_p_proc;
READ_ONLY Scheme_Object *scheme_hash_ref_proc;
READ_ONLY Scheme_Object *scheme_unsafe_cons_list_proc;
READ_ONLY Scheme_Object *scheme_unsafe_car_proc;
READ_ONLY Scheme_Object *scheme_unsafe_cdr_proc;
READ_ONLY Scheme_Object *scheme_unsafe_mcar_proc;
@ -155,6 +156,7 @@ static Scheme_Object *make_hasheq_placeholder(int argc, Scheme_Object *argv[]);
static Scheme_Object *make_hasheqv_placeholder(int argc, Scheme_Object *argv[]);
static Scheme_Object *table_placeholder_p(int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_cons_list (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_car (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_cdr (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_list_ref (int argc, Scheme_Object *argv[]);
@ -752,6 +754,13 @@ scheme_init_unsafe_list (Scheme_Env *env)
scheme_null->type = scheme_null_type;
REGISTER_SO(scheme_unsafe_cons_list_proc);
p = scheme_make_immed_prim(unsafe_cons_list, "unsafe-cons-list", 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED
| SCHEME_PRIM_IS_OMITABLE);
scheme_add_global_constant ("unsafe-cons-list", p, env);
scheme_unsafe_cons_list_proc = p;
REGISTER_SO(scheme_unsafe_car_proc);
p = scheme_make_folding_prim(unsafe_car, "unsafe-car", 1, 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED
@ -842,6 +851,14 @@ Scheme_Object *scheme_make_pair(Scheme_Object *car, Scheme_Object *cdr)
#endif
}
Scheme_Object *scheme_make_list_pair(Scheme_Object *car, Scheme_Object *cdr)
{
GC_CAN_IGNORE Scheme_Object *r;
r = scheme_make_pair(car, cdr);
SCHEME_PAIR_FLAGS(r) |= PAIR_IS_LIST;
return r;
}
Scheme_Object *scheme_make_mutable_pair(Scheme_Object *car, Scheme_Object *cdr)
{
Scheme_Object *cons;
@ -877,6 +894,7 @@ Scheme_Object *scheme_make_raw_pair(Scheme_Object *car, Scheme_Object *cdr)
}
# define cons(car, cdr) scheme_make_pair(car, cdr)
# define lcons(car, cdr) scheme_make_list_pair(car, cdr)
Scheme_Object *scheme_build_list(int size, Scheme_Object **argv)
{
@ -884,7 +902,7 @@ Scheme_Object *scheme_build_list(int size, Scheme_Object **argv)
int i;
for (i = size; i--; ) {
pair = cons(argv[i], pair);
pair = lcons(argv[i], pair);
}
return pair;
@ -900,12 +918,12 @@ Scheme_Object *scheme_build_list_offset(int size, Scheme_Object **argv, int delt
/* clearing mode: */
size = -size;
for (i = size; i-- > delta; ) {
pair = cons(argv[i], pair);
pair = lcons(argv[i], pair);
argv[i] = NULL;
}
} else {
for (i = size; i-- > delta; ) {
pair = cons(argv[i], pair);
pair = lcons(argv[i], pair);
}
}
@ -918,7 +936,7 @@ Scheme_Object *scheme_alloc_list(int size)
int i;
for (i = size; i--; ) {
pair = cons(scheme_false, pair);
pair = lcons(scheme_false, pair);
}
return pair;
@ -968,7 +986,7 @@ scheme_named_map_1(char *name, Scheme_Object *(*fun)(Scheme_Object*, Scheme_Obje
Scheme_Object *v;
v = SCHEME_STX_CAR(lst);
v = fun(v, form);
pr = cons(v, scheme_null);
pr = lcons(v, scheme_null);
if (last)
SCHEME_CDR(last) = pr;
else
@ -1168,10 +1186,18 @@ int scheme_is_list(Scheme_Object *obj1)
}
/* Propagate info further up the chain. */
/* We could have a race with JIT-generated code, but the worst
should be that we lose a flag setting (dangerous in principle,
but not in practice). */
#ifdef MZ_USE_FUTURES
{
short orig_flags = flags & (~PAIR_FLAG_MASK);
while (!mzrt_cas16(&SCHEME_PAIR_FLAGS(obj2), orig_flags, flags)) {
orig_flags = SCHEME_PAIR_FLAGS(obj2);
flags = orig_flags | (flags & PAIR_FLAG_MASK);
}
}
#else
/* no fuel check, so flags could not have changed */
SCHEME_PAIR_FLAGS(obj2) |= (flags & PAIR_FLAG_MASK);
#endif
return (flags & PAIR_IS_LIST);
}
@ -1187,7 +1213,7 @@ list_p_prim (int argc, Scheme_Object *argv[])
#define NORMAL_LIST_INIT() l = scheme_null
#define STAR_LIST_INIT() --argc; l = argv[argc]
#define LIST_BODY(INIT) \
#define LIST_BODY(INIT, cons) \
int i; \
GC_CAN_IGNORE Scheme_Object *l; \
INIT; \
@ -1199,13 +1225,13 @@ list_p_prim (int argc, Scheme_Object *argv[])
static Scheme_Object *
list_prim (int argc, Scheme_Object *argv[])
{
LIST_BODY(NORMAL_LIST_INIT());
LIST_BODY(NORMAL_LIST_INIT(), lcons);
}
static Scheme_Object *
list_star_prim (int argc, Scheme_Object *argv[])
{
LIST_BODY(STAR_LIST_INIT());
LIST_BODY(STAR_LIST_INIT(), cons);
}
static Scheme_Object *
@ -1313,7 +1339,7 @@ reverse_prim (int argc, Scheme_Object *argv[])
while (!SCHEME_NULLP (lst)) {
if (!SCHEME_PAIRP(lst))
scheme_wrong_contract("reverse", "list?", 0, argc, argv);
last = cons(SCHEME_CAR (lst), last);
last = lcons(SCHEME_CAR (lst), last);
lst = SCHEME_CDR (lst);
SCHEME_USE_FUEL(1);
@ -2498,7 +2524,7 @@ static Scheme_Object *do_map_hash_table(int argc,
p[1] = v;
if (keep) {
v = _scheme_apply(f, 2, p);
v = cons(v, scheme_null);
v = lcons(v, scheme_null);
if (last)
SCHEME_CDR(last) = v;
else
@ -2530,7 +2556,7 @@ static Scheme_Object *do_map_hash_table(int argc,
p[1] = v;
if (keep) {
v = _scheme_apply(f, 2, p);
v = cons(v, scheme_null);
v = lcons(v, scheme_null);
if (last)
SCHEME_CDR(last) = v;
else
@ -2562,7 +2588,7 @@ static Scheme_Object *do_map_hash_table(int argc,
p[1] = iv;
if (keep) {
v = _scheme_apply(f, 2, p);
v = cons(v, scheme_null);
v = lcons(v, scheme_null);
if (last)
SCHEME_CDR(last) = v;
else
@ -3559,6 +3585,12 @@ void scheme_init_ephemerons(void)
/* unsafe */
/************************************************************/
static Scheme_Object *unsafe_cons_list(int argc, Scheme_Object *argv[])
{
return lcons(argv[0], argv[1]);
}
static Scheme_Object *unsafe_car (int argc, Scheme_Object *argv[])
{
if (scheme_current_thread->constant_folding) return scheme_checked_car(argc, argv);

View File

@ -945,6 +945,7 @@ static int is_movable_prim(Scheme_Object *rator, int n, int cross_lambda)
return values that contain all arguments: */
&& (SAME_OBJ(scheme_list_proc, rator)
|| (SAME_OBJ(scheme_cons_proc, rator) && (n == 2))
|| (SAME_OBJ(scheme_unsafe_cons_list_proc, rator) && (n == 2))
|| SAME_OBJ(scheme_list_star_proc, rator)
|| SAME_OBJ(scheme_vector_proc, rator)
|| SAME_OBJ(scheme_vector_immutable_proc, rator)
@ -2410,6 +2411,7 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
Scheme_App3_Rec *app3 = (Scheme_App3_Rec *)rand;
if (IS_NAMED_PRIM(app->rator, "car")) {
if (SAME_OBJ(scheme_cons_proc, app3->rator)
|| SAME_OBJ(scheme_unsafe_cons_list_proc, app3->rator)
|| SAME_OBJ(scheme_list_proc, app3->rator)
|| SAME_OBJ(scheme_list_star_proc, app3->rator)) {
/* (car ({cons|list|list*} X Y)) */
@ -2421,7 +2423,8 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
}
} else if (IS_NAMED_PRIM(app->rator, "cdr")) {
/* (cdr (cons X Y)) */
if (SAME_OBJ(scheme_cons_proc, app3->rator)) {
if (SAME_OBJ(scheme_cons_proc, app3->rator)
|| SAME_OBJ(scheme_unsafe_cons_list_proc, app3->rator)) {
if ((scheme_omittable_expr(app3->rand2, 1, 5, 0, info, NULL, -1, 0)
|| single_valued_noncm_expression(app3->rand2, 5))
&& scheme_omittable_expr(app3->rand1, 1, 5, 0, info, NULL, -1, 0)) {

View File

@ -568,6 +568,7 @@ MZ_EXTERN void scheme_prim_is_method(Scheme_Object *o);
MZ_EXTERN Scheme_Object *scheme_make_pair(Scheme_Object *car, Scheme_Object *cdr);
MZ_EXTERN Scheme_Object *scheme_make_mutable_pair(Scheme_Object *car, Scheme_Object *cdr);
MZ_EXTERN Scheme_Object *scheme_make_list_pair(Scheme_Object *car, Scheme_Object *cdr);
MZ_EXTERN Scheme_Object *scheme_make_raw_pair(Scheme_Object *, Scheme_Object *);

View File

@ -454,6 +454,7 @@ Scheme_Object *(*scheme_make_closed_prim_w_everything)(Scheme_Closed_Prim *fun,
void (*scheme_prim_is_method)(Scheme_Object *o);
Scheme_Object *(*scheme_make_pair)(Scheme_Object *car, Scheme_Object *cdr);
Scheme_Object *(*scheme_make_mutable_pair)(Scheme_Object *car, Scheme_Object *cdr);
Scheme_Object *(*scheme_make_list_pair)(Scheme_Object *car, Scheme_Object *cdr);
Scheme_Object *(*scheme_make_raw_pair)(Scheme_Object *, Scheme_Object *);
Scheme_Object *(*scheme_make_byte_string)(const char *chars);
Scheme_Object *(*scheme_make_sized_byte_string)(char *chars, intptr_t len, int copy);

View File

@ -319,6 +319,7 @@
scheme_extension_table->scheme_prim_is_method = scheme_prim_is_method;
scheme_extension_table->scheme_make_pair = scheme_make_pair;
scheme_extension_table->scheme_make_mutable_pair = scheme_make_mutable_pair;
scheme_extension_table->scheme_make_list_pair = scheme_make_list_pair;
scheme_extension_table->scheme_make_raw_pair = scheme_make_raw_pair;
scheme_extension_table->scheme_make_byte_string = scheme_make_byte_string;
scheme_extension_table->scheme_make_sized_byte_string = scheme_make_sized_byte_string;

View File

@ -319,6 +319,7 @@
#define scheme_prim_is_method (scheme_extension_table->scheme_prim_is_method)
#define scheme_make_pair (scheme_extension_table->scheme_make_pair)
#define scheme_make_mutable_pair (scheme_extension_table->scheme_make_mutable_pair)
#define scheme_make_list_pair (scheme_extension_table->scheme_make_list_pair)
#define scheme_make_raw_pair (scheme_extension_table->scheme_make_raw_pair)
#define scheme_make_byte_string (scheme_extension_table->scheme_make_byte_string)
#define scheme_make_sized_byte_string (scheme_extension_table->scheme_make_sized_byte_string)

View File

@ -15,7 +15,7 @@
#define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 1073
#define EXPECTED_UNSAFE_COUNT 79
#define EXPECTED_UNSAFE_COUNT 80
#define EXPECTED_FLFXNUM_COUNT 69
#define EXPECTED_FUTURES_COUNT 15

View File

@ -361,6 +361,7 @@ extern Scheme_Object *scheme_procedure_arity_includes_proc;
extern Scheme_Object *scheme_void_proc;
extern Scheme_Object *scheme_pair_p_proc;
extern Scheme_Object *scheme_mpair_p_proc;
extern Scheme_Object *scheme_unsafe_cons_list_proc;
extern Scheme_Object *scheme_unsafe_car_proc;
extern Scheme_Object *scheme_unsafe_cdr_proc;
extern Scheme_Object *scheme_unsafe_mcar_proc;

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "5.3.1.5"
#define MZSCHEME_VERSION "5.3.1.6"
#define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 3
#define MZSCHEME_VERSION_Z 1
#define MZSCHEME_VERSION_W 5
#define MZSCHEME_VERSION_W 6
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)