3.99.0.11, safe for space (in 3m+JIT mode)

svn: r8599
This commit is contained in:
Matthew Flatt 2008-02-09 14:27:36 +00:00
parent ad0a9aa3b5
commit 4f6d727b91
34 changed files with 2620 additions and 820 deletions

View File

@ -906,6 +906,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
break; break;
case '-': case '-':
no_more_switches = 1; no_more_switches = 1;
was_config_flag = 1;
break; break;
case 'j': case 'j':
scheme_set_startup_use_jit(0); scheme_set_startup_use_jit(0);

View File

@ -205,6 +205,7 @@ scheme_make_prim
scheme_make_noneternal_prim scheme_make_noneternal_prim
scheme_make_prim_w_arity scheme_make_prim_w_arity
scheme_make_folding_prim scheme_make_folding_prim
scheme_make_immed_prim
scheme_make_noncm_prim scheme_make_noncm_prim
scheme_make_noneternal_prim_w_arity scheme_make_noneternal_prim_w_arity
scheme_make_prim_w_everything scheme_make_prim_w_everything

View File

@ -215,6 +215,7 @@ scheme_make_prim
scheme_make_noneternal_prim scheme_make_noneternal_prim
scheme_make_prim_w_arity scheme_make_prim_w_arity
scheme_make_folding_prim scheme_make_folding_prim
scheme_make_immed_prim
scheme_make_noncm_prim scheme_make_noncm_prim
scheme_make_noneternal_prim_w_arity scheme_make_noneternal_prim_w_arity
scheme_make_prim_w_everything scheme_make_prim_w_everything

View File

@ -193,6 +193,7 @@ EXPORTS
scheme_make_noneternal_prim scheme_make_noneternal_prim
scheme_make_prim_w_arity scheme_make_prim_w_arity
scheme_make_folding_prim scheme_make_folding_prim
scheme_make_immed_prim
scheme_make_noncm_prim scheme_make_noncm_prim
scheme_make_noneternal_prim_w_arity scheme_make_noneternal_prim_w_arity
scheme_make_prim_w_everything scheme_make_prim_w_everything

View File

@ -207,6 +207,7 @@ EXPORTS
scheme_make_noneternal_prim scheme_make_noneternal_prim
scheme_make_prim_w_arity scheme_make_prim_w_arity
scheme_make_folding_prim scheme_make_folding_prim
scheme_make_immed_prim
scheme_make_noncm_prim scheme_make_noncm_prim
scheme_make_noneternal_prim_w_arity scheme_make_noneternal_prim_w_arity
scheme_make_prim_w_everything scheme_make_prim_w_everything

View File

@ -612,26 +612,31 @@ typedef struct Scheme_Offset_Cptr
/* Constants for flags in Scheme_Primitive_[Closed]_Proc. /* Constants for flags in Scheme_Primitive_[Closed]_Proc.
Do not use them directly. */ Do not use them directly. */
#define SCHEME_PRIM_IS_FOLDING 1 #define SCHEME_PRIM_OPT_MASK (1 | 2)
#define SCHEME_PRIM_IS_PRIMITIVE 2 #define SCHEME_PRIM_IS_PRIMITIVE 4
#define SCHEME_PRIM_IS_STRUCT_INDEXED_GETTER 4 #define SCHEME_PRIM_IS_STRUCT_INDEXED_GETTER 8
#define SCHEME_PRIM_IS_STRUCT_PRED 8 #define SCHEME_PRIM_IS_STRUCT_PRED 16
#define SCHEME_PRIM_IS_PARAMETER 16 #define SCHEME_PRIM_IS_PARAMETER 32
#define SCHEME_PRIM_IS_STRUCT_OTHER 32 #define SCHEME_PRIM_IS_STRUCT_OTHER 64
#define SCHEME_PRIM_STRUCT_OTHER_TYPE_MASK (64 | 128) #define SCHEME_PRIM_STRUCT_OTHER_TYPE_MASK (128 | 256)
#define SCHEME_PRIM_IS_MULTI_RESULT 256 #define SCHEME_PRIM_IS_MULTI_RESULT 512
#define SCHEME_PRIM_IS_BINARY_INLINED 512 #define SCHEME_PRIM_IS_BINARY_INLINED 1024
#define SCHEME_PRIM_IS_USER_PARAMETER 1024 #define SCHEME_PRIM_IS_USER_PARAMETER 2048
#define SCHEME_PRIM_IS_METHOD 2048 #define SCHEME_PRIM_IS_METHOD 4096
#define SCHEME_PRIM_IS_CLOSURE 4096 #define SCHEME_PRIM_IS_CLOSURE 8192
#define SCHEME_PRIM_IS_NONCM 8192
#define SCHEME_PRIM_IS_UNARY_INLINED 16384 #define SCHEME_PRIM_IS_UNARY_INLINED 16384
#define SCHEME_PRIM_IS_MIN_NARY_INLINED 32768 #define SCHEME_PRIM_IS_MIN_NARY_INLINED 32768
/* Values with SCHEME_PRIM_OPT_MASK, earlier implies later: */
#define SCHEME_PRIM_OPT_FOLDING 3
#define SCHEME_PRIM_OPT_IMMEDIATE 2
#define SCHEME_PRIM_OPT_NONCM 1
/* Values with SCHEME_PRIM_STRUCT_OTHER_TYPE_MASK */
#define SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_GETTER 0 #define SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_GETTER 0
#define SCHEME_PRIM_STRUCT_TYPE_CONSTR 64 #define SCHEME_PRIM_STRUCT_TYPE_CONSTR 128
#define SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_SETTER 128 #define SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_SETTER 256
#define SCHEME_PRIM_STRUCT_TYPE_INDEXED_SETTER (64 | 128) #define SCHEME_PRIM_STRUCT_TYPE_INDEXED_SETTER (128 | 256)
#define SCHEME_PRIM_IS_STRUCT_PROC (SCHEME_PRIM_IS_STRUCT_INDEXED_GETTER | SCHEME_PRIM_IS_STRUCT_PRED | SCHEME_PRIM_IS_STRUCT_OTHER) #define SCHEME_PRIM_IS_STRUCT_PROC (SCHEME_PRIM_IS_STRUCT_INDEXED_GETTER | SCHEME_PRIM_IS_STRUCT_PRED | SCHEME_PRIM_IS_STRUCT_OTHER)

View File

@ -246,7 +246,7 @@ void scheme_init_char (Scheme_Env *env)
env); env);
scheme_add_global_constant("make-known-char-range-list", scheme_add_global_constant("make-known-char-range-list",
scheme_make_noncm_prim(char_map_list, scheme_make_immed_prim(char_map_list,
"make-known-char-range-list", "make-known-char-range-list",
0, 0), 0, 0),
env); env);

View File

@ -1,68 +1,72 @@
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,51,46,57,57,46,48,46,57,50,0,0,0,1,0,0,6,0,9, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,50,0,0,0,1,0,0,6,0,
0,14,0,18,0,23,0,28,0,32,0,39,0,42,0,55,0,62,0,69,0, 9,0,14,0,18,0,23,0,36,0,41,0,45,0,52,0,55,0,62,0,69,
78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0,155, 0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0,
0,177,0,179,0,193,0,203,0,209,0,232,0,33,1,43,1,60,1,93,1, 155,0,177,0,179,0,193,0,203,0,209,0,232,0,33,1,43,1,60,1,99,
126,1,185,1,230,1,52,2,97,2,102,2,122,2,252,2,16,3,64,3,130, 1,138,1,212,1,1,2,94,2,139,2,144,2,164,2,54,3,74,3,124,3,
3,13,4,155,4,198,4,209,4,32,5,0,0,50,7,0,0,65,98,101,103, 190,3,75,4,238,4,25,5,36,5,115,5,0,0,133,7,0,0,65,98,101,
105,110,29,11,11,64,108,101,116,42,63,108,101,116,64,119,104,101,110,64,99, 103,105,110,29,11,11,64,108,101,116,42,63,108,101,116,64,119,104,101,110,72,
111,110,100,63,97,110,100,66,108,101,116,114,101,99,62,111,114,72,112,97,114, 112,97,114,97,109,101,116,101,114,105,122,101,64,99,111,110,100,63,97,110,100,
97,109,101,116,101,114,105,122,101,66,100,101,102,105,110,101,66,117,110,108,101, 66,108,101,116,114,101,99,62,111,114,66,100,101,102,105,110,101,66,117,110,108,
115,115,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2,14, 101,115,115,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2,
68,35,37,112,97,114,97,109,122,11,29,94,2,14,68,35,37,107,101,114,110, 14,68,35,37,112,97,114,97,109,122,11,29,94,2,14,68,35,37,107,101,114,
101,108,11,62,105,102,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117, 110,101,108,11,62,105,102,63,115,116,120,61,115,70,108,101,116,45,118,97,108,
101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97, 117,101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,
109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, 97,109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,
110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115, 111,110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,
95,8,240,48,117,0,0,11,16,0,95,8,193,11,16,0,96,35,11,93,159, 115,95,8,240,48,117,0,0,11,16,0,95,8,193,11,16,0,96,35,11,93,
2,16,34,35,16,2,2,13,161,2,2,35,2,13,2,2,2,13,97,10,34, 159,2,16,34,35,16,2,2,13,161,2,2,35,2,13,2,2,2,13,97,10,
11,94,159,2,15,34,34,159,2,16,34,34,16,20,2,9,2,2,2,3,2, 34,11,94,159,2,15,34,34,159,2,16,34,34,16,20,2,10,2,2,2,3,
2,2,4,2,2,2,5,2,2,2,10,2,2,2,7,2,2,2,8,2,2, 2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,
2,6,2,2,2,11,2,2,2,12,2,2,13,16,4,34,29,11,11,2,2, 2,2,9,2,2,2,11,2,2,2,12,2,2,13,16,4,34,29,11,11,2,
11,18,98,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,27,248,22, 2,11,18,98,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,27,248,
178,3,195,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,88,199,12, 22,178,3,23,196,1,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,
249,22,63,2,1,248,22,90,201,27,248,22,178,3,195,249,22,171,3,80,158, 88,23,200,2,12,249,22,63,2,1,248,22,90,23,202,1,27,248,22,178,3,
37,34,251,22,73,2,17,248,22,88,199,249,22,63,2,1,248,22,90,201,12, 23,196,1,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,88,23,200,
27,248,22,65,248,22,178,3,196,28,248,22,71,193,20,15,159,35,34,35,28, 2,249,22,63,2,1,248,22,90,23,202,1,12,27,248,22,65,248,22,178,3,
248,22,71,248,22,65,194,248,22,64,193,249,22,171,3,80,158,37,34,251,22, 23,197,1,28,248,22,71,23,194,2,87,94,23,193,1,20,15,159,35,34,35,
73,2,17,248,22,64,199,249,22,63,2,7,248,22,65,201,11,18,100,10,8, 28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,171,3,80,158,37,
31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118, 34,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,8,248,22,65,23,
54,55,55,56,16,4,11,11,2,19,3,1,7,101,110,118,54,55,55,57,27, 202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,
248,22,65,248,22,178,3,196,28,248,22,71,193,20,15,159,35,34,35,28,248, 18,3,1,7,101,110,118,54,57,49,51,16,4,11,11,2,19,3,1,7,101,
22,71,248,22,65,194,248,22,64,193,249,22,171,3,80,158,37,34,250,22,73, 110,118,54,57,49,52,27,248,22,65,248,22,178,3,23,197,1,28,248,22,71,
2,20,248,22,73,249,22,73,248,22,73,2,21,248,22,64,201,251,22,73,2, 23,194,2,87,94,23,193,1,20,15,159,35,34,35,28,248,22,71,248,22,65,
17,2,21,2,21,249,22,63,2,9,248,22,65,204,18,100,11,8,31,8,30, 23,195,2,248,22,64,193,249,22,171,3,80,158,37,34,250,22,73,2,20,248,
8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,54,55,56, 22,73,249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,
49,16,4,11,11,2,19,3,1,7,101,110,118,54,55,56,50,248,22,178,3, 2,21,2,21,249,22,63,2,10,248,22,65,23,205,1,18,100,11,8,31,8,
193,27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195, 30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,54,57,
27,248,22,65,248,22,178,3,196,249,22,171,3,80,158,37,34,28,248,22,51, 49,54,16,4,11,11,2,19,3,1,7,101,110,118,54,57,49,55,248,22,178,
248,22,172,3,248,22,64,197,27,249,22,2,32,0,89,162,8,36,35,41,9, 3,193,27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,
222,33,39,248,22,178,3,248,22,88,199,250,22,73,2,22,248,22,73,249,22, 195,27,248,22,65,248,22,178,3,23,197,1,249,22,171,3,80,158,37,34,28,
73,248,22,73,248,22,64,203,250,22,74,2,23,249,22,2,22,64,203,248,22, 248,22,51,248,22,172,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,
90,205,249,22,63,248,22,64,201,249,22,2,22,88,199,250,22,74,2,20,249, 8,44,35,41,9,222,33,39,248,22,178,3,248,22,88,23,200,2,250,22,73,
22,2,32,0,89,162,34,35,45,9,222,33,40,248,22,178,3,248,22,64,201, 2,22,248,22,73,249,22,73,248,22,73,248,22,64,23,204,2,250,22,74,2,
248,22,65,198,27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248, 23,249,22,2,22,64,23,204,2,248,22,90,23,206,2,249,22,63,248,22,64,
22,65,195,27,248,22,65,248,22,178,3,196,249,22,171,3,80,158,37,34,250, 23,202,1,249,22,2,22,88,23,200,1,250,22,74,2,20,249,22,2,32,0,
22,74,2,22,249,22,2,32,0,89,162,34,35,45,9,222,33,42,248,22,178, 89,162,42,35,45,9,222,33,40,248,22,178,3,248,22,64,201,248,22,65,198,
3,248,22,64,201,248,22,65,198,27,248,22,65,248,22,178,3,196,27,248,22, 27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,
178,3,248,22,64,195,249,22,171,3,80,158,38,34,28,248,22,71,195,250,22, 248,22,65,248,22,178,3,23,197,1,249,22,171,3,80,158,37,34,250,22,74,
74,2,20,9,248,22,65,199,250,22,73,2,4,248,22,73,248,22,64,199,250, 2,22,249,22,2,32,0,89,162,42,35,45,9,222,33,42,248,22,178,3,248,
22,74,2,3,248,22,65,201,248,22,65,202,27,248,22,65,248,22,178,3,196, 22,64,201,248,22,65,198,27,248,22,65,248,22,178,3,196,27,248,22,178,3,
248,22,64,195,249,22,171,3,80,158,38,34,28,248,22,71,195,250,22,74,2,
20,9,248,22,65,199,250,22,73,2,4,248,22,73,248,22,64,199,250,22,74,
2,3,248,22,65,201,248,22,65,202,27,248,22,65,248,22,178,3,23,197,1,
27,249,22,1,22,77,249,22,2,22,178,3,248,22,178,3,248,22,64,199,249, 27,249,22,1,22,77,249,22,2,22,178,3,248,22,178,3,248,22,64,199,249,
22,171,3,80,158,38,34,251,22,73,1,22,119,105,116,104,45,99,111,110,116, 22,171,3,80,158,38,34,251,22,73,1,22,119,105,116,104,45,99,111,110,116,
105,110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,1,23,101, 105,110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,1,23,101,
120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, 120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,
110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114, 110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,
107,45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9, 107,45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9,
248,22,65,203,27,248,22,65,248,22,178,3,196,28,248,22,71,193,20,15,159, 248,22,65,203,27,248,22,65,248,22,178,3,23,197,1,28,248,22,71,23,194,
35,34,35,249,22,171,3,80,158,37,34,27,248,22,178,3,248,22,64,197,28, 2,87,94,23,193,1,20,15,159,35,34,35,249,22,171,3,80,158,37,34,27,
249,22,137,8,62,61,62,248,22,172,3,248,22,88,196,250,22,73,2,20,248, 248,22,178,3,248,22,64,23,198,2,28,249,22,138,8,62,61,62,248,22,172,
22,73,249,22,73,21,93,2,25,248,22,64,199,250,22,74,2,6,249,22,73, 3,248,22,88,23,197,2,250,22,73,2,20,248,22,73,249,22,73,21,93,2,
2,25,249,22,73,248,22,97,203,2,25,248,22,65,202,251,22,73,2,17,28, 25,248,22,64,199,250,22,74,2,7,249,22,73,2,25,249,22,73,248,22,97,
249,22,137,8,248,22,172,3,248,22,64,200,64,101,108,115,101,10,248,22,64, 203,2,25,248,22,65,202,251,22,73,2,17,28,249,22,138,8,248,22,172,3,
197,250,22,74,2,20,9,248,22,65,200,249,22,63,2,6,248,22,65,202,99, 248,22,64,23,201,2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74,
2,20,9,248,22,65,23,201,1,249,22,63,2,7,248,22,65,23,203,1,99,
8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110, 8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,
118,54,56,48,52,16,4,11,11,2,19,3,1,7,101,110,118,54,56,48,53, 118,54,57,51,57,16,4,11,11,2,19,3,1,7,101,110,118,54,57,52,48,
18,158,94,10,64,118,111,105,100,8,47,27,248,22,65,248,22,178,3,196,249, 18,158,94,10,64,118,111,105,100,8,47,27,248,22,65,248,22,178,3,196,249,
22,171,3,80,158,37,34,28,248,22,51,248,22,172,3,248,22,64,197,250,22, 22,171,3,80,158,37,34,28,248,22,51,248,22,172,3,248,22,64,197,250,22,
73,2,26,248,22,73,248,22,64,199,248,22,88,198,27,248,22,172,3,248,22, 73,2,26,248,22,73,248,22,64,199,248,22,88,198,27,248,22,172,3,248,22,
@ -75,187 +79,187 @@
6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11, 6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11,
11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2, 11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,
10,2,11,2,12,34,44,16,11,16,5,93,2,13,20,15,159,34,34,34,34, 10,2,11,2,12,34,44,16,11,16,5,93,2,13,20,15,159,34,34,34,34,
20,102,159,34,16,0,16,1,33,32,10,16,5,93,2,12,89,162,8,36,35, 20,102,159,34,16,0,16,1,33,32,10,16,5,93,2,12,89,162,8,44,35,
51,9,223,0,33,33,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13, 51,9,223,0,33,33,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,
16,0,11,16,5,93,2,5,89,162,8,36,35,51,9,223,0,33,34,34,20, 16,0,11,16,5,93,2,5,89,162,8,44,35,51,9,223,0,33,34,34,20,
102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,7, 102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,8,
89,162,8,36,35,51,9,223,0,33,35,34,20,102,159,34,16,1,20,25,159, 89,162,8,44,35,51,9,223,0,33,35,34,20,102,159,34,16,1,20,25,159,
35,2,2,2,13,16,1,33,36,11,16,5,93,2,9,89,162,8,36,35,54, 35,2,2,2,13,16,1,33,36,11,16,5,93,2,10,89,162,8,44,35,54,
9,223,0,33,37,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16, 9,223,0,33,37,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,
1,33,38,11,16,5,93,2,4,89,162,8,36,35,56,9,223,0,33,41,34, 1,33,38,11,16,5,93,2,4,89,162,8,44,35,56,9,223,0,33,41,34,
20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2, 20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,
8,89,162,8,36,35,51,9,223,0,33,43,34,20,102,159,34,16,1,20,25, 9,89,162,8,44,35,51,9,223,0,33,43,34,20,102,159,34,16,1,20,25,
159,35,2,2,2,13,16,0,11,16,5,93,2,3,89,162,8,36,35,52,9, 159,35,2,2,2,13,16,0,11,16,5,93,2,3,89,162,8,44,35,52,9,
223,0,33,44,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0, 223,0,33,44,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,
11,16,5,93,2,10,89,162,8,36,35,53,9,223,0,33,45,34,20,102,159, 11,16,5,93,2,6,89,162,8,44,35,53,9,223,0,33,45,34,20,102,159,
34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,6,89,162, 34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,7,89,162,
8,36,35,56,9,223,0,33,46,34,20,102,159,34,16,1,20,25,159,35,2, 8,44,35,56,9,223,0,33,46,34,20,102,159,34,16,1,20,25,159,35,2,
2,2,13,16,1,33,48,11,16,5,93,2,11,89,162,8,36,35,52,9,223, 2,2,13,16,1,33,48,11,16,5,93,2,11,89,162,8,44,35,52,9,223,
0,33,49,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11, 0,33,49,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,
16,0,94,2,16,2,15,93,2,16,9,0}; 16,0,94,2,16,2,15,93,2,16,9,0};
EVAL_ONE_SIZED_STR((char *)expr, 1964); EVAL_ONE_SIZED_STR((char *)expr, 2048);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,51,46,57,57,46,48,46,57,61,0,0,0,1,0,0,3,0,16, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,61,0,0,0,1,0,0,3,0,
0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169,0, 16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169,
200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1,112, 0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1,
1,157,1,202,1,226,1,9,2,11,2,20,2,71,2,87,3,96,3,126,3, 112,1,157,1,202,1,226,1,9,2,11,2,20,2,71,2,87,3,96,3,126,
170,4,242,4,58,5,146,5,158,5,201,5,217,5,204,6,218,6,69,7,8, 3,170,4,242,4,58,5,146,5,158,5,201,5,217,5,204,6,218,6,69,7,
8,202,8,209,8,215,8,75,9,87,9,155,9,1,10,14,10,36,10,170,10, 8,8,202,8,209,8,215,8,75,9,87,9,155,9,1,10,14,10,36,10,170,
36,11,37,12,45,12,53,12,79,12,159,12,0,0,210,15,0,0,29,11,11, 10,36,11,37,12,45,12,53,12,79,12,158,12,0,0,209,15,0,0,29,11,
72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110,111, 11,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110,
114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99,107, 111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99,
45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108,101, 107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108,
99,116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104, 101,99,116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,
69,45,102,105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117,102,102, 104,69,45,102,105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117,102,
105,120,45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45, 102,105,120,45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,
115,117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, 45,115,117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,
120,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29, 105,120,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,
102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105, 29,102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,
111,110,45,112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116,45,115, 105,111,110,45,112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116,45,
116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102,105,110, 115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102,105,
100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101,109,98, 110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101,109,
101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2,17,68, 98,101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2,17,
35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99,45,102, 68,35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99,45,
105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116,104,32,111,114, 102,105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116,104,32,111,
32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,29,29, 114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,29,
126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32, 29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,
112,97,116,104,58,32,126,115,6,42,42,126,97,58,32,99,111,108,108,101,99, 32,112,97,116,104,58,32,126,115,6,42,42,126,97,58,32,99,111,108,108,101,
116,105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110, 99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,
32,97,110,121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,102, 110,32,97,110,121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,
111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108, 102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,
105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,105, 108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,
110,103,32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99, 105,110,103,32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,
97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111, 99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,
32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,68,35,37,107,101, 111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,68,35,37,107,
114,110,101,108,27,20,14,159,80,158,35,49,250,80,158,38,50,249,22,27,11, 101,114,110,101,108,27,20,14,159,80,158,35,49,250,80,158,38,50,249,22,27,
80,158,40,49,22,137,12,10,248,22,186,4,195,28,248,22,164,5,193,12,87, 11,80,158,40,49,22,138,12,10,248,22,186,4,195,28,248,22,164,5,193,12,
94,248,22,140,8,193,248,80,159,36,53,35,195,28,248,22,71,194,9,27,248, 87,94,248,22,141,8,193,248,80,159,36,53,35,195,28,248,22,71,194,9,27,
22,64,195,27,28,248,22,182,12,194,193,28,248,22,181,12,194,249,22,183,12, 248,22,64,195,27,28,248,22,183,12,194,193,28,248,22,182,12,194,249,22,184,
195,250,80,158,41,47,248,22,133,13,2,20,11,10,250,80,158,39,47,248,22, 12,195,250,80,158,41,47,248,22,134,13,2,20,11,10,250,80,158,39,47,248,
133,13,2,20,196,10,28,192,249,22,63,248,22,185,12,249,22,183,12,197,247, 22,134,13,2,20,196,10,28,192,249,22,63,248,22,186,12,249,22,184,12,197,
22,134,13,27,248,22,65,199,28,248,22,71,193,9,27,248,22,64,194,27,28, 247,22,135,13,27,248,22,65,199,28,248,22,71,193,9,27,248,22,64,194,27,
248,22,182,12,194,193,28,248,22,181,12,194,249,22,183,12,195,250,80,158,46, 28,248,22,183,12,194,193,28,248,22,182,12,194,249,22,184,12,195,250,80,158,
47,248,22,133,13,2,20,11,10,250,80,158,44,47,248,22,133,13,2,20,196, 46,47,248,22,134,13,2,20,11,10,250,80,158,44,47,248,22,134,13,2,20,
10,28,192,249,22,63,248,22,185,12,249,22,183,12,197,247,22,134,13,248,80, 196,10,28,192,249,22,63,248,22,186,12,249,22,184,12,197,247,22,135,13,248,
159,44,52,35,248,22,65,198,248,80,159,42,52,35,248,22,65,196,27,248,22, 80,159,44,52,35,248,22,65,198,248,80,159,42,52,35,248,22,65,196,27,248,
65,197,28,248,22,71,193,9,27,248,22,64,194,27,28,248,22,182,12,194,193, 22,65,197,28,248,22,71,193,9,27,248,22,64,194,27,28,248,22,183,12,194,
28,248,22,181,12,194,249,22,183,12,195,250,80,158,44,47,248,22,133,13,2, 193,28,248,22,182,12,194,249,22,184,12,195,250,80,158,44,47,248,22,134,13,
20,11,10,250,80,158,42,47,248,22,133,13,2,20,196,10,28,192,249,22,63, 2,20,11,10,250,80,158,42,47,248,22,134,13,2,20,196,10,28,192,249,22,
248,22,185,12,249,22,183,12,197,247,22,134,13,248,80,159,42,52,35,248,22, 63,248,22,186,12,249,22,184,12,197,247,22,135,13,248,80,159,42,52,35,248,
65,198,248,80,159,40,52,35,248,22,65,196,249,80,159,36,37,35,2,7,195, 22,65,198,248,80,159,40,52,35,248,22,65,196,249,80,159,36,37,35,2,7,
27,248,22,158,12,194,28,192,192,28,248,22,133,6,194,27,248,22,180,12,195, 195,27,248,22,159,12,194,28,192,192,28,248,22,133,6,194,27,248,22,181,12,
28,192,192,248,22,181,12,195,11,87,94,28,28,248,22,159,12,194,10,27,248, 195,28,192,192,248,22,182,12,195,11,87,94,28,28,248,22,160,12,194,10,27,
22,158,12,195,28,192,192,28,248,22,133,6,195,27,248,22,180,12,196,28,192, 248,22,159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,
192,248,22,181,12,196,11,12,250,22,167,8,76,110,111,114,109,97,108,45,112, 192,192,248,22,182,12,196,11,12,250,22,168,8,76,110,111,114,109,97,108,45,
97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32, 112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,
97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45, 32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,
112,97,116,104,32,115,116,114,105,110,103,196,28,28,248,22,159,12,194,249,22, 45,112,97,116,104,32,115,116,114,105,110,103,196,28,28,248,22,160,12,194,249,
137,8,248,22,160,12,196,2,21,249,22,137,8,247,22,152,7,2,21,27,28, 22,138,8,248,22,161,12,196,2,21,249,22,138,8,247,22,152,7,2,21,27,
248,22,133,6,195,194,248,22,142,7,248,22,163,12,196,28,249,22,146,13,0, 28,248,22,133,6,195,194,248,22,142,7,248,22,164,12,196,28,249,22,147,13,
21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93, 0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,
34,194,28,248,22,133,6,195,248,22,166,12,195,194,27,248,22,172,6,194,249, 93,34,194,28,248,22,133,6,195,248,22,167,12,195,194,27,248,22,172,6,194,
22,167,12,248,22,145,7,250,22,152,13,0,6,35,114,120,34,47,34,28,249, 249,22,168,12,248,22,145,7,250,22,153,13,0,6,35,114,120,34,47,34,28,
22,146,13,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47, 249,22,147,13,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,
92,92,93,42,36,34,200,198,250,22,152,13,0,19,35,114,120,34,91,32,46, 47,92,92,93,42,36,34,200,198,250,22,153,13,0,19,35,114,120,34,91,32,
93,43,40,91,47,92,92,93,42,41,36,34,201,6,2,2,92,49,80,158,42, 46,93,43,40,91,47,92,92,93,42,41,36,34,201,6,2,2,92,49,80,158,
35,2,21,28,248,22,133,6,194,248,22,166,12,194,193,87,94,28,27,248,22, 42,35,2,21,28,248,22,133,6,194,248,22,167,12,194,193,87,94,28,27,248,
158,12,195,28,192,192,28,248,22,133,6,195,27,248,22,180,12,196,28,192,192, 22,159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192,
248,22,181,12,196,11,12,250,22,167,8,195,2,22,196,28,248,22,180,12,194, 192,248,22,182,12,196,11,12,250,22,168,8,195,2,22,196,28,248,22,181,12,
12,248,22,182,10,249,22,191,9,248,22,162,6,250,22,181,6,2,23,199,200, 194,12,248,22,183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,199,
247,22,23,87,94,28,27,248,22,158,12,195,28,192,192,28,248,22,133,6,195, 200,247,22,23,87,94,28,27,248,22,159,12,195,28,192,192,28,248,22,133,6,
27,248,22,180,12,196,28,192,192,248,22,181,12,196,11,12,250,22,167,8,195, 195,27,248,22,181,12,196,28,192,192,248,22,182,12,196,11,12,250,22,168,8,
2,22,196,28,248,22,180,12,194,12,248,22,182,10,249,22,191,9,248,22,162, 195,2,22,196,28,248,22,181,12,194,12,248,22,183,10,249,22,128,10,248,22,
6,250,22,181,6,2,23,199,200,247,22,23,87,94,87,94,28,27,248,22,158, 162,6,250,22,181,6,2,23,199,200,247,22,23,87,94,87,94,28,27,248,22,
12,195,28,192,192,28,248,22,133,6,195,27,248,22,180,12,196,28,192,192,248, 159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192,192,
22,181,12,196,11,12,250,22,167,8,195,2,22,196,28,248,22,180,12,194,12, 248,22,182,12,196,11,12,250,22,168,8,195,2,22,196,28,248,22,181,12,194,
248,22,182,10,249,22,191,9,248,22,162,6,250,22,181,6,2,23,199,200,247, 12,248,22,183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,199,200,
22,23,249,22,3,89,162,34,35,48,9,223,2,33,36,196,248,22,182,10,249, 247,22,23,249,22,3,89,162,34,35,48,9,223,2,33,36,196,248,22,183,10,
22,157,10,195,247,22,23,87,94,87,94,249,80,159,36,37,35,2,7,195,249, 249,22,158,10,195,247,22,23,87,94,87,94,249,80,159,36,37,35,2,7,195,
22,3,80,159,36,51,35,196,251,80,159,38,40,35,2,7,32,0,89,162,34, 249,22,3,80,159,36,51,35,196,251,80,159,38,40,35,2,7,32,0,89,162,
35,43,9,222,33,38,197,198,32,40,89,162,34,40,57,65,99,108,111,111,112, 34,35,43,9,222,33,38,197,198,32,40,89,162,34,40,57,65,99,108,111,111,
222,33,41,28,248,22,71,198,248,195,251,22,181,6,2,24,198,28,248,22,71, 112,222,33,41,28,248,22,71,198,248,195,251,22,181,6,2,24,198,28,248,22,
202,200,250,22,1,22,176,12,203,204,197,27,249,22,176,12,248,22,64,201,198, 71,202,200,250,22,1,22,177,12,203,204,197,27,249,22,177,12,248,22,64,201,
28,248,22,171,12,193,27,250,22,1,22,176,12,196,201,28,248,22,171,12,193, 198,28,248,22,172,12,193,27,250,22,1,22,177,12,196,201,28,248,22,172,12,
192,27,248,22,65,201,28,248,22,71,193,248,198,251,22,181,6,2,24,201,28, 193,192,27,248,22,65,201,28,248,22,71,193,248,198,251,22,181,6,2,24,201,
248,22,71,205,203,250,22,1,22,176,12,206,23,15,200,27,249,22,176,12,248, 28,248,22,71,205,203,250,22,1,22,177,12,206,23,15,200,27,249,22,177,12,
22,64,196,201,28,248,22,171,12,193,27,250,22,1,22,176,12,196,204,28,248, 248,22,64,196,201,28,248,22,172,12,193,27,250,22,1,22,177,12,196,204,28,
22,171,12,193,192,253,2,40,203,204,205,206,23,15,248,22,65,201,253,2,40, 248,22,172,12,193,192,253,2,40,203,204,205,206,23,15,248,22,65,201,253,2,
202,203,204,205,206,248,22,65,200,27,248,22,65,200,28,248,22,71,193,248,197, 40,202,203,204,205,206,248,22,65,200,27,248,22,65,200,28,248,22,71,193,248,
251,22,181,6,2,24,200,28,248,22,71,204,202,250,22,1,22,176,12,205,206, 197,251,22,181,6,2,24,200,28,248,22,71,204,202,250,22,1,22,177,12,205,
199,27,249,22,176,12,248,22,64,196,200,28,248,22,171,12,193,27,250,22,1, 206,199,27,249,22,177,12,248,22,64,196,200,28,248,22,172,12,193,27,250,22,
22,176,12,196,203,28,248,22,171,12,193,192,253,2,40,202,203,204,205,206,248, 1,22,177,12,196,203,28,248,22,172,12,193,192,253,2,40,202,203,204,205,206,
22,65,201,253,2,40,201,202,203,204,205,248,22,65,200,27,247,22,135,13,253, 248,22,65,201,253,2,40,201,202,203,204,205,248,22,65,200,27,247,22,136,13,
2,40,198,199,200,201,202,198,87,95,28,28,248,22,159,12,193,10,27,248,22, 253,2,40,198,199,200,201,202,198,87,95,28,28,248,22,160,12,193,10,27,248,
158,12,194,28,192,192,28,248,22,133,6,194,27,248,22,180,12,195,28,192,192, 22,159,12,194,28,192,192,28,248,22,133,6,194,27,248,22,181,12,195,28,192,
248,22,181,12,195,11,12,252,22,167,8,199,2,25,34,197,198,28,28,248,22, 192,248,22,182,12,195,11,12,252,22,168,8,199,2,25,34,197,198,28,28,248,
133,6,194,10,248,22,185,6,194,12,252,22,167,8,199,2,26,35,197,198,91, 22,133,6,194,10,248,22,185,6,194,12,252,22,168,8,199,2,26,35,197,198,
159,37,11,90,161,37,34,11,248,22,179,12,196,87,94,28,192,12,250,22,168, 91,159,37,11,90,161,37,34,11,248,22,180,12,196,87,94,28,192,12,250,22,
8,200,2,27,198,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87,95, 169,8,200,2,27,198,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87,
28,28,248,22,159,12,195,10,27,248,22,158,12,196,28,192,192,28,248,22,133, 95,28,28,248,22,160,12,195,10,27,248,22,159,12,196,28,192,192,28,248,22,
6,196,27,248,22,180,12,197,28,192,192,248,22,181,12,197,11,12,252,22,167, 133,6,196,27,248,22,181,12,197,28,192,192,248,22,182,12,197,11,12,252,22,
8,2,10,2,25,34,199,200,28,28,248,22,133,6,196,10,248,22,185,6,196, 168,8,2,10,2,25,34,199,200,28,28,248,22,133,6,196,10,248,22,185,6,
12,252,22,167,8,2,10,2,26,35,199,200,91,159,37,11,90,161,37,34,11, 196,12,252,22,168,8,2,10,2,26,35,199,200,91,159,37,11,90,161,37,34,
248,22,179,12,198,87,94,28,192,12,250,22,168,8,2,10,2,27,200,249,22, 11,248,22,180,12,198,87,94,28,192,12,250,22,169,8,2,10,2,27,200,249,
7,194,195,27,249,22,168,12,250,22,151,13,0,18,35,114,120,35,34,40,91, 22,7,194,195,27,249,22,169,12,250,22,152,13,0,18,35,114,120,35,34,40,
46,93,91,94,46,93,42,124,41,36,34,248,22,164,12,200,28,248,22,133,6, 91,46,93,91,94,46,93,42,124,41,36,34,248,22,165,12,200,28,248,22,133,
202,249,22,145,7,203,8,63,201,28,248,22,159,12,198,248,22,160,12,198,247, 6,202,249,22,145,7,203,8,63,201,28,248,22,160,12,198,248,22,161,12,198,
22,161,12,28,248,22,158,12,194,249,22,176,12,195,194,192,91,159,36,11,90, 247,22,162,12,28,248,22,159,12,194,249,22,177,12,195,194,192,91,159,36,11,
161,36,34,11,87,95,28,28,248,22,159,12,195,10,27,248,22,158,12,196,28, 90,161,36,34,11,87,95,28,28,248,22,160,12,195,10,27,248,22,159,12,196,
192,192,28,248,22,133,6,196,27,248,22,180,12,197,28,192,192,248,22,181,12, 28,192,192,28,248,22,133,6,196,27,248,22,181,12,197,28,192,192,248,22,182,
197,11,12,252,22,167,8,2,11,2,25,34,199,200,28,28,248,22,133,6,196, 12,197,11,12,252,22,168,8,2,11,2,25,34,199,200,28,28,248,22,133,6,
10,248,22,185,6,196,12,252,22,167,8,2,11,2,26,35,199,200,91,159,37, 196,10,248,22,185,6,196,12,252,22,168,8,2,11,2,26,35,199,200,91,159,
11,90,161,37,34,11,248,22,179,12,198,87,94,28,192,12,250,22,168,8,2, 37,11,90,161,37,34,11,248,22,180,12,198,87,94,28,192,12,250,22,169,8,
11,2,27,200,249,22,7,194,195,27,249,22,168,12,249,22,131,7,250,22,152, 2,11,2,27,200,249,22,7,194,195,27,249,22,169,12,249,22,131,7,250,22,
13,0,9,35,114,120,35,34,91,46,93,34,248,22,164,12,202,6,1,1,95, 153,13,0,9,35,114,120,35,34,91,46,93,34,248,22,165,12,202,6,1,1,
28,248,22,133,6,201,249,22,145,7,202,8,63,200,28,248,22,159,12,198,248, 95,28,248,22,133,6,201,249,22,145,7,202,8,63,200,28,248,22,160,12,198,
22,160,12,198,247,22,161,12,28,248,22,158,12,194,249,22,176,12,195,194,192, 248,22,161,12,198,247,22,162,12,28,248,22,159,12,194,249,22,177,12,195,194,
249,247,22,184,5,194,11,248,80,158,35,45,9,27,247,22,137,13,249,80,158, 192,249,247,22,184,5,194,11,248,80,158,35,45,9,27,247,22,138,13,249,80,
37,46,28,194,27,248,22,150,7,6,11,11,80,76,84,67,79,76,76,69,67, 158,37,46,28,194,27,248,22,150,7,6,11,11,80,76,84,67,79,76,76,69,
84,83,28,192,192,6,0,0,6,0,0,27,28,195,250,22,176,12,248,22,133, 67,84,83,28,192,192,6,0,0,6,0,0,27,28,195,250,22,177,12,248,22,
13,69,97,100,100,111,110,45,100,105,114,247,22,148,7,6,8,8,99,111,108, 134,13,69,97,100,100,111,110,45,100,105,114,247,22,148,7,6,8,8,99,111,
108,101,99,116,115,11,27,248,80,159,40,52,35,249,22,77,201,248,22,73,248, 108,108,101,99,116,115,11,27,248,80,159,40,52,35,249,22,77,201,248,22,73,
22,133,13,72,99,111,108,108,101,99,116,115,45,100,105,114,28,193,249,22,63, 248,22,134,13,72,99,111,108,108,101,99,116,115,45,100,105,114,28,193,249,22,
195,194,192,32,49,89,162,34,37,49,2,19,222,33,50,27,249,22,144,13,196, 63,195,194,192,32,49,89,162,34,37,49,2,19,222,33,50,27,249,22,145,13,
197,28,192,27,248,22,88,194,27,250,2,49,198,199,248,22,97,198,28,249,22, 196,197,28,192,27,248,22,88,194,27,250,2,49,198,199,248,22,97,198,28,249,
191,6,195,2,28,249,22,77,197,194,249,22,63,248,22,167,12,196,194,28,249, 22,191,6,195,2,28,249,22,77,197,194,249,22,63,248,22,168,12,196,194,28,
22,191,6,197,2,28,249,22,77,195,9,249,22,63,248,22,167,12,198,9,87, 249,22,191,6,197,2,28,249,22,77,195,9,249,22,63,248,22,168,12,198,9,
95,28,28,248,22,185,6,194,10,248,22,133,6,194,12,250,22,167,8,2,14, 87,95,28,28,248,22,185,6,194,10,248,22,133,6,194,12,250,22,168,8,2,
6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114, 14,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,
105,110,103,196,28,28,248,22,72,195,249,22,4,22,158,12,196,11,12,250,22, 114,105,110,103,196,28,28,248,22,72,195,249,22,4,22,159,12,196,11,12,250,
167,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197, 22,168,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,
250,2,49,197,195,28,248,22,133,6,197,248,22,144,7,197,196,32,52,89,162, 197,250,2,49,197,195,28,248,22,133,6,197,248,22,144,7,197,196,32,52,89,
8,36,38,56,2,19,222,33,55,32,53,89,162,8,36,37,53,70,102,111,117, 162,8,36,38,56,2,19,222,33,55,32,53,89,162,8,36,37,53,70,102,111,
110,100,45,101,120,101,99,222,33,54,28,192,91,159,37,11,90,161,37,34,11, 117,110,100,45,101,120,101,99,222,33,54,28,192,91,159,37,11,90,161,37,34,
248,22,179,12,198,27,28,197,27,248,22,184,12,200,28,249,22,139,8,194,201, 11,248,22,180,12,198,27,28,197,27,248,22,185,12,200,28,249,22,140,8,194,
11,28,248,22,180,12,193,250,2,53,200,201,249,22,176,12,199,197,250,2,53, 201,11,28,248,22,181,12,193,250,2,53,200,201,249,22,177,12,199,197,250,2,
200,201,195,11,28,192,192,27,28,248,22,158,12,195,27,249,22,176,12,197,200, 53,200,201,195,11,28,192,192,27,28,248,22,159,12,195,27,249,22,177,12,197,
28,28,248,22,171,12,193,10,248,22,170,12,193,192,11,11,28,192,192,28,198, 200,28,28,248,22,172,12,193,10,248,22,171,12,193,192,11,11,28,192,192,28,
11,27,248,22,184,12,201,28,249,22,139,8,194,202,11,28,248,22,180,12,193, 198,11,27,248,22,185,12,201,28,249,22,140,8,194,202,11,28,248,22,181,12,
250,2,53,201,202,249,22,176,12,200,197,250,2,53,201,202,195,194,28,248,22, 193,250,2,53,201,202,249,22,177,12,200,197,250,2,53,201,202,195,194,28,248,
71,196,11,27,248,22,183,12,248,22,64,198,27,249,22,176,12,195,196,28,248, 22,71,196,11,27,248,22,184,12,248,22,64,198,27,249,22,177,12,195,196,28,
22,170,12,193,250,2,53,198,199,195,27,248,22,65,199,28,248,22,71,193,11, 248,22,171,12,193,250,2,53,198,199,195,27,248,22,65,199,28,248,22,71,193,
27,248,22,183,12,248,22,64,195,27,249,22,176,12,195,199,28,248,22,170,12, 11,27,248,22,184,12,248,22,64,195,27,249,22,177,12,195,199,28,248,22,171,
193,250,2,53,201,202,195,27,248,22,65,196,28,248,22,71,193,11,27,248,22, 12,193,250,2,53,201,202,195,27,248,22,65,196,28,248,22,71,193,11,27,248,
183,12,248,22,64,195,27,249,22,176,12,195,202,28,248,22,170,12,193,250,2, 22,184,12,248,22,64,195,27,249,22,177,12,195,202,28,248,22,171,12,193,250,
53,204,205,195,251,2,52,204,205,206,248,22,65,199,87,95,28,27,248,22,158, 2,53,204,205,195,251,2,52,204,205,206,248,22,65,199,87,95,28,27,248,22,
12,195,28,192,192,28,248,22,133,6,195,27,248,22,180,12,196,28,192,192,248, 159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192,192,
22,181,12,196,11,12,250,22,167,8,2,15,6,25,25,112,97,116,104,32,111, 248,22,182,12,196,11,12,250,22,168,8,2,15,6,25,25,112,97,116,104,32,
114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196,28, 111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196,
28,194,28,27,248,22,158,12,196,28,192,192,28,248,22,133,6,196,27,248,22, 28,28,194,28,27,248,22,159,12,196,28,192,192,28,248,22,133,6,196,27,248,
180,12,197,28,192,192,248,22,181,12,197,11,248,22,180,12,195,11,10,12,250, 22,181,12,197,28,192,192,248,22,182,12,197,11,248,22,181,12,195,11,10,12,
22,167,8,2,15,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105,118, 250,22,168,8,2,15,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105,
101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,197,28,28,248,22, 118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,197,28,28,248,
180,12,194,91,159,37,11,90,161,37,34,11,248,22,179,12,197,249,22,137,8, 22,181,12,194,91,159,37,11,90,161,37,34,11,248,22,180,12,197,249,22,138,
194,68,114,101,108,97,116,105,118,101,11,27,248,22,150,7,6,4,4,80,65, 8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,150,7,6,4,4,80,
84,72,251,2,52,198,199,200,28,196,27,249,80,158,42,46,199,9,28,249,22, 65,84,72,251,2,52,198,199,200,28,196,27,249,80,158,42,46,199,9,28,249,
137,8,247,22,152,7,2,21,249,22,63,248,22,167,12,5,1,46,194,192,9, 22,138,8,247,22,152,7,2,21,249,22,63,248,22,168,12,5,1,46,194,192,
27,248,22,183,12,195,28,248,22,170,12,193,250,2,53,198,199,195,11,250,80, 9,27,248,22,184,12,195,28,248,22,171,12,193,250,2,53,198,199,195,11,250,
158,37,47,196,197,11,250,80,158,37,47,196,11,11,87,94,249,22,189,5,247, 80,158,37,47,196,197,11,250,80,158,37,47,196,11,11,87,94,249,22,189,5,
22,166,4,195,248,22,140,5,249,22,151,3,34,249,22,135,3,197,198,27,248, 247,22,166,4,195,248,22,140,5,249,22,151,3,34,249,22,135,3,197,198,27,
22,133,13,2,20,27,249,80,158,38,47,195,11,27,27,248,22,154,3,198,28, 248,22,134,13,2,20,27,249,80,158,38,47,195,11,27,27,248,22,154,3,198,
192,192,34,27,27,248,22,154,3,200,28,192,192,34,27,249,22,183,4,197,89, 28,192,192,34,27,27,248,22,154,3,200,28,192,192,34,27,249,22,183,4,197,
162,8,36,34,46,9,224,4,3,33,59,27,248,22,170,4,194,87,94,248,22, 89,162,34,34,46,9,224,4,3,33,59,27,248,22,170,4,194,87,94,248,22,
134,4,21,94,2,17,2,29,248,80,159,41,53,35,193,159,34,20,102,159,34, 134,4,21,94,2,17,2,29,248,80,159,41,53,35,193,159,34,20,102,159,34,
16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,67,35,37, 16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,67,35,37,
117,116,105,108,115,2,1,11,10,10,10,10,10,41,80,158,34,34,20,102,159, 117,116,105,108,115,2,1,11,10,10,10,10,10,41,80,158,34,34,20,102,159,
@ -288,7 +292,7 @@
16,2,32,0,89,162,34,35,42,2,12,222,33,46,80,159,34,44,35,83,158, 16,2,32,0,89,162,34,35,42,2,12,222,33,46,80,159,34,44,35,83,158,
34,16,2,83,158,37,20,96,95,2,13,89,162,34,34,41,9,223,0,33,47, 34,16,2,83,158,37,20,96,95,2,13,89,162,34,34,41,9,223,0,33,47,
89,162,34,35,51,9,223,0,33,48,80,159,34,45,35,83,158,34,16,2,27, 89,162,34,35,51,9,223,0,33,48,80,159,34,45,35,83,158,34,16,2,27,
248,22,140,13,248,22,144,7,27,28,249,22,137,8,247,22,152,7,2,21,6, 248,22,141,13,248,22,144,7,27,28,249,22,138,8,247,22,152,7,2,21,6,
1,1,59,6,1,1,58,250,22,181,6,6,14,14,40,91,94,126,97,93,42, 1,1,59,6,1,1,58,250,22,181,6,6,14,14,40,91,94,126,97,93,42,
41,126,97,40,46,42,41,195,195,89,162,34,36,46,2,14,223,0,33,51,80, 41,126,97,40,46,42,41,195,195,89,162,34,36,46,2,14,223,0,33,51,80,
159,34,46,35,83,158,34,16,2,83,158,37,20,96,96,2,15,89,162,8,36, 159,34,46,35,83,158,34,16,2,83,158,37,20,96,96,2,15,89,162,8,36,
@ -299,160 +303,160 @@
EVAL_ONE_SIZED_STR((char *)expr, 4194); EVAL_ONE_SIZED_STR((char *)expr, 4194);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,51,46,57,57,46,48,46,57,7,0,0,0,1,0,0,6,0,19, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,7,0,0,0,1,0,0,6,0,
0,34,0,48,0,62,0,76,0,0,0,253,0,0,0,65,113,117,111,116,101, 19,0,34,0,48,0,62,0,76,0,0,0,253,0,0,0,65,113,117,111,116,
29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37,110, 101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37,
101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122,11, 110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122,
29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35,37, 11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35,
107,101,114,110,101,108,11,159,34,20,102,159,34,16,1,20,24,65,98,101,103, 37,107,101,114,110,101,108,11,159,34,20,102,159,34,16,1,20,24,65,98,101,
105,110,16,0,83,158,40,20,99,134,69,35,37,98,117,105,108,116,105,110,29, 103,105,110,16,0,83,158,40,20,99,134,69,35,37,98,117,105,108,116,105,110,
11,11,10,10,18,94,11,97,10,34,11,97,159,2,2,34,34,159,2,3,34, 29,11,11,10,10,18,94,11,97,10,34,11,97,159,2,2,34,34,159,2,3,
34,159,2,4,34,34,159,2,5,34,34,159,2,6,34,34,16,0,18,94,11, 34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34,34,16,0,18,94,
95,35,11,16,0,10,18,94,11,95,8,240,48,117,0,0,11,16,0,34,80, 11,95,35,11,16,0,10,18,94,11,95,8,240,48,117,0,0,11,16,0,34,
158,34,34,20,102,159,34,16,0,16,0,11,11,16,0,34,11,11,11,16,0, 80,158,34,34,20,102,159,34,16,0,16,0,11,11,16,0,34,11,11,11,16,
16,0,16,0,34,34,11,11,16,0,16,0,16,0,34,34,11,11,16,0,16, 0,16,0,16,0,34,34,11,11,16,0,16,0,16,0,34,34,11,11,16,0,
0,16,0,34,34,16,0,16,0,98,2,6,2,5,29,94,2,1,69,35,37, 16,0,16,0,34,34,16,0,16,0,98,2,6,2,5,29,94,2,1,69,35,
102,111,114,101,105,103,110,11,2,4,2,3,2,2,9,9,0}; 37,102,111,114,101,105,103,110,11,2,4,2,3,2,2,9,9,0};
EVAL_ONE_SIZED_STR((char *)expr, 289); EVAL_ONE_SIZED_STR((char *)expr, 290);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,51,46,57,57,46,48,46,57,52,0,0,0,1,0,0,3,0,14, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,52,0,0,0,1,0,0,3,0,
0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184,0, 14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184,
200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1,74, 0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1,
1,82,1,163,1,199,1,216,1,245,1,17,2,47,2,57,2,87,2,97,2, 74,1,82,1,163,1,199,1,216,1,245,1,17,2,47,2,57,2,87,2,97,
104,2,178,3,190,3,209,3,33,4,45,4,173,4,185,4,30,5,36,5,50, 2,104,2,178,3,190,3,209,3,33,4,45,4,173,4,185,4,30,5,36,5,
5,77,5,148,5,150,5,203,5,93,10,152,10,184,10,0,0,119,13,0,0, 50,5,77,5,148,5,150,5,203,5,93,10,151,10,183,10,0,0,118,13,0,
29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117, 0,29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,
108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,65, 117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,
113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,29,94,2, 65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,29,94,
4,68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117,108,116,45, 2,4,68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117,108,116,
114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108,101, 45,114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108,
45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112,97, 101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112,
116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105,108, 97,116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105,
101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112,116, 108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112,
45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114,101, 116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114,
118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,101, 101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,
108,97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107,101,45,115, 101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107,101,45,
116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114, 115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,
101,115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,64,119,101,97, 114,101,115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,64,119,101,
107,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117, 97,107,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100,
108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98,67, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98,
105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47,35, 67,105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47,
195,10,27,28,194,28,249,22,137,8,196,80,158,37,45,80,158,35,46,27,248, 35,195,10,27,28,194,28,249,22,138,8,196,80,158,37,45,80,158,35,46,27,
22,149,4,196,28,248,22,158,12,193,91,159,37,11,90,161,37,34,11,248,22, 248,22,149,4,196,28,248,22,159,12,193,91,159,37,11,90,161,37,34,11,248,
179,12,196,87,95,83,160,36,11,80,158,39,45,198,83,160,36,11,80,158,39, 22,180,12,196,87,95,83,160,36,11,80,158,39,45,198,83,160,36,11,80,158,
46,192,192,11,11,28,192,192,27,247,22,185,5,28,192,192,247,22,134,13,20, 39,46,192,192,11,11,28,192,192,27,247,22,185,5,28,192,192,247,22,135,13,
14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38,22,185, 20,14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38,22,
5,28,248,22,158,12,197,196,247,22,134,13,247,194,250,22,176,12,196,198,249, 185,5,28,248,22,159,12,197,196,247,22,135,13,247,194,250,22,177,12,196,198,
80,158,41,37,197,5,3,46,122,111,252,22,176,12,198,200,6,6,6,110,97, 249,80,158,41,37,197,5,3,46,122,111,252,22,177,12,198,200,6,6,6,110,
116,105,118,101,247,22,153,7,249,80,158,43,37,199,80,158,43,34,27,193,27, 97,116,105,118,101,247,22,153,7,249,80,158,43,37,199,80,158,43,34,27,193,
250,22,129,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249,22, 27,250,22,130,13,196,11,32,0,89,162,8,36,34,39,9,222,11,28,192,249,
63,195,194,11,27,248,194,195,27,250,22,129,13,196,11,32,0,89,162,8,44, 22,63,195,194,11,27,248,194,195,27,250,22,130,13,196,11,32,0,89,162,8,
34,39,9,222,11,28,192,249,22,63,195,194,11,249,247,22,139,13,248,22,64, 36,34,39,9,222,11,28,192,249,22,63,195,194,11,249,247,22,140,13,248,22,
195,195,27,248,194,195,27,250,22,129,13,196,11,32,0,89,162,8,44,34,39, 64,195,195,27,248,194,195,27,250,22,130,13,196,11,32,0,89,162,8,36,34,
9,222,11,28,192,249,22,63,195,194,11,249,247,22,183,5,248,22,64,195,195, 39,9,222,11,28,192,249,22,63,195,194,11,249,247,22,183,5,248,22,64,195,
249,247,22,183,5,194,195,87,94,28,248,80,158,35,36,194,12,250,22,167,8, 195,249,247,22,183,5,194,195,87,94,28,248,80,158,35,36,194,12,250,22,168,
77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25, 8,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,
112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116, 25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,
114,105,110,103,196,91,159,40,11,90,161,35,34,11,28,248,22,182,12,200,199, 116,114,105,110,103,196,91,159,40,11,90,161,35,34,11,28,248,22,183,12,200,
27,247,22,185,5,28,192,249,22,183,12,202,194,200,90,161,37,35,11,248,22, 199,27,247,22,185,5,28,192,249,22,184,12,202,194,200,90,161,37,35,11,248,
179,12,193,90,161,35,38,11,28,249,22,137,8,195,68,114,101,108,97,116,105, 22,180,12,193,90,161,35,38,11,28,249,22,138,8,195,68,114,101,108,97,116,
118,101,2,17,193,90,161,35,39,11,247,22,136,13,27,89,162,34,35,48,62, 105,118,101,2,17,193,90,161,35,39,11,247,22,137,13,27,89,162,34,35,48,
122,111,225,7,5,3,33,27,27,89,162,34,35,50,9,225,8,6,4,33,28, 62,122,111,225,7,5,3,33,27,27,89,162,34,35,50,9,225,8,6,4,33,
27,249,22,5,89,162,34,35,46,9,223,5,33,29,202,27,28,194,27,249,22, 28,27,249,22,5,89,162,34,35,46,9,223,5,33,29,202,27,28,194,27,249,
5,89,162,34,35,46,9,223,5,33,30,204,27,28,195,11,193,28,192,192,28, 22,5,89,162,34,35,46,9,223,5,33,30,204,27,28,195,11,193,28,192,192,
193,28,195,28,249,22,147,3,248,22,65,196,248,22,65,198,193,11,11,11,11, 28,193,28,195,28,249,22,147,3,248,22,65,196,248,22,65,198,193,11,11,11,
28,192,249,80,159,46,53,35,202,89,162,34,34,44,9,224,14,2,33,31,27, 11,28,192,249,80,159,46,53,35,202,89,162,34,34,44,9,224,14,2,33,31,
28,196,27,249,22,5,89,162,34,35,46,9,223,7,33,32,205,27,28,196,11, 27,28,196,27,249,22,5,89,162,34,35,46,9,223,7,33,32,205,27,28,196,
193,28,192,192,28,193,28,196,28,249,22,147,3,248,22,65,196,248,22,65,199, 11,193,28,192,192,28,193,28,196,28,249,22,147,3,248,22,65,196,248,22,65,
193,11,11,11,11,28,192,249,80,159,47,53,35,203,89,162,34,34,44,9,224, 199,193,11,11,11,11,28,192,249,80,159,47,53,35,203,89,162,34,34,44,9,
15,2,33,33,249,80,159,47,53,35,203,89,162,34,34,43,9,224,15,7,33, 224,15,2,33,33,249,80,159,47,53,35,203,89,162,34,34,43,9,224,15,7,
34,32,36,89,162,34,35,53,2,19,222,33,38,0,17,35,114,120,34,94,40, 33,34,32,36,89,162,34,35,53,2,19,222,33,38,0,17,35,114,120,34,94,
46,42,63,41,47,40,46,42,41,36,34,27,249,22,144,13,2,37,195,28,192, 40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,145,13,2,37,195,28,
249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,144,13,2,37,195,28, 192,249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,145,13,2,37,195,
192,249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,144,13,2,37,195, 28,192,249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,145,13,2,37,
28,192,249,22,63,248,22,88,195,248,2,36,248,22,97,196,248,22,73,194,248, 195,28,192,249,22,63,248,22,88,195,248,2,36,248,22,97,196,248,22,73,194,
22,73,194,248,22,73,194,32,39,89,162,34,35,53,2,19,222,33,40,28,248, 248,22,73,194,248,22,73,194,32,39,89,162,34,35,53,2,19,222,33,40,28,
22,71,248,22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36, 248,22,71,248,22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161,
34,11,27,248,22,65,196,28,248,22,71,248,22,65,194,249,22,7,9,248,22, 36,34,11,27,248,22,65,196,28,248,22,71,248,22,65,194,249,22,7,9,248,
64,195,91,159,36,11,90,161,36,34,11,27,248,22,65,196,28,248,22,71,248, 22,64,195,91,159,36,11,90,161,36,34,11,27,248,22,65,196,28,248,22,71,
22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36,34,11,248, 248,22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36,34,11,
2,39,248,22,65,196,249,22,7,249,22,63,248,22,64,199,196,195,249,22,7, 248,2,39,248,22,65,196,249,22,7,249,22,63,248,22,64,199,196,195,249,22,
249,22,63,248,22,64,199,196,195,249,22,7,249,22,63,248,22,64,199,196,195, 7,249,22,63,248,22,64,199,196,195,249,22,7,249,22,63,248,22,64,199,196,
27,248,2,36,194,28,194,192,248,2,39,193,87,95,28,248,22,147,4,195,12, 195,27,248,2,36,194,28,194,192,248,2,39,193,87,95,28,248,22,147,4,195,
250,22,167,8,2,20,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100, 12,250,22,168,8,2,20,6,20,20,114,101,115,111,108,118,101,100,45,109,111,
117,108,101,45,112,97,116,104,197,28,207,248,208,195,12,27,27,250,22,126,80, 100,117,108,101,45,112,97,116,104,197,28,207,248,208,195,12,27,27,250,22,126,
158,40,41,248,22,162,13,247,22,146,11,11,28,192,192,27,247,22,120,87,94, 80,158,40,41,248,22,163,13,247,22,147,11,11,28,192,192,27,247,22,120,87,
250,22,125,80,158,41,41,248,22,162,13,247,22,146,11,195,192,250,22,125,195, 94,250,22,125,80,158,41,41,248,22,163,13,247,22,147,11,195,192,250,22,125,
198,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,166,8,11, 195,198,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,167,8,
196,195,248,22,164,8,194,28,249,22,139,6,194,6,1,1,46,2,17,28,249, 11,196,195,248,22,165,8,194,28,249,22,139,6,194,6,1,1,46,2,17,28,
22,139,6,194,6,2,2,46,46,62,117,112,192,28,249,22,139,8,248,22,65, 249,22,139,6,194,6,2,2,46,46,62,117,112,192,28,249,22,140,8,248,22,
199,196,28,249,22,137,8,248,22,64,199,195,251,22,164,8,2,20,6,26,26, 65,199,196,28,249,22,138,8,248,22,64,199,195,251,22,165,8,2,20,6,26,
99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126, 26,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,
101,58,32,126,101,199,249,22,2,22,65,248,22,78,249,22,63,205,201,12,12, 126,101,58,32,126,101,199,249,22,2,22,65,248,22,78,249,22,63,205,201,12,
247,192,20,14,159,80,158,38,43,249,22,63,247,22,146,11,196,20,14,159,80, 12,247,192,20,14,159,80,158,38,43,249,22,63,247,22,147,11,196,20,14,159,
158,38,38,250,80,158,41,39,249,22,27,11,80,158,43,38,22,131,4,195,249, 80,158,38,38,250,80,158,41,39,249,22,27,11,80,158,43,38,22,131,4,195,
247,22,184,5,197,248,22,52,248,22,162,12,197,87,94,28,28,248,22,158,12, 249,247,22,184,5,197,248,22,52,248,22,163,12,197,87,94,28,28,248,22,159,
196,10,248,22,152,4,196,12,28,197,250,22,166,8,11,6,15,15,98,97,100, 12,196,10,248,22,152,4,196,12,28,197,250,22,167,8,11,6,15,15,98,97,
32,109,111,100,117,108,101,32,112,97,116,104,200,250,22,167,8,2,20,6,19, 100,32,109,111,100,117,108,101,32,112,97,116,104,200,250,22,168,8,2,20,6,
19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,198, 19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,
28,28,248,22,61,196,249,22,137,8,248,22,64,198,2,4,11,248,22,148,4, 198,28,28,248,22,61,196,249,22,138,8,248,22,64,198,2,4,11,248,22,148,
248,22,88,197,28,28,248,22,61,196,249,22,137,8,248,22,64,198,66,112,108, 4,248,22,88,197,28,28,248,22,61,196,249,22,138,8,248,22,64,198,66,112,
97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,38,250,80,158,39, 108,97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,38,250,80,158,
39,249,22,27,11,80,158,41,38,22,146,11,196,90,161,35,34,10,249,22,132, 39,39,249,22,27,11,80,158,41,38,22,147,11,196,90,161,35,34,10,249,22,
4,21,94,2,21,6,18,18,112,108,97,110,101,116,47,114,101,115,111,108,118, 132,4,21,94,2,21,6,18,18,112,108,97,110,101,116,47,114,101,115,111,108,
101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45, 118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,
110,97,109,101,45,114,101,115,111,108,118,101,114,12,251,211,199,200,201,202,27, 45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,251,211,199,200,201,202,
89,162,34,35,44,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110, 27,89,162,34,35,44,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,
45,101,114,114,223,6,33,44,27,28,248,22,51,198,27,250,22,126,80,158,42, 110,45,101,114,114,223,6,33,44,27,28,248,22,51,198,27,250,22,126,80,158,
42,249,22,63,203,247,22,135,13,11,28,192,192,91,159,36,11,90,161,36,34, 42,42,249,22,63,203,247,22,136,13,11,28,192,192,91,159,36,11,90,161,36,
11,249,80,159,43,47,35,248,22,54,203,11,27,251,80,158,46,49,2,20,201, 34,11,249,80,159,43,47,35,248,22,54,203,11,27,251,80,158,46,49,2,20,
28,248,22,71,198,198,248,22,64,198,28,248,22,71,198,9,248,22,65,198,249, 201,28,248,22,71,198,198,248,22,64,198,28,248,22,71,198,9,248,22,65,198,
22,176,12,194,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,249,22, 249,22,177,12,194,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,249,
156,6,198,6,3,3,46,115,115,28,248,22,133,6,198,27,248,80,159,40,54, 22,156,6,198,6,3,3,46,115,115,28,248,22,133,6,198,27,248,80,159,40,
35,200,27,250,22,126,80,158,43,42,249,22,63,204,198,11,28,192,192,91,159, 54,35,200,27,250,22,126,80,158,43,42,249,22,63,204,198,11,28,192,192,91,
36,11,90,161,36,34,11,249,80,159,44,47,35,203,11,250,22,1,22,176,12, 159,36,11,90,161,36,34,11,249,80,159,44,47,35,203,11,250,22,1,22,177,
198,249,22,77,249,22,2,32,0,89,162,8,36,35,42,9,222,33,45,199,248, 12,198,249,22,77,249,22,2,32,0,89,162,8,36,35,42,9,222,33,45,199,
22,73,199,28,248,22,158,12,198,28,248,22,181,12,198,197,248,22,73,6,26, 248,22,73,199,28,248,22,159,12,198,28,248,22,182,12,198,197,248,22,73,6,
26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,115, 26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,
111,108,117,116,101,41,28,249,22,137,8,248,22,64,200,2,21,27,250,22,126, 115,111,108,117,116,101,41,28,249,22,138,8,248,22,64,200,2,21,27,250,22,
80,158,42,42,249,22,63,203,247,22,135,13,11,28,192,192,91,159,37,11,90, 126,80,158,42,42,249,22,63,203,247,22,136,13,11,28,192,192,91,159,37,11,
161,36,34,11,249,80,159,44,47,35,248,22,88,204,11,90,161,35,36,11,28, 90,161,36,34,11,249,80,159,44,47,35,248,22,88,204,11,90,161,35,36,11,
248,22,71,248,22,90,203,28,248,22,71,193,249,22,146,13,0,8,35,114,120, 28,248,22,71,248,22,90,203,28,248,22,71,193,249,22,147,13,0,8,35,114,
34,91,46,93,34,195,11,10,27,27,28,196,249,22,77,28,248,22,71,248,22, 120,34,91,46,93,34,195,11,10,27,27,28,196,249,22,77,28,248,22,71,248,
90,23,15,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77,249,22,2, 22,90,23,15,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77,249,22,
80,159,50,55,35,248,22,90,23,18,196,28,248,22,71,195,248,22,73,196,194, 2,80,159,50,55,35,248,22,90,23,18,196,28,248,22,71,195,248,22,73,196,
251,80,158,48,49,2,20,203,248,22,64,197,248,22,65,197,249,22,176,12,194, 194,251,80,158,48,49,2,20,203,248,22,64,197,248,22,65,197,249,22,177,12,
28,197,196,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,28,249,22, 194,28,197,196,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,28,249,
146,13,0,8,35,114,120,34,91,46,93,34,198,196,249,22,156,6,198,6,3, 22,147,13,0,8,35,114,120,34,91,46,93,34,198,196,249,22,156,6,198,6,
3,46,115,115,28,249,22,137,8,248,22,64,200,64,102,105,108,101,249,22,183, 3,3,46,115,115,28,249,22,138,8,248,22,64,200,64,102,105,108,101,249,22,
12,248,22,88,200,248,80,159,41,54,35,201,12,87,94,28,28,248,22,158,12, 184,12,248,22,88,200,248,80,159,41,54,35,201,12,87,94,28,28,248,22,159,
193,10,248,22,155,7,193,12,28,199,250,22,166,8,67,114,101,113,117,105,114, 12,193,10,248,22,155,7,193,12,28,199,250,22,167,8,67,114,101,113,117,105,
101,249,22,181,6,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97, 114,101,249,22,181,6,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,
116,104,126,97,28,197,248,22,64,198,6,0,0,202,250,22,167,8,2,20,249, 97,116,104,126,97,28,197,248,22,64,198,6,0,0,202,250,22,168,8,2,20,
22,181,6,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,197, 249,22,181,6,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,
248,22,64,198,6,0,0,200,27,28,248,22,155,7,194,249,22,160,7,195,34, 197,248,22,64,198,6,0,0,200,27,28,248,22,155,7,194,249,22,160,7,195,
249,22,185,12,248,22,186,12,196,11,27,28,248,22,155,7,195,249,22,160,7, 34,249,22,186,12,248,22,187,12,196,11,27,28,248,22,155,7,195,249,22,160,
196,35,248,80,158,41,50,194,91,159,37,11,90,161,37,34,11,28,248,22,155, 7,196,35,248,80,158,41,50,194,91,159,37,11,90,161,37,34,11,28,248,22,
7,198,250,22,7,2,22,249,22,160,7,202,36,2,22,248,22,179,12,197,27, 155,7,198,250,22,7,2,22,249,22,160,7,202,36,2,22,248,22,180,12,197,
28,248,22,155,7,199,249,22,160,7,200,37,249,80,158,46,51,196,5,0,27, 27,28,248,22,155,7,199,249,22,160,7,200,37,249,80,158,46,51,196,5,0,
28,248,22,155,7,200,249,22,160,7,201,38,248,22,148,4,199,27,27,250,22, 27,28,248,22,155,7,200,249,22,160,7,201,38,248,22,148,4,199,27,27,250,
126,80,158,50,41,248,22,162,13,247,22,146,11,11,28,192,192,27,247,22,120, 22,126,80,158,50,41,248,22,163,13,247,22,147,11,11,28,192,192,27,247,22,
87,94,250,22,125,80,158,51,41,248,22,162,13,247,22,146,11,195,192,87,95, 120,87,94,250,22,125,80,158,51,41,248,22,163,13,247,22,147,11,195,192,87,
28,23,16,27,250,22,126,196,197,11,28,192,12,87,95,27,27,28,248,22,17, 95,28,23,16,27,250,22,126,196,197,11,28,192,12,87,95,27,27,28,248,22,
80,158,50,44,80,158,49,44,247,22,19,250,22,25,248,22,23,196,80,158,52, 17,80,158,50,44,80,158,49,44,247,22,19,250,22,25,248,22,23,196,80,158,
43,195,27,247,22,146,11,249,22,3,89,162,34,35,53,9,226,12,11,2,3, 52,43,195,27,247,22,147,11,249,22,3,89,162,34,35,53,9,226,12,11,2,
33,46,195,248,28,248,22,17,80,158,49,44,32,0,89,162,34,35,40,9,222, 3,33,46,195,248,28,248,22,17,80,158,49,44,32,0,89,162,34,35,40,9,
33,47,80,159,48,56,35,89,162,34,34,49,9,227,14,9,8,4,3,33,48, 222,33,47,80,159,48,56,35,89,162,34,34,49,9,227,14,9,8,4,3,33,
250,22,125,196,197,10,12,28,28,248,22,155,7,201,11,27,248,22,133,6,23, 48,250,22,125,196,197,10,12,28,28,248,22,155,7,201,11,27,248,22,133,6,
15,28,192,192,28,248,22,61,23,15,249,22,137,8,248,22,64,23,17,2,21, 23,15,28,192,192,28,248,22,61,23,15,249,22,138,8,248,22,64,23,17,2,
11,250,22,125,80,158,49,42,28,248,22,133,6,23,17,249,22,63,23,18,248, 21,11,250,22,125,80,158,49,42,28,248,22,133,6,23,17,249,22,63,23,18,
80,159,52,54,35,23,20,249,22,63,23,18,247,22,135,13,252,22,157,7,23, 248,80,159,52,54,35,23,20,249,22,63,23,18,247,22,136,13,252,22,157,7,
15,206,204,202,201,12,193,91,159,36,10,90,161,35,34,10,11,90,161,35,35, 23,15,206,204,202,201,12,193,91,159,36,10,90,161,35,34,10,11,90,161,35,
10,83,158,37,20,96,96,2,20,89,162,8,36,35,49,9,224,2,0,33,42, 35,10,83,158,37,20,96,96,2,20,89,162,34,35,49,9,224,2,0,33,42,
89,162,34,37,47,9,223,1,33,43,89,162,34,38,8,30,9,225,2,3,0, 89,162,34,37,47,9,223,1,33,43,89,162,34,38,8,30,9,225,2,3,0,
33,49,208,87,95,248,22,130,4,248,80,158,36,48,247,22,146,11,248,22,184, 33,49,208,87,95,248,22,130,4,248,80,158,36,48,247,22,147,11,248,22,184,
5,80,158,35,35,248,22,132,12,80,159,35,40,35,159,34,20,102,159,34,16, 5,80,158,35,35,248,22,133,12,80,159,35,40,35,159,34,20,102,159,34,16,
1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,66,35,37,98, 1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,66,35,37,98,
111,111,116,2,1,11,10,10,10,10,10,36,80,158,34,34,20,102,159,38,16, 111,111,116,2,1,11,10,10,10,10,10,36,80,158,34,34,20,102,159,38,16,
19,30,2,1,2,2,193,30,2,1,2,3,193,30,2,5,72,112,97,116,104, 19,30,2,1,2,2,193,30,2,1,2,3,193,30,2,5,72,112,97,116,104,

View File

@ -54,7 +54,7 @@ int scheme_get_allow_set_undefined() { return scheme_allow_set_undefined; }
int scheme_starting_up; int scheme_starting_up;
Scheme_Object *scheme_local[MAX_CONST_LOCAL_POS][2]; Scheme_Object *scheme_local[MAX_CONST_LOCAL_POS][2][3];
#define MAX_CONST_TOPLEVEL_DEPTH 16 #define MAX_CONST_TOPLEVEL_DEPTH 16
#define MAX_CONST_TOPLEVEL_POS 16 #define MAX_CONST_TOPLEVEL_POS 16
@ -256,30 +256,33 @@ Scheme_Env *scheme_basic_env()
{ {
int i, k; int i, k, cor;
#ifndef USE_TAGGED_ALLOCATION #ifndef USE_TAGGED_ALLOCATION
GC_CAN_IGNORE Scheme_Local *all; GC_CAN_IGNORE Scheme_Local *all;
all = (Scheme_Local *)scheme_malloc_eternal(sizeof(Scheme_Local) * 2 * MAX_CONST_LOCAL_POS); all = (Scheme_Local *)scheme_malloc_eternal(sizeof(Scheme_Local) * 3 * 2 * MAX_CONST_LOCAL_POS);
# ifdef MEMORY_COUNTING_ON # ifdef MEMORY_COUNTING_ON
scheme_misc_count += sizeof(Scheme_Local) * 2 * MAX_CONST_LOCAL_POS; scheme_misc_count += sizeof(Scheme_Local) * 3 * 2 * MAX_CONST_LOCAL_POS;
# endif # endif
#endif #endif
for (i = 0; i < MAX_CONST_LOCAL_POS; i++) { for (i = 0; i < MAX_CONST_LOCAL_POS; i++) {
for (k = 0; k < 2; k++) { for (k = 0; k < 2; k++) {
Scheme_Object *v; for (cor = 0; cor < 3; cor++) {
Scheme_Object *v;
#ifndef USE_TAGGED_ALLOCATION #ifndef USE_TAGGED_ALLOCATION
v = (Scheme_Object *)(all++); v = (Scheme_Object *)(all++);
#else #else
v = (Scheme_Object *)scheme_malloc_eternal_tagged(sizeof(Scheme_Local)); v = (Scheme_Object *)scheme_malloc_eternal_tagged(sizeof(Scheme_Local));
#endif #endif
v->type = k + scheme_local_type; v->type = k + scheme_local_type;
SCHEME_LOCAL_POS(v) = i; SCHEME_LOCAL_POS(v) = i;
SCHEME_LOCAL_FLAGS(v) = cor;
scheme_local[i][k] = v; scheme_local[i][k][cor] = v;
}
} }
} }
} }
@ -1541,7 +1544,7 @@ Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env
if (rec && rec[drec].dont_mark_local_use) { if (rec && rec[drec].dont_mark_local_use) {
/* Make up anything; it's going to be ignored. */ /* Make up anything; it's going to be ignored. */
l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local)); l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local));
l->so.type = scheme_compiled_quote_syntax_type; l->iso.so.type = scheme_compiled_quote_syntax_type;
l->position = 0; l->position = 0;
return (Scheme_Object *)l; return (Scheme_Object *)l;
@ -1556,7 +1559,7 @@ Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env
pos = cp->num_stxes; pos = cp->num_stxes;
l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local)); l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local));
l->so.type = scheme_compiled_quote_syntax_type; l->iso.so.type = scheme_compiled_quote_syntax_type;
l->position = pos; l->position = pos;
cp->num_stxes++; cp->num_stxes++;
@ -1582,23 +1585,40 @@ static Scheme_Object *alloc_local(short type, int pos)
return (Scheme_Object *)v; return (Scheme_Object *)v;
} }
Scheme_Object *scheme_make_local(Scheme_Type type, int pos) Scheme_Object *scheme_make_local(Scheme_Type type, int pos, int flags)
{ {
int k; int k;
Scheme_Object *v; Scheme_Object *v, *key;
k = type - scheme_local_type; k = type - scheme_local_type;
if (pos < MAX_CONST_LOCAL_POS) { /* Helper for reading bytecode: make sure flags is a valid value */
if (pos >= 0) switch (flags) {
return scheme_local[pos][k]; case 0:
break;
case SCHEME_LOCAL_CLEAR_ON_READ:
break;
default:
case SCHEME_LOCAL_OTHER_CLEARS:
flags = SCHEME_LOCAL_OTHER_CLEARS;
break;
} }
v = scheme_hash_get(locals_ht[k], scheme_make_integer(pos)); if (pos < MAX_CONST_LOCAL_POS) {
return scheme_local[pos][k][flags];
}
key = scheme_make_integer(pos);
if (flags) {
key = scheme_make_pair(scheme_make_integer(flags), key);
}
v = scheme_hash_get(locals_ht[k], key);
if (v) if (v)
return v; return v;
v = alloc_local(type, pos); v = alloc_local(type, pos);
SCHEME_LOCAL_FLAGS(v) = flags;
if (locals_ht[k]->count > TABLE_CACHE_MAX_SIZE) { if (locals_ht[k]->count > TABLE_CACHE_MAX_SIZE) {
Scheme_Hash_Table *ht; Scheme_Hash_Table *ht;
@ -1606,7 +1626,7 @@ Scheme_Object *scheme_make_local(Scheme_Type type, int pos)
locals_ht[k] = ht; locals_ht[k] = ht;
} }
scheme_hash_set(locals_ht[k], scheme_make_integer(pos), v); scheme_hash_set(locals_ht[k], key, v);
return v; return v;
} }
@ -1642,7 +1662,7 @@ static Scheme_Local *get_frame_loc(Scheme_Comp_Env *frame,
COMPILE_DATA(frame)->use[i] = u; COMPILE_DATA(frame)->use[i] = u;
return (Scheme_Local *)scheme_make_local(scheme_local_type, p + i); return (Scheme_Local *)scheme_make_local(scheme_local_type, p + i, 0);
} }
Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modidx, Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modidx,
@ -2384,7 +2404,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
*_lexical_binding_id = val; *_lexical_binding_id = val;
} }
if (flags & SCHEME_DONT_MARK_USE) if (flags & SCHEME_DONT_MARK_USE)
return scheme_make_local(scheme_local_type, 0); return scheme_make_local(scheme_local_type, 0, 0);
else else
return (Scheme_Object *)get_frame_loc(frame, i, j, p, flags); return (Scheme_Object *)get_frame_loc(frame, i, j, p, flags);
} }
@ -2970,7 +2990,7 @@ Scheme_Object *scheme_optimize_reverse(Optimize_Info *info, int pos, int unless_
if (info->use && info->use[pos]) if (info->use && info->use[pos])
return NULL; return NULL;
return scheme_make_local(scheme_local_type, pos + delta); return scheme_make_local(scheme_local_type, pos + delta, 0);
} }
int scheme_optimize_is_used(Optimize_Info *info, int pos) int scheme_optimize_is_used(Optimize_Info *info, int pos)
@ -3063,7 +3083,7 @@ static Scheme_Object *do_optimize_info_lookup(Optimize_Info *info, int pos, int
if (!n) { if (!n) {
/* Return shifted reference to other local: */ /* Return shifted reference to other local: */
delta += scheme_optimize_info_get_shift(info, pos); delta += scheme_optimize_info_get_shift(info, pos);
n = scheme_make_local(scheme_local_type, pos + delta); n = scheme_make_local(scheme_local_type, pos + delta, 0);
} }
} }
return n; return n;
@ -3386,7 +3406,8 @@ static int resolve_info_lookup(Resolve_Info *info, int pos, int *flags, Scheme_O
vec = scheme_make_vector(sz + 1, NULL); vec = scheme_make_vector(sz + 1, NULL);
for (i = 0; i < sz; i++) { for (i = 0; i < sz; i++) {
loc = scheme_make_local(scheme_local_type, loc = scheme_make_local(scheme_local_type,
posmap[i] + offset + shifted); posmap[i] + offset + shifted,
0);
if (boxmap) { if (boxmap) {
if (boxmap[i / BITS_PER_MZSHORT] & ((mzshort)1 << (i & (BITS_PER_MZSHORT - 1)))) if (boxmap[i / BITS_PER_MZSHORT] & ((mzshort)1 << (i & (BITS_PER_MZSHORT - 1))))
loc = scheme_box(loc); loc = scheme_box(loc);
@ -4641,16 +4662,29 @@ static Scheme_Object *write_local(Scheme_Object *obj)
return scheme_make_integer(SCHEME_LOCAL_POS(obj)); return scheme_make_integer(SCHEME_LOCAL_POS(obj));
} }
static Scheme_Object *do_read_local(Scheme_Type t, Scheme_Object *obj)
{
int n, flags;
if (SCHEME_PAIRP(obj)) {
flags = SCHEME_INT_VAL(SCHEME_CAR(obj));
obj = SCHEME_CDR(obj);
} else
flags = 0;
n = SCHEME_INT_VAL(obj);
return scheme_make_local(t, n, flags);
}
static Scheme_Object *read_local(Scheme_Object *obj) static Scheme_Object *read_local(Scheme_Object *obj)
{ {
return scheme_make_local(scheme_local_type, return do_read_local(scheme_local_type, obj);
SCHEME_INT_VAL(obj));
} }
static Scheme_Object *read_local_unbox(Scheme_Object *obj) static Scheme_Object *read_local_unbox(Scheme_Object *obj)
{ {
return scheme_make_local(scheme_local_unbox_type, return do_read_local(scheme_local_unbox_type, obj);
SCHEME_INT_VAL(obj));
} }
static Scheme_Object *write_resolve_prefix(Scheme_Object *obj) static Scheme_Object *write_resolve_prefix(Scheme_Object *obj)
@ -4753,6 +4787,7 @@ static void register_traversers(void)
GC_REG_TRAV(scheme_rt_comp_env, mark_comp_env); GC_REG_TRAV(scheme_rt_comp_env, mark_comp_env);
GC_REG_TRAV(scheme_rt_resolve_info, mark_resolve_info); GC_REG_TRAV(scheme_rt_resolve_info, mark_resolve_info);
GC_REG_TRAV(scheme_rt_optimize_info, mark_optimize_info); GC_REG_TRAV(scheme_rt_optimize_info, mark_optimize_info);
GC_REG_TRAV(scheme_rt_sfs_info, mark_sfs_info);
} }
END_XFORM_SKIP; END_XFORM_SKIP;

File diff suppressed because it is too large Load Diff

View File

@ -647,8 +647,7 @@ scheme_make_folding_prim(Scheme_Prim *fun, const char *name,
{ {
return make_prim_closure(fun, 1, name, mina, maxa, return make_prim_closure(fun, 1, name, mina, maxa,
(folding (folding
? (SCHEME_PRIM_IS_FOLDING ? SCHEME_PRIM_OPT_FOLDING
| SCHEME_PRIM_IS_NONCM)
: 0), : 0),
1, 1, 1, 1,
0, 0, NULL); 0, 0, NULL);
@ -660,9 +659,22 @@ scheme_make_noncm_prim(Scheme_Prim *fun, const char *name,
{ {
/* A non-cm primitive leaves the mark stack unchanged when it returns, /* A non-cm primitive leaves the mark stack unchanged when it returns,
it can't return multiple values or a tail call, and it cannot it can't return multiple values or a tail call, and it cannot
use its third argument (i.e., the closure pointer) */ use its third argument (i.e., the closure pointer). */
return make_prim_closure(fun, 1, name, mina, maxa, return make_prim_closure(fun, 1, name, mina, maxa,
SCHEME_PRIM_IS_NONCM, SCHEME_PRIM_OPT_NONCM,
1, 1,
0, 0, NULL);
}
Scheme_Object *
scheme_make_immed_prim(Scheme_Prim *fun, const char *name,
mzshort mina, mzshort maxa)
{
/* An immediate primitive is a non-cm primitive, and it doesn't
extend the continuation in a way that interacts with space safety, except
maybe to raise an exception. */
return make_prim_closure(fun, 1, name, mina, maxa,
SCHEME_PRIM_OPT_IMMEDIATE,
1, 1, 1, 1,
0, 0, NULL); 0, 0, NULL);
} }
@ -693,7 +705,7 @@ Scheme_Object *scheme_make_folding_prim_closure(Scheme_Primitive_Closure_Proc *p
{ {
return make_prim_closure((Scheme_Prim *)prim, 1, name, mina, maxa, return make_prim_closure((Scheme_Prim *)prim, 1, name, mina, maxa,
(functional (functional
? SCHEME_PRIM_IS_FOLDING ? SCHEME_PRIM_OPT_FOLDING
: 0), : 0),
1, 1, 1, 1,
1, size, vals); 1, size, vals);
@ -721,7 +733,7 @@ scheme_make_closed_prim_w_everything(Scheme_Closed_Prim *fun,
prim->name = name; prim->name = name;
prim->mina = mina; prim->mina = mina;
prim->maxa = maxa; prim->maxa = maxa;
prim->pp.flags = ((folding ? SCHEME_PRIM_IS_FOLDING : 0) prim->pp.flags = ((folding ? SCHEME_PRIM_OPT_FOLDING : 0)
| (scheme_defining_primitives ? SCHEME_PRIM_IS_PRIMITIVE : 0) | (scheme_defining_primitives ? SCHEME_PRIM_IS_PRIMITIVE : 0)
| (hasr ? SCHEME_PRIM_IS_MULTI_RESULT : 0)); | (hasr ? SCHEME_PRIM_IS_MULTI_RESULT : 0));
@ -908,7 +920,8 @@ void scheme_delay_load_closure(Scheme_Closure_Data *data)
(Validate_TLS)SCHEME_VEC_ELS(vinfo)[2], (Validate_TLS)SCHEME_VEC_ELS(vinfo)[2],
SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[3]), SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[3]),
SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[4]), SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[4]),
SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[5])); SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[5]),
SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[6]));
} }
} }
} }
@ -1024,6 +1037,98 @@ Scheme_Object *scheme_shift_closure_compilation(Scheme_Object *_data, int delta,
return _data; return _data;
} }
Scheme_Object *scheme_sfs_closure(Scheme_Object *expr, SFS_Info *info, int self_pos)
{
Scheme_Closure_Data *data = (Scheme_Closure_Data *)expr;
Scheme_Object *code;
int i, size, has_tl = 0;
size = data->closure_size;
if (size) {
if (info->stackpos + data->closure_map[size - 1] == info->tlpos) {
has_tl = 1;
--size;
}
}
if (!info->pass) {
for (i = size; i--; ) {
scheme_sfs_used(info, data->closure_map[i]);
}
} else {
/* Check whether we need to zero out any stack positions
after capturing them in a closure: */
Scheme_Object *clears = scheme_null;
if (info->ip < info->max_nontail) {
int pos, ip;
for (i = size; i--; ) {
pos = data->closure_map[i] + info->stackpos;
if (pos < info->depth) {
ip = info->max_used[pos];
if ((ip == info->ip)
&& (ip < info->max_calls[pos])) {
pos -= info->stackpos;
clears = scheme_make_pair(scheme_make_integer(pos),
clears);
}
}
}
}
return scheme_sfs_add_clears(expr, clears, 0);
}
if (!(SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_SFS)) {
SCHEME_CLOSURE_DATA_FLAGS(data) |= CLOS_SFS;
info = scheme_new_sfs_info(data->max_let_depth);
scheme_sfs_push(info, data->closure_size + data->num_params, 1);
if (has_tl)
info->tlpos = info->stackpos + data->closure_size - 1;
if (self_pos >= 0) {
for (i = size; i--; ) {
if (data->closure_map[i] == self_pos) {
info->selfpos = info->stackpos + i;
info->selfstart = info->stackpos;
info->selflen = data->closure_size;
break;
}
}
}
code = scheme_sfs(data->code, info, data->max_let_depth);
/* If any arguments go unused, and if there's a non-tail,
non-immediate call in the body, then we flush the
unused arguments at the start of the body. We assume that
the closure values are used (otherwise they wouldn't
be in the closure). */
if (info->max_nontail) {
int i, pos, cnt;
Scheme_Object *clears = scheme_null;
cnt = data->num_params;
for (i = 0; i < cnt; i++) {
pos = data->max_let_depth - (cnt - i);
if (!info->max_used[pos]) {
pos = i + data->closure_size;
clears = scheme_make_pair(scheme_make_integer(pos),
clears);
}
}
if (SCHEME_PAIRP(clears))
code = scheme_sfs_add_clears(code, clears, 1);
}
data->code = code;
}
return expr;
}
int scheme_closure_body_size(Scheme_Closure_Data *data, int check_assign) int scheme_closure_body_size(Scheme_Closure_Data *data, int check_assign)
{ {
int i; int i;

View File

@ -857,6 +857,19 @@ static int mz_is_closure(mz_jit_state *jitter, int i, int arity, int *_flags)
return 0; return 0;
} }
static int stack_safety(mz_jit_state *jitter, int cnt, int offset)
{
/* To preserve space safety, we must initialize any stack room
that we make, so that whatever happens to be there isn't
traversed in case of a GC. */
int i;
for (i = 0; i < cnt; i++) {
jit_stxi_p(WORDS_TO_BYTES(i+offset), JIT_RUNSTACK, JIT_RUNSTACK);
CHECK_LIMIT();
}
return 1;
}
#define mz_pushr_p(x) mz_pushr_p_it(jitter, x) #define mz_pushr_p(x) mz_pushr_p_it(jitter, x)
#define mz_popr_p(x) mz_popr_p_it(jitter, x) #define mz_popr_p(x) mz_popr_p_it(jitter, x)
@ -1275,8 +1288,12 @@ static int inlined_nary_prim(Scheme_Object *o, Scheme_Object *_app)
static int is_noncm(Scheme_Object *a, mz_jit_state *jitter, int depth, int stack_start) static int is_noncm(Scheme_Object *a, mz_jit_state *jitter, int depth, int stack_start)
{ {
if (SCHEME_PRIMP(a)) { if (SCHEME_PRIMP(a)) {
if (((Scheme_Prim_Proc_Header *)a)->flags & SCHEME_PRIM_IS_NONCM) int opts;
return 1; opts = ((Scheme_Prim_Proc_Header *)a)->flags & SCHEME_PRIM_OPT_MASK;
if (opts >= SCHEME_PRIM_OPT_NONCM)
/* Structure-type predicates are handled specially, so don't claim NONCM: */
if (!(((Scheme_Prim_Proc_Header *)a)->flags & SCHEME_PRIM_IS_STRUCT_PRED))
return 1;
} }
if (depth if (depth
@ -1409,6 +1426,82 @@ static int is_simple(Scheme_Object *obj, int depth, int just_markless, mz_jit_st
return (type > _scheme_values_types_); return (type > _scheme_values_types_);
} }
static int is_non_gc(Scheme_Object *obj, int depth)
{
/* Return 1 if evaluating `obj' can't trigger a GC. */
Scheme_Type type;
type = SCHEME_TYPE(obj);
switch (type) {
case scheme_syntax_type:
break;
case scheme_branch_type:
if (depth) {
Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)obj;
return (is_non_gc(b->test, depth - 1)
&& is_non_gc(b->tbranch, depth - 1)
&& is_non_gc(b->fbranch, depth - 1));
}
break;
case scheme_let_value_type:
if (depth) {
Scheme_Let_Value *lv = (Scheme_Let_Value *)obj;
if (SCHEME_LET_AUTOBOX(lv))
return 0;
return is_non_gc(lv->body, depth - 1);
}
break;
case scheme_let_one_type:
if (depth) {
return (is_non_gc(((Scheme_Let_One *)obj)->value, depth - 1)
&& is_non_gc(((Scheme_Let_One *)obj)->body, depth - 1));
}
break;
case scheme_let_void_type:
if (depth) {
Scheme_Let_Void *lv = (Scheme_Let_Void *)obj;
if (SCHEME_LET_AUTOBOX(lv))
return 0;
return is_non_gc(lv->body, depth - 1);
}
break;
case scheme_letrec_type:
break;
case scheme_application_type:
break;
case scheme_application2_type:
break;
case scheme_application3_type:
break;
case scheme_toplevel_type:
break;
case scheme_unclosed_procedure_type:
break;
case scheme_quote_syntax_type:
case scheme_local_type:
case scheme_local_unbox_type:
return 1;
break;
}
return (type > _scheme_values_types_);
}
static int ok_to_move_local(Scheme_Object *obj)
{
if (SAME_TYPE(SCHEME_TYPE(obj), scheme_local_type)
&& !(SCHEME_LOCAL_FLAGS(obj) & SCHEME_LOCAL_CLEARING_MASK)) {
return 1;
} else
return 0;
}
static int is_constant_and_avoids_r1(Scheme_Object *obj) static int is_constant_and_avoids_r1(Scheme_Object *obj)
{ {
Scheme_Type t = SCHEME_TYPE(obj); Scheme_Type t = SCHEME_TYPE(obj);
@ -1417,7 +1510,7 @@ static int is_constant_and_avoids_r1(Scheme_Object *obj)
return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST) return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST)
? 1 ? 1
: 0); : 0);
} else if (SAME_TYPE(t, scheme_local_type)) { } else if (SAME_TYPE(t, scheme_local_type) && ok_to_move_local(obj)) {
return 1; return 1;
} else } else
return (t >= _scheme_compiled_values_types_); return (t >= _scheme_compiled_values_types_);
@ -2085,10 +2178,10 @@ static int is_a_procedure(Scheme_Object *v, mz_jit_state *jitter)
static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_rands, static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_rands,
mz_jit_state *jitter, int is_tail, int multi_ok) mz_jit_state *jitter, int is_tail, int multi_ok)
{ {
int i, offset; int i, offset, need_safety = 0;
int direct_prim = 0, need_non_tail = 0, direct_native = 0, direct_self = 0; int direct_prim = 0, need_non_tail = 0, direct_native = 0, direct_self = 0;
int proc_already_in_place = 0; int proc_already_in_place = 0;
Scheme_Object *rator, *v; Scheme_Object *rator, *v, *arg;
int reorder_ok = 0; int reorder_ok = 0;
int args_already_in_place = 0; int args_already_in_place = 0;
START_JIT_DATA(); START_JIT_DATA();
@ -2106,7 +2199,7 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
} else { } else {
Scheme_Type t; Scheme_Type t;
t = SCHEME_TYPE(rator); t = SCHEME_TYPE(rator);
if (t == scheme_local_type) { if ((t == scheme_local_type) && ok_to_move_local(rator)) {
/* We can re-order evaluation of the rator. */ /* We can re-order evaluation of the rator. */
reorder_ok = 1; reorder_ok = 1;
@ -2181,7 +2274,8 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
mz_runstack_skipped(jitter, num_rands); mz_runstack_skipped(jitter, num_rands);
for (i = 0; i < num_rands; i++) { for (i = 0; i < num_rands; i++) {
v = (alt_rands ? alt_rands[i+1] : app->args[i+1]); v = (alt_rands ? alt_rands[i+1] : app->args[i+1]);
if (SAME_TYPE(SCHEME_TYPE(v), scheme_local_type)) { if (SAME_TYPE(SCHEME_TYPE(v), scheme_local_type)
&& !(SCHEME_LOCAL_FLAGS(v) & SCHEME_LOCAL_OTHER_CLEARS)) {
int pos; int pos;
pos = mz_remap(SCHEME_LOCAL_POS(v)); pos = mz_remap(SCHEME_LOCAL_POS(v));
if (pos == (jitter->depth + args_already_in_place)) if (pos == (jitter->depth + args_already_in_place))
@ -2202,6 +2296,7 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
if (num_rands) { if (num_rands) {
if (!direct_prim || (num_rands > 1)) { if (!direct_prim || (num_rands > 1)) {
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(num_rands)); jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(num_rands));
need_safety = num_rands;
CHECK_RUNSTACK_OVERFLOW(); CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, num_rands); mz_runstack_pushed(jitter, num_rands);
} else { } else {
@ -2224,6 +2319,12 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
offset = 0; offset = 0;
if (!direct_prim && !reorder_ok && !direct_self) { if (!direct_prim && !reorder_ok && !direct_self) {
if (need_safety && !is_non_gc(rator, INIT_SIMPLE_DEPTH)) {
stack_safety(jitter, need_safety, offset);
CHECK_LIMIT();
need_safety = 0;
}
generate_non_tail(rator, jitter, 0, !need_non_tail); generate_non_tail(rator, jitter, 0, !need_non_tail);
CHECK_LIMIT(); CHECK_LIMIT();
@ -2239,8 +2340,11 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
can move the proc directly to V1. */ can move the proc directly to V1. */
jit_movr_p(JIT_V1, JIT_R0); jit_movr_p(JIT_V1, JIT_R0);
proc_already_in_place = 1; proc_already_in_place = 1;
} else } else {
jit_stxi_p(WORDS_TO_BYTES(num_rands - 1 + offset), JIT_RUNSTACK, JIT_R0); jit_stxi_p(WORDS_TO_BYTES(num_rands - 1 + offset), JIT_RUNSTACK, JIT_R0);
if (need_safety)
need_safety--;
}
} else { } else {
jit_movr_p(JIT_V1, JIT_R0); jit_movr_p(JIT_V1, JIT_R0);
} }
@ -2248,10 +2352,15 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
for (i = 0; i < num_rands; i++) { for (i = 0; i < num_rands; i++) {
PAUSE_JIT_DATA(); PAUSE_JIT_DATA();
generate_non_tail((alt_rands arg = (alt_rands
? alt_rands[i+1+args_already_in_place] ? alt_rands[i+1+args_already_in_place]
: app->args[i+1+args_already_in_place]), : app->args[i+1+args_already_in_place]);
jitter, 0, !need_non_tail); if (need_safety && !is_non_gc(arg, INIT_SIMPLE_DEPTH)) {
stack_safety(jitter, need_safety - i, offset + i);
CHECK_LIMIT();
need_safety = 0;
}
generate_non_tail(arg, jitter, 0, !need_non_tail);
RESUME_JIT_DATA(); RESUME_JIT_DATA();
CHECK_LIMIT(); CHECK_LIMIT();
if ((i == num_rands - 1) && !direct_prim && !reorder_ok && !direct_self && !proc_already_in_place) { if ((i == num_rands - 1) && !direct_prim && !reorder_ok && !direct_self && !proc_already_in_place) {
@ -2694,9 +2803,9 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj
rand = rand2; rand = rand2;
rand2 = NULL; rand2 = NULL;
reversed = 1; reversed = 1;
} else if ((SAME_TYPE(SCHEME_TYPE(rand2), scheme_local_type) } else if ((ok_to_move_local(rand2)
|| SCHEME_INTP(rand2)) || SCHEME_INTP(rand2))
&& !(SAME_TYPE(SCHEME_TYPE(rand), scheme_local_type) && !(ok_to_move_local(rand)
|| SCHEME_INTP(rand))) { || SCHEME_INTP(rand))) {
/* Second expression is side-effect-free, unlike the first; /* Second expression is side-effect-free, unlike the first;
swap order and use the fast path for when the first arg is swap order and use the fast path for when the first arg is
@ -2715,7 +2824,7 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj
} }
if (rand2) { if (rand2) {
simple_rand = (SAME_TYPE(SCHEME_TYPE(rand), scheme_local_type) simple_rand = (ok_to_move_local(rand)
|| SCHEME_INTP(rand)); || SCHEME_INTP(rand));
} else } else
simple_rand = 0; simple_rand = 0;
@ -2728,11 +2837,13 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj
mz_runstack_skipped(jitter, skipped); mz_runstack_skipped(jitter, skipped);
if (rand2 && !simple_rand) { if (rand2 && !simple_rand) {
mz_runstack_skipped(jitter, 1);
generate_non_tail(rand, jitter, 0, 1);
mz_runstack_unskipped(jitter, 1);
CHECK_LIMIT();
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
CHECK_RUNSTACK_OVERFLOW(); CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1); mz_runstack_pushed(jitter, 1);
generate_non_tail(rand, jitter, 0, 1);
CHECK_LIMIT();
jit_str_p(JIT_RUNSTACK, JIT_R0); jit_str_p(JIT_RUNSTACK, JIT_R0);
} }
@ -3618,14 +3729,16 @@ static int generate_two_args(Scheme_Object *rand1, Scheme_Object *rand2, mz_jit_
mz_runstack_unskipped(jitter, 2); mz_runstack_unskipped(jitter, 2);
} else { } else {
mz_runstack_skipped(jitter, 2);
generate_non_tail(rand1, jitter, 0, 1);
mz_runstack_unskipped(jitter, 2);
CHECK_LIMIT();
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
CHECK_RUNSTACK_OVERFLOW(); CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1); mz_runstack_pushed(jitter, 1);
mz_runstack_skipped(jitter, 1);
generate_non_tail(rand1, jitter, 0, 1);
CHECK_LIMIT();
jit_str_p(JIT_RUNSTACK, JIT_R0); jit_str_p(JIT_RUNSTACK, JIT_R0);
mz_runstack_skipped(jitter, 1);
generate_non_tail(rand2, jitter, 0, 1); generate_non_tail(rand2, jitter, 0, 1);
CHECK_LIMIT(); CHECK_LIMIT();
@ -3810,7 +3923,7 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
__END_SHORT_JUMPS__(branch_short); __END_SHORT_JUMPS__(branch_short);
} else { } else {
/* Two complex expressions: */ /* Two complex expressions: */
generate_two_args(a1, a2, jitter, 0); generate_two_args(a2, a1, jitter, 0);
__START_SHORT_JUMPS__(branch_short); __START_SHORT_JUMPS__(branch_short);
@ -3902,15 +4015,18 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
mz_runstack_skipped(jitter, 1); mz_runstack_skipped(jitter, 1);
if (!simple) { if (!simple) {
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); mz_runstack_skipped(jitter, 1);
CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1);
} }
generate_non_tail(app->rand1, jitter, 0, 1); generate_non_tail(app->rand1, jitter, 0, 1);
CHECK_LIMIT(); CHECK_LIMIT();
if (!simple) { if (!simple) {
mz_runstack_unskipped(jitter, 1);
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1);
jit_str_p(JIT_RUNSTACK, JIT_R0); jit_str_p(JIT_RUNSTACK, JIT_R0);
generate_non_tail(app->rand2, jitter, 0, 1); generate_non_tail(app->rand2, jitter, 0, 1);
@ -4104,6 +4220,8 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(pushed)); jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(pushed));
CHECK_RUNSTACK_OVERFLOW(); CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, pushed); mz_runstack_pushed(jitter, pushed);
stack_safety(jitter, pushed, 0);
CHECK_LIMIT();
} }
generate_non_tail(app->args[1], jitter, 0, 1); generate_non_tail(app->args[1], jitter, 0, 1);
@ -4568,12 +4686,15 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
/* Other parts of the JIT rely on this code modifying R0, only */ /* Other parts of the JIT rely on this code modifying R0, only */
int pos; int pos;
START_JIT_DATA(); START_JIT_DATA();
LOG_IT(("local\n"));
pos = mz_remap(SCHEME_LOCAL_POS(obj)); pos = mz_remap(SCHEME_LOCAL_POS(obj));
LOG_IT(("local %d [%d]\n", pos, SCHEME_LOCAL_FLAGS(obj)));
if (pos || (mz_CURRENT_STATUS() != mz_RS_R0_HAS_RUNSTACK0)) { if (pos || (mz_CURRENT_STATUS() != mz_RS_R0_HAS_RUNSTACK0)) {
jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
VALIDATE_RESULT(JIT_R0); VALIDATE_RESULT(JIT_R0);
} }
if (SCHEME_LOCAL_FLAGS(obj) & SCHEME_LOCAL_CLEAR_ON_READ) {
jit_stxi_p(WORDS_TO_BYTES(pos), JIT_RUNSTACK, JIT_RUNSTACK);
}
END_JIT_DATA(2); END_JIT_DATA(2);
return 1; return 1;
} }
@ -4586,6 +4707,10 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
pos = mz_remap(SCHEME_LOCAL_POS(obj)); pos = mz_remap(SCHEME_LOCAL_POS(obj));
jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
jit_ldr_p(JIT_R0, JIT_R0); jit_ldr_p(JIT_R0, JIT_R0);
if (SCHEME_LOCAL_FLAGS(obj) & SCHEME_LOCAL_CLEAR_ON_READ) {
LOG_IT(("clear-on-read\n"));
jit_stxi_p(WORDS_TO_BYTES(pos), JIT_RUNSTACK, JIT_RUNSTACK);
}
VALIDATE_RESULT(JIT_R0); VALIDATE_RESULT(JIT_R0);
END_JIT_DATA(3); END_JIT_DATA(3);
@ -5036,6 +5161,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
nsrs = jitter->need_set_rs; nsrs = jitter->need_set_rs;
PAUSE_JIT_DATA(); PAUSE_JIT_DATA();
LOG_IT(("...then...\n")); LOG_IT(("...then...\n"));
FOR_LOG(++jitter->log_depth);
g1 = generate(branch->tbranch, jitter, is_tail, multi_ok); g1 = generate(branch->tbranch, jitter, is_tail, multi_ok);
RESUME_JIT_DATA(); RESUME_JIT_DATA();
CHECK_LIMIT(); CHECK_LIMIT();
@ -5077,7 +5203,9 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
} }
__END_SHORT_JUMPS__(then_short_ok); __END_SHORT_JUMPS__(then_short_ok);
PAUSE_JIT_DATA(); PAUSE_JIT_DATA();
FOR_LOG(jitter->log_depth--);
LOG_IT(("...else\n")); LOG_IT(("...else\n"));
FOR_LOG(++jitter->log_depth);
g2 = generate(branch->fbranch, jitter, is_tail, multi_ok); g2 = generate(branch->fbranch, jitter, is_tail, multi_ok);
RESUME_JIT_DATA(); RESUME_JIT_DATA();
CHECK_LIMIT(); CHECK_LIMIT();
@ -5094,6 +5222,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
mz_patch_ucbranch(ref2); mz_patch_ucbranch(ref2);
__END_SHORT_JUMPS__(else_short_ok); __END_SHORT_JUMPS__(else_short_ok);
} }
FOR_LOG(jitter->log_depth--);
END_JIT_DATA(12); END_JIT_DATA(12);
@ -5218,6 +5347,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(c)); jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(c));
CHECK_RUNSTACK_OVERFLOW(); CHECK_RUNSTACK_OVERFLOW();
stack_safety(jitter, c, 0);
mz_runstack_pushed(jitter, c); mz_runstack_pushed(jitter, c);
if (SCHEME_LET_AUTOBOX(lv)) { if (SCHEME_LET_AUTOBOX(lv)) {
@ -5301,14 +5431,19 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
LOG_IT(("leto...\n")); LOG_IT(("leto...\n"));
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); mz_runstack_skipped(jitter, 1);
CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1);
PAUSE_JIT_DATA(); PAUSE_JIT_DATA();
generate_non_tail(lv->value, jitter, 0, 1); generate_non_tail(lv->value, jitter, 0, 1);
RESUME_JIT_DATA(); RESUME_JIT_DATA();
CHECK_LIMIT(); CHECK_LIMIT();
mz_runstack_unskipped(jitter, 1);
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
CHECK_RUNSTACK_OVERFLOW();
mz_runstack_pushed(jitter, 1);
jit_str_p(JIT_RUNSTACK, JIT_R0); jit_str_p(JIT_RUNSTACK, JIT_R0);
END_JIT_DATA(17); END_JIT_DATA(17);
@ -5329,7 +5464,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
/* Key: */ /* Key: */
generate_non_tail(wcm->key, jitter, 0, 1); generate_non_tail(wcm->key, jitter, 0, 1);
CHECK_LIMIT(); CHECK_LIMIT();
if (SCHEME_TYPE(obj) > _scheme_values_types_) { if (SCHEME_TYPE(wcm->val) > _scheme_values_types_) {
/* No need to push mark onto value stack: */ /* No need to push mark onto value stack: */
jit_movr_p(JIT_V1, JIT_R0); jit_movr_p(JIT_V1, JIT_R0);
generate_non_tail(wcm->val, jitter, 0, 1); generate_non_tail(wcm->val, jitter, 0, 1);
@ -6596,7 +6731,9 @@ static int do_generate_closure(mz_jit_state *jitter, void *_data)
} }
} }
LOG_IT(("PROC: %s\n", (data->name ? scheme_format_utf8("~s", 2, 1, &data->name, NULL) : "???"))); LOG_IT(("PROC: %s, %d args\n",
(data->name ? scheme_format_utf8("~s", 2, 1, &data->name, NULL) : "???"),
data->num_params));
FOR_LOG(jitter->log_depth++); FOR_LOG(jitter->log_depth++);
jitter->self_data = data; jitter->self_data = data;

View File

@ -155,19 +155,19 @@ scheme_init_list (Scheme_Env *env)
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant ("mcons", p, env); scheme_add_global_constant ("mcons", p, env);
p = scheme_make_noncm_prim(scheme_checked_mcar, "mcar", 1, 1); p = scheme_make_immed_prim(scheme_checked_mcar, "mcar", 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant ("mcar", p, env); scheme_add_global_constant ("mcar", p, env);
p = scheme_make_noncm_prim(scheme_checked_mcdr, "mcdr", 1, 1); p = scheme_make_immed_prim(scheme_checked_mcdr, "mcdr", 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant ("mcdr", p, env); scheme_add_global_constant ("mcdr", p, env);
p = scheme_make_noncm_prim(scheme_checked_set_mcar, "set-mcar!", 2, 2); p = scheme_make_immed_prim(scheme_checked_set_mcar, "set-mcar!", 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant ("set-mcar!", p, env); scheme_add_global_constant ("set-mcar!", p, env);
p = scheme_make_noncm_prim(scheme_checked_set_mcdr, "set-mcdr!", 2, 2); p = scheme_make_immed_prim(scheme_checked_set_mcdr, "set-mcdr!", 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant ("set-mcdr!", p, env); scheme_add_global_constant ("set-mcdr!", p, env);
@ -176,17 +176,17 @@ scheme_init_list (Scheme_Env *env)
scheme_add_global_constant ("null?", p, env); scheme_add_global_constant ("null?", p, env);
scheme_add_global_constant ("list?", scheme_add_global_constant ("list?",
scheme_make_noncm_prim(list_p_prim, scheme_make_immed_prim(list_p_prim,
"list?", "list?",
1, 1), 1, 1),
env); env);
scheme_add_global_constant ("list", scheme_add_global_constant ("list",
scheme_make_noncm_prim(list_prim, scheme_make_immed_prim(list_prim,
"list", "list",
0, -1), 0, -1),
env); env);
scheme_add_global_constant ("list*", scheme_add_global_constant ("list*",
scheme_make_noncm_prim(list_star_prim, scheme_make_immed_prim(list_star_prim,
"list*", "list*",
1, -1), 1, -1),
env); env);
@ -196,57 +196,57 @@ scheme_init_list (Scheme_Env *env)
1, 1, 1), 1, 1, 1),
env); env);
scheme_add_global_constant ("length", scheme_add_global_constant ("length",
scheme_make_noncm_prim(length_prim, scheme_make_immed_prim(length_prim,
"length", "length",
1, 1), 1, 1),
env); env);
scheme_add_global_constant ("append", scheme_add_global_constant ("append",
scheme_make_noncm_prim(append_prim, scheme_make_immed_prim(append_prim,
"append", "append",
0, -1), 0, -1),
env); env);
scheme_add_global_constant ("reverse", scheme_add_global_constant ("reverse",
scheme_make_noncm_prim(reverse_prim, scheme_make_immed_prim(reverse_prim,
"reverse", "reverse",
1, 1), 1, 1),
env); env);
scheme_add_global_constant ("list-tail", scheme_add_global_constant ("list-tail",
scheme_make_noncm_prim(list_tail_prim, scheme_make_immed_prim(list_tail_prim,
"list-tail", "list-tail",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("list-ref", scheme_add_global_constant ("list-ref",
scheme_make_noncm_prim(list_ref_prim, scheme_make_immed_prim(list_ref_prim,
"list-ref", "list-ref",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("memq", scheme_add_global_constant ("memq",
scheme_make_noncm_prim(memq, scheme_make_immed_prim(memq,
"memq", "memq",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("memv", scheme_add_global_constant ("memv",
scheme_make_noncm_prim(memv, scheme_make_immed_prim(memv,
"memv", "memv",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("member", scheme_add_global_constant ("member",
scheme_make_noncm_prim(member, scheme_make_immed_prim(member,
"member", "member",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("assq", scheme_add_global_constant ("assq",
scheme_make_noncm_prim(assq, scheme_make_immed_prim(assq,
"assq", "assq",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("assv", scheme_add_global_constant ("assv",
scheme_make_noncm_prim(assv, scheme_make_immed_prim(assv,
"assv", "assv",
2, 2), 2, 2),
env); env);
scheme_add_global_constant ("assoc", scheme_add_global_constant ("assoc",
scheme_make_noncm_prim(assoc, scheme_make_immed_prim(assoc,
"assoc", "assoc",
2, 2), 2, 2),
env); env);
@ -390,12 +390,12 @@ scheme_init_list (Scheme_Env *env)
env); env);
scheme_add_global_constant(BOX, scheme_add_global_constant(BOX,
scheme_make_noncm_prim(box, scheme_make_immed_prim(box,
BOX, BOX,
1, 1), 1, 1),
env); env);
scheme_add_global_constant("box-immutable", scheme_add_global_constant("box-immutable",
scheme_make_noncm_prim(immutable_box, scheme_make_immed_prim(immutable_box,
"box-immutable", "box-immutable",
1, 1), 1, 1),
env); env);
@ -404,23 +404,23 @@ scheme_init_list (Scheme_Env *env)
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant(BOXP, p, env); scheme_add_global_constant(BOXP, p, env);
p = scheme_make_noncm_prim(unbox, UNBOX, 1, 1); p = scheme_make_immed_prim(unbox, UNBOX, 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant(UNBOX, p, env); scheme_add_global_constant(UNBOX, p, env);
scheme_add_global_constant(SETBOX, scheme_add_global_constant(SETBOX,
scheme_make_noncm_prim(set_box, scheme_make_immed_prim(set_box,
SETBOX, SETBOX,
2, 2), 2, 2),
env); env);
scheme_add_global_constant("make-hash-table", scheme_add_global_constant("make-hash-table",
scheme_make_noncm_prim(make_hash_table, scheme_make_immed_prim(make_hash_table,
"make-hash-table", "make-hash-table",
0, 2), 0, 2),
env); env);
scheme_add_global_constant("make-immutable-hash-table", scheme_add_global_constant("make-immutable-hash-table",
scheme_make_noncm_prim(make_immutable_hash_table, scheme_make_immed_prim(make_immutable_hash_table,
"make-immutable-hash-table", "make-immutable-hash-table",
1, 2), 1, 2),
env); env);
@ -430,7 +430,7 @@ scheme_init_list (Scheme_Env *env)
1, 3, 1), 1, 3, 1),
env); env);
scheme_add_global_constant("hash-table-count", scheme_add_global_constant("hash-table-count",
scheme_make_noncm_prim(hash_table_count, scheme_make_immed_prim(hash_table_count,
"hash-table-count", "hash-table-count",
1, 1), 1, 1),
env); env);
@ -466,28 +466,28 @@ scheme_init_list (Scheme_Env *env)
env); env);
scheme_add_global_constant("hash-table-iterate-first", scheme_add_global_constant("hash-table-iterate-first",
scheme_make_noncm_prim(hash_table_iterate_start, scheme_make_immed_prim(hash_table_iterate_start,
"hash-table-iterate-first", "hash-table-iterate-first",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("hash-table-iterate-next", scheme_add_global_constant("hash-table-iterate-next",
scheme_make_noncm_prim(hash_table_iterate_next, scheme_make_immed_prim(hash_table_iterate_next,
"hash-table-iterate-next", "hash-table-iterate-next",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("hash-table-iterate-value", scheme_add_global_constant("hash-table-iterate-value",
scheme_make_noncm_prim(hash_table_iterate_value, scheme_make_immed_prim(hash_table_iterate_value,
"hash-table-iterate-value", "hash-table-iterate-value",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("hash-table-iterate-key", scheme_add_global_constant("hash-table-iterate-key",
scheme_make_noncm_prim(hash_table_iterate_key, scheme_make_immed_prim(hash_table_iterate_key,
"hash-table-iterate-key", "hash-table-iterate-key",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("eq-hash-code", scheme_add_global_constant("eq-hash-code",
scheme_make_noncm_prim(eq_hash_code, scheme_make_immed_prim(eq_hash_code,
"eq-hash-code", "eq-hash-code",
1, 1), 1, 1),
env); env);
@ -503,12 +503,12 @@ scheme_init_list (Scheme_Env *env)
env); env);
scheme_add_global_constant("make-weak-box", scheme_add_global_constant("make-weak-box",
scheme_make_noncm_prim(make_weak_box, scheme_make_immed_prim(make_weak_box,
"make-weak-box", "make-weak-box",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("weak-box-value", scheme_add_global_constant("weak-box-value",
scheme_make_noncm_prim(weak_box_value, scheme_make_immed_prim(weak_box_value,
"weak-box-value", "weak-box-value",
1, 1), 1, 1),
env); env);
@ -519,12 +519,12 @@ scheme_init_list (Scheme_Env *env)
env); env);
scheme_add_global_constant("make-ephemeron", scheme_add_global_constant("make-ephemeron",
scheme_make_noncm_prim(make_ephemeron, scheme_make_immed_prim(make_ephemeron,
"make-ephemeron", "make-ephemeron",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("ephemeron-value", scheme_add_global_constant("ephemeron-value",
scheme_make_noncm_prim(ephemeron_value, scheme_make_immed_prim(ephemeron_value,
"ephemeron-value", "ephemeron-value",
1, 1), 1, 1),
env); env);

View File

@ -79,17 +79,21 @@ static Scheme_Object *top_level_require_jit(Scheme_Object *data);
static Scheme_Object *module_optimize(Scheme_Object *data, Optimize_Info *info); static Scheme_Object *module_optimize(Scheme_Object *data, Optimize_Info *info);
static Scheme_Object *module_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *module_resolve(Scheme_Object *data, Resolve_Info *info);
static Scheme_Object *module_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *top_level_require_optimize(Scheme_Object *data, Optimize_Info *info); static Scheme_Object *top_level_require_optimize(Scheme_Object *data, Optimize_Info *info);
static Scheme_Object *top_level_require_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *top_level_require_resolve(Scheme_Object *data, Resolve_Info *info);
static Scheme_Object *top_level_require_sfs(Scheme_Object *data, SFS_Info *info);
static void module_validate(Scheme_Object *data, Mz_CPort *port, static void module_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static Scheme_Object *write_module(Scheme_Object *obj); static Scheme_Object *write_module(Scheme_Object *obj);
static Scheme_Object *read_module(Scheme_Object *obj); static Scheme_Object *read_module(Scheme_Object *obj);
@ -256,12 +260,12 @@ void scheme_init_module(Scheme_Env *env)
scheme_register_syntax(MODULE_EXPD, scheme_register_syntax(MODULE_EXPD,
module_optimize, module_optimize,
module_resolve, module_validate, module_resolve, module_sfs, module_validate,
module_execute, module_jit, module_execute, module_jit,
NULL, NULL, -1); NULL, NULL, -1);
scheme_register_syntax(REQUIRE_EXPD, scheme_register_syntax(REQUIRE_EXPD,
top_level_require_optimize, top_level_require_optimize,
top_level_require_resolve, top_level_require_validate, top_level_require_resolve, top_level_require_sfs, top_level_require_validate,
top_level_require_execute, top_level_require_jit, top_level_require_execute, top_level_require_jit,
NULL, NULL, 2); NULL, NULL, 2);
@ -4232,7 +4236,8 @@ static Scheme_Object *module_jit(Scheme_Object *data)
static void module_validate(Scheme_Object *data, Mz_CPort *port, static void module_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
Scheme_Module *m; Scheme_Module *m;
int i, cnt, let_depth; int i, cnt, let_depth;
@ -4618,6 +4623,51 @@ module_resolve(Scheme_Object *data, Resolve_Info *old_rslv)
return scheme_make_syntax_resolved(MODULE_EXPD, data); return scheme_make_syntax_resolved(MODULE_EXPD, data);
} }
static Scheme_Object *
module_sfs(Scheme_Object *data, SFS_Info *old_info)
{
Scheme_Module *m = (Scheme_Module *)data;
Scheme_Object *e, *ex;
SFS_Info *info;
int i, cnt, let_depth;
if (!old_info->for_mod) {
if (old_info->pass)
return data;
info = scheme_new_sfs_info(m->max_let_depth);
info->for_mod = 1;
scheme_sfs(data, info, m->max_let_depth);
return data;
}
info = old_info;
cnt = SCHEME_VEC_SIZE(m->body);
scheme_sfs_start_sequence(info, cnt, 0);
for (i = 0; i < cnt; i++) {
e = scheme_sfs_expr(SCHEME_VEC_ELS(m->body)[i], info, -1);
SCHEME_VEC_ELS(m->body)[i] = e;
}
if (!info->pass) {
cnt = SCHEME_VEC_SIZE(m->et_body);
for (i = 0; i < cnt; i++) {
e = SCHEME_VEC_ELS(m->et_body)[i];
let_depth = SCHEME_INT_VAL(SCHEME_VEC_ELS(e)[2]);
ex = SCHEME_VEC_ELS(e)[1];
info = scheme_new_sfs_info(let_depth);
ex = scheme_sfs(ex, info, let_depth);
SCHEME_VEC_ELS(e)[1] = ex;
}
}
return data;
}
static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Compile_Expand_Info *rec, int drec) Scheme_Compile_Expand_Info *rec, int drec)
{ {
@ -5561,6 +5611,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
SCHEME_VEC_ELS(vec)[4] = (for_stx ? scheme_true : scheme_false); SCHEME_VEC_ELS(vec)[4] = (for_stx ? scheme_true : scheme_false);
exp_body = scheme_make_pair(vec, exp_body); exp_body = scheme_make_pair(vec, exp_body);
m = scheme_sfs(m, NULL, ri->max_let_depth);
if (ri->use_jit) if (ri->use_jit)
m = scheme_jit_expr(m); m = scheme_jit_expr(m);
@ -8159,7 +8210,8 @@ top_level_require_jit(Scheme_Object *data)
static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
} }
@ -8179,6 +8231,12 @@ top_level_require_resolve(Scheme_Object *data, Resolve_Info *rslv)
return scheme_make_syntax_resolved(REQUIRE_EXPD, cons(dummy, SCHEME_CDR(data))); return scheme_make_syntax_resolved(REQUIRE_EXPD, cons(dummy, SCHEME_CDR(data)));
} }
static Scheme_Object *
top_level_require_sfs(Scheme_Object *data, SFS_Info *rslv)
{
return data;
}
static Scheme_Object *do_require(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object *do_require(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Compile_Expand_Info *rec, int drec) Scheme_Compile_Expand_Info *rec, int drec)
{ {

View File

@ -2788,6 +2788,36 @@ static int mark_optimize_info_FIXUP(void *p) {
#define mark_optimize_info_IS_CONST_SIZE 1 #define mark_optimize_info_IS_CONST_SIZE 1
static int mark_sfs_info_SIZE(void *p) {
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_MARK(void *p) {
SFS_Info *i = (SFS_Info *)p;
gcMARK(i->max_used);
gcMARK(i->max_calls);
gcMARK(i->saved);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_FIXUP(void *p) {
SFS_Info *i = (SFS_Info *)p;
gcFIXUP(i->max_used);
gcFIXUP(i->max_calls);
gcFIXUP(i->saved);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
#define mark_sfs_info_IS_ATOMIC 0
#define mark_sfs_info_IS_CONST_SIZE 1
#endif /* ENV */ #endif /* ENV */
@ -2855,6 +2885,35 @@ static int mark_saved_stack_FIXUP(void *p) {
#define mark_saved_stack_IS_CONST_SIZE 1 #define mark_saved_stack_IS_CONST_SIZE 1
static int mark_validate_clearing_SIZE(void *p) {
return
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
}
static int mark_validate_clearing_MARK(void *p) {
Validate_Clearing *vc = (Validate_Clearing *)p;
gcMARK(vc->stack);
gcMARK(vc->ncstack);
return
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
}
static int mark_validate_clearing_FIXUP(void *p) {
Validate_Clearing *vc = (Validate_Clearing *)p;
gcFIXUP(vc->stack);
gcFIXUP(vc->ncstack);
return
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
}
#define mark_validate_clearing_IS_ATOMIC 0
#define mark_validate_clearing_IS_CONST_SIZE 1
#endif /* EVAL */ #endif /* EVAL */
/**********************************************************************/ /**********************************************************************/

View File

@ -1115,6 +1115,17 @@ mark_optimize_info {
gcBYTES_TO_WORDS(sizeof(Optimize_Info)); gcBYTES_TO_WORDS(sizeof(Optimize_Info));
} }
mark_sfs_info {
mark:
SFS_Info *i = (SFS_Info *)p;
gcMARK(i->max_used);
gcMARK(i->max_calls);
gcMARK(i->saved);
size:
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
END env; END env;
@ -1145,6 +1156,17 @@ mark_saved_stack {
gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack));
} }
mark_validate_clearing {
mark:
Validate_Clearing *vc = (Validate_Clearing *)p;
gcMARK(vc->stack);
gcMARK(vc->ncstack);
size:
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
}
END eval; END eval;
/**********************************************************************/ /**********************************************************************/

View File

@ -711,7 +711,7 @@ scheme_init_port_fun(Scheme_Env *env)
2, 2), 2, 2),
env); env);
scheme_add_global_constant("pipe-content-length", scheme_add_global_constant("pipe-content-length",
scheme_make_noncm_prim(pipe_length, scheme_make_immed_prim(pipe_length,
"pipe-content-length", "pipe-content-length",
1, 1), 1, 1),
env); env);

View File

@ -2272,15 +2272,22 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
{ {
int unbox = SAME_TYPE(SCHEME_TYPE(obj), scheme_local_unbox_type); int unbox = SAME_TYPE(SCHEME_TYPE(obj), scheme_local_unbox_type);
Scheme_Local *loc = (Scheme_Local *)obj; Scheme_Local *loc = (Scheme_Local *)obj;
if (loc->position < CPT_RANGE(SMALL_LOCAL)) { if ((loc->position < CPT_RANGE(SMALL_LOCAL))
&& !(SCHEME_LOCAL_FLAGS(loc) & SCHEME_LOCAL_CLEARING_MASK)) {
unsigned char s[1]; unsigned char s[1];
s[0] = loc->position + (unbox s[0] = loc->position + (unbox
? CPT_SMALL_LOCAL_UNBOX_START ? CPT_SMALL_LOCAL_UNBOX_START
: CPT_SMALL_LOCAL_START); : CPT_SMALL_LOCAL_START);
print_this_string(pp, (char *)s, 0, 1); print_this_string(pp, (char *)s, 0, 1);
} else { } else {
int flags;
print_compact(pp, unbox ? CPT_LOCAL_UNBOX : CPT_LOCAL); print_compact(pp, unbox ? CPT_LOCAL_UNBOX : CPT_LOCAL);
print_compact_number(pp, loc->position); flags = SCHEME_LOCAL_FLAGS(loc) & SCHEME_LOCAL_CLEARING_MASK;
if (flags) {
print_compact_number(pp, -(loc->position + 1));
print_compact_number(pp, flags);
} else
print_compact_number(pp, loc->position);
} }
} }
else if (compact && SAME_TYPE(SCHEME_TYPE(obj), scheme_application_type)) else if (compact && SAME_TYPE(SCHEME_TYPE(obj), scheme_application_type))

View File

@ -4593,20 +4593,26 @@ static Scheme_Object *read_compact(CPort *port, int use_stack)
break; break;
case CPT_LOCAL: case CPT_LOCAL:
{ {
int p; int p, flags;
p = read_compact_number(port); p = read_compact_number(port);
if (p < 0) if (p < 0) {
scheme_ill_formed_code(port); p = -(p + 1);
v = scheme_make_local(scheme_local_type, p); flags = read_compact_number(port);
} else
flags = 0;
v = scheme_make_local(scheme_local_type, p, flags);
} }
break; break;
case CPT_LOCAL_UNBOX: case CPT_LOCAL_UNBOX:
{ {
int p; int p, flags;
p = read_compact_number(port); p = read_compact_number(port);
if (p < 0) if (p < 0) {
scheme_ill_formed_code(port); p = -(p + 1);
v = scheme_make_local(scheme_local_unbox_type, p); flags = read_compact_number(port);
} else
flags = 0;
v = scheme_make_local(scheme_local_unbox_type, p, flags);
} }
break; break;
case CPT_SVECTOR: case CPT_SVECTOR:
@ -4764,9 +4770,9 @@ static Scheme_Object *read_compact(CPort *port, int use_stack)
ch -= CPT_SMALL_LOCAL_START; ch -= CPT_SMALL_LOCAL_START;
} }
if (ch < MAX_CONST_LOCAL_POS) if (ch < MAX_CONST_LOCAL_POS)
v = scheme_local[ch][k]; v = scheme_local[ch][k][0];
else else
v = scheme_make_local(type, ch); v = scheme_make_local(type, ch, 0);
} }
break; break;
case CPT_SMALL_MARSHALLED_START: case CPT_SMALL_MARSHALLED_START:

View File

@ -425,6 +425,9 @@ MZ_EXTERN Scheme_Object *scheme_make_folding_prim(Scheme_Prim *prim,
const char *name, const char *name,
mzshort mina, mzshort maxa, mzshort mina, mzshort maxa,
short functional); short functional);
MZ_EXTERN Scheme_Object *scheme_make_immed_prim(Scheme_Prim *prim,
const char *name,
mzshort mina, mzshort maxa);
MZ_EXTERN Scheme_Object *scheme_make_noncm_prim(Scheme_Prim *prim, MZ_EXTERN Scheme_Object *scheme_make_noncm_prim(Scheme_Prim *prim,
const char *name, const char *name,
mzshort mina, mzshort maxa); mzshort mina, mzshort maxa);

View File

@ -346,6 +346,9 @@ Scheme_Object *(*scheme_make_folding_prim)(Scheme_Prim *prim,
const char *name, const char *name,
mzshort mina, mzshort maxa, mzshort mina, mzshort maxa,
short functional); short functional);
Scheme_Object *(*scheme_make_immed_prim)(Scheme_Prim *prim,
const char *name,
mzshort mina, mzshort maxa);
Scheme_Object *(*scheme_make_noncm_prim)(Scheme_Prim *prim, Scheme_Object *(*scheme_make_noncm_prim)(Scheme_Prim *prim,
const char *name, const char *name,
mzshort mina, mzshort maxa); mzshort mina, mzshort maxa);

View File

@ -236,6 +236,7 @@
scheme_extension_table->scheme_make_noneternal_prim = scheme_make_noneternal_prim; scheme_extension_table->scheme_make_noneternal_prim = scheme_make_noneternal_prim;
scheme_extension_table->scheme_make_prim_w_arity = scheme_make_prim_w_arity; scheme_extension_table->scheme_make_prim_w_arity = scheme_make_prim_w_arity;
scheme_extension_table->scheme_make_folding_prim = scheme_make_folding_prim; scheme_extension_table->scheme_make_folding_prim = scheme_make_folding_prim;
scheme_extension_table->scheme_make_immed_prim = scheme_make_immed_prim;
scheme_extension_table->scheme_make_noncm_prim = scheme_make_noncm_prim; scheme_extension_table->scheme_make_noncm_prim = scheme_make_noncm_prim;
scheme_extension_table->scheme_make_noneternal_prim_w_arity = scheme_make_noneternal_prim_w_arity; scheme_extension_table->scheme_make_noneternal_prim_w_arity = scheme_make_noneternal_prim_w_arity;
scheme_extension_table->scheme_make_prim_w_everything = scheme_make_prim_w_everything; scheme_extension_table->scheme_make_prim_w_everything = scheme_make_prim_w_everything;

View File

@ -236,6 +236,7 @@
#define scheme_make_noneternal_prim (scheme_extension_table->scheme_make_noneternal_prim) #define scheme_make_noneternal_prim (scheme_extension_table->scheme_make_noneternal_prim)
#define scheme_make_prim_w_arity (scheme_extension_table->scheme_make_prim_w_arity) #define scheme_make_prim_w_arity (scheme_extension_table->scheme_make_prim_w_arity)
#define scheme_make_folding_prim (scheme_extension_table->scheme_make_folding_prim) #define scheme_make_folding_prim (scheme_extension_table->scheme_make_folding_prim)
#define scheme_make_immed_prim (scheme_extension_table->scheme_make_immed_prim)
#define scheme_make_noncm_prim (scheme_extension_table->scheme_make_noncm_prim) #define scheme_make_noncm_prim (scheme_extension_table->scheme_make_noncm_prim)
#define scheme_make_noneternal_prim_w_arity (scheme_extension_table->scheme_make_noneternal_prim_w_arity) #define scheme_make_noneternal_prim_w_arity (scheme_extension_table->scheme_make_noneternal_prim_w_arity)
#define scheme_make_prim_w_everything (scheme_extension_table->scheme_make_prim_w_everything) #define scheme_make_prim_w_everything (scheme_extension_table->scheme_make_prim_w_everything)

View File

@ -13,7 +13,7 @@
#define USE_COMPILED_STARTUP 1 #define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 892 #define EXPECTED_PRIM_COUNT 893
#ifdef MZSCHEME_SOMETHING_OMITTED #ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP # undef USE_COMPILED_STARTUP

View File

@ -228,7 +228,7 @@ Scheme_Object *scheme_make_initial_inspectors(void);
extern int scheme_builtin_ref_counter; extern int scheme_builtin_ref_counter;
Scheme_Object **scheme_make_builtin_references_table(void); Scheme_Object **scheme_make_builtin_references_table(void);
Scheme_Object *scheme_make_local(Scheme_Type type, int pos); Scheme_Object *scheme_make_local(Scheme_Type type, int pos, int flags);
void scheme_add_embedded_builtins(Scheme_Env *env); void scheme_add_embedded_builtins(Scheme_Env *env);
void scheme_do_add_global_symbol(Scheme_Env *env, Scheme_Object *sym, void scheme_do_add_global_symbol(Scheme_Env *env, Scheme_Object *sym,
@ -821,7 +821,7 @@ typedef struct {
} Scheme_With_Continuation_Mark; } Scheme_With_Continuation_Mark;
typedef struct Scheme_Local { typedef struct Scheme_Local {
Scheme_Object so; Scheme_Inclhash_Object iso; /* keyex used for clear-on-read flag */
mzshort position; mzshort position;
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
# ifdef MZSHORT_IS_SHORT # ifdef MZSHORT_IS_SHORT
@ -832,9 +832,14 @@ typedef struct Scheme_Local {
} Scheme_Local; } Scheme_Local;
#define SCHEME_LOCAL_POS(obj) (((Scheme_Local *)(obj))->position) #define SCHEME_LOCAL_POS(obj) (((Scheme_Local *)(obj))->position)
#define SCHEME_LOCAL_FLAGS(obj) MZ_OPT_HASH_KEY(&((Scheme_Local *)(obj))->iso)
#define SCHEME_LOCAL_CLEAR_ON_READ 0x1
#define SCHEME_LOCAL_OTHER_CLEARS 0x2
#define SCHEME_LOCAL_CLEARING_MASK 0x3
typedef struct Scheme_Toplevel { typedef struct Scheme_Toplevel {
Scheme_Inclhash_Object iso; /* keyex used for const flag */ Scheme_Inclhash_Object iso; /* keyex used for const & ready flags */
mzshort depth; mzshort depth;
int position; int position;
} Scheme_Toplevel; } Scheme_Toplevel;
@ -1689,7 +1694,7 @@ typedef struct Scheme_Comp_Env
#define CLOS_HAS_REST 1 #define CLOS_HAS_REST 1
#define CLOS_HAS_REF_ARGS 2 #define CLOS_HAS_REF_ARGS 2
#define CLOS_PRESERVES_MARKS 4 #define CLOS_PRESERVES_MARKS 4
#define CLOS_FOLDABLE 8 #define CLOS_SFS 8
#define CLOS_IS_METHOD 16 #define CLOS_IS_METHOD 16
#define CLOS_SINGLE_RESULT 32 #define CLOS_SINGLE_RESULT 32
#define CLOS_RESULT_TENTATIVE 64 #define CLOS_RESULT_TENTATIVE 64
@ -1784,11 +1789,13 @@ typedef struct Scheme_Object *(*Scheme_Syntax_Shifter)(Scheme_Object *data, int
typedef struct CPort Mz_CPort; typedef struct CPort Mz_CPort;
typedef mzshort **Validate_TLS; typedef mzshort **Validate_TLS;
struct Validate_Clearing;
typedef void (*Scheme_Syntax_Validater)(Scheme_Object *data, Mz_CPort *port, typedef void (*Scheme_Syntax_Validater)(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
typedef struct Scheme_Object *(*Scheme_Syntax_Executer)(struct Scheme_Object *data); typedef struct Scheme_Object *(*Scheme_Syntax_Executer)(struct Scheme_Object *data);
@ -1859,7 +1866,7 @@ Scheme_Native_Closure_Data *scheme_generate_lambda(Scheme_Closure_Data *obj, int
Scheme_Native_Closure_Data *case_lam); Scheme_Native_Closure_Data *case_lam);
#define MAX_CONST_LOCAL_POS 64 #define MAX_CONST_LOCAL_POS 64
extern Scheme_Object *scheme_local[MAX_CONST_LOCAL_POS][2]; extern Scheme_Object *scheme_local[MAX_CONST_LOCAL_POS][2][3];
#define scheme_new_frame(n) scheme_new_special_frame(n, 0) #define scheme_new_frame(n) scheme_new_special_frame(n, 0)
#define scheme_extend_env(f, e) (f->basic.next = e, f) #define scheme_extend_env(f, e) (f->basic.next = e, f)
@ -1949,6 +1956,31 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object
int *_pos); int *_pos);
int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env); int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env);
typedef struct SFS_Info {
MZTAG_IF_REQUIRED
int for_mod, pass;
int tail_pos;
int depth, stackpos, tlpos;
int selfpos, selfstart, selflen;
int ip, seqn, max_nontail;
int min_touch, max_touch;
int *max_used, *max_calls;
Scheme_Object *saved;
} SFS_Info;
SFS_Info *scheme_new_sfs_info(int depth);
Scheme_Object *scheme_sfs(Scheme_Object *expr, SFS_Info *info, int max_let_depth);
Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *si, int self_pos);
Scheme_Object *scheme_sfs_closure(Scheme_Object *expr, SFS_Info *si, int self_pos);
void scheme_sfs_used(SFS_Info *info, int pos);
void scheme_sfs_push(SFS_Info *info, int count, int track);
void scheme_sfs_start_sequence(SFS_Info *si, int cnt, int last_is_tail);
Scheme_Object *scheme_sfs_add_clears(Scheme_Object *expr, Scheme_Object *clears, int pre);
typedef struct Scheme_Object *(*Scheme_Syntax_SFSer)(Scheme_Object *data, SFS_Info *info);
/* Resolving & linking */ /* Resolving & linking */
#define DEFINE_VALUES_EXPD 0 #define DEFINE_VALUES_EXPD 0
#define DEFINE_SYNTAX_EXPD 1 #define DEFINE_SYNTAX_EXPD 1
@ -1964,10 +1996,11 @@ int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env);
#define SPLICE_EXPD 11 #define SPLICE_EXPD 11
#define _COUNT_EXPD_ 12 #define _COUNT_EXPD_ 12
#define scheme_register_syntax(i, fo, fr, fv, fe, fj, cl, sh, pa) \ #define scheme_register_syntax(i, fo, fr, fs, fv, fe, fj, cl, sh, pa) \
(scheme_syntax_optimizers[i] = fo, \ (scheme_syntax_optimizers[i] = fo, \
scheme_syntax_resolvers[i] = fr, \ scheme_syntax_resolvers[i] = fr, \
scheme_syntax_executers[i] = fe, \ scheme_syntax_executers[i] = fe, \
scheme_syntax_sfsers[i] = fs, \
scheme_syntax_validaters[i] = fv, \ scheme_syntax_validaters[i] = fv, \
scheme_syntax_jitters[i] = fj, \ scheme_syntax_jitters[i] = fj, \
scheme_syntax_cloners[i] = cl, \ scheme_syntax_cloners[i] = cl, \
@ -1975,6 +2008,7 @@ int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env);
scheme_syntax_protect_afters[i] = pa) scheme_syntax_protect_afters[i] = pa)
extern Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_]; extern Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_];
extern Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_]; extern Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_];
extern Scheme_Syntax_SFSer scheme_syntax_sfsers[_COUNT_EXPD_];
extern Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_]; extern Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_];
extern Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_]; extern Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_];
extern Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_]; extern Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_];
@ -2228,7 +2262,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts, int num_toplevels, int num_stxes, int num_lifts,
Scheme_Object *app_rator, int proc_with_refs_ok); Scheme_Object *app_rator, int proc_with_refs_ok,
int result_ignored, struct Validate_Clearing *vc, int tailpos);
void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port, void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int delta, int depth, int delta,
@ -2244,7 +2279,8 @@ int scheme_validate_rator_wants_box(Scheme_Object *app_rator, int pos,
void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr, void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr,
char *new_stack, Validate_TLS tls, char *new_stack, Validate_TLS tls,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
int self_pos_in_closure);
#define TRACK_ILL_FORMED_CATCH_LINES 1 #define TRACK_ILL_FORMED_CATCH_LINES 1
#if TRACK_ILL_FORMED_CATCH_LINES #if TRACK_ILL_FORMED_CATCH_LINES
@ -2568,6 +2604,9 @@ long scheme_extract_index(const char *name, int pos, int argc,
void scheme_get_substring_indices(const char *name, Scheme_Object *str, void scheme_get_substring_indices(const char *name, Scheme_Object *str,
int argc, Scheme_Object **argv, int argc, Scheme_Object **argv,
int spos, int fpos, long *_start, long *_finish); int spos, int fpos, long *_start, long *_finish);
void scheme_do_get_substring_indices(const char *name, Scheme_Object *str,
int argc, Scheme_Object **argv,
int spos, int fpos, long *_start, long *_finish, long len);
void scheme_out_of_string_range(const char *name, const char *which, void scheme_out_of_string_range(const char *name, const char *which,
Scheme_Object *i, Scheme_Object *s, Scheme_Object *i, Scheme_Object *s,

View File

@ -10,12 +10,12 @@
The string and the separate X/Y/Z/W numbers must The string and the separate X/Y/Z/W numbers must
be updated consistently. */ be updated consistently. */
#define MZSCHEME_VERSION "3.99.0.10" #define MZSCHEME_VERSION "3.99.0.11"
#define MZSCHEME_VERSION_X 3 #define MZSCHEME_VERSION_X 3
#define MZSCHEME_VERSION_Y 99 #define MZSCHEME_VERSION_Y 99
#define MZSCHEME_VERSION_Z 0 #define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 10 #define MZSCHEME_VERSION_W 11
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -387,12 +387,12 @@ scheme_init_string (Scheme_Env *env)
scheme_add_global_constant("string?", p, env); scheme_add_global_constant("string?", p, env);
scheme_add_global_constant("make-string", scheme_add_global_constant("make-string",
scheme_make_noncm_prim(make_string, scheme_make_immed_prim(make_string,
"make-string", "make-string",
1, 2), 1, 2),
env); env);
scheme_add_global_constant("string", scheme_add_global_constant("string",
scheme_make_noncm_prim(string, scheme_make_immed_prim(string,
"string", "string",
0, -1), 0, -1),
env); env);
@ -402,185 +402,185 @@ scheme_init_string (Scheme_Env *env)
1, 1, 1), 1, 1, 1),
env); env);
p = scheme_make_noncm_prim(scheme_checked_string_ref, "string-ref", 2, 2); p = scheme_make_immed_prim(scheme_checked_string_ref, "string-ref", 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("string-ref", p, env); scheme_add_global_constant("string-ref", p, env);
p = scheme_make_noncm_prim(scheme_checked_string_set, "string-set!", 3, 3); p = scheme_make_immed_prim(scheme_checked_string_set, "string-set!", 3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED;
scheme_add_global_constant("string-set!", p, env); scheme_add_global_constant("string-set!", p, env);
scheme_add_global_constant("string=?", scheme_add_global_constant("string=?",
scheme_make_noncm_prim(string_eq, scheme_make_immed_prim(string_eq,
"string=?", "string=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale=?", scheme_add_global_constant("string-locale=?",
scheme_make_noncm_prim(string_locale_eq, scheme_make_immed_prim(string_locale_eq,
"string-locale=?", "string-locale=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-ci=?", scheme_add_global_constant("string-ci=?",
scheme_make_noncm_prim(string_ci_eq, scheme_make_immed_prim(string_ci_eq,
"string-ci=?", "string-ci=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale-ci=?", scheme_add_global_constant("string-locale-ci=?",
scheme_make_noncm_prim(string_locale_ci_eq, scheme_make_immed_prim(string_locale_ci_eq,
"string-locale-ci=?", "string-locale-ci=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string<?", scheme_add_global_constant("string<?",
scheme_make_noncm_prim(string_lt, scheme_make_immed_prim(string_lt,
"string<?", "string<?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale<?", scheme_add_global_constant("string-locale<?",
scheme_make_noncm_prim(string_locale_lt, scheme_make_immed_prim(string_locale_lt,
"string-locale<?", "string-locale<?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string>?", scheme_add_global_constant("string>?",
scheme_make_noncm_prim(string_gt, scheme_make_immed_prim(string_gt,
"string>?", "string>?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale>?", scheme_add_global_constant("string-locale>?",
scheme_make_noncm_prim(string_locale_gt, scheme_make_immed_prim(string_locale_gt,
"string-locale>?", "string-locale>?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string<=?", scheme_add_global_constant("string<=?",
scheme_make_noncm_prim(string_lt_eq, scheme_make_immed_prim(string_lt_eq,
"string<=?", "string<=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string>=?", scheme_add_global_constant("string>=?",
scheme_make_noncm_prim(string_gt_eq, scheme_make_immed_prim(string_gt_eq,
"string>=?", "string>=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-ci<?", scheme_add_global_constant("string-ci<?",
scheme_make_noncm_prim(string_ci_lt, scheme_make_immed_prim(string_ci_lt,
"string-ci<?", "string-ci<?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale-ci<?", scheme_add_global_constant("string-locale-ci<?",
scheme_make_noncm_prim(string_locale_ci_lt, scheme_make_immed_prim(string_locale_ci_lt,
"string-locale-ci<?", "string-locale-ci<?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-ci>?", scheme_add_global_constant("string-ci>?",
scheme_make_noncm_prim(string_ci_gt, scheme_make_immed_prim(string_ci_gt,
"string-ci>?", "string-ci>?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-locale-ci>?", scheme_add_global_constant("string-locale-ci>?",
scheme_make_noncm_prim(string_locale_ci_gt, scheme_make_immed_prim(string_locale_ci_gt,
"string-locale-ci>?", "string-locale-ci>?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-ci<=?", scheme_add_global_constant("string-ci<=?",
scheme_make_noncm_prim(string_ci_lt_eq, scheme_make_immed_prim(string_ci_lt_eq,
"string-ci<=?", "string-ci<=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("string-ci>=?", scheme_add_global_constant("string-ci>=?",
scheme_make_noncm_prim(string_ci_gt_eq, scheme_make_immed_prim(string_ci_gt_eq,
"string-ci>=?", "string-ci>=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("substring", scheme_add_global_constant("substring",
scheme_make_noncm_prim(substring, scheme_make_immed_prim(substring,
"substring", "substring",
2, 3), 2, 3),
env); env);
scheme_add_global_constant("string-append", scheme_add_global_constant("string-append",
scheme_make_noncm_prim(string_append, scheme_make_immed_prim(string_append,
"string-append", "string-append",
0, -1), 0, -1),
env); env);
scheme_add_global_constant("string->list", scheme_add_global_constant("string->list",
scheme_make_noncm_prim(string_to_list, scheme_make_immed_prim(string_to_list,
"string->list", "string->list",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("list->string", scheme_add_global_constant("list->string",
scheme_make_noncm_prim(list_to_string, scheme_make_immed_prim(list_to_string,
"list->string", "list->string",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-copy", scheme_add_global_constant("string-copy",
scheme_make_noncm_prim(string_copy, scheme_make_immed_prim(string_copy,
"string-copy", "string-copy",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-copy!", scheme_add_global_constant("string-copy!",
scheme_make_noncm_prim(string_copy_bang, scheme_make_immed_prim(string_copy_bang,
"string-copy!", "string-copy!",
3, 5), 3, 5),
env); env);
scheme_add_global_constant("string-fill!", scheme_add_global_constant("string-fill!",
scheme_make_noncm_prim(string_fill, scheme_make_immed_prim(string_fill,
"string-fill!", "string-fill!",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("string->immutable-string", scheme_add_global_constant("string->immutable-string",
scheme_make_noncm_prim(string_to_immutable, scheme_make_immed_prim(string_to_immutable,
"string->immutable-string", "string->immutable-string",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-normalize-nfc", scheme_add_global_constant("string-normalize-nfc",
scheme_make_noncm_prim(string_normalize_c, scheme_make_immed_prim(string_normalize_c,
"string-normalize-nfc", "string-normalize-nfc",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-normalize-nfkc", scheme_add_global_constant("string-normalize-nfkc",
scheme_make_noncm_prim(string_normalize_kc, scheme_make_immed_prim(string_normalize_kc,
"string-normalize-nfkc", "string-normalize-nfkc",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-normalize-nfd", scheme_add_global_constant("string-normalize-nfd",
scheme_make_noncm_prim(string_normalize_d, scheme_make_immed_prim(string_normalize_d,
"string-normalize-nfd", "string-normalize-nfd",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-normalize-nfkd", scheme_add_global_constant("string-normalize-nfkd",
scheme_make_noncm_prim(string_normalize_kd, scheme_make_immed_prim(string_normalize_kd,
"string-normalize-nfkd", "string-normalize-nfkd",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-upcase", scheme_add_global_constant("string-upcase",
scheme_make_noncm_prim(string_upcase, scheme_make_immed_prim(string_upcase,
"string-upcase", "string-upcase",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-downcase", scheme_add_global_constant("string-downcase",
scheme_make_noncm_prim(string_downcase, scheme_make_immed_prim(string_downcase,
"string-downcase", "string-downcase",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-titlecase", scheme_add_global_constant("string-titlecase",
scheme_make_noncm_prim(string_titlecase, scheme_make_immed_prim(string_titlecase,
"string-titlecase", "string-titlecase",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-foldcase", scheme_add_global_constant("string-foldcase",
scheme_make_noncm_prim(string_foldcase, scheme_make_immed_prim(string_foldcase,
"string-foldcase", "string-foldcase",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-locale-upcase", scheme_add_global_constant("string-locale-upcase",
scheme_make_noncm_prim(string_locale_upcase, scheme_make_immed_prim(string_locale_upcase,
"string-locale-upcase", "string-locale-upcase",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("string-locale-downcase", scheme_add_global_constant("string-locale-downcase",
scheme_make_noncm_prim(string_locale_downcase, scheme_make_immed_prim(string_locale_downcase,
"string-locale-downcase", "string-locale-downcase",
1, 1), 1, 1),
env); env);
@ -591,18 +591,18 @@ scheme_init_string (Scheme_Env *env)
MZCONFIG_LOCALE), MZCONFIG_LOCALE),
env); env);
scheme_add_global_constant("locale-string-encoding", scheme_add_global_constant("locale-string-encoding",
scheme_make_noncm_prim(locale_string_encoding, scheme_make_immed_prim(locale_string_encoding,
"locale-string-encoding", "locale-string-encoding",
0, 0), 0, 0),
env); env);
scheme_add_global_constant("system-language+country", scheme_add_global_constant("system-language+country",
scheme_make_noncm_prim(system_language_country, scheme_make_immed_prim(system_language_country,
"system-language+country", "system-language+country",
0, 0), 0, 0),
env); env);
scheme_add_global_constant("bytes-converter?", scheme_add_global_constant("bytes-converter?",
scheme_make_noncm_prim(byte_converter_p, scheme_make_immed_prim(byte_converter_p,
"bytes-converter?", "bytes-converter?",
1, 1), 1, 1),
env); env);
@ -619,12 +619,12 @@ scheme_init_string (Scheme_Env *env)
2, 2), 2, 2),
env); env);
scheme_add_global_constant("bytes-open-converter", scheme_add_global_constant("bytes-open-converter",
scheme_make_noncm_prim(byte_string_open_converter, scheme_make_immed_prim(byte_string_open_converter,
"bytes-open-converter", "bytes-open-converter",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("bytes-close-converter", scheme_add_global_constant("bytes-close-converter",
scheme_make_noncm_prim(byte_string_close_converter, scheme_make_immed_prim(byte_string_close_converter,
"bytes-close-converter", "bytes-close-converter",
1, 1), 1, 1),
env); env);
@ -656,12 +656,12 @@ scheme_init_string (Scheme_Env *env)
scheme_add_global_constant("bytes?", p, env); scheme_add_global_constant("bytes?", p, env);
scheme_add_global_constant("make-bytes", scheme_add_global_constant("make-bytes",
scheme_make_noncm_prim(make_byte_string, scheme_make_immed_prim(make_byte_string,
"make-bytes", "make-bytes",
1, 2), 1, 2),
env); env);
scheme_add_global_constant("bytes", scheme_add_global_constant("bytes",
scheme_make_noncm_prim(byte_string, scheme_make_immed_prim(byte_string,
"bytes", "bytes",
0, -1), 0, -1),
env); env);
@ -671,121 +671,121 @@ scheme_init_string (Scheme_Env *env)
1, 1, 1), 1, 1, 1),
env); env);
p = scheme_make_noncm_prim(scheme_checked_byte_string_ref, "bytes-ref", 2, 2); p = scheme_make_immed_prim(scheme_checked_byte_string_ref, "bytes-ref", 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("bytes-ref", p, env); scheme_add_global_constant("bytes-ref", p, env);
p = scheme_make_noncm_prim(scheme_checked_byte_string_set, "bytes-set!", 3, 3); p = scheme_make_immed_prim(scheme_checked_byte_string_set, "bytes-set!", 3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED;
scheme_add_global_constant("bytes-set!", p, env); scheme_add_global_constant("bytes-set!", p, env);
scheme_add_global_constant("bytes=?", scheme_add_global_constant("bytes=?",
scheme_make_noncm_prim(byte_string_eq, scheme_make_immed_prim(byte_string_eq,
"bytes=?", "bytes=?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("bytes<?", scheme_add_global_constant("bytes<?",
scheme_make_noncm_prim(byte_string_lt, scheme_make_immed_prim(byte_string_lt,
"bytes<?", "bytes<?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("bytes>?", scheme_add_global_constant("bytes>?",
scheme_make_noncm_prim(byte_string_gt, scheme_make_immed_prim(byte_string_gt,
"bytes>?", "bytes>?",
2, -1), 2, -1),
env); env);
scheme_add_global_constant("subbytes", scheme_add_global_constant("subbytes",
scheme_make_noncm_prim(byte_substring, scheme_make_immed_prim(byte_substring,
"subbytes", "subbytes",
2, 3), 2, 3),
env); env);
scheme_add_global_constant("bytes-append", scheme_add_global_constant("bytes-append",
scheme_make_noncm_prim(byte_string_append, scheme_make_immed_prim(byte_string_append,
"bytes-append", "bytes-append",
0, -1), 0, -1),
env); env);
scheme_add_global_constant("bytes->list", scheme_add_global_constant("bytes->list",
scheme_make_noncm_prim(byte_string_to_list, scheme_make_immed_prim(byte_string_to_list,
"bytes->list", "bytes->list",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("list->bytes", scheme_add_global_constant("list->bytes",
scheme_make_noncm_prim(list_to_byte_string, scheme_make_immed_prim(list_to_byte_string,
"list->bytes", "list->bytes",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("bytes-copy", scheme_add_global_constant("bytes-copy",
scheme_make_noncm_prim(byte_string_copy, scheme_make_immed_prim(byte_string_copy,
"bytes-copy", "bytes-copy",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("bytes-copy!", scheme_add_global_constant("bytes-copy!",
scheme_make_noncm_prim(byte_string_copy_bang, scheme_make_immed_prim(byte_string_copy_bang,
"bytes-copy!", "bytes-copy!",
3, 5), 3, 5),
env); env);
scheme_add_global_constant("bytes-fill!", scheme_add_global_constant("bytes-fill!",
scheme_make_noncm_prim(byte_string_fill, scheme_make_immed_prim(byte_string_fill,
"bytes-fill!", "bytes-fill!",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("bytes->immutable-bytes", scheme_add_global_constant("bytes->immutable-bytes",
scheme_make_noncm_prim(byte_string_to_immutable, scheme_make_immed_prim(byte_string_to_immutable,
"bytes->immutable-bytes", "bytes->immutable-bytes",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("bytes-utf-8-index", scheme_add_global_constant("bytes-utf-8-index",
scheme_make_noncm_prim(byte_string_utf8_index, scheme_make_immed_prim(byte_string_utf8_index,
"bytes-utf-8-index", "bytes-utf-8-index",
2, 4), 2, 4),
env); env);
scheme_add_global_constant("bytes-utf-8-length", scheme_add_global_constant("bytes-utf-8-length",
scheme_make_noncm_prim(byte_string_utf8_length, scheme_make_immed_prim(byte_string_utf8_length,
"bytes-utf-8-length", "bytes-utf-8-length",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("bytes-utf-8-ref", scheme_add_global_constant("bytes-utf-8-ref",
scheme_make_noncm_prim(byte_string_utf8_ref, scheme_make_immed_prim(byte_string_utf8_ref,
"bytes-utf-8-ref", "bytes-utf-8-ref",
2, 4), 2, 4),
env); env);
scheme_add_global_constant("bytes->string/utf-8", scheme_add_global_constant("bytes->string/utf-8",
scheme_make_noncm_prim(byte_string_to_char_string, scheme_make_immed_prim(byte_string_to_char_string,
"bytes->string/utf-8", "bytes->string/utf-8",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("bytes->string/locale", scheme_add_global_constant("bytes->string/locale",
scheme_make_noncm_prim(byte_string_to_char_string_locale, scheme_make_immed_prim(byte_string_to_char_string_locale,
"bytes->string/locale", "bytes->string/locale",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("bytes->string/latin-1", scheme_add_global_constant("bytes->string/latin-1",
scheme_make_noncm_prim(byte_string_to_char_string_latin1, scheme_make_immed_prim(byte_string_to_char_string_latin1,
"bytes->string/latin-1", "bytes->string/latin-1",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("string->bytes/utf-8", scheme_add_global_constant("string->bytes/utf-8",
scheme_make_noncm_prim(char_string_to_byte_string, scheme_make_immed_prim(char_string_to_byte_string,
"string->bytes/utf-8", "string->bytes/utf-8",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("string->bytes/locale", scheme_add_global_constant("string->bytes/locale",
scheme_make_noncm_prim(char_string_to_byte_string_locale, scheme_make_immed_prim(char_string_to_byte_string_locale,
"string->bytes/locale", "string->bytes/locale",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("string->bytes/latin-1", scheme_add_global_constant("string->bytes/latin-1",
scheme_make_noncm_prim(char_string_to_byte_string_latin1, scheme_make_immed_prim(char_string_to_byte_string_latin1,
"string->bytes/latin-1", "string->bytes/latin-1",
1, 4), 1, 4),
env); env);
scheme_add_global_constant("string-utf-8-length", scheme_add_global_constant("string-utf-8-length",
scheme_make_noncm_prim(char_string_utf8_length, scheme_make_immed_prim(char_string_utf8_length,
"string-utf-8-length", "string-utf-8-length",
1, 3), 1, 3),
env); env);
@ -795,23 +795,23 @@ scheme_init_string (Scheme_Env *env)
more problems than it solves... */ more problems than it solves... */
scheme_add_global_constant("version", scheme_add_global_constant("version",
scheme_make_noncm_prim(version, scheme_make_immed_prim(version,
"version", "version",
0, 0), 0, 0),
env); env);
scheme_add_global_constant("banner", scheme_add_global_constant("banner",
scheme_make_noncm_prim(banner, scheme_make_immed_prim(banner,
"banner", "banner",
0, 0), 0, 0),
env); env);
scheme_add_global_constant("getenv", scheme_add_global_constant("getenv",
scheme_make_noncm_prim(sch_getenv, scheme_make_immed_prim(sch_getenv,
"getenv", "getenv",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("putenv", scheme_add_global_constant("putenv",
scheme_make_noncm_prim(sch_putenv, scheme_make_immed_prim(sch_putenv,
"putenv", "putenv",
2, 2), 2, 2),
env); env);
@ -819,12 +819,12 @@ scheme_init_string (Scheme_Env *env)
/* Don't make these folding, since they're platform-specific: */ /* Don't make these folding, since they're platform-specific: */
scheme_add_global_constant("system-type", scheme_add_global_constant("system-type",
scheme_make_noncm_prim(system_type, scheme_make_immed_prim(system_type,
"system-type", "system-type",
0, 1), 0, 1),
env); env);
scheme_add_global_constant("system-library-subpath", scheme_add_global_constant("system-library-subpath",
scheme_make_noncm_prim(system_library_subpath, scheme_make_immed_prim(system_library_subpath,
"system-library-subpath", "system-library-subpath",
0, 1), 0, 1),
env); env);
@ -908,24 +908,26 @@ void scheme_out_of_string_range(const char *name, const char *which,
is_byte = SCHEME_BYTE_STRINGP(s); is_byte = SCHEME_BYTE_STRINGP(s);
if ((is_byte ? SCHEME_BYTE_STRTAG_VAL(s) : SCHEME_CHAR_STRTAG_VAL(s))) { if (len) {
char *sstr; char *sstr;
int slen; int slen;
sstr = scheme_make_provided_string(s, 2, &slen); sstr = scheme_make_provided_string(s, 2, &slen);
scheme_raise_exn(MZEXN_FAIL_CONTRACT, scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"%s: %sindex %s out of range [%d, %d] for %sstring: %t", "%s: %sindex %s out of range [%d, %d] for %s%s: %t",
name, which, name, which,
scheme_make_provided_string(i, 2, NULL), scheme_make_provided_string(i, 2, NULL),
start, len, start, len,
is_byte ? "byte-" : "", is_byte ? "byte-" : "",
SCHEME_VECTORP(s) ? "vector" : "string",
sstr, slen); sstr, slen);
} else { } else {
scheme_raise_exn(MZEXN_FAIL_CONTRACT, scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"%s: %sindex %s out of range for empty %sstring", "%s: %sindex %s out of range for empty %s%s",
name, which, name, which,
scheme_make_provided_string(i, 0, NULL), scheme_make_provided_string(i, 0, NULL),
is_byte ? "byte-" : ""); is_byte ? "byte-" : "",
SCHEME_VECTORP(s) ? "vector" : "string");
} }
} }
@ -960,6 +962,8 @@ void scheme_get_substring_indices(const char *name, Scheme_Object *str,
long len; long len;
long start, finish; long start, finish;
if (SCHEME_VECTORP(str))
len = SCHEME_VEC_SIZE(str);
if (SCHEME_CHAR_STRINGP(str)) if (SCHEME_CHAR_STRINGP(str))
len = SCHEME_CHAR_STRTAG_VAL(str); len = SCHEME_CHAR_STRTAG_VAL(str);
else else
@ -985,9 +989,9 @@ void scheme_get_substring_indices(const char *name, Scheme_Object *str,
*_finish = finish; *_finish = finish;
} }
static void get_substring_indices(const char *name, Scheme_Object *str, void scheme_do_get_substring_indices(const char *name, Scheme_Object *str,
int argc, Scheme_Object **argv, int argc, Scheme_Object **argv,
int spos, int fpos, long *_start, long *_finish, long len) int spos, int fpos, long *_start, long *_finish, long len)
{ {
if (argc > spos) { if (argc > spos) {
if (SCHEME_INTP(argv[spos])) { if (SCHEME_INTP(argv[spos])) {

View File

@ -208,8 +208,8 @@ X__(substring) (int argc, Scheme_Object *argv[])
chars = SCHEME_X_STR_VAL(argv[0]); chars = SCHEME_X_STR_VAL(argv[0]);
get_substring_indices(SUBXSTR, argv[0], argc, argv, 1, 2, scheme_do_get_substring_indices(SUBXSTR, argv[0], argc, argv, 1, 2,
&start, &finish, SCHEME_X_STRTAG_VAL(argv[0])); &start, &finish, SCHEME_X_STRTAG_VAL(argv[0]));
str = X(scheme_alloc, _string)(finish-start, 0); str = X(scheme_alloc, _string)(finish-start, 0);
memcpy(SCHEME_X_STR_VAL(str), chars + start, (finish - start) * sizeof(Xchar)); memcpy(SCHEME_X_STR_VAL(str), chars + start, (finish - start) * sizeof(Xchar));
@ -349,17 +349,17 @@ X__(string_copy_bang)(int argc, Scheme_Object *argv[])
if (!SCHEME_MUTABLE_X_STRINGP(s1)) if (!SCHEME_MUTABLE_X_STRINGP(s1))
scheme_wrong_type(XSTRINGSTR "-copy!", "mutable " XSTR "string", 0, argc, argv); scheme_wrong_type(XSTRINGSTR "-copy!", "mutable " XSTR "string", 0, argc, argv);
get_substring_indices(XSTRINGSTR "-copy!", s1, scheme_do_get_substring_indices(XSTRINGSTR "-copy!", s1,
argc, argv, 1, 5, argc, argv, 1, 5,
&ostart, &ofinish, SCHEME_X_STRTAG_VAL(s1)); &ostart, &ofinish, SCHEME_X_STRTAG_VAL(s1));
s2 = argv[2]; s2 = argv[2];
if (!SCHEME_X_STRINGP(s2)) if (!SCHEME_X_STRINGP(s2))
scheme_wrong_type(XSTRINGSTR "-copy!", XSTR "string", 2, argc, argv); scheme_wrong_type(XSTRINGSTR "-copy!", XSTR "string", 2, argc, argv);
get_substring_indices(XSTRINGSTR "-copy!", s2, scheme_do_get_substring_indices(XSTRINGSTR "-copy!", s2,
argc, argv, 3, 4, argc, argv, 3, 4,
&istart, &ifinish, SCHEME_X_STRTAG_VAL(s2)); &istart, &ifinish, SCHEME_X_STRTAG_VAL(s2));
if ((ofinish - ostart) < (ifinish - istart)) { if ((ofinish - ostart) < (ifinish - istart)) {
scheme_arg_mismatch(XSTRINGSTR "-copy!", scheme_arg_mismatch(XSTRINGSTR "-copy!",

View File

@ -2300,7 +2300,7 @@ make_struct_proc(Scheme_Struct_Type *struct_type,
p = scheme_make_folding_prim_closure(struct_getter, p = scheme_make_folding_prim_closure(struct_getter,
1, a, 1, a,
func_name, func_name,
1 + need_pos, 1 + need_pos, 1); 1 + need_pos, 1 + need_pos, 0);
if (need_pos) if (need_pos)
flags |= SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_GETTER | SCHEME_PRIM_IS_STRUCT_OTHER; flags |= SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_GETTER | SCHEME_PRIM_IS_STRUCT_OTHER;
else else

View File

@ -400,70 +400,70 @@ void scheme_init_stx(Scheme_Env *env)
env); env);
scheme_add_global_constant("syntax-original?", scheme_add_global_constant("syntax-original?",
scheme_make_noncm_prim(syntax_original_p, scheme_make_immed_prim(syntax_original_p,
"syntax-original?", "syntax-original?",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("syntax-property", scheme_add_global_constant("syntax-property",
scheme_make_noncm_prim(syntax_property, scheme_make_immed_prim(syntax_property,
"syntax-property", "syntax-property",
2, 3), 2, 3),
env); env);
scheme_add_global_constant("syntax-property-symbol-keys", scheme_add_global_constant("syntax-property-symbol-keys",
scheme_make_noncm_prim(syntax_property_keys, scheme_make_immed_prim(syntax_property_keys,
"syntax-property-symbol-keys", "syntax-property-symbol-keys",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("syntax-track-origin", scheme_add_global_constant("syntax-track-origin",
scheme_make_noncm_prim(syntax_track_origin, scheme_make_immed_prim(syntax_track_origin,
"syntax-track-origin", "syntax-track-origin",
3, 3), 3, 3),
env); env);
scheme_add_global_constant("bound-identifier=?", scheme_add_global_constant("bound-identifier=?",
scheme_make_noncm_prim(bound_eq, scheme_make_immed_prim(bound_eq,
"bound-identifier=?", "bound-identifier=?",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("free-identifier=?", scheme_add_global_constant("free-identifier=?",
scheme_make_noncm_prim(module_eq, scheme_make_immed_prim(module_eq,
"free-identifier=?", "free-identifier=?",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("free-transformer-identifier=?", scheme_add_global_constant("free-transformer-identifier=?",
scheme_make_noncm_prim(module_trans_eq, scheme_make_immed_prim(module_trans_eq,
"free-transformer-identifier=?", "free-transformer-identifier=?",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("free-template-identifier=?", scheme_add_global_constant("free-template-identifier=?",
scheme_make_noncm_prim(module_templ_eq, scheme_make_immed_prim(module_templ_eq,
"free-template-identifier=?", "free-template-identifier=?",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("free-label-identifier=?", scheme_add_global_constant("free-label-identifier=?",
scheme_make_noncm_prim(module_label_eq, scheme_make_immed_prim(module_label_eq,
"free-label-identifier=?", "free-label-identifier=?",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("identifier-binding", scheme_add_global_constant("identifier-binding",
scheme_make_noncm_prim(module_binding, scheme_make_immed_prim(module_binding,
"identifier-binding", "identifier-binding",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("identifier-transformer-binding", scheme_add_global_constant("identifier-transformer-binding",
scheme_make_noncm_prim(module_trans_binding, scheme_make_immed_prim(module_trans_binding,
"identifier-transformer-binding", "identifier-transformer-binding",
1, 2), 1, 2),
env); env);
scheme_add_global_constant("identifier-template-binding", scheme_add_global_constant("identifier-template-binding",
scheme_make_noncm_prim(module_templ_binding, scheme_make_immed_prim(module_templ_binding,
"identifier-template-binding", "identifier-template-binding",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("identifier-label-binding", scheme_add_global_constant("identifier-label-binding",
scheme_make_noncm_prim(module_label_binding, scheme_make_immed_prim(module_label_binding,
"identifier-label-binding", "identifier-label-binding",
1, 1), 1, 1),
env); env);
@ -476,7 +476,7 @@ void scheme_init_stx(Scheme_Env *env)
env); env);
scheme_add_global_constant("syntax-recertify", scheme_add_global_constant("syntax-recertify",
scheme_make_noncm_prim(syntax_recertify, scheme_make_immed_prim(syntax_recertify,
"syntax-recertify", "syntax-recertify",
4, 4), 4, 4),
env); env);

View File

@ -235,6 +235,8 @@ enum {
scheme_rt_marshal_info, /* 213 */ scheme_rt_marshal_info, /* 213 */
scheme_rt_unmarshal_info, /* 214 */ scheme_rt_unmarshal_info, /* 214 */
scheme_rt_runstack, /* 215 */ scheme_rt_runstack, /* 215 */
scheme_rt_sfs_info, /* 216 */
scheme_rt_validate_clearing, /* 217 */
#endif #endif
_scheme_last_type_ _scheme_last_type_

View File

@ -302,16 +302,16 @@ scheme_init_symbol (Scheme_Env *env)
scheme_add_global_constant("symbol?", p, env); scheme_add_global_constant("symbol?", p, env);
scheme_add_global_constant("string->symbol", scheme_add_global_constant("string->symbol",
scheme_make_noncm_prim(string_to_symbol_prim, scheme_make_immed_prim(string_to_symbol_prim,
"string->symbol", "string->symbol",
1, 1), env); 1, 1), env);
scheme_add_global_constant("string->uninterned-symbol", scheme_add_global_constant("string->uninterned-symbol",
scheme_make_noncm_prim(string_to_uninterned_symbol_prim, scheme_make_immed_prim(string_to_uninterned_symbol_prim,
"string->uninterned-symbol", "string->uninterned-symbol",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("symbol->string", scheme_add_global_constant("symbol->string",
scheme_make_noncm_prim(symbol_to_string_prim, scheme_make_immed_prim(symbol_to_string_prim,
"symbol->string", "symbol->string",
1, 1), 1, 1),
env); env);
@ -327,17 +327,17 @@ scheme_init_symbol (Scheme_Env *env)
2, -1, 1), 2, -1, 1),
env); env);
scheme_add_global_constant("string->keyword", scheme_add_global_constant("string->keyword",
scheme_make_noncm_prim(string_to_keyword_prim, scheme_make_immed_prim(string_to_keyword_prim,
"string->keyword", "string->keyword",
1, 1), env); 1, 1), env);
scheme_add_global_constant("keyword->string", scheme_add_global_constant("keyword->string",
scheme_make_noncm_prim(keyword_to_string_prim, scheme_make_immed_prim(keyword_to_string_prim,
"keyword->string", "keyword->string",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("gensym", scheme_add_global_constant("gensym",
scheme_make_noncm_prim(gensym, scheme_make_immed_prim(gensym,
"gensym", "gensym",
0, 1), 0, 1),
env); env);

View File

@ -43,6 +43,7 @@ Scheme_Object scheme_undefined[1];
Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_]; Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_];
Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_]; Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_];
Scheme_Syntax_SFSer scheme_syntax_sfsers[_COUNT_EXPD_];
Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_]; Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_];
Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_]; Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_];
Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_]; Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_];
@ -137,46 +138,67 @@ static Scheme_Object *begin0_resolve(Scheme_Object *data, Resolve_Info *info);
static Scheme_Object *apply_values_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *apply_values_resolve(Scheme_Object *data, Resolve_Info *info);
static Scheme_Object *splice_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *splice_resolve(Scheme_Object *data, Resolve_Info *info);
static Scheme_Object *define_values_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *ref_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *set_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *define_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info);
static Scheme_Object *define_for_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info);
static Scheme_Object *case_lambda_sfs(Scheme_Object *expr, SFS_Info *info);
static Scheme_Object *begin0_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *apply_values_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *splice_sfs(Scheme_Object *data, SFS_Info *info);
static Scheme_Object *bangboxenv_sfs(Scheme_Object *data, SFS_Info *info);
static void define_values_validate(Scheme_Object *data, Mz_CPort *port, static void define_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void ref_validate(Scheme_Object *data, Mz_CPort *port, static void ref_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void set_validate(Scheme_Object *data, Mz_CPort *port, static void set_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void begin0_validate(Scheme_Object *data, Mz_CPort *port, static void begin0_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, static void apply_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void splice_validate(Scheme_Object *data, Mz_CPort *port, static void splice_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts); int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos);
static Scheme_Object *define_values_jit(Scheme_Object *data); static Scheme_Object *define_values_jit(Scheme_Object *data);
static Scheme_Object *ref_jit(Scheme_Object *data); static Scheme_Object *ref_jit(Scheme_Object *data);
@ -260,54 +282,54 @@ scheme_init_syntax (Scheme_Env *env)
scheme_register_syntax(DEFINE_VALUES_EXPD, scheme_register_syntax(DEFINE_VALUES_EXPD,
define_values_optimize, define_values_optimize,
define_values_resolve, define_values_validate, define_values_resolve, define_values_sfs, define_values_validate,
define_values_execute, define_values_jit, define_values_execute, define_values_jit,
NULL, NULL, -2); NULL, NULL, -2);
scheme_register_syntax(SET_EXPD, scheme_register_syntax(SET_EXPD,
set_optimize, set_optimize,
set_resolve, set_validate, set_resolve, set_sfs, set_validate,
set_execute, set_jit, set_execute, set_jit,
set_clone, set_shift, 2); set_clone, set_shift, 2);
scheme_register_syntax(REF_EXPD, scheme_register_syntax(REF_EXPD,
ref_optimize, ref_optimize,
ref_resolve, ref_validate, ref_resolve, ref_sfs, ref_validate,
ref_execute, ref_jit, ref_execute, ref_jit,
NULL, ref_shift, 0); NULL, ref_shift, 0);
scheme_register_syntax(DEFINE_SYNTAX_EXPD, scheme_register_syntax(DEFINE_SYNTAX_EXPD,
define_syntaxes_optimize, define_syntaxes_optimize,
define_syntaxes_resolve, define_syntaxes_validate, define_syntaxes_resolve, define_syntaxes_sfs, define_syntaxes_validate,
define_syntaxes_execute, define_syntaxes_jit, define_syntaxes_execute, define_syntaxes_jit,
NULL, NULL, -2); NULL, NULL, -2);
scheme_register_syntax(DEFINE_FOR_SYNTAX_EXPD, scheme_register_syntax(DEFINE_FOR_SYNTAX_EXPD,
define_for_syntaxes_optimize, define_for_syntaxes_optimize,
define_for_syntaxes_resolve, define_for_syntaxes_validate, define_for_syntaxes_resolve, define_for_syntaxes_sfs, define_for_syntaxes_validate,
define_for_syntaxes_execute, define_for_syntaxes_jit, define_for_syntaxes_execute, define_for_syntaxes_jit,
NULL, NULL, -2); NULL, NULL, -2);
scheme_register_syntax(CASE_LAMBDA_EXPD, scheme_register_syntax(CASE_LAMBDA_EXPD,
case_lambda_optimize, case_lambda_optimize,
case_lambda_resolve, case_lambda_validate, case_lambda_resolve, case_lambda_sfs, case_lambda_validate,
case_lambda_execute, case_lambda_jit, case_lambda_execute, case_lambda_jit,
NULL, case_lambda_shift, -1); NULL, case_lambda_shift, -1);
scheme_register_syntax(BEGIN0_EXPD, scheme_register_syntax(BEGIN0_EXPD,
begin0_optimize, begin0_optimize,
begin0_resolve, begin0_validate, begin0_resolve, begin0_sfs, begin0_validate,
begin0_execute, begin0_jit, begin0_execute, begin0_jit,
begin0_clone, begin0_shift, -1); begin0_clone, begin0_shift, -1);
scheme_register_syntax(APPVALS_EXPD, scheme_register_syntax(APPVALS_EXPD,
apply_values_optimize, apply_values_optimize,
apply_values_resolve, apply_values_validate, apply_values_resolve, apply_values_sfs, apply_values_validate,
apply_values_execute, apply_values_jit, apply_values_execute, apply_values_jit,
apply_values_clone, apply_values_shift, 1); apply_values_clone, apply_values_shift, 1);
scheme_register_syntax(SPLICE_EXPD, scheme_register_syntax(SPLICE_EXPD,
splice_optimize, splice_optimize,
splice_resolve, splice_validate, splice_resolve, splice_sfs, splice_validate,
splice_execute, splice_jit, splice_execute, splice_jit,
splice_clone, splice_shift, 0); splice_clone, splice_shift, 0);
scheme_register_syntax(BOXENV_EXPD, scheme_register_syntax(BOXENV_EXPD,
NULL, NULL, bangboxenv_validate, NULL, NULL, bangboxenv_sfs, bangboxenv_validate,
bangboxenv_execute, bangboxenv_jit, bangboxenv_execute, bangboxenv_jit,
NULL, NULL, 1); NULL, NULL, 1);
@ -846,7 +868,8 @@ static Scheme_Object *define_values_jit(Scheme_Object *data)
static void define_values_validate(Scheme_Object *data, Mz_CPort *port, static void define_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
int i, size; int i, size;
Scheme_Object *val, *only_var; Scheme_Object *val, *only_var;
@ -954,7 +977,7 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port,
scheme_validate_expr(port, val, stack, tls, scheme_validate_expr(port, val, stack, tls,
depth, letlimit, delta, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, !!only_var); NULL, !!only_var, 0, vc, 0);
} }
static Scheme_Object * static Scheme_Object *
@ -1004,6 +1027,16 @@ define_values_resolve(Scheme_Object *data, Resolve_Info *rslv)
return scheme_make_syntax_resolved(DEFINE_VALUES_EXPD, vec); return scheme_make_syntax_resolved(DEFINE_VALUES_EXPD, vec);
} }
static Scheme_Object *
define_values_sfs(Scheme_Object *data, SFS_Info *info)
{
Scheme_Object *e;
scheme_sfs_start_sequence(info, 1, 0);
e = scheme_sfs_expr(SCHEME_VEC_ELS(data)[0], info, -1);
SCHEME_VEC_ELS(data)[0] = e;
return data;
}
void scheme_resolve_lift_definition(Resolve_Info *info, Scheme_Object *var, Scheme_Object *rhs) void scheme_resolve_lift_definition(Resolve_Info *info, Scheme_Object *var, Scheme_Object *rhs)
{ {
Scheme_Object *decl, *vec, *pr; Scheme_Object *decl, *vec, *pr;
@ -1474,7 +1507,8 @@ static Scheme_Object *set_jit(Scheme_Object *data)
static void set_validate(Scheme_Object *data, Mz_CPort *port, static void set_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
Scheme_Object *val, *tl; Scheme_Object *val, *tl;
@ -1488,7 +1522,7 @@ static void set_validate(Scheme_Object *data, Mz_CPort *port,
scheme_validate_expr(port, val, stack, tls, depth, letlimit, delta, scheme_validate_expr(port, val, stack, tls, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, 0);
scheme_validate_toplevel(tl, port, stack, tls, depth, delta, scheme_validate_toplevel(tl, port, stack, tls, depth, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
0); 0);
@ -1520,7 +1554,7 @@ set_optimize(Scheme_Object *data, Optimize_Info *info)
/* Offset: */ /* Offset: */
delta = scheme_optimize_info_get_shift(info, pos); delta = scheme_optimize_info_get_shift(info, pos);
if (delta) if (delta)
var = scheme_make_local(scheme_local_type, pos + delta); var = scheme_make_local(scheme_local_type, pos + delta, 0);
} else { } else {
scheme_optimize_info_used_top(info); scheme_optimize_info_used_top(info);
} }
@ -1602,6 +1636,26 @@ set_resolve(Scheme_Object *data, Resolve_Info *rslv)
return scheme_make_syntax_resolved(SET_EXPD, cons(set_undef, cons(var, val))); return scheme_make_syntax_resolved(SET_EXPD, cons(set_undef, cons(var, val)));
} }
static Scheme_Object *
set_sfs(Scheme_Object *orig_data, SFS_Info *info)
{
Scheme_Object *data, *var, *val;
data = SCHEME_CDR(orig_data);
var = SCHEME_CAR(data);
val = SCHEME_CDR(data);
scheme_sfs_start_sequence(info, 2, 0);
val = scheme_sfs_expr(val, info, -1);
var = scheme_sfs_expr(var, info, -1);
SCHEME_CAR(data) = var;
SCHEME_CDR(data) = val;
return orig_data;
}
static Scheme_Object * static Scheme_Object *
set_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) set_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec)
{ {
@ -1813,7 +1867,8 @@ static Scheme_Object *ref_jit(Scheme_Object *data)
static void ref_validate(Scheme_Object *tl, Mz_CPort *port, static void ref_validate(Scheme_Object *tl, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
scheme_validate_toplevel(tl, port, stack, tls, depth, delta, scheme_validate_toplevel(tl, port, stack, tls, depth, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
@ -1841,6 +1896,18 @@ ref_resolve(Scheme_Object *tl, Resolve_Info *rslv)
return scheme_make_syntax_resolved(REF_EXPD, scheme_resolve_expr(tl, rslv)); return scheme_make_syntax_resolved(REF_EXPD, scheme_resolve_expr(tl, rslv));
} }
static Scheme_Object *
ref_sfs(Scheme_Object *tl, SFS_Info *info)
{
Scheme_Object *naya;
scheme_sfs_start_sequence(info, 1, 0);
naya = scheme_sfs_expr(tl, info, -1);
if (SAME_OBJ(naya, tl))
return tl;
else
return scheme_make_syntax_resolved(REF_EXPD, naya);
}
static Scheme_Object * static Scheme_Object *
ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec)
{ {
@ -2019,6 +2086,22 @@ apply_values_resolve(Scheme_Object *data, Resolve_Info *rslv)
return scheme_make_syntax_resolved(APPVALS_EXPD, cons(f, e)); return scheme_make_syntax_resolved(APPVALS_EXPD, cons(f, e));
} }
static Scheme_Object *
apply_values_sfs(Scheme_Object *data, SFS_Info *info)
{
Scheme_Object *f, *e;
f = SCHEME_CAR(data);
e = SCHEME_CDR(data);
scheme_sfs_start_sequence(info, 2, 0);
f = scheme_sfs_expr(f, info, -1);
e = scheme_sfs_expr(e, info, -1);
return data;
}
static Scheme_Object * static Scheme_Object *
apply_values_shift(Scheme_Object *data, int delta, int after_depth) apply_values_shift(Scheme_Object *data, int delta, int after_depth)
{ {
@ -2052,7 +2135,8 @@ apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int del
static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, static void apply_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
Scheme_Object *f, *e; Scheme_Object *f, *e;
@ -2062,11 +2146,11 @@ static void apply_values_validate(Scheme_Object *data, Mz_CPort *port,
scheme_validate_expr(port, f, stack, tls, scheme_validate_expr(port, f, stack, tls,
depth, letlimit, delta, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, 0);
scheme_validate_expr(port, e, stack, tls, scheme_validate_expr(port, e, stack, tls,
depth, letlimit, delta, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, 0);
} }
/**********************************************************************/ /**********************************************************************/
@ -2215,15 +2299,21 @@ static Scheme_Object *case_lambda_jit(Scheme_Object *expr)
static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
Scheme_Case_Lambda *seq = (Scheme_Case_Lambda *)data; Scheme_Case_Lambda *seq = (Scheme_Case_Lambda *)data;
Scheme_Object *e;
int i; int i;
for (i = 0; i < seq->count; i++) { for (i = 0; i < seq->count; i++) {
scheme_validate_expr(port, seq->array[i], stack, tls, depth, letlimit, delta, e = seq->array[i];
if (!SAME_TYPE(SCHEME_TYPE(e), scheme_unclosed_procedure_type)
&& !SAME_TYPE(SCHEME_TYPE(e), scheme_closure_type))
scheme_ill_formed_code(port);
scheme_validate_expr(port, e, stack, tls, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, 0);
} }
} }
@ -2250,6 +2340,48 @@ case_lambda_resolve(Scheme_Object *expr, Resolve_Info *rslv)
return scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr); return scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr);
} }
static Scheme_Object *
case_lambda_sfs(Scheme_Object *expr, SFS_Info *info)
{
Scheme_Case_Lambda *seq = (Scheme_Case_Lambda *)expr;
Scheme_Object *le, *clears = scheme_null;
int i;
scheme_sfs_start_sequence(info, seq->count, 0);
for (i = 0; i < seq->count; i++) {
le = seq->array[i];
le = scheme_sfs_expr(le, info, -1);
if (SAME_TYPE(SCHEME_TYPE(le), scheme_syntax_type)
&& (SCHEME_PINT_VAL(le) == BEGIN0_EXPD)) {
/* Some clearing actions were added to the closure.
Lift them out. */
int j;
Scheme_Sequence *cseq = (Scheme_Sequence *)SCHEME_IPTR_VAL(le);
if (!cseq->count)
scheme_signal_error("internal error: empty sequence");
for (j = 1; j < cseq->count; j++) {
int pos;
pos = SCHEME_LOCAL_POS(cseq->array[j]);
clears = scheme_make_pair(scheme_make_integer(pos), clears);
}
le = cseq->array[0];
}
if (!SAME_TYPE(SCHEME_TYPE(le), scheme_unclosed_procedure_type)
&& !SAME_TYPE(SCHEME_TYPE(le), scheme_closure_type)) {
scheme_signal_error("internal error: not a lambda for case-lambda: %d",
SCHEME_TYPE(le));
}
seq->array[i] = le;
}
if (!SCHEME_NULLP(clears)) {
expr = scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr);
return scheme_sfs_add_clears(expr, clears, 0);
} else
return expr;
}
static Scheme_Object * static Scheme_Object *
case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info) case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info)
{ {
@ -2285,7 +2417,7 @@ case_lambda_shift(Scheme_Object *data, int delta, int after_depth)
return data; return data;
} }
Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int jit) Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode)
{ {
Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)expr; Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)expr;
Scheme_Closure *c; Scheme_Closure *c;
@ -2314,9 +2446,13 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int jit)
cl2->array[i] = (Scheme_Object *)c->code; cl2->array[i] = (Scheme_Object *)c->code;
} }
if (jit) if (mode == 2) {
/* sfs */
return scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr);
} else if (mode == 1) {
/* JIT */
return case_lambda_jit((Scheme_Object *)cl2); return case_lambda_jit((Scheme_Object *)cl2);
else } else
return (Scheme_Object *)cl2; return (Scheme_Object *)cl2;
} }
@ -2535,6 +2671,14 @@ Scheme_Object *bangboxenv_execute(Scheme_Object *data)
return _scheme_tail_eval(data); return _scheme_tail_eval(data);
} }
static Scheme_Object *bangboxenv_sfs(Scheme_Object *data, SFS_Info *info)
{
Scheme_Object *e;
e = scheme_sfs_expr(SCHEME_CDR(data), info, -1);
SCHEME_CDR(data) = e;
return data;
}
static Scheme_Object *bangboxenv_jit(Scheme_Object *data) static Scheme_Object *bangboxenv_jit(Scheme_Object *data)
{ {
Scheme_Object *orig, *naya; Scheme_Object *orig, *naya;
@ -2550,7 +2694,8 @@ static Scheme_Object *bangboxenv_jit(Scheme_Object *data)
static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
if (!SCHEME_PAIRP(data)) if (!SCHEME_PAIRP(data))
scheme_ill_formed_code(port); scheme_ill_formed_code(port);
@ -2559,7 +2704,7 @@ static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port,
scheme_validate_expr(port, SCHEME_CDR(data), stack, tls, depth, letlimit, delta, scheme_validate_expr(port, SCHEME_CDR(data), stack, tls, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, tailpos);
} }
/**********************************************************************/ /**********************************************************************/
@ -4365,16 +4510,21 @@ static Scheme_Object *begin0_jit(Scheme_Object *data)
static void begin0_validate(Scheme_Object *data, Mz_CPort *port, static void begin0_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
Scheme_Sequence *seq = (Scheme_Sequence *)data; Scheme_Sequence *seq = (Scheme_Sequence *)data;
int i; int i;
if (!SAME_TYPE(SCHEME_TYPE(seq), scheme_begin0_sequence_type)
&& !SAME_TYPE(SCHEME_TYPE(seq), scheme_sequence_type))
scheme_ill_formed_code(port);
for (i = 0; i < seq->count; i++) { for (i = 0; i < seq->count; i++) {
scheme_validate_expr(port, seq->array[i], stack, tls, scheme_validate_expr(port, seq->array[i], stack, tls,
depth, letlimit, delta, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, i > 0, vc, 0);
} }
} }
@ -4436,6 +4586,24 @@ begin0_resolve(Scheme_Object *obj, Resolve_Info *info)
return scheme_make_syntax_resolved(BEGIN0_EXPD, obj); return scheme_make_syntax_resolved(BEGIN0_EXPD, obj);
} }
static Scheme_Object *
begin0_sfs(Scheme_Object *obj, SFS_Info *info)
{
int i, cnt;
cnt = ((Scheme_Sequence *)obj)->count;
scheme_sfs_start_sequence(info, cnt, 0);
for (i = 0; i < cnt; i++) {
Scheme_Object *le;
le = scheme_sfs_expr(((Scheme_Sequence *)obj)->array[i], info, -1);
((Scheme_Sequence *)obj)->array[i] = le;
}
return obj;
}
static Scheme_Object * static Scheme_Object *
do_begin_syntax(char *name, do_begin_syntax(char *name,
Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec, Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec,
@ -4659,6 +4827,17 @@ splice_resolve(Scheme_Object *data, Resolve_Info *rslv)
scheme_resolve_expr(data, rslv)); scheme_resolve_expr(data, rslv));
} }
static Scheme_Object *
splice_sfs(Scheme_Object *data, SFS_Info *info)
{
Scheme_Object *naya;
naya = scheme_sfs_expr(data, info, -1);
if (SAME_OBJ(naya, data))
return data;
else
return scheme_make_syntax_resolved(SPLICE_EXPD, data);
}
static Scheme_Object * static Scheme_Object *
splice_shift(Scheme_Object *data, int delta, int after_depth) splice_shift(Scheme_Object *data, int delta, int after_depth)
{ {
@ -4677,12 +4856,13 @@ splice_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, in
static void splice_validate(Scheme_Object *data, Mz_CPort *port, static void splice_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
scheme_validate_expr(port, data, stack, tls, scheme_validate_expr(port, data, stack, tls,
depth, letlimit, delta, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, num_toplevels, num_stxes, num_lifts,
NULL, 0); NULL, 0, 0, vc, 0);
} }
/**********************************************************************/ /**********************************************************************/
@ -4965,7 +5145,8 @@ static void do_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta, do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, 0); num_toplevels, num_stxes, num_lifts, 0);
@ -4974,7 +5155,8 @@ static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls, char *stack, Validate_TLS tls,
int depth, int letlimit, int delta, int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts) int num_toplevels, int num_stxes, int num_lifts,
struct Validate_Clearing *vc, int tailpos)
{ {
do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta, do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta,
num_toplevels, num_stxes, num_lifts, 1); num_toplevels, num_stxes, num_lifts, 1);
@ -5071,6 +5253,31 @@ static Scheme_Object *define_for_syntaxes_resolve(Scheme_Object *data, Resolve_I
return do_define_syntaxes_resolve(data, info, 1); return do_define_syntaxes_resolve(data, info, 1);
} }
static Scheme_Object *do_define_syntaxes_sfs(Scheme_Object *data, SFS_Info *info)
{
Scheme_Object *e;
if (!info->pass) {
int depth;
depth = SCHEME_INT_VAL(SCHEME_VEC_ELS(data)[2]);
info = scheme_new_sfs_info(depth);
e = scheme_sfs(SCHEME_VEC_ELS(data)[0], info, depth);
SCHEME_VEC_ELS(data)[0] = e;
}
return data;
}
static Scheme_Object *define_syntaxes_sfs(Scheme_Object *data, SFS_Info *info)
{
return do_define_syntaxes_sfs(data, info);
}
static Scheme_Object *define_for_syntaxes_sfs(Scheme_Object *data, SFS_Info *info)
{
return do_define_syntaxes_sfs(data, info);
}
static Scheme_Object *stx_val(Scheme_Object *name, Scheme_Object *_env) static Scheme_Object *stx_val(Scheme_Object *name, Scheme_Object *_env)
{ {
Scheme_Env *env = (Scheme_Env *)_env; Scheme_Env *env = (Scheme_Env *)_env;

View File

@ -34,6 +34,7 @@ static Scheme_Object *vector_length (int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_to_list (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_list (int argc, Scheme_Object *argv[]);
static Scheme_Object *list_to_vector (int argc, Scheme_Object *argv[]); static Scheme_Object *list_to_vector (int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_fill (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_fill (int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_copy_bang(int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]);
@ -55,17 +56,17 @@ scheme_init_vector (Scheme_Env *env)
scheme_add_global_constant("vector?", p, env); scheme_add_global_constant("vector?", p, env);
scheme_add_global_constant("make-vector", scheme_add_global_constant("make-vector",
scheme_make_noncm_prim(make_vector, scheme_make_immed_prim(make_vector,
"make-vector", "make-vector",
1, 2), 1, 2),
env); env);
scheme_add_global_constant("vector", scheme_add_global_constant("vector",
scheme_make_noncm_prim(vector, scheme_make_immed_prim(vector,
"vector", "vector",
0, -1), 0, -1),
env); env);
scheme_add_global_constant("vector-immutable", scheme_add_global_constant("vector-immutable",
scheme_make_noncm_prim(vector_immutable, scheme_make_immed_prim(vector_immutable,
"vector-immutable", "vector-immutable",
0, -1), 0, -1),
env); env);
@ -75,35 +76,40 @@ scheme_init_vector (Scheme_Env *env)
1, 1, 1), 1, 1, 1),
env); env);
p = scheme_make_noncm_prim(scheme_checked_vector_ref, p = scheme_make_immed_prim(scheme_checked_vector_ref,
"vector-ref", "vector-ref",
2, 2); 2, 2);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("vector-ref", p, env); scheme_add_global_constant("vector-ref", p, env);
p = scheme_make_noncm_prim(scheme_checked_vector_set, p = scheme_make_immed_prim(scheme_checked_vector_set,
"vector-set!", "vector-set!",
3, 3); 3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_MIN_NARY_INLINED;
scheme_add_global_constant("vector-set!", p, env); scheme_add_global_constant("vector-set!", p, env);
scheme_add_global_constant("vector->list", scheme_add_global_constant("vector->list",
scheme_make_noncm_prim(vector_to_list, scheme_make_immed_prim(vector_to_list,
"vector->list", "vector->list",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("list->vector", scheme_add_global_constant("list->vector",
scheme_make_noncm_prim(list_to_vector, scheme_make_immed_prim(list_to_vector,
"list->vector", "list->vector",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("vector-fill!", scheme_add_global_constant("vector-fill!",
scheme_make_noncm_prim(vector_fill, scheme_make_immed_prim(vector_fill,
"vector-fill!", "vector-fill!",
2, 2), 2, 2),
env); env);
scheme_add_global_constant("vector-copy!",
scheme_make_immed_prim(vector_copy_bang,
"vector-copy!",
3, 5),
env);
scheme_add_global_constant("vector->immutable-vector", scheme_add_global_constant("vector->immutable-vector",
scheme_make_noncm_prim(vector_to_immutable, scheme_make_immed_prim(vector_to_immutable,
"vector->immutable-vector", "vector->immutable-vector",
1, 1), 1, 1),
env); env);
@ -356,6 +362,42 @@ vector_fill (int argc, Scheme_Object *argv[])
return argv[0]; return argv[0];
} }
static Scheme_Object *vector_copy_bang(int argc, Scheme_Object *argv[])
{
Scheme_Object *s1, *s2;
long istart, ifinish;
long ostart, ofinish;
s1 = argv[0];
if (!SCHEME_MUTABLE_VECTORP(s1))
scheme_wrong_type("vector-copy!", "mutable vector", 0, argc, argv);
scheme_do_get_substring_indices("vector-copy!", s1,
argc, argv, 1, 5,
&ostart, &ofinish, SCHEME_VEC_SIZE(s1));
s2 = argv[2];
if (!SCHEME_VECTORP(s2))
scheme_wrong_type("vector-copy!", "vector", 2, argc, argv);
scheme_do_get_substring_indices("vector-copy!", s2,
argc, argv, 3, 4,
&istart, &ifinish, SCHEME_VEC_SIZE(s2));
if ((ofinish - ostart) < (ifinish - istart)) {
scheme_arg_mismatch("vector-copy!",
"not enough room in target vector: ",
argv[2]);
return NULL;
}
memmove(SCHEME_VEC_ELS(s1) + ostart,
SCHEME_VEC_ELS(s2) + istart,
(ifinish - istart) * sizeof(Scheme_Object*));
return scheme_void;
}
static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[]) static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[])
{ {
Scheme_Object *vec, *ovec; Scheme_Object *vec, *ovec;