forked from Mirror/wren
A statement like:
for (i in 1..2)
When run in the REPL declares a local variable ("i"), but not inside
a function or method body. This hit a corner case in the compiler
where it didn't have the correct slot indexes set up.
That corner case is because sometimes when you compile a chunk, local
slot zero is pre-allocated -- either to refer to "this" or to hold the
closure for a function so that it doesn't get GCed while running. But
if you're compiling top-level code, that slot isn't allocated. But top
level code for the REPL *should* be, because that gets invoked like a
function.
To simplify things, *every* compiled chunk now pre-allocates slot zero.
That way, there are fewer cases to keep in mind.
Also fixed an issue where a GC during an import could collected the
imported module body's closure.
Fix #456.
268 lines
6.0 KiB
Plaintext
268 lines
6.0 KiB
Plaintext
{
|
|
// Slot zero is always taken to hold the closure or receiver.
|
|
var a1 = "value"
|
|
var a2 = a1
|
|
var a3 = a2
|
|
var a4 = a3
|
|
var a5 = a4
|
|
var a6 = a5
|
|
var a7 = a6
|
|
var a8 = a7
|
|
var a9 = a8
|
|
var a10 = a9
|
|
var a11 = a10
|
|
var a12 = a11
|
|
var a13 = a12
|
|
var a14 = a13
|
|
var a15 = a14
|
|
{
|
|
var a16 = a15
|
|
var a17 = a16
|
|
var a18 = a17
|
|
var a19 = a18
|
|
var a20 = a19
|
|
var a21 = a20
|
|
var a22 = a21
|
|
var a23 = a22
|
|
var a24 = a23
|
|
var a25 = a24
|
|
var a26 = a25
|
|
var a27 = a26
|
|
var a28 = a27
|
|
var a29 = a28
|
|
var a30 = a29
|
|
var a31 = a30
|
|
{
|
|
var a32 = a31
|
|
var a33 = a32
|
|
var a34 = a33
|
|
var a35 = a34
|
|
var a36 = a35
|
|
var a37 = a36
|
|
var a38 = a37
|
|
var a39 = a38
|
|
var a40 = a39
|
|
var a41 = a40
|
|
var a42 = a41
|
|
var a43 = a42
|
|
var a44 = a43
|
|
var a45 = a44
|
|
var a46 = a45
|
|
var a47 = a46
|
|
var a48 = a47
|
|
var a49 = a48
|
|
var a50 = a49
|
|
var a51 = a50
|
|
var a52 = a51
|
|
var a53 = a52
|
|
var a54 = a53
|
|
var a55 = a54
|
|
var a56 = a55
|
|
var a57 = a56
|
|
var a58 = a57
|
|
var a59 = a58
|
|
var a60 = a59
|
|
var a61 = a60
|
|
var a62 = a61
|
|
var a63 = a62
|
|
{
|
|
var a64 = a63
|
|
var a65 = a64
|
|
var a66 = a65
|
|
var a67 = a66
|
|
var a68 = a67
|
|
var a69 = a68
|
|
var a70 = a69
|
|
var a71 = a70
|
|
var a72 = a71
|
|
var a73 = a72
|
|
var a74 = a73
|
|
var a75 = a74
|
|
var a76 = a75
|
|
var a77 = a76
|
|
var a78 = a77
|
|
var a79 = a78
|
|
var a80 = a79
|
|
var a81 = a80
|
|
var a82 = a81
|
|
var a83 = a82
|
|
var a84 = a83
|
|
var a85 = a84
|
|
var a86 = a85
|
|
var a87 = a86
|
|
var a88 = a87
|
|
var a89 = a88
|
|
var a90 = a89
|
|
var a91 = a90
|
|
var a92 = a91
|
|
var a93 = a92
|
|
var a94 = a93
|
|
var a95 = a94
|
|
var a96 = a95
|
|
var a97 = a96
|
|
var a98 = a97
|
|
var a99 = a98
|
|
var a100 = a99
|
|
var a101 = a100
|
|
var a102 = a101
|
|
var a103 = a102
|
|
var a104 = a103
|
|
var a105 = a104
|
|
var a106 = a105
|
|
var a107 = a106
|
|
var a108 = a107
|
|
var a109 = a108
|
|
var a110 = a109
|
|
var a111 = a110
|
|
var a112 = a111
|
|
var a113 = a112
|
|
var a114 = a113
|
|
var a115 = a114
|
|
var a116 = a115
|
|
var a117 = a116
|
|
var a118 = a117
|
|
var a119 = a118
|
|
var a120 = a119
|
|
var a121 = a120
|
|
var a122 = a121
|
|
var a123 = a122
|
|
var a124 = a123
|
|
var a125 = a124
|
|
var a126 = a125
|
|
var a127 = a126
|
|
{
|
|
var a128 = a127
|
|
var a129 = a128
|
|
var a130 = a129
|
|
var a131 = a130
|
|
var a132 = a131
|
|
var a133 = a132
|
|
var a134 = a133
|
|
var a135 = a134
|
|
var a136 = a135
|
|
var a137 = a136
|
|
var a138 = a137
|
|
var a139 = a138
|
|
var a140 = a139
|
|
var a141 = a140
|
|
var a142 = a141
|
|
var a143 = a142
|
|
var a144 = a143
|
|
var a145 = a144
|
|
var a146 = a145
|
|
var a147 = a146
|
|
var a148 = a147
|
|
var a149 = a148
|
|
var a150 = a149
|
|
var a151 = a150
|
|
var a152 = a151
|
|
var a153 = a152
|
|
var a154 = a153
|
|
var a155 = a154
|
|
var a156 = a155
|
|
var a157 = a156
|
|
var a158 = a157
|
|
var a159 = a158
|
|
var a160 = a159
|
|
var a161 = a160
|
|
var a162 = a161
|
|
var a163 = a162
|
|
var a164 = a163
|
|
var a165 = a164
|
|
var a166 = a165
|
|
var a167 = a166
|
|
var a168 = a167
|
|
var a169 = a168
|
|
var a170 = a169
|
|
var a171 = a170
|
|
var a172 = a171
|
|
var a173 = a172
|
|
var a174 = a173
|
|
var a175 = a174
|
|
var a176 = a175
|
|
var a177 = a176
|
|
var a178 = a177
|
|
var a179 = a178
|
|
var a180 = a179
|
|
var a181 = a180
|
|
var a182 = a181
|
|
var a183 = a182
|
|
var a184 = a183
|
|
var a185 = a184
|
|
var a186 = a185
|
|
var a187 = a186
|
|
var a188 = a187
|
|
var a189 = a188
|
|
var a190 = a189
|
|
var a191 = a190
|
|
var a192 = a191
|
|
var a193 = a192
|
|
var a194 = a193
|
|
var a195 = a194
|
|
var a196 = a195
|
|
var a197 = a196
|
|
var a198 = a197
|
|
var a199 = a198
|
|
var a200 = a199
|
|
var a201 = a200
|
|
var a202 = a201
|
|
var a203 = a202
|
|
var a204 = a203
|
|
var a205 = a204
|
|
var a206 = a205
|
|
var a207 = a206
|
|
var a208 = a207
|
|
var a209 = a208
|
|
var a210 = a209
|
|
var a211 = a210
|
|
var a212 = a211
|
|
var a213 = a212
|
|
var a214 = a213
|
|
var a215 = a214
|
|
var a216 = a215
|
|
var a217 = a216
|
|
var a218 = a217
|
|
var a219 = a218
|
|
var a220 = a219
|
|
var a221 = a220
|
|
var a222 = a221
|
|
var a223 = a222
|
|
var a224 = a223
|
|
var a225 = a224
|
|
var a226 = a225
|
|
var a227 = a226
|
|
var a228 = a227
|
|
var a229 = a228
|
|
var a230 = a229
|
|
var a231 = a230
|
|
var a232 = a231
|
|
var a233 = a232
|
|
var a234 = a233
|
|
var a235 = a234
|
|
var a236 = a235
|
|
var a237 = a236
|
|
var a238 = a237
|
|
var a239 = a238
|
|
var a240 = a239
|
|
var a241 = a240
|
|
var a242 = a241
|
|
var a243 = a242
|
|
var a244 = a243
|
|
var a245 = a244
|
|
var a246 = a245
|
|
var a247 = a246
|
|
var a248 = a247
|
|
var a249 = a248
|
|
var a250 = a249
|
|
var a251 = a250
|
|
var a252 = a251
|
|
var a253 = a252
|
|
var a254 = a253
|
|
var a255 = a254
|
|
var a256 = a255 // expect error
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|