diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Debug/SetSourceFileMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Debug/SetSourceFileMethodItem.java index f28c42b3..faccfdf3 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Debug/SetSourceFileMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Debug/SetSourceFileMethodItem.java @@ -49,7 +49,6 @@ public class SetSourceFileMethodItem extends DebugMethodItem { @Override public boolean writeTo(IndentingWriter writer) throws IOException { - //TODO: make sure smali can handle an empty .source directive writer.write(".source"); if (sourceFile != null) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/DebugInfoPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/DebugInfoPool.java index aec3b921..6fd44979 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/DebugInfoPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/DebugInfoPool.java @@ -269,7 +269,7 @@ public class DebugInfoPool { public void emitSetSourceFile(@Nonnull SetSourceFile setSourceFile) throws IOException { emitAdvancePC(setSourceFile.getCodeAddress()); writer.write(9); - writer.write(dexFile.stringPool.getIndexNullable(setSourceFile.getSourceFile())); + writer.writeUleb128(dexFile.stringPool.getIndexNullable(setSourceFile.getSourceFile()) + 1); } private static final int LINE_BASE = -4; diff --git a/smali/src/main/antlr3/smaliParser.g b/smali/src/main/antlr3/smaliParser.g index bcb00bbd..1007d797 100644 --- a/smali/src/main/antlr3/smaliParser.g +++ b/smali/src/main/antlr3/smaliParser.g @@ -807,8 +807,8 @@ epilogue_directive -> ^(I_EPILOGUE[$start, "I_EPILOGUE"] I_ADDRESS[$start, Integer.toString($method::currentAddress)]); source_directive - : SOURCE_DIRECTIVE STRING_LITERAL - -> ^(I_SOURCE[$start, "I_SOURCE"] STRING_LITERAL I_ADDRESS[$start, Integer.toString($method::currentAddress)]); + : SOURCE_DIRECTIVE STRING_LITERAL? + -> ^(I_SOURCE[$start, "I_SOURCE"] STRING_LITERAL? I_ADDRESS[$start, Integer.toString($method::currentAddress)]); instruction_format12x : INSTRUCTION_FORMAT12x diff --git a/smali/src/main/antlr3/smaliTreeWalker.g b/smali/src/main/antlr3/smaliTreeWalker.g index 19fa05f7..330c1291 100644 --- a/smali/src/main/antlr3/smaliTreeWalker.g +++ b/smali/src/main/antlr3/smaliTreeWalker.g @@ -702,7 +702,7 @@ epilogue returns[DebugItem debugItem] }; source returns[DebugItem debugItem] - : ^(I_SOURCE string_literal address) + : ^(I_SOURCE string_literal? address) { $debugItem = new ImmutableSetSourceFile($address.address, $string_literal.value); };