Skip to content

Commit 424d529

Browse files
committed
Fix insns not being cloned in WrapOperationSurgeon
1 parent a933e82 commit 424d529

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

definition/src/main/java/org/sinytra/adapter/patch/transformer/dynfix/WrapOperationSurgeon.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ public static Patch.Result tryUpgrade(MethodContext methodContext, MethodInsnNod
8383
return null;
8484
}
8585

86-
List<AbstractInsnNode> subList = receiverInsns.subList(1, receiverInsns.size()).stream().map(i -> i.clone(Map.of())).toList();
86+
List<AbstractInsnNode> subList = receiverInsns.subList(1, receiverInsns.size());
8787

8888
TypeAdapter adapter = typeAdapter.andThen((list, insn) -> {
89-
list.insert(insn, AdapterUtil.insnList(subList));
89+
list.insert(insn, AdapterUtil.insnList(AdapterUtil.cloneInsns(subList)));
9090
});
9191
Consumer<InsnList> castCheck = subList.getFirst() instanceof TypeInsnNode typeInsn && typeInsn.getOpcode() == Opcodes.CHECKCAST ?
9292
list -> {
@@ -95,7 +95,7 @@ public static Patch.Result tryUpgrade(MethodContext methodContext, MethodInsnNod
9595
originalWOCall.add(originalWOCall.getLast().getNext());
9696
originalWOCall.add(originalWOCall.getLast().getNext());
9797
originalWOCall.add(originalWOCall.getLast().getNext());
98-
List<AbstractInsnNode> cloned = originalWOCall.stream().map(i -> i.clone(Map.of())).toList();
98+
List<AbstractInsnNode> cloned = AdapterUtil.cloneInsns(originalWOCall);
9999

100100
boolean hasLabel = list.getFirst() instanceof LabelNode;
101101
LabelNode label = hasLabel ? (LabelNode) list.getFirst() : new LabelNode();

definition/src/main/java/org/sinytra/adapter/patch/util/AdapterUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,10 @@ public static InsnList insnList(List<AbstractInsnNode> insns) {
284284
return list;
285285
}
286286

287+
public static List<AbstractInsnNode> cloneInsns(Collection<AbstractInsnNode> insns) {
288+
return insns.stream().map(i -> i.clone(Map.of())).toList();
289+
}
290+
287291
public static Type getMixinCallableReturnType(MethodNode method) {
288292
return Type.getReturnType(method.desc) == Type.VOID_TYPE ? CI_TYPE : CIR_TYPE;
289293
}

0 commit comments

Comments
 (0)