From eac512ae67c994d4332c0421f369e026681ee0d5 Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Sun, 14 Feb 2010 21:57:27 +0000 Subject: [PATCH] Add support for the "Uninit" register type git-svn-id: https://smali.googlecode.com/svn/trunk@626 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../dexlib/Code/Analysis/MethodAnalyzer.java | 8 ++ .../jf/dexlib/Code/Analysis/RegisterType.java | 83 ++++++++++--------- 2 files changed, 51 insertions(+), 40 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java index c1b9c49c..46fd239b 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java @@ -77,9 +77,12 @@ public class MethodAnalyzer { int totalRegisters = codeItem.getRegisterCount(); int parameterRegisters = methodIdItem.getPrototype().getParameterRegisterCount(); + int nonParameterRegisters = totalRegisters - parameterRegisters; + //if this isn't a static method, determine which register is the "this" register and set the type to the //current class if ((encodedMethod.accessFlags & AccessFlags.STATIC.getValue()) == 0) { + nonParameterRegisters--; int thisRegister = totalRegisters - parameterRegisters - 1; //if this is a constructor, then set the "this" register to an uninitialized reference of the current class @@ -113,6 +116,11 @@ public class MethodAnalyzer { } } + RegisterType uninit = RegisterType.getRegisterType(RegisterType.Category.Uninit, null); + for (int i=0; i