@@ -218,7 +218,7 @@ public void push(final V value) {
218218 * @throws AnalyzerException if the instruction cannot be executed on this execution frame (e.g. a
219219 * POP on an empty operand stack).
220220 */
221- public void execute (final AbstractInsnNode insn , final Interpreter <V > interpreter )
221+ public void execute (final AbstractInsnNode insn , final Interpreter <V > interpreter )
222222 throws AnalyzerException {
223223 V value1 ;
224224 V value2 ;
@@ -265,12 +265,12 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
265265 var = ((VarInsnNode ) insn ).var ;
266266 setLocal (var , value1 );
267267 if (value1 .getSize () == 2 ) {
268- setLocal (var + 1 , interpreter .newValue ( null ));
268+ setLocal (var + 1 , interpreter .newEmptyValueAfterSize2Local ( var + 1 ));
269269 }
270270 if (var > 0 ) {
271271 Value local = getLocal (var - 1 );
272272 if (local != null && local .getSize () == 2 ) {
273- setLocal (var - 1 , interpreter .newValue ( null ));
273+ setLocal (var - 1 , interpreter .newEmptyValueForPreviousSize2Local ( var - 1 ));
274274 }
275275 }
276276 break ;
@@ -302,7 +302,7 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
302302 if (value1 .getSize () != 1 ) {
303303 throw new AnalyzerException (insn , "Illegal use of DUP" );
304304 }
305- push (value1 );
305+ push (interpreter . copyOperation ( insn , value1 ) );
306306 push (interpreter .copyOperation (insn , value1 ));
307307 break ;
308308 case Opcodes .DUP_X1 :
@@ -312,8 +312,8 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
312312 throw new AnalyzerException (insn , "Illegal use of DUP_X1" );
313313 }
314314 push (interpreter .copyOperation (insn , value1 ));
315- push (value2 );
316- push (value1 );
315+ push (interpreter . copyOperation ( insn , value2 ) );
316+ push (interpreter . copyOperation ( insn , value1 ) );
317317 break ;
318318 case Opcodes .DUP_X2 :
319319 value1 = pop ();
@@ -323,15 +323,15 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
323323 value3 = pop ();
324324 if (value3 .getSize () == 1 ) {
325325 push (interpreter .copyOperation (insn , value1 ));
326- push (value3 );
327- push (value2 );
328- push (value1 );
326+ push (interpreter . copyOperation ( insn , value3 ) );
327+ push (interpreter . copyOperation ( insn , value2 ) );
328+ push (interpreter . copyOperation ( insn , value1 ) );
329329 break ;
330330 }
331331 } else {
332332 push (interpreter .copyOperation (insn , value1 ));
333- push (value2 );
334- push (value1 );
333+ push (interpreter . copyOperation ( insn , value2 ) );
334+ push (interpreter . copyOperation ( insn , value1 ) );
335335 break ;
336336 }
337337 }
@@ -341,14 +341,14 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
341341 if (value1 .getSize () == 1 ) {
342342 value2 = pop ();
343343 if (value2 .getSize () == 1 ) {
344- push (value2 );
345- push (value1 );
344+ push (interpreter . copyOperation ( insn , value2 ) );
345+ push (interpreter . copyOperation ( insn , value1 ) );
346346 push (interpreter .copyOperation (insn , value2 ));
347347 push (interpreter .copyOperation (insn , value1 ));
348348 break ;
349349 }
350350 } else {
351- push (value1 );
351+ push (interpreter . copyOperation ( insn , value1 ) );
352352 push (interpreter .copyOperation (insn , value1 ));
353353 break ;
354354 }
@@ -362,18 +362,18 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
362362 if (value3 .getSize () == 1 ) {
363363 push (interpreter .copyOperation (insn , value2 ));
364364 push (interpreter .copyOperation (insn , value1 ));
365- push (value3 );
366- push (value2 );
367- push (value1 );
365+ push (interpreter . copyOperation ( insn , value3 ) );
366+ push (interpreter . copyOperation ( insn , value2 ) );
367+ push (interpreter . copyOperation ( insn , value1 ) );
368368 break ;
369369 }
370370 }
371371 } else {
372372 value2 = pop ();
373373 if (value2 .getSize () == 1 ) {
374374 push (interpreter .copyOperation (insn , value1 ));
375- push (value2 );
376- push (value1 );
375+ push (interpreter . copyOperation ( insn , value2 ) );
376+ push (interpreter . copyOperation ( insn , value1 ) );
377377 break ;
378378 }
379379 }
@@ -389,18 +389,18 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
389389 if (value4 .getSize () == 1 ) {
390390 push (interpreter .copyOperation (insn , value2 ));
391391 push (interpreter .copyOperation (insn , value1 ));
392- push (value4 );
393- push (value3 );
394- push (value2 );
395- push (value1 );
392+ push (interpreter . copyOperation ( insn , value4 ) );
393+ push (interpreter . copyOperation ( insn , value3 ) );
394+ push (interpreter . copyOperation ( insn , value2 ) );
395+ push (interpreter . copyOperation ( insn , value1 ) );
396396 break ;
397397 }
398398 } else {
399399 push (interpreter .copyOperation (insn , value2 ));
400400 push (interpreter .copyOperation (insn , value1 ));
401- push (value3 );
402- push (value2 );
403- push (value1 );
401+ push (interpreter . copyOperation ( insn , value3 ) );
402+ push (interpreter . copyOperation ( insn , value2 ) );
403+ push (interpreter . copyOperation ( insn , value1 ) );
404404 break ;
405405 }
406406 }
@@ -410,15 +410,15 @@ public void execute(final AbstractInsnNode insn, final Interpreter<V> interprete
410410 value3 = pop ();
411411 if (value3 .getSize () == 1 ) {
412412 push (interpreter .copyOperation (insn , value1 ));
413- push (value3 );
414- push (value2 );
415- push (value1 );
413+ push (interpreter . copyOperation ( insn , value3 ) );
414+ push (interpreter . copyOperation ( insn , value2 ) );
415+ push (interpreter . copyOperation ( insn , value1 ) );
416416 break ;
417417 }
418418 } else {
419419 push (interpreter .copyOperation (insn , value1 ));
420- push (value2 );
421- push (value1 );
420+ push (interpreter . copyOperation ( insn , value2 ) );
421+ push (interpreter . copyOperation ( insn , value1 ) );
422422 break ;
423423 }
424424 }
0 commit comments