Skip to content
This repository was archived by the owner on Feb 23, 2018. It is now read-only.

Commit 6b478ad

Browse files
committed
Merge pull request #7 from lrytz/interpreterCopy
Call interpreter.copyInstruction consistently for all copied values
2 parents f00db13 + 94106a5 commit 6b478ad

File tree

1 file changed

+28
-28
lines changed
  • src/main/java/scala/tools/asm/tree/analysis

1 file changed

+28
-28
lines changed

src/main/java/scala/tools/asm/tree/analysis/Frame.java

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ public void execute(final AbstractInsnNode insn,
351351
if (value1.getSize() != 1) {
352352
throw new AnalyzerException(insn, "Illegal use of DUP");
353353
}
354-
push(value1);
354+
push(interpreter.copyOperation(insn, value1));
355355
push(interpreter.copyOperation(insn, value1));
356356
break;
357357
case Opcodes.DUP_X1:
@@ -361,8 +361,8 @@ public void execute(final AbstractInsnNode insn,
361361
throw new AnalyzerException(insn, "Illegal use of DUP_X1");
362362
}
363363
push(interpreter.copyOperation(insn, value1));
364-
push(value2);
365-
push(value1);
364+
push(interpreter.copyOperation(insn, value2));
365+
push(interpreter.copyOperation(insn, value1));
366366
break;
367367
case Opcodes.DUP_X2:
368368
value1 = pop();
@@ -372,15 +372,15 @@ public void execute(final AbstractInsnNode insn,
372372
value3 = pop();
373373
if (value3.getSize() == 1) {
374374
push(interpreter.copyOperation(insn, value1));
375-
push(value3);
376-
push(value2);
377-
push(value1);
375+
push(interpreter.copyOperation(insn, value3));
376+
push(interpreter.copyOperation(insn, value2));
377+
push(interpreter.copyOperation(insn, value1));
378378
break;
379379
}
380380
} else {
381381
push(interpreter.copyOperation(insn, value1));
382-
push(value2);
383-
push(value1);
382+
push(interpreter.copyOperation(insn, value2));
383+
push(interpreter.copyOperation(insn, value1));
384384
break;
385385
}
386386
}
@@ -390,14 +390,14 @@ public void execute(final AbstractInsnNode insn,
390390
if (value1.getSize() == 1) {
391391
value2 = pop();
392392
if (value2.getSize() == 1) {
393-
push(value2);
394-
push(value1);
393+
push(interpreter.copyOperation(insn, value2));
394+
push(interpreter.copyOperation(insn, value1));
395395
push(interpreter.copyOperation(insn, value2));
396396
push(interpreter.copyOperation(insn, value1));
397397
break;
398398
}
399399
} else {
400-
push(value1);
400+
push(interpreter.copyOperation(insn, value1));
401401
push(interpreter.copyOperation(insn, value1));
402402
break;
403403
}
@@ -411,18 +411,18 @@ public void execute(final AbstractInsnNode insn,
411411
if (value3.getSize() == 1) {
412412
push(interpreter.copyOperation(insn, value2));
413413
push(interpreter.copyOperation(insn, value1));
414-
push(value3);
415-
push(value2);
416-
push(value1);
414+
push(interpreter.copyOperation(insn, value3));
415+
push(interpreter.copyOperation(insn, value2));
416+
push(interpreter.copyOperation(insn, value1));
417417
break;
418418
}
419419
}
420420
} else {
421421
value2 = pop();
422422
if (value2.getSize() == 1) {
423423
push(interpreter.copyOperation(insn, value1));
424-
push(value2);
425-
push(value1);
424+
push(interpreter.copyOperation(insn, value2));
425+
push(interpreter.copyOperation(insn, value1));
426426
break;
427427
}
428428
}
@@ -438,18 +438,18 @@ public void execute(final AbstractInsnNode insn,
438438
if (value4.getSize() == 1) {
439439
push(interpreter.copyOperation(insn, value2));
440440
push(interpreter.copyOperation(insn, value1));
441-
push(value4);
442-
push(value3);
443-
push(value2);
444-
push(value1);
441+
push(interpreter.copyOperation(insn, value4));
442+
push(interpreter.copyOperation(insn, value3));
443+
push(interpreter.copyOperation(insn, value2));
444+
push(interpreter.copyOperation(insn, value1));
445445
break;
446446
}
447447
} else {
448448
push(interpreter.copyOperation(insn, value2));
449449
push(interpreter.copyOperation(insn, value1));
450-
push(value3);
451-
push(value2);
452-
push(value1);
450+
push(interpreter.copyOperation(insn, value3));
451+
push(interpreter.copyOperation(insn, value2));
452+
push(interpreter.copyOperation(insn, value1));
453453
break;
454454
}
455455
}
@@ -459,15 +459,15 @@ public void execute(final AbstractInsnNode insn,
459459
value3 = pop();
460460
if (value3.getSize() == 1) {
461461
push(interpreter.copyOperation(insn, value1));
462-
push(value3);
463-
push(value2);
464-
push(value1);
462+
push(interpreter.copyOperation(insn, value3));
463+
push(interpreter.copyOperation(insn, value2));
464+
push(interpreter.copyOperation(insn, value1));
465465
break;
466466
}
467467
} else {
468468
push(interpreter.copyOperation(insn, value1));
469-
push(value2);
470-
push(value1);
469+
push(interpreter.copyOperation(insn, value2));
470+
push(interpreter.copyOperation(insn, value1));
471471
break;
472472
}
473473
}

0 commit comments

Comments
 (0)