summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
index 83e5e04..2a638db 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
@@ -33,6 +33,7 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
33 33
34 private Multimap<String, Identifier> unmatchedIdentifier = HashMultimap.create(); 34 private Multimap<String, Identifier> unmatchedIdentifier = HashMultimap.create();
35 private Map<String, Entry> identifierEntryCache = new HashMap<>(); 35 private Map<String, Entry> identifierEntryCache = new HashMap<>();
36 private int argumentPosition = 0;
36 37
37 public SourceIndexMethodVisitor(ReferencedEntryPool entryPool, ClassDefEntry ownerEntry, MethodDefEntry methodEntry) { 38 public SourceIndexMethodVisitor(ReferencedEntryPool entryPool, ClassDefEntry ownerEntry, MethodDefEntry methodEntry) {
38 super(entryPool); 39 super(entryPool);
@@ -107,10 +108,9 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
107 108
108 @Override 109 @Override
109 public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) { 110 public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) {
110 ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION); 111 // DO NOT USE def.getSlot()! Doubleword slots increase by 2, not by 1
111 112
112 int variableOffset = this.methodEntry.getVariableOffset(ownerEntry); 113 int parameterIndex = (argumentPosition++);
113 int parameterIndex = def.getSlot() - variableOffset;
114 114
115 if (parameterIndex >= 0) { 115 if (parameterIndex >= 0) {
116 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName()); 116 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName());
@@ -184,8 +184,7 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
184 if (variable != null) { 184 if (variable != null) {
185 VariableDefinition originalVariable = variable.getOriginalVariable(); 185 VariableDefinition originalVariable = variable.getOriginalVariable();
186 if (originalVariable != null) { 186 if (originalVariable != null) {
187 int variableOffset = methodEntry.getVariableOffset(ownerEntry); 187 int variableIndex = (argumentPosition++);
188 int variableIndex = originalVariable.getSlot() - variableOffset;
189 if (variableIndex >= 0) { 188 if (variableIndex >= 0) {
190 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName()); 189 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName());
191 identifierEntryCache.put(identifier.getName(), localVariableEntry); 190 identifierEntryCache.put(identifier.getName(), localVariableEntry);