Commit 9bb474d
committed
Fixes parameter detection on bytecode->goto translation
The JVM spec document (Sec. 3.6) mandates that Java method arguments occupy the
lowest local variables. The only sound way to detect which variable slots are
function parameters is by counting the number and type of arguments in the
method descriptor.
This commit adds a new function `java_method_parameter_slots` which can
determine the number of variable slots used by a method's parameters. It also
fixes `setup_local_variables` (which were previously checking whether
`v.start_pc=0` to determine if an LVT entry is a parameter).1 parent 77bda4e commit 9bb474d
File tree
5 files changed
+125
-63
lines changed- src/java_bytecode
5 files changed
+125
-63
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | 110 | | |
125 | 111 | | |
126 | 112 | | |
127 | | - | |
| 113 | + | |
128 | 114 | | |
129 | 115 | | |
130 | 116 | | |
| |||
308 | 294 | | |
309 | 295 | | |
310 | 296 | | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
311 | 306 | | |
312 | 307 | | |
313 | | - | |
| 308 | + | |
314 | 309 | | |
315 | 310 | | |
316 | | - | |
| 311 | + | |
| 312 | + | |
317 | 313 | | |
318 | 314 | | |
319 | 315 | | |
| |||
335 | 331 | | |
336 | 332 | | |
337 | 333 | | |
338 | | - | |
| 334 | + | |
339 | 335 | | |
| 336 | + | |
| 337 | + | |
340 | 338 | | |
341 | 339 | | |
342 | 340 | | |
| |||
348 | 346 | | |
349 | 347 | | |
350 | 348 | | |
351 | | - | |
352 | | - | |
353 | 349 | | |
354 | 350 | | |
355 | 351 | | |
| |||
364 | 360 | | |
365 | 361 | | |
366 | 362 | | |
367 | | - | |
368 | | - | |
369 | | - | |
370 | 363 | | |
| 364 | + | |
| 365 | + | |
371 | 366 | | |
372 | 367 | | |
373 | 368 | | |
| |||
377 | 372 | | |
378 | 373 | | |
379 | 374 | | |
380 | | - | |
381 | | - | |
| 375 | + | |
382 | 376 | | |
383 | 377 | | |
384 | 378 | | |
385 | 379 | | |
386 | | - | |
387 | | - | |
388 | | - | |
| 380 | + | |
389 | 381 | | |
390 | 382 | | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
391 | 388 | | |
392 | 389 | | |
393 | | - | |
394 | | - | |
395 | | - | |
396 | | - | |
| 390 | + | |
| 391 | + | |
397 | 392 | | |
398 | | - | |
399 | | - | |
400 | 393 | | |
401 | 394 | | |
402 | | - | |
403 | 395 | | |
404 | 396 | | |
405 | | - | |
| 397 | + | |
406 | 398 | | |
407 | 399 | | |
408 | 400 | | |
409 | | - | |
410 | | - | |
411 | 401 | | |
412 | | - | |
413 | 402 | | |
414 | | - | |
415 | 403 | | |
416 | 404 | | |
417 | 405 | | |
| |||
430 | 418 | | |
431 | 419 | | |
432 | 420 | | |
433 | | - | |
434 | | - | |
435 | 421 | | |
436 | | - | |
437 | | - | |
| 422 | + | |
438 | 423 | | |
439 | 424 | | |
440 | 425 | | |
441 | | - | |
| 426 | + | |
| 427 | + | |
442 | 428 | | |
443 | 429 | | |
444 | 430 | | |
| |||
1138 | 1124 | | |
1139 | 1125 | | |
1140 | 1126 | | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
1141 | 1133 | | |
1142 | 1134 | | |
1143 | 1135 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
69 | 75 | | |
70 | 76 | | |
71 | 77 | | |
| |||
76 | 82 | | |
77 | 83 | | |
78 | 84 | | |
| 85 | + | |
79 | 86 | | |
80 | 87 | | |
81 | 88 | | |
| |||
149 | 156 | | |
150 | 157 | | |
151 | 158 | | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
152 | 167 | | |
153 | 168 | | |
154 | 169 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
58 | | - | |
| 59 | + | |
59 | 60 | | |
60 | 61 | | |
61 | 62 | | |
| |||
186 | 187 | | |
187 | 188 | | |
188 | 189 | | |
189 | | - | |
| 190 | + | |
| 191 | + | |
190 | 192 | | |
191 | | - | |
| 193 | + | |
| 194 | + | |
192 | 195 | | |
193 | 196 | | |
194 | 197 | | |
| |||
203 | 206 | | |
204 | 207 | | |
205 | 208 | | |
206 | | - | |
| 209 | + | |
207 | 210 | | |
208 | 211 | | |
209 | 212 | | |
| |||
230 | 233 | | |
231 | 234 | | |
232 | 235 | | |
233 | | - | |
| 236 | + | |
234 | 237 | | |
235 | 238 | | |
236 | 239 | | |
| |||
261 | 264 | | |
262 | 265 | | |
263 | 266 | | |
264 | | - | |
265 | | - | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
266 | 277 | | |
267 | 278 | | |
268 | 279 | | |
269 | 280 | | |
270 | 281 | | |
271 | | - | |
| 282 | + | |
| 283 | + | |
272 | 284 | | |
273 | 285 | | |
274 | 286 | | |
275 | 287 | | |
276 | | - | |
277 | | - | |
| 288 | + | |
278 | 289 | | |
279 | 290 | | |
280 | 291 | | |
| |||
287 | 298 | | |
288 | 299 | | |
289 | 300 | | |
290 | | - | |
| 301 | + | |
| 302 | + | |
291 | 303 | | |
292 | 304 | | |
293 | 305 | | |
| |||
299 | 311 | | |
300 | 312 | | |
301 | 313 | | |
302 | | - | |
| 314 | + | |
| 315 | + | |
303 | 316 | | |
304 | 317 | | |
305 | 318 | | |
| |||
360 | 373 | | |
361 | 374 | | |
362 | 375 | | |
363 | | - | |
| 376 | + | |
364 | 377 | | |
365 | 378 | | |
366 | 379 | | |
| |||
652 | 665 | | |
653 | 666 | | |
654 | 667 | | |
655 | | - | |
| 668 | + | |
| 669 | + | |
656 | 670 | | |
657 | 671 | | |
658 | | - | |
| 672 | + | |
659 | 673 | | |
660 | 674 | | |
661 | 675 | | |
| |||
673 | 687 | | |
674 | 688 | | |
675 | 689 | | |
676 | | - | |
| 690 | + | |
677 | 691 | | |
678 | 692 | | |
679 | 693 | | |
| |||
0 commit comments