1
0
forked from Mirror/wren
Files
wren/test/language/variable/many_nonsimultaneous_locals.wren
Bob Nystrom c5ce6fac46 Fix local variable declarations in the REPL.
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.
2018-04-27 08:20:49 -07:00

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
}
}