summaryrefslogtreecommitdiff
path: root/src/proguard/evaluation/TracedVariables.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/proguard/evaluation/TracedVariables.java')
-rw-r--r--src/proguard/evaluation/TracedVariables.java32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/proguard/evaluation/TracedVariables.java b/src/proguard/evaluation/TracedVariables.java
index 5f58f97..1ae6ba6 100644
--- a/src/proguard/evaluation/TracedVariables.java
+++ b/src/proguard/evaluation/TracedVariables.java
@@ -2,7 +2,7 @@
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
- * Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
+ * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
@@ -30,6 +30,9 @@ import proguard.evaluation.value.Value;
* stores. It then generalizes a given collected Value with the producer Value
* of each Value it loads. The producer Value and the initial collected Value
* can be set; the generalized collected Value can be retrieved.
+ * <p>
+ * In addition, an initialization index can be reset and retrieved, pointing
+ * to the most recent variable that has been initialized by a store operation.
*
* @author Eric Lafortune
*/
@@ -40,6 +43,7 @@ public class TracedVariables extends Variables
private Value producerValue;
private Variables producerVariables;
+ private int initializationIndex;
/**
@@ -74,6 +78,24 @@ public class TracedVariables extends Variables
/**
+ * Resets the initialization index.
+ */
+ public void resetInitialization()
+ {
+ initializationIndex = NONE;
+ }
+
+
+ /**
+ * Returns the most recent initialization index since it has been reset.
+ */
+ public int getInitializationIndex()
+ {
+ return initializationIndex;
+ }
+
+
+ /**
* Gets the producer Value for the specified variable, without disturbing it.
* @param index the variable index.
* @return the producer value of the given variable.
@@ -142,6 +164,14 @@ public class TracedVariables extends Variables
public void store(int index, Value value)
{
+ // Is this store operation an initialization of the variable?
+ Value previousValue = super.load(index);
+ if (previousValue == null ||
+ previousValue.computationalType() != value.computationalType())
+ {
+ initializationIndex = index;
+ }
+
// Store the value itself in the variable.
super.store(index, value);