Ensure no SET_POSITION_FRAME after default events
Change-Id: I9bd467bde0a7229a3c4b821d00cb533e08afc2ee
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
index 16bf079..cd157e3 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -89,6 +89,10 @@
public abstract void accept(DexDebugEventVisitor visitor);
+ public boolean isDefaultEvent() {
+ return false;
+ }
+
public boolean isPositionFrame() {
return false;
}
@@ -639,6 +643,11 @@
}
@Override
+ public boolean isDefaultEvent() {
+ return true;
+ }
+
+ @Override
boolean isWritableEvent() {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index e4c29aa..6f25a69 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -121,9 +121,20 @@
params[i] = (local == null || local.signature != null) ? null : local.name;
}
}
+ assert verifySetPositionFramesFollowedByDefaultEvent(events);
return new EventBasedDebugInfo(startLine, params, events.toArray(DexDebugEvent.EMPTY_ARRAY));
}
+ private static boolean verifySetPositionFramesFollowedByDefaultEvent(List<DexDebugEvent> events) {
+ for (int i = events.size() - 1; i >= 0; i--) {
+ if (events.get(i).isDefaultEvent()) {
+ return true;
+ }
+ assert !events.get(i).isPositionFrame();
+ }
+ return true;
+ }
+
private void updateBlockEntry(Instruction instruction) {
assert pendingLocals == null;
assert !pendingLocalChanges;