summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-01-30 15:03:12 +0100
committermikaelpeltier <mikaelpeltier@google.com>2015-01-30 15:03:12 +0100
commitb8df617a69d15ae6c46e87980ae884d5aef20207 (patch)
tree4c5340270868b5ee378fb77ad2b0ccdc90c0a456
parent5496a61b74bf35fa84c9db99720ff7efcb6c7434 (diff)
downloadtoolchain_jill-b8df617a69d15ae6c46e87980ae884d5aef20207.zip
toolchain_jill-b8df617a69d15ae6c46e87980ae884d5aef20207.tar.gz
toolchain_jill-b8df617a69d15ae6c46e87980ae884d5aef20207.tar.bz2
Generate parameter copy always in the same order
- This is required to have the same generated dex. Change-Id: I5063267c49e00a1db4d7fe79f4b570b8610f0bbd
-rw-r--r--jill/src/com/android/jill/frontend/java/MethodBodyWriter.java21
1 files changed, 15 insertions, 6 deletions
diff --git a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
index 46f5e92..9c09c37 100644
--- a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
+++ b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
@@ -76,7 +76,10 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
private final Map<String, Variable> nameToVar = new HashMap<String, Variable>();
@Nonnull
- private final Map<Variable, Variable> parameterToVar = new HashMap<Variable, Variable>();
+ private final List<Variable> parameter = new ArrayList<Variable>();
+
+ @Nonnull
+ private final List<Variable> parameter2Var = new ArrayList<Variable>();
public static final int CONSTRUCTOR = 0x10000;
@@ -401,7 +404,11 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
writer.writeOpen();
writer.writeOpenNodeList();
- for (Variable p : parameterToVar.keySet()) {
+ Iterator<Variable> paramIt = parameter.iterator();
+ Iterator<Variable> param2VarIt = parameter2Var.iterator();
+
+ while (paramIt.hasNext()) {
+ Variable p = paramIt.next();
sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.EXPRESSION_STATEMENT);
@@ -409,7 +416,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeLocalRef(parameterToVar.get(p));
+ writeLocalRef(param2VarIt.next());
if (p.getType() == Type.BOOLEAN_TYPE) {
writeCastOperation(Token.REINTERPRETCAST_OPERATION, p, Type.INT_TYPE.getDescriptor());
} else {
@@ -2169,7 +2176,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
@Nonnull
private Iterator<Variable> collectLocals() {
- Set<Variable> locals = new HashSet<Variable>();
+ List<Variable> locals = new ArrayList<Variable>();
Frame<BasicValue>[] frames = analyzer.getFrames();
for (int frameIdx = 0; frameIdx < frames.length; frameIdx++) {
currentPc = frameIdx;
@@ -2231,7 +2238,8 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
Variable local = getVariable(lid, lid, untypedParameter, null);
- parameterToVar.put(p, local);
+ parameter.add(p);
+ parameter2Var.add(local);
} else {
assert parameterType.getDescriptor().equals(lvn.desc);
Variable p = getVariable(getNamedLocalId(lvn), lvn.name, parameterType, lvn.signature);
@@ -2252,7 +2260,8 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
Variable local = getVariable(lid, lid, untypedParameter, null);
- parameterToVar.put(p, local);
+ parameter.add(p);
+ parameter2Var.add(local);
} else {
assert paramType.getDescriptor().equals(lvn.desc);
Variable p = getVariable(getNamedLocalId(lvn), lvn.name, paramType, lvn.signature);