From 8f6f5615ce4dcfa100e73950195ae872dc8d3032 Mon Sep 17 00:00:00 2001 From: zaaarf Date: Sat, 20 Apr 2024 10:33:50 +0200 Subject: feat: findFirstFreeIndex method --- src/main/java/ftbsc/lll/utils/StackUtils.java | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/ftbsc/lll/utils/StackUtils.java b/src/main/java/ftbsc/lll/utils/StackUtils.java index 225b1ee..da9abe8 100644 --- a/src/main/java/ftbsc/lll/utils/StackUtils.java +++ b/src/main/java/ftbsc/lll/utils/StackUtils.java @@ -71,16 +71,25 @@ public class StackUtils implements Opcodes { * @return the index value of the new local variable */ public static int addLocalVariable(MethodNode method, String name, String desc, LabelNode start, LabelNode end) { - final int targetIndex = - method.localVariables - .stream() - .max(Comparator.comparingInt(v -> v.index)) - .map(var -> var.desc.equals("J") || var.desc.equals("D") - ? var.index + 2 //skip two if long or double - major java moment - : var.index + 1) - .orElse(0); + final int targetIndex = findFirstFreeIndex(method); LocalVariableNode variable = new LocalVariableNode(name, desc, null, start, end, targetIndex); method.localVariables.add(variable); return targetIndex; } + + /** + * Finds the first free index in the given {@link MethodNode}. + * Used to create variables. + * @param method the method to look in + * @return the found index + */ + public static int findFirstFreeIndex(MethodNode method) { + return method.localVariables + .stream() + .max(Comparator.comparingInt(v -> v.index)) + .map(var -> var.desc.equals("J") || var.desc.equals("D") + ? var.index + 2 //skip two if long or double - major java moment + : var.index + 1) + .orElse(0); + } } -- cgit v1.2.3-56-ga3b1