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.
525 lines
9.9 KiB
Plaintext
525 lines
9.9 KiB
Plaintext
// Can have more than 255 local variables in a local scope, as long as they
|
|
// aren't all in scope at the same time.
|
|
|
|
{
|
|
{
|
|
// Slot zero is always taken to hold the closure or receiver.
|
|
var a1 = "value a"
|
|
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
|
|
System.print(a255) // expect: value a
|
|
}
|
|
|
|
{
|
|
// Slot zero is always taken to hold the closure or receiver.
|
|
var b1 = "value b"
|
|
var b2 = b1
|
|
var b3 = b2
|
|
var b4 = b3
|
|
var b5 = b4
|
|
var b6 = b5
|
|
var b7 = b6
|
|
var b8 = b7
|
|
var b9 = b8
|
|
var b10 = b9
|
|
var b11 = b10
|
|
var b12 = b11
|
|
var b13 = b12
|
|
var b14 = b13
|
|
var b15 = b14
|
|
var b16 = b15
|
|
var b17 = b16
|
|
var b18 = b17
|
|
var b19 = b18
|
|
var b20 = b19
|
|
var b21 = b20
|
|
var b22 = b21
|
|
var b23 = b22
|
|
var b24 = b23
|
|
var b25 = b24
|
|
var b26 = b25
|
|
var b27 = b26
|
|
var b28 = b27
|
|
var b29 = b28
|
|
var b30 = b29
|
|
var b31 = b30
|
|
var b32 = b31
|
|
var b33 = b32
|
|
var b34 = b33
|
|
var b35 = b34
|
|
var b36 = b35
|
|
var b37 = b36
|
|
var b38 = b37
|
|
var b39 = b38
|
|
var b40 = b39
|
|
var b41 = b40
|
|
var b42 = b41
|
|
var b43 = b42
|
|
var b44 = b43
|
|
var b45 = b44
|
|
var b46 = b45
|
|
var b47 = b46
|
|
var b48 = b47
|
|
var b49 = b48
|
|
var b50 = b49
|
|
var b51 = b50
|
|
var b52 = b51
|
|
var b53 = b52
|
|
var b54 = b53
|
|
var b55 = b54
|
|
var b56 = b55
|
|
var b57 = b56
|
|
var b58 = b57
|
|
var b59 = b58
|
|
var b60 = b59
|
|
var b61 = b60
|
|
var b62 = b61
|
|
var b63 = b62
|
|
var b64 = b63
|
|
var b65 = b64
|
|
var b66 = b65
|
|
var b67 = b66
|
|
var b68 = b67
|
|
var b69 = b68
|
|
var b70 = b69
|
|
var b71 = b70
|
|
var b72 = b71
|
|
var b73 = b72
|
|
var b74 = b73
|
|
var b75 = b74
|
|
var b76 = b75
|
|
var b77 = b76
|
|
var b78 = b77
|
|
var b79 = b78
|
|
var b80 = b79
|
|
var b81 = b80
|
|
var b82 = b81
|
|
var b83 = b82
|
|
var b84 = b83
|
|
var b85 = b84
|
|
var b86 = b85
|
|
var b87 = b86
|
|
var b88 = b87
|
|
var b89 = b88
|
|
var b90 = b89
|
|
var b91 = b90
|
|
var b92 = b91
|
|
var b93 = b92
|
|
var b94 = b93
|
|
var b95 = b94
|
|
var b96 = b95
|
|
var b97 = b96
|
|
var b98 = b97
|
|
var b99 = b98
|
|
var b100 = b99
|
|
var b101 = b100
|
|
var b102 = b101
|
|
var b103 = b102
|
|
var b104 = b103
|
|
var b105 = b104
|
|
var b106 = b105
|
|
var b107 = b106
|
|
var b108 = b107
|
|
var b109 = b108
|
|
var b110 = b109
|
|
var b111 = b110
|
|
var b112 = b111
|
|
var b113 = b112
|
|
var b114 = b113
|
|
var b115 = b114
|
|
var b116 = b115
|
|
var b117 = b116
|
|
var b118 = b117
|
|
var b119 = b118
|
|
var b120 = b119
|
|
var b121 = b120
|
|
var b122 = b121
|
|
var b123 = b122
|
|
var b124 = b123
|
|
var b125 = b124
|
|
var b126 = b125
|
|
var b127 = b126
|
|
var b128 = b127
|
|
var b129 = b128
|
|
var b130 = b129
|
|
var b131 = b130
|
|
var b132 = b131
|
|
var b133 = b132
|
|
var b134 = b133
|
|
var b135 = b134
|
|
var b136 = b135
|
|
var b137 = b136
|
|
var b138 = b137
|
|
var b139 = b138
|
|
var b140 = b139
|
|
var b141 = b140
|
|
var b142 = b141
|
|
var b143 = b142
|
|
var b144 = b143
|
|
var b145 = b144
|
|
var b146 = b145
|
|
var b147 = b146
|
|
var b148 = b147
|
|
var b149 = b148
|
|
var b150 = b149
|
|
var b151 = b150
|
|
var b152 = b151
|
|
var b153 = b152
|
|
var b154 = b153
|
|
var b155 = b154
|
|
var b156 = b155
|
|
var b157 = b156
|
|
var b158 = b157
|
|
var b159 = b158
|
|
var b160 = b159
|
|
var b161 = b160
|
|
var b162 = b161
|
|
var b163 = b162
|
|
var b164 = b163
|
|
var b165 = b164
|
|
var b166 = b165
|
|
var b167 = b166
|
|
var b168 = b167
|
|
var b169 = b168
|
|
var b170 = b169
|
|
var b171 = b170
|
|
var b172 = b171
|
|
var b173 = b172
|
|
var b174 = b173
|
|
var b175 = b174
|
|
var b176 = b175
|
|
var b177 = b176
|
|
var b178 = b177
|
|
var b179 = b178
|
|
var b180 = b179
|
|
var b181 = b180
|
|
var b182 = b181
|
|
var b183 = b182
|
|
var b184 = b183
|
|
var b185 = b184
|
|
var b186 = b185
|
|
var b187 = b186
|
|
var b188 = b187
|
|
var b189 = b188
|
|
var b190 = b189
|
|
var b191 = b190
|
|
var b192 = b191
|
|
var b193 = b192
|
|
var b194 = b193
|
|
var b195 = b194
|
|
var b196 = b195
|
|
var b197 = b196
|
|
var b198 = b197
|
|
var b199 = b198
|
|
var b200 = b199
|
|
var b201 = b200
|
|
var b202 = b201
|
|
var b203 = b202
|
|
var b204 = b203
|
|
var b205 = b204
|
|
var b206 = b205
|
|
var b207 = b206
|
|
var b208 = b207
|
|
var b209 = b208
|
|
var b210 = b209
|
|
var b211 = b210
|
|
var b212 = b211
|
|
var b213 = b212
|
|
var b214 = b213
|
|
var b215 = b214
|
|
var b216 = b215
|
|
var b217 = b216
|
|
var b218 = b217
|
|
var b219 = b218
|
|
var b220 = b219
|
|
var b221 = b220
|
|
var b222 = b221
|
|
var b223 = b222
|
|
var b224 = b223
|
|
var b225 = b224
|
|
var b226 = b225
|
|
var b227 = b226
|
|
var b228 = b227
|
|
var b229 = b228
|
|
var b230 = b229
|
|
var b231 = b230
|
|
var b232 = b231
|
|
var b233 = b232
|
|
var b234 = b233
|
|
var b235 = b234
|
|
var b236 = b235
|
|
var b237 = b236
|
|
var b238 = b237
|
|
var b239 = b238
|
|
var b240 = b239
|
|
var b241 = b240
|
|
var b242 = b241
|
|
var b243 = b242
|
|
var b244 = b243
|
|
var b245 = b244
|
|
var b246 = b245
|
|
var b247 = b246
|
|
var b248 = b247
|
|
var b249 = b248
|
|
var b250 = b249
|
|
var b251 = b250
|
|
var b252 = b251
|
|
var b253 = b252
|
|
var b254 = b253
|
|
var b255 = b254
|
|
System.print(b255) // expect: value b
|
|
}
|
|
}
|