change bytecode marshaling of scopes

This change mostly reverts 1465ff25fc, which turned out to be a hassle
because it created more cyclic structure.

A simpler strategy is to allow a phase-specific scope to be detached
(perhaps temporarily, due to on-demand loading of bytecode) from its
group; when that's possible, the scope is not reachable from a place
where it can be moved to other syntax objects, so it's ok to be
detached. Debugging output needs to handle that gracefully, though.
Also, in case of broken bytecode, fix up a detached scope if it
does end up in an unexpected place.
This commit is contained in:
Matthew Flatt 2015-07-23 07:39:26 -06:00
parent 960fc831fc
commit 120f1329c6
4 changed files with 168 additions and 177 deletions

View File

@ -12,7 +12,7 @@
(define collection 'multi) (define collection 'multi)
(define version "6.2.900.5") (define version "6.2.900.6")
(define deps `("racket-lib" (define deps `("racket-lib"
["racket" #:version ,version])) ["racket" #:version ,version]))

View File

@ -1,108 +1,108 @@
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,53,84,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,54,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,1,0,0,8,0, 0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8,0,
18,0,22,0,29,0,36,0,41,0,53,0,58,0,63,0,76,0,79,0,86, 18,0,22,0,29,0,36,0,41,0,46,0,51,0,63,0,66,0,73,0,86,
0,90,0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0, 0,90,0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0,
173,0,180,0,202,0,204,0,218,0,238,0,243,0,246,0,2,1,41,1,48, 173,0,180,0,202,0,204,0,218,0,246,0,251,0,254,0,35,1,42,1,114,
1,122,1,129,1,140,1,149,1,182,1,215,1,21,2,26,2,107,2,112,2, 1,121,1,132,1,141,1,174,1,207,1,13,2,18,2,99,2,104,2,109,2,
117,2,138,2,35,3,56,3,109,3,178,3,247,3,137,4,29,5,40,5,123, 130,2,27,3,48,3,101,3,170,3,239,3,129,4,21,5,32,5,115,5,0,
5,0,0,152,7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110, 0,144,7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110,45,115,
45,115,116,120,29,11,11,11,68,108,101,116,114,101,99,68,100,101,102,105,110, 116,120,29,11,11,11,68,108,101,116,114,101,99,68,100,101,102,105,110,101,66,
101,66,99,111,110,100,73,108,101,116,42,45,118,97,108,117,101,115,66,119,104, 99,111,110,100,66,119,104,101,110,66,108,101,116,42,73,108,101,116,42,45,118,
101,110,66,108,101,116,42,74,112,97,114,97,109,101,116,101,114,105,122,101,64, 97,108,117,101,115,64,111,114,68,117,110,108,101,115,115,74,112,97,114,97,109,
111,114,68,117,110,108,101,115,115,65,108,101,116,65,97,110,100,70,104,101,114, 101,116,101,114,105,122,101,65,108,101,116,65,97,110,100,70,104,101,114,101,45,
101,45,115,116,120,67,113,117,111,116,101,29,94,2,16,70,35,37,107,101,114, 115,116,120,67,113,117,111,116,101,29,94,2,16,70,35,37,107,101,114,110,101,
110,101,108,11,29,94,2,16,70,35,37,112,97,114,97,109,122,11,64,105,102, 108,11,29,94,2,16,70,35,37,112,97,114,97,109,122,11,64,105,102,67,98,
67,98,101,103,105,110,72,108,101,116,45,118,97,108,117,101,115,63,120,75,108, 101,103,105,110,72,108,101,116,45,118,97,108,117,101,115,63,120,75,108,101,116,
101,116,114,101,99,45,118,97,108,117,101,115,68,108,97,109,98,100,97,1,20, 114,101,99,45,118,97,108,117,101,115,68,108,97,109,98,100,97,1,20,112,97,
112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,63, 114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,63,118,75,
118,75,100,101,102,105,110,101,45,118,97,108,117,101,115,38,28,16,3,93,16, 100,101,102,105,110,101,45,118,97,108,117,101,115,38,28,16,3,93,16,2,29,
2,29,11,11,11,2,3,2,29,93,143,2,31,39,38,29,93,2,30,36,30, 11,11,11,2,3,2,29,93,143,16,5,40,2,31,39,2,33,2,2,39,38,
39,38,31,16,5,40,2,32,39,2,34,2,2,36,32,145,40,2,31,143,2, 29,93,2,30,36,30,39,36,31,144,40,143,2,32,16,4,2,17,40,39,2,
33,16,4,2,17,40,39,2,1,16,2,2,15,93,143,2,33,147,2,1,2, 1,16,2,2,15,93,143,2,32,147,2,1,2,3,40,2,15,143,2,3,40,
3,40,2,15,143,2,3,40,2,15,38,33,143,2,32,2,29,36,34,146,40, 2,15,38,32,143,2,31,2,29,36,33,145,40,143,2,34,16,4,2,17,39,
2,31,143,2,35,16,4,2,17,39,39,2,1,143,2,35,16,4,2,18,39, 39,2,1,143,2,34,16,4,2,18,39,39,2,1,16,22,2,14,2,35,2,
39,2,1,16,22,2,14,2,36,2,5,2,36,2,11,2,36,2,6,2,36, 12,2,35,2,5,2,35,2,10,2,35,2,6,2,35,2,13,2,35,2,11,
2,7,2,36,2,13,2,36,2,12,2,36,2,9,2,36,2,10,2,36,2, 2,35,2,8,2,35,2,9,2,35,2,7,2,35,2,4,2,35,38,34,143,
8,2,36,2,4,2,36,38,35,143,2,34,2,29,38,36,93,143,2,35,143, 2,33,2,29,38,35,93,143,2,34,143,2,1,2,3,18,143,66,104,101,114,
2,1,2,3,18,143,66,104,101,114,101,2,28,27,248,22,166,4,195,249,22, 101,2,28,27,248,22,166,4,195,249,22,159,4,80,143,42,39,251,22,92,2,
159,4,80,143,42,39,251,22,92,2,19,248,22,104,199,12,249,22,82,2,20, 19,248,22,104,199,12,249,22,82,2,20,248,22,106,201,27,248,22,166,4,195,
248,22,106,201,27,248,22,166,4,195,249,22,159,4,80,143,42,39,251,22,92, 249,22,159,4,80,143,42,39,251,22,92,2,19,248,22,104,199,249,22,82,2,
2,19,248,22,104,199,249,22,82,2,20,248,22,106,201,12,27,248,22,84,248, 20,248,22,106,201,12,27,248,22,84,248,22,166,4,196,28,248,22,90,193,20,
22,166,4,196,28,248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22, 14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,163,20,193,249,22,159,
84,194,248,22,163,20,193,249,22,159,4,80,143,42,39,251,22,92,2,19,248, 4,80,143,42,39,251,22,92,2,19,248,22,163,20,199,249,22,82,2,14,248,
22,163,20,199,249,22,82,2,14,248,22,164,20,201,11,18,143,10,2,28,27, 22,164,20,201,11,18,143,10,2,28,27,248,22,84,248,22,166,4,196,28,248,
248,22,84,248,22,166,4,196,28,248,22,90,193,20,14,144,40,39,40,28,248, 22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,163,20,
22,90,248,22,84,194,248,22,163,20,193,249,22,159,4,80,143,42,39,250,22, 193,249,22,159,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22,92,248,
92,2,21,248,22,92,249,22,92,248,22,92,2,22,248,22,163,20,201,251,22, 22,92,2,22,248,22,163,20,201,251,22,92,2,19,2,22,2,22,249,22,82,
92,2,19,2,22,2,22,249,22,82,2,11,248,22,164,20,204,18,143,11,2, 2,10,248,22,164,20,204,18,143,11,2,28,248,22,166,4,193,27,248,22,166,
28,248,22,166,4,193,27,248,22,166,4,194,249,22,82,248,22,92,248,22,83, 4,194,249,22,82,248,22,92,248,22,83,196,248,22,164,20,195,27,248,22,84,
196,248,22,164,20,195,27,248,22,84,248,22,166,4,23,197,1,249,22,159,4, 248,22,166,4,23,197,1,249,22,159,4,80,143,42,39,28,248,22,66,248,22,
80,143,42,39,28,248,22,66,248,22,160,4,248,22,83,23,198,2,27,249,22, 160,4,248,22,83,23,198,2,27,249,22,2,32,0,88,148,8,36,40,46,11,
2,32,0,88,148,8,36,40,46,11,9,222,33,44,248,22,166,4,248,22,104, 9,222,33,43,248,22,166,4,248,22,104,23,200,2,250,22,92,2,23,248,22,
23,200,2,250,22,92,2,23,248,22,92,249,22,92,248,22,92,248,22,163,20, 92,249,22,92,248,22,92,248,22,163,20,23,204,2,250,22,93,2,24,249,22,
23,204,2,250,22,93,2,24,249,22,2,22,83,23,204,2,248,22,106,23,206, 2,22,83,23,204,2,248,22,106,23,206,2,249,22,82,248,22,163,20,23,202,
2,249,22,82,248,22,163,20,23,202,1,249,22,2,22,104,23,200,1,250,22, 1,249,22,2,22,104,23,200,1,250,22,93,2,21,249,22,2,32,0,88,148,
93,2,21,249,22,2,32,0,88,148,8,36,40,50,11,9,222,33,45,248,22, 8,36,40,50,11,9,222,33,44,248,22,166,4,248,22,163,20,201,248,22,164,
166,4,248,22,163,20,201,248,22,164,20,198,27,248,22,166,4,194,249,22,82, 20,198,27,248,22,166,4,194,249,22,82,248,22,92,248,22,83,196,248,22,164,
248,22,92,248,22,83,196,248,22,164,20,195,27,248,22,84,248,22,166,4,23, 20,195,27,248,22,84,248,22,166,4,23,197,1,249,22,159,4,80,143,42,39,
197,1,249,22,159,4,80,143,42,39,250,22,93,2,23,249,22,2,32,0,88, 250,22,93,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9,222,33,46,
148,8,36,40,50,11,9,222,33,47,248,22,166,4,248,22,83,201,248,22,164, 248,22,166,4,248,22,83,201,248,22,164,20,198,27,248,22,84,248,22,166,4,
20,198,27,248,22,84,248,22,166,4,196,27,248,22,166,4,248,22,83,195,249, 196,27,248,22,166,4,248,22,83,195,249,22,159,4,80,143,43,39,28,248,22,
22,159,4,80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,164, 90,195,250,22,93,2,21,9,248,22,164,20,199,250,22,92,2,13,248,22,92,
20,199,250,22,92,2,13,248,22,92,248,22,83,199,250,22,93,2,9,248,22, 248,22,83,199,250,22,93,2,8,248,22,164,20,201,248,22,164,20,202,27,248,
164,20,201,248,22,164,20,202,27,248,22,84,248,22,166,4,196,27,248,22,166, 22,84,248,22,166,4,196,27,248,22,166,4,248,22,83,195,249,22,159,4,80,
4,248,22,83,195,249,22,159,4,80,143,43,39,28,248,22,90,195,250,22,93, 143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,164,20,199,250,22,
2,21,9,248,22,164,20,199,250,22,92,2,21,248,22,92,248,22,83,199,250, 92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,164,20,201,248,
22,93,2,7,248,22,164,20,201,248,22,164,20,202,27,248,22,84,248,22,166, 22,164,20,202,27,248,22,84,248,22,166,4,23,197,1,27,249,22,1,22,96,
4,23,197,1,27,249,22,1,22,96,249,22,2,22,166,4,248,22,166,4,248, 249,22,2,22,166,4,248,22,166,4,248,22,83,199,248,22,187,4,249,22,159,
22,83,199,248,22,187,4,249,22,159,4,80,143,44,39,251,22,92,1,22,119, 4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116,105,110,
105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, 117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,93,1,23,101,120,116,
2,25,250,22,93,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116, 101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,21,
101,114,105,122,97,116,105,111,110,21,95,1,27,99,111,110,116,105,110,117,97, 95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,
116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,11,2, 115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,93,2,21,9,248,22,
25,202,250,22,93,2,21,9,248,22,164,20,204,27,248,22,84,248,22,166,4, 164,20,204,27,248,22,84,248,22,166,4,196,28,248,22,90,193,20,14,144,40,
196,28,248,22,90,193,20,14,144,40,39,40,249,22,159,4,80,143,42,39,27, 39,40,249,22,159,4,80,143,42,39,27,248,22,166,4,248,22,83,197,28,249,
248,22,166,4,248,22,83,197,28,249,22,171,9,64,61,62,248,22,160,4,248, 22,171,9,64,61,62,248,22,160,4,248,22,104,196,250,22,92,2,21,248,22,
22,104,196,250,22,92,2,21,248,22,92,249,22,92,21,93,2,26,248,22,163, 92,249,22,92,21,93,2,26,248,22,163,20,199,250,22,93,2,6,249,22,92,
20,199,250,22,93,2,6,249,22,92,2,26,249,22,92,248,22,113,203,2,26, 2,26,249,22,92,248,22,113,203,2,26,248,22,164,20,202,251,22,92,2,19,
248,22,164,20,202,251,22,92,2,19,28,249,22,171,9,248,22,160,4,248,22, 28,249,22,171,9,248,22,160,4,248,22,163,20,200,66,101,108,115,101,10,248,
163,20,200,66,101,108,115,101,10,248,22,163,20,197,250,22,93,2,21,9,248, 22,163,20,197,250,22,93,2,21,9,248,22,164,20,200,249,22,82,2,6,248,
22,164,20,200,249,22,82,2,6,248,22,164,20,202,18,143,94,10,66,118,111, 22,164,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248,22,
105,100,2,28,27,248,22,84,248,22,166,4,196,249,22,159,4,80,143,42,39, 166,4,196,249,22,159,4,80,143,42,39,28,248,22,66,248,22,160,4,248,22,
28,248,22,66,248,22,160,4,248,22,83,197,250,22,92,2,27,248,22,92,248, 83,197,250,22,92,2,27,248,22,92,248,22,163,20,199,248,22,104,198,27,248,
22,163,20,199,248,22,104,198,27,248,22,160,4,248,22,163,20,197,250,22,92, 22,160,4,248,22,163,20,197,250,22,92,2,27,248,22,92,248,22,83,197,250,
2,27,248,22,92,248,22,83,197,250,22,93,2,24,248,22,164,20,199,248,22, 22,93,2,24,248,22,164,20,199,248,22,164,20,202,144,39,20,120,145,2,1,
164,20,202,144,39,20,120,145,2,1,39,16,1,11,16,0,20,26,15,61,9, 39,16,1,11,16,0,20,26,15,61,9,2,2,2,2,2,3,11,11,11,11,
2,2,2,2,2,3,11,11,11,11,9,9,11,11,11,10,39,80,143,39,39, 9,9,11,11,11,10,39,80,143,39,39,20,120,145,2,1,39,16,0,16,0,
20,120,145,2,1,39,16,0,16,0,41,42,39,16,0,39,16,0,39,11,11, 41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5,2,6,2,
11,16,11,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12, 7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,16,11,11,11,11,11,
2,13,2,14,16,11,11,11,11,11,11,11,11,11,11,11,11,16,11,2,4, 11,11,11,11,11,11,11,16,11,2,4,2,5,2,6,2,7,2,8,2,9,
2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,39, 2,10,2,11,2,12,2,13,2,14,39,50,40,16,0,39,16,1,2,15,40,
50,40,16,0,39,16,1,2,15,40,11,11,11,16,0,16,0,16,0,39,39, 11,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,
11,12,11,11,16,0,16,0,16,0,39,39,16,12,16,5,11,20,15,16,2, 39,39,16,12,16,5,11,20,15,16,2,20,14,144,39,39,40,80,143,39,39,
20,14,144,39,39,40,80,143,39,39,39,20,120,145,2,1,39,16,1,2,15, 39,20,120,145,2,1,39,16,1,2,15,16,1,33,36,10,16,5,2,11,88,
16,1,33,37,10,16,5,2,12,88,148,8,36,40,56,40,9,223,0,33,38, 148,8,36,40,56,40,9,223,0,33,37,39,20,120,145,2,1,39,16,1,2,
39,20,120,145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88,148,8, 15,16,0,11,16,5,2,7,88,148,8,36,40,56,40,9,223,0,33,38,39,
36,40,56,40,9,223,0,33,39,39,20,120,145,2,1,39,16,1,2,15,16, 20,120,145,2,1,39,16,1,2,15,16,0,11,16,5,2,14,88,148,8,36,
0,11,16,5,2,14,88,148,8,36,40,56,42,9,223,0,33,40,39,20,120, 40,56,42,9,223,0,33,39,39,20,120,145,2,1,39,16,1,2,15,16,1,
145,2,1,39,16,1,2,15,16,1,33,41,11,16,5,2,11,88,148,8,36, 33,40,11,16,5,2,10,88,148,8,36,40,59,42,9,223,0,33,41,39,20,
40,59,42,9,223,0,33,42,39,20,120,145,2,1,39,16,1,2,15,16,1, 120,145,2,1,39,16,1,2,15,16,1,33,42,11,16,5,2,13,88,148,8,
33,43,11,16,5,2,13,88,148,8,36,40,61,40,9,223,0,33,46,39,20, 36,40,61,40,9,223,0,33,45,39,20,120,145,2,1,39,16,1,2,15,16,
120,145,2,1,39,16,1,2,15,16,0,11,16,5,2,4,88,148,8,36,40, 0,11,16,5,2,4,88,148,8,36,40,56,40,9,223,0,33,47,39,20,120,
56,40,9,223,0,33,48,39,20,120,145,2,1,39,16,1,2,15,16,0,11, 145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88,148,8,36,40,57,
16,5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,39,20,120,145,2, 40,9,223,0,33,48,39,20,120,145,2,1,39,16,1,2,15,16,0,11,16,
1,39,16,1,2,15,16,0,11,16,5,2,7,88,148,8,36,40,57,40,9, 5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,39,20,120,145,2,1,
223,0,33,50,39,20,120,145,2,1,39,16,1,2,15,16,0,11,16,5,2, 39,16,1,2,15,16,0,11,16,5,2,12,88,148,8,36,40,59,40,9,223,
10,88,148,8,36,40,59,40,9,223,0,33,51,39,20,120,145,2,1,39,16, 0,33,50,39,20,120,145,2,1,39,16,1,2,15,16,0,11,16,5,2,6,
1,2,15,16,0,11,16,5,2,6,88,148,8,36,40,61,42,9,223,0,33, 88,148,8,36,40,61,42,9,223,0,33,51,39,20,120,145,2,1,39,16,1,
52,39,20,120,145,2,1,39,16,1,2,15,16,1,33,53,11,16,5,2,5, 2,15,16,1,33,52,11,16,5,2,5,88,148,8,36,40,57,40,9,223,0,
88,148,8,36,40,57,40,9,223,0,33,54,39,20,120,145,2,1,39,16,1, 33,53,39,20,120,145,2,1,39,16,1,2,15,16,0,11,16,0,94,2,17,
2,15,16,0,11,16,0,94,2,17,2,18,93,2,17,9,9,39,9,0}; 2,18,93,2,17,9,9,39,9,0};
EVAL_ONE_SIZED_STR((char *)expr, 2098); EVAL_ONE_SIZED_STR((char *)expr, 2088);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,53,84,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,54,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,194,0,0,0,1,0,0,8,0, 0,0,0,0,0,0,0,0,0,0,0,0,194,0,0,0,1,0,0,8,0,
16,0,29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,173,0,180, 16,0,29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,173,0,180,
0,195,0,213,0,225,0,241,0,255,0,21,1,41,1,48,1,82,1,99,1, 0,195,0,213,0,225,0,241,0,255,0,21,1,41,1,48,1,82,1,99,1,
@ -1047,7 +1047,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 19776); EVAL_ONE_SIZED_STR((char *)expr, 19776);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,53,84,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,54,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0, 0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0,
23,0,48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0,196, 23,0,48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0,196,
0,205,0,212,0,0,0,247,1,0,0,3,1,5,105,110,115,112,48,76,35, 0,205,0,212,0,0,0,247,1,0,0,3,1,5,105,110,115,112,48,76,35,
@ -1078,7 +1078,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 577); EVAL_ONE_SIZED_STR((char *)expr, 577);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,53,84,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,54,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,1,0,0,8,0, 0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,1,0,0,8,0,
15,0,26,0,53,0,59,0,68,0,75,0,97,0,110,0,136,0,153,0,175, 15,0,26,0,53,0,59,0,68,0,75,0,97,0,110,0,136,0,153,0,175,
0,183,0,195,0,210,0,226,0,244,0,9,1,21,1,37,1,60,1,84,1, 0,183,0,195,0,210,0,226,0,244,0,9,1,21,1,37,1,60,1,84,1,
@ -1545,31 +1545,31 @@
EVAL_ONE_SIZED_STR((char *)expr, 9739); EVAL_ONE_SIZED_STR((char *)expr, 9739);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,53,84,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,54,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,1,0,0,8,0, 0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8,0,
18,0,24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,134, 18,0,24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,134,
0,141,0,150,0,235,0,242,0,12,1,0,0,202,1,0,0,3,1,5,105, 0,146,0,229,0,236,0,6,1,0,0,196,1,0,0,3,1,5,105,110,115,
110,115,112,48,71,35,37,98,117,105,108,116,105,110,67,113,117,111,116,101,29, 112,48,71,35,37,98,117,105,108,116,105,110,67,113,117,111,116,101,29,94,2,
94,2,3,70,35,37,107,101,114,110,101,108,11,29,94,2,3,70,35,37,101, 3,70,35,37,107,101,114,110,101,108,11,29,94,2,3,70,35,37,101,120,112,
120,112,111,98,115,11,29,94,2,3,68,35,37,98,111,111,116,11,29,94,2, 111,98,115,11,29,94,2,3,68,35,37,98,111,111,116,11,29,94,2,3,76,
3,76,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,3, 35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,3,70,35,
70,35,37,112,97,114,97,109,122,11,29,94,2,3,71,35,37,110,101,116,119, 37,112,97,114,97,109,122,11,29,94,2,3,71,35,37,110,101,116,119,111,114,
111,114,107,11,29,94,2,3,69,35,37,117,116,105,108,115,11,38,11,93,2, 107,11,29,94,2,3,69,35,37,117,116,105,108,115,11,38,11,93,2,12,36,
12,36,12,39,38,13,93,143,2,14,39,38,14,16,3,39,2,15,2,2,36, 12,39,38,13,93,143,16,3,39,2,14,2,2,39,36,14,150,40,143,2,15,
15,151,40,2,14,143,2,16,16,4,2,4,39,39,2,1,143,2,16,16,4, 16,4,2,4,39,39,2,1,143,2,15,16,4,2,5,39,39,2,1,143,2,
2,5,39,39,2,1,143,2,16,16,4,2,6,39,39,2,1,143,2,16,16, 15,16,4,2,6,39,39,2,1,143,2,15,16,4,2,7,39,39,2,1,143,
4,2,7,39,39,2,1,143,2,16,16,4,2,8,39,39,2,1,143,2,16, 2,15,16,4,2,8,39,39,2,1,143,2,15,16,4,2,9,39,39,2,1,
16,4,2,9,39,39,2,1,143,2,16,16,4,2,10,39,39,2,1,16,0, 143,2,15,16,4,2,10,39,39,2,1,16,0,38,15,143,2,14,2,11,18,
38,16,143,2,15,2,11,18,143,16,2,143,10,16,3,9,2,11,2,13,143, 143,16,2,143,10,16,3,9,2,11,2,13,143,11,16,3,9,9,2,13,16,
11,16,3,9,9,2,13,16,3,9,9,9,144,39,20,120,145,2,1,39,16, 3,9,9,9,144,39,20,120,145,2,1,39,16,1,11,16,0,20,26,15,56,
1,11,16,0,20,26,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11, 9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11,33,16,39,
9,9,11,11,11,33,17,39,80,143,39,39,20,120,145,2,1,39,16,0,16, 80,143,39,39,20,120,145,2,1,39,16,0,16,0,40,42,39,16,0,39,16,
0,40,42,39,16,0,39,16,0,39,11,11,11,16,0,16,0,16,0,39,39, 0,39,11,11,11,16,0,16,0,16,0,39,39,40,12,11,11,16,0,16,0,
40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16, 16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,0,104,2,4,
0,39,39,16,0,104,2,4,2,5,29,94,2,3,71,35,37,102,111,114,101, 2,5,29,94,2,3,71,35,37,102,111,114,101,105,103,110,11,29,94,2,3,
105,103,110,11,29,94,2,3,70,35,37,117,110,115,97,102,101,11,29,94,2, 70,35,37,117,110,115,97,102,101,11,29,94,2,3,71,35,37,102,108,102,120,
3,71,35,37,102,108,102,120,110,117,109,11,2,6,2,7,2,8,2,9,2, 110,117,109,11,2,6,2,7,2,8,2,9,2,10,29,94,2,3,69,35,37,
10,29,94,2,3,69,35,37,112,108,97,99,101,11,29,94,2,3,71,35,37, 112,108,97,99,101,11,29,94,2,3,71,35,37,102,117,116,117,114,101,115,11,
102,117,116,117,114,101,115,11,9,9,9,39,9,0}; 9,9,9,39,9,0};
EVAL_ONE_SIZED_STR((char *)expr, 538); EVAL_ONE_SIZED_STR((char *)expr, 530);
} }

View File

@ -13,12 +13,12 @@
consistently.) consistently.)
*/ */
#define MZSCHEME_VERSION "6.2.900.5" #define MZSCHEME_VERSION "6.2.900.6"
#define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_X 6
#define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 900 #define MZSCHEME_VERSION_Z 900
#define MZSCHEME_VERSION_W 5 #define MZSCHEME_VERSION_W 6
#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

@ -723,6 +723,20 @@ static Scheme_Object *new_multi_scope(Scheme_Object *debug_name)
return (Scheme_Object *)multi_scope; return (Scheme_Object *)multi_scope;
} }
static void repair_scope_owner(Scheme_Object *m)
{
Scheme_Object *multi_scope;
/* The owner scope might be missing due to broken bytecode. For
non-broken bytecode, there shouldn't be a way to reach a
scope withough going through its owner. Work around the
broken scope object by creating a new owner. */
multi_scope = new_multi_scope(scheme_false);
scheme_hash_set((Scheme_Hash_Table *)multi_scope, scheme_make_integer(0), m);
((Scheme_Scope_With_Owner *)m)->owner_multi_scope = multi_scope;
}
Scheme_Object *scheme_scope_printed_form(Scheme_Object *m) Scheme_Object *scheme_scope_printed_form(Scheme_Object *m)
{ {
int kind = ((Scheme_Scope *)m)->id & SCHEME_STX_SCOPE_KIND_MASK; int kind = ((Scheme_Scope *)m)->id & SCHEME_STX_SCOPE_KIND_MASK;
@ -757,15 +771,20 @@ Scheme_Object *scheme_scope_printed_form(Scheme_Object *m)
if (SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m)) { if (SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m)) {
Scheme_Object *multi_scope = ((Scheme_Scope_With_Owner *)m)->owner_multi_scope; Scheme_Object *multi_scope = ((Scheme_Scope_With_Owner *)m)->owner_multi_scope;
name = scheme_eq_hash_get((Scheme_Hash_Table *)multi_scope, scheme_void); if (multi_scope) {
if (!name) name = scheme_false; name = scheme_eq_hash_get((Scheme_Hash_Table *)multi_scope, scheme_void);
if (!name) name = scheme_false;
if (SCHEME_TL_MULTI_SCOPEP(multi_scope))
kind_sym = top_symbol; if (SCHEME_TL_MULTI_SCOPEP(multi_scope))
kind_sym = top_symbol;
vec = scheme_make_vector(4, NULL);
SCHEME_VEC_ELS(vec)[2] = name; vec = scheme_make_vector(4, NULL);
SCHEME_VEC_ELS(vec)[3] = ((Scheme_Scope_With_Owner *)m)->phase; SCHEME_VEC_ELS(vec)[2] = name;
SCHEME_VEC_ELS(vec)[3] = ((Scheme_Scope_With_Owner *)m)->phase;
} else {
/* owner is either missing (bad bytecode) or hasn't been loaded on demand */
vec = scheme_make_vector(2, NULL);
}
} else { } else {
vec = scheme_make_vector(2, NULL); vec = scheme_make_vector(2, NULL);
} }
@ -1136,6 +1155,8 @@ static Scheme_Scope_Table *do_scope_at_phase(Scheme_Scope_Table *st, Scheme_Obje
if (SCHEME_SCOPEP(m) && SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m)) { if (SCHEME_SCOPEP(m) && SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m)) {
if (!SCHEME_FALSEP(phase)) if (!SCHEME_FALSEP(phase))
phase = scheme_bin_minus(phase, ((Scheme_Scope_With_Owner *)m)->phase); phase = scheme_bin_minus(phase, ((Scheme_Scope_With_Owner *)m)->phase);
if (!((Scheme_Scope_With_Owner *)m)->owner_multi_scope)
repair_scope_owner(m);
m = ((Scheme_Scope_With_Owner *)m)->owner_multi_scope; m = ((Scheme_Scope_With_Owner *)m)->owner_multi_scope;
} }
@ -5305,9 +5326,6 @@ void scheme_iterate_reachable_scopes(Scheme_Marshal_Tables *mt)
} }
} }
if (SCHEME_SCOPE_HAS_OWNER(scope))
add_reachable_multi_scope(((Scheme_Scope_With_Owner *)scope)->owner_multi_scope, mt);
/* Check for any free-id mappings whose reachbility depended on `scope`: */ /* Check for any free-id mappings whose reachbility depended on `scope`: */
if (mt->pending_reachable_ids) { if (mt->pending_reachable_ids) {
l = scheme_eq_hash_get(mt->pending_reachable_ids, (Scheme_Object *)scope); l = scheme_eq_hash_get(mt->pending_reachable_ids, (Scheme_Object *)scope);
@ -5677,7 +5695,7 @@ static Scheme_Object *marshal_bindings(Scheme_Object *l, Scheme_Marshal_Tables *
Scheme_Object *scheme_scope_marshal_content(Scheme_Object *m, Scheme_Marshal_Tables *mt) Scheme_Object *scheme_scope_marshal_content(Scheme_Object *m, Scheme_Marshal_Tables *mt)
{ {
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
Scheme_Object *v, *l, *r, *l2, *tab, *scopes, *key, *val, *ms; Scheme_Object *v, *l, *r, *l2, *tab, *scopes, *key, *val;
intptr_t i, j; intptr_t i, j;
if (!mt->identity_map) if (!mt->identity_map)
@ -5687,11 +5705,6 @@ Scheme_Object *scheme_scope_marshal_content(Scheme_Object *m, Scheme_Marshal_Tab
if (v) if (v)
return v; return v;
if (SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m))
ms = multi_scope_to_vector(((Scheme_Scope_With_Owner *)m)->owner_multi_scope, mt);
else
ms = NULL;
v = ((Scheme_Scope *)m)->bindings; v = ((Scheme_Scope *)m)->bindings;
if (v) { if (v) {
int count; int count;
@ -5780,15 +5793,9 @@ Scheme_Object *scheme_scope_marshal_content(Scheme_Object *m, Scheme_Marshal_Tab
} }
} }
if (ms)
r = scheme_make_pair(ms, r);
v = scheme_make_pair(scheme_make_integer(SCHEME_SCOPE_KIND(m)), r); v = scheme_make_pair(scheme_make_integer(SCHEME_SCOPE_KIND(m)), r);
} else { } else
v = scheme_make_integer(SCHEME_SCOPE_KIND(m)); v = scheme_make_integer(SCHEME_SCOPE_KIND(m));
if (ms)
v = scheme_make_pair(v, scheme_make_pair(ms, scheme_false));
}
scheme_hash_set(mt->identity_map, m, v); scheme_hash_set(mt->identity_map, m, v);
@ -6092,7 +6099,7 @@ Scheme_Object *scheme_syntax_to_datum(Scheme_Object *stx, int with_scopes,
/* datum->syntax */ /* datum->syntax */
/*========================================================================*/ /*========================================================================*/
#define return_NULL return NULL #define return_NULL assert(0) // return NULL
Scheme_Scope_Set *list_to_scope_set(Scheme_Object *l, Scheme_Unmarshal_Tables *ut) Scheme_Scope_Set *list_to_scope_set(Scheme_Object *l, Scheme_Unmarshal_Tables *ut)
{ {
@ -6145,8 +6152,7 @@ static Scheme_Hash_Table *vector_to_multi_scope(Scheme_Object *mht, Scheme_Unmar
multi_scope = (Scheme_Hash_Table *)new_multi_scope(SCHEME_VEC_ELS(mht)[len-1]); multi_scope = (Scheme_Hash_Table *)new_multi_scope(SCHEME_VEC_ELS(mht)[len-1]);
len -= 1; len -= 1;
/* A multi-scope can refer back to itself via one of its /* A multi-scope can refer back to itself via free-id=? info: */
scopes or free-id=? info: */
scheme_hash_set(ut->rns, mht, (Scheme_Object *)multi_scope); scheme_hash_set(ut->rns, mht, (Scheme_Object *)multi_scope);
for (i = 0; i < len; i += 2) { for (i = 0; i < len; i += 2) {
@ -6157,12 +6163,10 @@ static Scheme_Hash_Table *vector_to_multi_scope(Scheme_Object *mht, Scheme_Unmar
if (!scope) return_NULL; if (!scope) return_NULL;
if (!SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)scope)) if (!SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)scope))
return_NULL; return_NULL;
if (!((Scheme_Scope_With_Owner *)scope)->owner_multi_scope) if (((Scheme_Scope_With_Owner *)scope)->owner_multi_scope)
((Scheme_Scope_With_Owner *)scope)->owner_multi_scope = (Scheme_Object *)multi_scope;
else if (!SAME_OBJ(((Scheme_Scope_With_Owner *)scope)->owner_multi_scope,
(Scheme_Object *)multi_scope))
return_NULL; return_NULL;
scheme_hash_set(multi_scope, SCHEME_VEC_ELS(mht)[i], scope); scheme_hash_set(multi_scope, SCHEME_VEC_ELS(mht)[i], scope);
((Scheme_Scope_With_Owner *)scope)->owner_multi_scope = (Scheme_Object *)multi_scope;
((Scheme_Scope_With_Owner *)scope)->phase = SCHEME_VEC_ELS(mht)[i]; ((Scheme_Scope_With_Owner *)scope)->phase = SCHEME_VEC_ELS(mht)[i];
} }
@ -6363,19 +6367,6 @@ Scheme_Object *scope_unmarshal_content(Scheme_Object *box, Scheme_Unmarshal_Tabl
/* Since we've created the scope before unmarshaling its content, /* Since we've created the scope before unmarshaling its content,
cycles among scopes are ok. */ cycles among scopes are ok. */
if (SCHEME_SCOPE_HAS_OWNER((Scheme_Scope *)m)) {
if (!SCHEME_PAIRP(c)) return_NULL;
r = (Scheme_Object *)vector_to_multi_scope(SCHEME_CAR(c), ut);
if (!r) return_NULL;
if (!((Scheme_Scope_With_Owner *)m)->owner_multi_scope)
((Scheme_Scope_With_Owner *)m)->owner_multi_scope = r;
else if (!SAME_OBJ(r, ((Scheme_Scope_With_Owner *)m)->owner_multi_scope))
return_NULL;
c = SCHEME_CDR(c);
if (SCHEME_FALSEP(c))
c = NULL;
}
if (!c) return m; if (!c) return m;
while (SCHEME_PAIRP(c)) { while (SCHEME_PAIRP(c)) {