mirror of
https://github.com/revanced/smali.git
synced 2025-05-09 10:54:29 +02:00
Always use .equals for comparing RegisterType instances
This commit is contained in:
parent
d87770e69b
commit
3f05570b6b
@ -75,8 +75,8 @@ public class PostInstructionRegisterInfoMethodItem extends MethodItem {
|
|||||||
|
|
||||||
private void addDestRegs(BitSet printPostRegister, int registerCount) {
|
private void addDestRegs(BitSet printPostRegister, int registerCount) {
|
||||||
for (int registerNum=0; registerNum<registerCount; registerNum++) {
|
for (int registerNum=0; registerNum<registerCount; registerNum++) {
|
||||||
if (analyzedInstruction.getPreInstructionRegisterType(registerNum) !=
|
if (!analyzedInstruction.getPreInstructionRegisterType(registerNum).equals(
|
||||||
analyzedInstruction.getPostInstructionRegisterType(registerNum)) {
|
analyzedInstruction.getPostInstructionRegisterType(registerNum))) {
|
||||||
printPostRegister.set(registerNum);
|
printPostRegister.set(registerNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ public class PreInstructionRegisterInfoMethodItem extends MethodItem {
|
|||||||
RegisterType mergedRegisterType = analyzedInstruction.getPreInstructionRegisterType(registerNum);
|
RegisterType mergedRegisterType = analyzedInstruction.getPreInstructionRegisterType(registerNum);
|
||||||
|
|
||||||
for (AnalyzedInstruction predecessor: analyzedInstruction.getPredecessors()) {
|
for (AnalyzedInstruction predecessor: analyzedInstruction.getPredecessors()) {
|
||||||
if (predecessor.getPostInstructionRegisterType(registerNum) != mergedRegisterType) {
|
if (!predecessor.getPostInstructionRegisterType(registerNum).equals(mergedRegisterType)) {
|
||||||
registers.set(registerNum);
|
registers.set(registerNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -178,7 +178,7 @@ public class PreInstructionRegisterInfoMethodItem extends MethodItem {
|
|||||||
for (AnalyzedInstruction predecessor: analyzedInstruction.getPredecessors()) {
|
for (AnalyzedInstruction predecessor: analyzedInstruction.getPredecessors()) {
|
||||||
RegisterType predecessorRegisterType = predecessor.getPostInstructionRegisterType(registerNum);
|
RegisterType predecessorRegisterType = predecessor.getPostInstructionRegisterType(registerNum);
|
||||||
if (predecessorRegisterType.category != RegisterType.UNKNOWN &&
|
if (predecessorRegisterType.category != RegisterType.UNKNOWN &&
|
||||||
predecessorRegisterType != mergedRegisterType) {
|
!predecessorRegisterType.equals(mergedRegisterType)) {
|
||||||
|
|
||||||
addRegister = true;
|
addRegister = true;
|
||||||
break;
|
break;
|
||||||
|
@ -56,6 +56,11 @@ public class AnalysisTest {
|
|||||||
runTest("ConstructorTest");
|
runTest("ConstructorTest");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void RegisterEqualityOnMergeTest() throws IOException, URISyntaxException {
|
||||||
|
runTest("RegisterEqualityOnMergeTest");
|
||||||
|
}
|
||||||
|
|
||||||
public void runTest(String test) throws IOException, URISyntaxException {
|
public void runTest(String test) throws IOException, URISyntaxException {
|
||||||
String dexFilePath = String.format("%s%sclasses.dex", test, File.separatorChar);
|
String dexFilePath = String.format("%s%sclasses.dex", test, File.separatorChar);
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
.class public LConstructorTest;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.registers 4
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
@ -1,17 +0,0 @@
|
|||||||
.class public LConstructorTest2;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.registers 4
|
|
||||||
|
|
||||||
if-eqz p0, :cond_3
|
|
||||||
|
|
||||||
nop
|
|
||||||
|
|
||||||
:cond_3
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
@ -0,0 +1,37 @@
|
|||||||
|
.class public LRegisterEqualityOnMerge;
|
||||||
|
.super Ljava/lang/Object;
|
||||||
|
|
||||||
|
|
||||||
|
# direct methods
|
||||||
|
.method public constructor <init>()V
|
||||||
|
.registers 4
|
||||||
|
|
||||||
|
#v0=(Uninit);v1=(Uninit);v2=(Uninit);p0=(UninitThis,LRegisterEqualityOnMerge;);
|
||||||
|
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||||
|
#v0=(Uninit);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
#v0=(Uninit);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
invoke-virtual {p0}, Ljava/lang/Object;->toString()Ljava/lang/String;
|
||||||
|
#v0=(Uninit);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
#v0=(Uninit);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
move-result-object v0
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
if-eqz v0, :cond_d
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
invoke-virtual {p0}, Ljava/lang/Object;->toString()Ljava/lang/String;
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
move-result-object v0
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
|
||||||
|
:cond_d
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
return-void
|
||||||
|
#v0=(Reference,Ljava/lang/String;);v1=(Uninit);v2=(Uninit);p0=(Reference,LRegisterEqualityOnMerge;);
|
||||||
|
.end method
|
Binary file not shown.
@ -176,7 +176,7 @@ public class AnalyzedInstruction implements Comparable<AnalyzedInstruction> {
|
|||||||
RegisterType oldRegisterType = preRegisterMap[registerNumber];
|
RegisterType oldRegisterType = preRegisterMap[registerNumber];
|
||||||
RegisterType mergedRegisterType = oldRegisterType.merge(registerType);
|
RegisterType mergedRegisterType = oldRegisterType.merge(registerType);
|
||||||
|
|
||||||
if (mergedRegisterType == oldRegisterType) {
|
if (mergedRegisterType.equals(oldRegisterType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ public class AnalyzedInstruction implements Comparable<AnalyzedInstruction> {
|
|||||||
assert registerType != null;
|
assert registerType != null;
|
||||||
|
|
||||||
RegisterType oldRegisterType = postRegisterMap[registerNumber];
|
RegisterType oldRegisterType = postRegisterMap[registerNumber];
|
||||||
if (oldRegisterType == registerType) {
|
if (oldRegisterType.equals(registerType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +277,7 @@ public class AnalyzedInstruction implements Comparable<AnalyzedInstruction> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//check if the uninit ref has been copied to another register
|
//check if the uninit ref has been copied to another register
|
||||||
if (getPreInstructionRegisterType(registerNumber) == preInstructionDestRegisterType) {
|
if (getPreInstructionRegisterType(registerNumber).equals(preInstructionDestRegisterType)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1253,7 +1253,7 @@ public class MethodAnalyzer {
|
|||||||
if (preInstructionRegisterType.category == RegisterType.UNINIT_REF ||
|
if (preInstructionRegisterType.category == RegisterType.UNINIT_REF ||
|
||||||
preInstructionRegisterType.category == RegisterType.UNINIT_THIS) {
|
preInstructionRegisterType.category == RegisterType.UNINIT_THIS) {
|
||||||
RegisterType registerType;
|
RegisterType registerType;
|
||||||
if (preInstructionRegisterType == objectRegisterType) {
|
if (preInstructionRegisterType.equals(objectRegisterType)) {
|
||||||
registerType = analyzedInstruction.postRegisterMap[objectRegister];
|
registerType = analyzedInstruction.postRegisterMap[objectRegister];
|
||||||
} else {
|
} else {
|
||||||
registerType = preInstructionRegisterType;
|
registerType = preInstructionRegisterType;
|
||||||
|
@ -264,7 +264,7 @@ public class RegisterType {
|
|||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public RegisterType merge(@Nonnull RegisterType other) {
|
public RegisterType merge(@Nonnull RegisterType other) {
|
||||||
if (other == this) {
|
if (other.equals(this)) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user