LlamaLad7 / MixinExtras

Companion library to SpongePowered Mixin with many custom injectors for a more expressive experience.
MIT License
304 stars 17 forks source link

Issue with CHECKCAST #30

Closed KorewaLidesu closed 1 year ago

KorewaLidesu commented 1 year ago

Anyway to remove CHECKCAST after GETFIELD opcode?

KorewaLidesu commented 1 year ago

Imagine you want to change instanceof result, but the original value you want to check is casted to wrong class xd P/s: Can this be decomplier issue? 🤔

KorewaLidesu commented 1 year ago

So it was my fault to not check bytecode, the checkcast was after GETFIELD which causing issue

   FRAME APPEND [T logisticspipes/pipes/basic/CoreUnroutedPipe]
    ALOAD 3
    GETFIELD logisticspipes/pipes/basic/LogisticsTileGenericPipe.pipe : Llogisticspipes/pipes/basic/CoreUnroutedPipe;
    CHECKCAST logisticspipes/pipes/PipeLogisticsChassis
    ALOAD 0
    GETFIELD logisticspipes/network/abstractpackets/ModuleCoordinatesPacket.positionInt : I
    ISTORE 6
    ASTORE 5
    ALOAD 0
    ALOAD 5
    ILOAD 6
    INVOKEDYNAMIC call()Lcom/llamalad7/mixinextras/injector/wrapoperation/Operation; [
      // handle kind 0x6 : INVOKESTATIC
      java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
      // arguments:
      ([Ljava/lang/Object;)Ljava/lang/Object;, 
      // handle kind 0x6 : INVOKESTATIC
      logisticspipes/network/abstractpackets/ModuleCoordinatesPacket.mixinextras$bridge$2$getSubModule([Ljava/lang/Object;)Llogisticspipes/modules/LogisticsModule;, 
      ([Ljava/lang/Object;)Llogisticspipes/modules/LogisticsModule;
    ]
    ALOAD 1
    ALOAD 2
    NEW com/llamalad7/mixinextras/sugar/impl/ref/LocalRefImpl
    DUP
    ALOAD 3
    INVOKESPECIAL com/llamalad7/mixinextras/sugar/impl/ref/LocalRefImpl.<init> (Ljava/lang/Object;)V
    ASTORE 7
    ALOAD 7
    INVOKEVIRTUAL logisticspipes/network/abstractpackets/ModuleCoordinatesPacket.wrapOperation$zzh000$testbridge_0_3_6_1_dev$redirectCmModule$mixinextras$bridge0 (Llogisticspipes/pipes/PipeLogisticsChassis;ILcom/llamalad7/mixinextras/injector/wrapoperation/Operation;Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/Class;Lcom/llamalad7/mixinextras/sugar/ref/LocalRef;)Llogisticspipes/modules/LogisticsModule;
    ALOAD 7
    INVOKEINTERFACE com/llamalad7/mixinextras/sugar/ref/LocalRef.get ()Ljava/lang/Object; (itf)
    CHECKCAST logisticspipes/pipes/basic/LogisticsTileGenericPipe
    ASTORE 3
    ASTORE 4