@futpib/parser 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/.claude/settings.local.json +24 -0
  2. package/.github/workflows/main.yml +1 -0
  3. package/build/androidPackageParser.js +30 -32
  4. package/build/arbitraryDalvikBytecode.d.ts +3 -3
  5. package/build/arbitraryDalvikBytecode.js +33 -27
  6. package/build/arbitraryDalvikExecutable.js +55 -17
  7. package/build/arbitraryJava.d.ts +31 -0
  8. package/build/arbitraryJava.js +532 -0
  9. package/build/arbitraryJavaScript.d.ts +3 -0
  10. package/build/arbitraryJavaScript.js +263 -0
  11. package/build/arbitraryJavascript.d.ts +3 -0
  12. package/build/arbitraryJavascript.js +263 -0
  13. package/build/arbitraryZig.d.ts +3 -0
  14. package/build/arbitraryZig.js +240 -0
  15. package/build/arbitraryZipStream.d.ts +1 -1
  16. package/build/arrayParser.js +72 -13
  17. package/build/backsmali.d.ts +4 -3
  18. package/build/backsmali.js +26 -6
  19. package/build/bash.d.ts +6 -1
  20. package/build/bashParser.js +131 -90
  21. package/build/bashParser.test.js +162 -0
  22. package/build/bashParserEdgeCases.test.d.ts +1 -0
  23. package/build/bashParserEdgeCases.test.js +117 -0
  24. package/build/dalvikBytecodeParser/addressConversion.d.ts +110 -0
  25. package/build/dalvikBytecodeParser/addressConversion.js +334 -0
  26. package/build/dalvikBytecodeParser/formatParsers.d.ts +7 -6
  27. package/build/dalvikBytecodeParser/formatParsers.js +13 -14
  28. package/build/dalvikBytecodeParser.d.ts +60 -31
  29. package/build/dalvikBytecodeParser.js +92 -35
  30. package/build/dalvikBytecodeParser.test-d.d.ts +1 -0
  31. package/build/dalvikBytecodeParser.test-d.js +268 -0
  32. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +9 -8
  33. package/build/dalvikBytecodeUnparser/formatUnparsers.js +13 -12
  34. package/build/dalvikBytecodeUnparser.d.ts +2 -2
  35. package/build/dalvikBytecodeUnparser.js +23 -23
  36. package/build/dalvikBytecodeUnparser.test.js +7 -7
  37. package/build/dalvikExecutable.d.ts +3 -3
  38. package/build/dalvikExecutable.test-d.d.ts +1 -0
  39. package/build/dalvikExecutable.test-d.js +59 -0
  40. package/build/dalvikExecutableParser/typedNumbers.d.ts +18 -0
  41. package/build/dalvikExecutableParser/typedNumbers.js +3 -0
  42. package/build/dalvikExecutableParser.d.ts +2 -1
  43. package/build/dalvikExecutableParser.js +96 -77
  44. package/build/dalvikExecutableParser.test.js +24 -3
  45. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +3 -0
  46. package/build/dalvikExecutableUnparser/poolScanners.d.ts +2 -2
  47. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +3 -3
  48. package/build/dalvikExecutableUnparser/sectionUnparsers.js +26 -11
  49. package/build/dalvikExecutableUnparser.d.ts +2 -2
  50. package/build/dalvikExecutableUnparser.test.js +2 -1
  51. package/build/disjunctionParser.d.ts +5 -3
  52. package/build/disjunctionParser.js +79 -17
  53. package/build/disjunctionParser.test-d.d.ts +1 -0
  54. package/build/disjunctionParser.test-d.js +72 -0
  55. package/build/elementSwitchParser.d.ts +4 -0
  56. package/build/{exactElementSwitchParser.js → elementSwitchParser.js} +3 -4
  57. package/build/elementSwitchParser.test-d.d.ts +1 -0
  58. package/build/elementSwitchParser.test-d.js +44 -0
  59. package/build/exactSequenceParser.d.ts +4 -2
  60. package/build/exactSequenceParser.test-d.d.ts +1 -0
  61. package/build/exactSequenceParser.test-d.js +36 -0
  62. package/build/fetchCid.js +2 -66
  63. package/build/index.d.ts +3 -2
  64. package/build/index.js +2 -1
  65. package/build/index.test.js +16 -1
  66. package/build/inputReader.d.ts +10 -0
  67. package/build/inputReader.js +36 -0
  68. package/build/java.d.ts +502 -0
  69. package/build/java.js +2 -0
  70. package/build/javaKeyStoreParser.js +14 -17
  71. package/build/javaParser.d.ts +51 -0
  72. package/build/javaParser.js +1538 -0
  73. package/build/javaParser.test.d.ts +1 -0
  74. package/build/javaParser.test.js +1287 -0
  75. package/build/javaScript.d.ts +35 -0
  76. package/build/javaScript.js +1 -0
  77. package/build/javaScriptParser.d.ts +9 -0
  78. package/build/javaScriptParser.js +34 -0
  79. package/build/javaScriptUnparser.d.ts +3 -0
  80. package/build/javaScriptUnparser.js +4 -0
  81. package/build/javaScriptUnparser.test.d.ts +1 -0
  82. package/build/javaScriptUnparser.test.js +24 -0
  83. package/build/javaUnparser.d.ts +2 -0
  84. package/build/javaUnparser.js +519 -0
  85. package/build/javaUnparser.test.d.ts +1 -0
  86. package/build/javaUnparser.test.js +24 -0
  87. package/build/javascript.d.ts +35 -0
  88. package/build/javascript.js +1 -0
  89. package/build/javascriptParser.d.ts +9 -0
  90. package/build/javascriptParser.js +34 -0
  91. package/build/javascriptUnparser.d.ts +3 -0
  92. package/build/javascriptUnparser.js +4 -0
  93. package/build/javascriptUnparser.test.d.ts +1 -0
  94. package/build/javascriptUnparser.test.js +24 -0
  95. package/build/jsonParser.js +2 -12
  96. package/build/lazyMessageError.d.ts +3 -0
  97. package/build/lookaheadParser.js +60 -3
  98. package/build/negativeLookaheadParser.js +70 -11
  99. package/build/nonEmptyArrayParser.js +72 -13
  100. package/build/objectParser.d.ts +12 -0
  101. package/build/objectParser.js +31 -0
  102. package/build/objectParser.test-d.d.ts +1 -0
  103. package/build/objectParser.test-d.js +112 -0
  104. package/build/objectParser.test.d.ts +1 -0
  105. package/build/objectParser.test.js +55 -0
  106. package/build/optionalParser.js +69 -10
  107. package/build/parser.d.ts +4 -0
  108. package/build/parser.js +3 -1
  109. package/build/parser.test.js +114 -1
  110. package/build/parserConsumedSequenceParser.js +66 -7
  111. package/build/parserContext.d.ts +6 -0
  112. package/build/parserContext.js +20 -11
  113. package/build/parserError.d.ts +119 -27
  114. package/build/parserError.js +16 -8
  115. package/build/regexpParser.js +33 -3
  116. package/build/regexpParser.test.js +31 -0
  117. package/build/regularExpressionParser.js +35 -15
  118. package/build/separatedArrayParser.js +73 -14
  119. package/build/separatedNonEmptyArrayParser.js +73 -14
  120. package/build/sliceBoundedParser.js +62 -5
  121. package/build/smaliParser.d.ts +7 -7
  122. package/build/smaliParser.js +185 -268
  123. package/build/smaliParser.test.js +58 -0
  124. package/build/stringEscapes.d.ts +5 -0
  125. package/build/stringEscapes.js +244 -0
  126. package/build/symbolicExpression.d.ts +29 -0
  127. package/build/symbolicExpression.js +1 -0
  128. package/build/symbolicExpressionParser.d.ts +4 -0
  129. package/build/symbolicExpressionParser.js +123 -0
  130. package/build/symbolicExpressionParser.test.d.ts +1 -0
  131. package/build/symbolicExpressionParser.test.js +289 -0
  132. package/build/terminatedArrayParser.js +113 -38
  133. package/build/terminatedArrayParser.test.js +4 -2
  134. package/build/tupleParser.d.ts +7 -15
  135. package/build/tupleParser.js +1 -0
  136. package/build/unionParser.d.ts +5 -3
  137. package/build/unionParser.js +7 -2
  138. package/build/unionParser.test-d.d.ts +1 -0
  139. package/build/unionParser.test-d.js +72 -0
  140. package/build/unionParser.test.js +10 -11
  141. package/build/zig.d.ts +280 -0
  142. package/build/zig.js +2 -0
  143. package/build/zigParser.d.ts +3 -0
  144. package/build/zigParser.js +1119 -0
  145. package/build/zigParser.test.d.ts +1 -0
  146. package/build/zigParser.test.js +1590 -0
  147. package/build/zigUnparser.d.ts +2 -0
  148. package/build/zigUnparser.js +460 -0
  149. package/build/zigUnparser.test.d.ts +1 -0
  150. package/build/zigUnparser.test.js +24 -0
  151. package/build/zipParser.js +19 -32
  152. package/build/zipUnparser.js +19 -7
  153. package/build/zipUnparser.test.js +1 -1
  154. package/node_modules-@types/s-expression/index.d.ts +5 -0
  155. package/package.json +24 -6
  156. package/src/androidPackageParser.ts +33 -60
  157. package/src/arbitraryDalvikBytecode.ts +39 -31
  158. package/src/arbitraryDalvikExecutable.ts +65 -20
  159. package/src/arbitraryJava.ts +804 -0
  160. package/src/arbitraryJavaScript.ts +410 -0
  161. package/src/arbitraryZig.ts +380 -0
  162. package/src/arrayParser.ts +1 -3
  163. package/src/backsmali.ts +35 -4
  164. package/src/bash.ts +8 -1
  165. package/src/bashParser.test.ts +258 -0
  166. package/src/bashParser.ts +180 -143
  167. package/src/dalvikBytecodeParser/addressConversion.ts +496 -0
  168. package/src/dalvikBytecodeParser/formatParsers.ts +19 -29
  169. package/src/dalvikBytecodeParser.test-d.ts +310 -0
  170. package/src/dalvikBytecodeParser.ts +194 -69
  171. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +27 -26
  172. package/src/dalvikBytecodeUnparser.test.ts +7 -7
  173. package/src/dalvikBytecodeUnparser.ts +31 -30
  174. package/src/dalvikExecutable.test-d.ts +132 -0
  175. package/src/dalvikExecutable.ts +3 -3
  176. package/src/dalvikExecutableParser/typedNumbers.ts +11 -0
  177. package/src/dalvikExecutableParser.test.ts +37 -3
  178. package/src/dalvikExecutableParser.test.ts.md +163 -2
  179. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  180. package/src/dalvikExecutableParser.ts +121 -139
  181. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +4 -0
  182. package/src/dalvikExecutableUnparser/poolScanners.ts +6 -6
  183. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +38 -14
  184. package/src/dalvikExecutableUnparser.test.ts +3 -2
  185. package/src/dalvikExecutableUnparser.ts +4 -4
  186. package/src/disjunctionParser.test-d.ts +105 -0
  187. package/src/disjunctionParser.ts +18 -15
  188. package/src/elementSwitchParser.test-d.ts +74 -0
  189. package/src/elementSwitchParser.ts +51 -0
  190. package/src/exactSequenceParser.test-d.ts +43 -0
  191. package/src/exactSequenceParser.ts +13 -8
  192. package/src/fetchCid.ts +2 -76
  193. package/src/index.test.ts +22 -1
  194. package/src/index.ts +7 -1
  195. package/src/inputReader.ts +53 -0
  196. package/src/java.ts +708 -0
  197. package/src/javaKeyStoreParser.ts +18 -32
  198. package/src/javaParser.test.ts +1592 -0
  199. package/src/javaParser.ts +2640 -0
  200. package/src/javaScript.ts +36 -0
  201. package/src/javaScriptParser.ts +57 -0
  202. package/src/javaScriptUnparser.test.ts +37 -0
  203. package/src/javaScriptUnparser.ts +7 -0
  204. package/src/javaUnparser.test.ts +37 -0
  205. package/src/javaUnparser.ts +640 -0
  206. package/src/jsonParser.ts +6 -27
  207. package/src/lookaheadParser.ts +2 -6
  208. package/src/negativeLookaheadParser.ts +1 -3
  209. package/src/nonEmptyArrayParser.ts +1 -3
  210. package/src/objectParser.test-d.ts +152 -0
  211. package/src/objectParser.test.ts +71 -0
  212. package/src/objectParser.ts +69 -0
  213. package/src/optionalParser.ts +1 -3
  214. package/src/parser.test.ts +151 -4
  215. package/src/parser.ts +11 -1
  216. package/src/parserConsumedSequenceParser.ts +2 -4
  217. package/src/parserContext.ts +26 -11
  218. package/src/parserError.ts +17 -3
  219. package/src/regexpParser.test.ts +78 -0
  220. package/src/regexpParser.ts +35 -3
  221. package/src/regularExpressionParser.ts +36 -37
  222. package/src/separatedArrayParser.ts +1 -3
  223. package/src/separatedNonEmptyArrayParser.ts +1 -3
  224. package/src/sliceBoundedParser.test.ts +2 -2
  225. package/src/sliceBoundedParser.ts +15 -19
  226. package/src/smaliParser.test.ts +64 -0
  227. package/src/smaliParser.test.ts.md +12 -12
  228. package/src/smaliParser.test.ts.snap +0 -0
  229. package/src/smaliParser.ts +246 -534
  230. package/src/stringEscapes.ts +253 -0
  231. package/src/symbolicExpression.ts +17 -0
  232. package/src/symbolicExpressionParser.test.ts +466 -0
  233. package/src/symbolicExpressionParser.ts +190 -0
  234. package/src/terminatedArrayParser.test.ts +9 -6
  235. package/src/terminatedArrayParser.ts +25 -29
  236. package/src/tupleParser.ts +21 -18
  237. package/src/unionParser.test-d.ts +105 -0
  238. package/src/unionParser.test.ts +18 -17
  239. package/src/unionParser.ts +28 -16
  240. package/src/zig.ts +411 -0
  241. package/src/zigParser.test.ts +1693 -0
  242. package/src/zigParser.ts +1745 -0
  243. package/src/zigUnparser.test.ts +37 -0
  244. package/src/zigUnparser.ts +615 -0
  245. package/src/zipParser.ts +20 -56
  246. package/src/zipUnparser.test.ts +1 -1
  247. package/src/zipUnparser.ts +22 -7
  248. package/tsconfig.json +2 -2
  249. package/build/exactElementSwitchParser.d.ts +0 -3
  250. package/src/exactElementSwitchParser.ts +0 -41
@@ -1,5 +1,5 @@
1
1
  import { type DalvikExecutableField, type DalvikExecutableMethod } from './dalvikExecutable.js';
2
- import { type IndexIntoFieldIds, type IndexIntoMethodIds, type IndexIntoPrototypeIds, type IndexIntoStringIds, type IndexIntoTypeIds } from './dalvikExecutableParser/typedNumbers.js';
2
+ import { type CodeUnit, type IndexIntoCallSiteIds, type IndexIntoFieldIds, type IndexIntoMethodIds, type IndexIntoPrototypeIds, type IndexIntoStringIds, type IndexIntoTypeIds } from './dalvikExecutableParser/typedNumbers.js';
3
3
  import { type Parser } from './parser.js';
4
4
  type DalvikBytecodeOperationNoOperation = {
5
5
  operation: 'nop';
@@ -78,37 +78,47 @@ type DalvikBytecodeOperationInvokePolymorphicRange = {
78
78
  protoIndex: IndexIntoPrototypeIds;
79
79
  registers: number[];
80
80
  };
81
+ type DalvikBytecodeOperationInvokeCustom = {
82
+ operation: 'invoke-custom';
83
+ callSiteIndex: IndexIntoCallSiteIds;
84
+ registers: number[];
85
+ };
86
+ type DalvikBytecodeOperationInvokeCustomRange = {
87
+ operation: 'invoke-custom/range';
88
+ callSiteIndex: IndexIntoCallSiteIds;
89
+ registers: number[];
90
+ };
81
91
  type DalvikBytecodeOperationGoto = {
82
92
  operation: 'goto';
83
- branchOffset: number;
93
+ branchOffsetCodeUnit: CodeUnit;
84
94
  };
85
95
  type DalvikBytecodeOperationGoto16 = {
86
96
  operation: 'goto/16';
87
- branchOffset: number;
97
+ branchOffsetCodeUnit: CodeUnit;
88
98
  };
89
99
  type DalvikBytecodeOperationGoto32 = {
90
100
  operation: 'goto/32';
91
- branchOffset: number;
101
+ branchOffsetCodeUnit: CodeUnit;
92
102
  };
93
103
  type DalvikBytecodeOperationPackedSwitch = {
94
104
  operation: 'packed-switch';
95
- branchOffset: number;
105
+ branchOffsetCodeUnit: CodeUnit;
96
106
  registers: number[];
97
107
  };
98
108
  type DalvikBytecodeOperationPackedSwitchPayload = {
99
109
  operation: 'packed-switch-payload';
100
110
  value: number;
101
- branchOffsets: number[];
111
+ branchOffsetsCodeUnit: CodeUnit[];
102
112
  };
103
113
  type DalvikBytecodeOperationSparseSwitch = {
104
114
  operation: 'sparse-switch';
105
- branchOffset: number;
115
+ branchOffsetCodeUnit: CodeUnit;
106
116
  registers: number[];
107
117
  };
108
118
  type DalvikBytecodeOperationSparseSwitchPayload = {
109
119
  operation: 'sparse-switch-payload';
110
120
  keys: number[];
111
- branchOffsets: number[];
121
+ branchOffsetsCodeUnit: CodeUnit[];
112
122
  };
113
123
  type DalvikBytecodeOperationFillArrayDataPayload = {
114
124
  operation: 'fill-array-data-payload';
@@ -768,6 +778,11 @@ declare const dalvikBytecodeOperationDivideFloatParser: Parser<{
768
778
  registers: number[];
769
779
  }, Uint8Array<ArrayBufferLike>>;
770
780
  type DalvikBytecodeOperationDivideFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatParser>>;
781
+ declare const dalvikBytecodeOperationRemainderFloatParser: Parser<{
782
+ operation: "rem-float";
783
+ registers: number[];
784
+ }, Uint8Array<ArrayBufferLike>>;
785
+ type DalvikBytecodeOperationRemainderFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderFloatParser>>;
771
786
  declare const dalvikBytecodeOperationAddDoubleParser: Parser<{
772
787
  operation: "add-double";
773
788
  registers: number[];
@@ -793,7 +808,7 @@ declare const dalvikBytecodeOperationRemainderDoubleParser: Parser<{
793
808
  registers: number[];
794
809
  }, Uint8Array<ArrayBufferLike>>;
795
810
  type DalvikBytecodeOperationRemainderDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleParser>>;
796
- type DalvikBytecodeOperationBinaryOperation = DalvikBytecodeOperationAddInt | DalvikBytecodeOperationSubtractInt | DalvikBytecodeOperationMultiplyInt | DalvikBytecodeOperationDivideInt | DalvikBytecodeOperationRemainderInt | DalvikBytecodeOperationAndInt | DalvikBytecodeOperationOrInt | DalvikBytecodeOperationXorInt | DalvikBytecodeOperationShiftLeftInt | DalvikBytecodeOperationShiftRightInt | DalvikBytecodeOperationUnsignedShiftRightInt | DalvikBytecodeOperationAddLong | DalvikBytecodeOperationSubtractLong | DalvikBytecodeOperationMultiplyLong | DalvikBytecodeOperationDivideLong | DalvikBytecodeOperationRemainderLong | DalvikBytecodeOperationAndLong | DalvikBytecodeOperationOrLong | DalvikBytecodeOperationXorLong | DalvikBytecodeOperationShiftLeftLong | DalvikBytecodeOperationShiftRightLong | DalvikBytecodeOperationUnsignedShiftRightLong | DalvikBytecodeOperationAddFloat | DalvikBytecodeOperationSubtractFloat | DalvikBytecodeOperationMultiplyFloat | DalvikBytecodeOperationDivideFloat | DalvikBytecodeOperationAddDouble | DalvikBytecodeOperationSubtractDouble | DalvikBytecodeOperationMultiplyDouble | DalvikBytecodeOperationDivideDouble | DalvikBytecodeOperationRemainderDouble;
811
+ type DalvikBytecodeOperationBinaryOperation = DalvikBytecodeOperationAddInt | DalvikBytecodeOperationSubtractInt | DalvikBytecodeOperationMultiplyInt | DalvikBytecodeOperationDivideInt | DalvikBytecodeOperationRemainderInt | DalvikBytecodeOperationAndInt | DalvikBytecodeOperationOrInt | DalvikBytecodeOperationXorInt | DalvikBytecodeOperationShiftLeftInt | DalvikBytecodeOperationShiftRightInt | DalvikBytecodeOperationUnsignedShiftRightInt | DalvikBytecodeOperationAddLong | DalvikBytecodeOperationSubtractLong | DalvikBytecodeOperationMultiplyLong | DalvikBytecodeOperationDivideLong | DalvikBytecodeOperationRemainderLong | DalvikBytecodeOperationAndLong | DalvikBytecodeOperationOrLong | DalvikBytecodeOperationXorLong | DalvikBytecodeOperationShiftLeftLong | DalvikBytecodeOperationShiftRightLong | DalvikBytecodeOperationUnsignedShiftRightLong | DalvikBytecodeOperationAddFloat | DalvikBytecodeOperationSubtractFloat | DalvikBytecodeOperationMultiplyFloat | DalvikBytecodeOperationDivideFloat | DalvikBytecodeOperationRemainderFloat | DalvikBytecodeOperationAddDouble | DalvikBytecodeOperationSubtractDouble | DalvikBytecodeOperationMultiplyDouble | DalvikBytecodeOperationDivideDouble | DalvikBytecodeOperationRemainderDouble;
797
812
  declare const dalvikBytecodeOperationNegateIntParser: Parser<{
798
813
  operation: "neg-int";
799
814
  registers: number[];
@@ -903,74 +918,74 @@ type DalvikBytecodeOperationUnaryOperation = DalvikBytecodeOperationNegateInt |
903
918
  declare const dalvikBytecodeIfEqualParser: Parser<{
904
919
  operation: "if-eq";
905
920
  registers: number[];
906
- branchOffset: number;
921
+ branchOffsetCodeUnit: CodeUnit;
907
922
  }, Uint8Array<ArrayBufferLike>>;
908
923
  type DalvikBytecodeOperationIfEqual = Awaited<ReturnType<typeof dalvikBytecodeIfEqualParser>>;
909
924
  declare const dalvikBytecodeIfNotEqualParser: Parser<{
910
925
  operation: "if-ne";
911
926
  registers: number[];
912
- branchOffset: number;
927
+ branchOffsetCodeUnit: CodeUnit;
913
928
  }, Uint8Array<ArrayBufferLike>>;
914
929
  type DalvikBytecodeOperationIfNotEqual = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualParser>>;
915
930
  declare const dalvikBytecodeIfLessThanParser: Parser<{
916
931
  operation: "if-lt";
917
932
  registers: number[];
918
- branchOffset: number;
933
+ branchOffsetCodeUnit: CodeUnit;
919
934
  }, Uint8Array<ArrayBufferLike>>;
920
935
  type DalvikBytecodeOperationIfLessThan = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanParser>>;
921
936
  declare const dalvikBytecodeIfGreaterThanOrEqualToParser: Parser<{
922
937
  operation: "if-ge";
923
938
  registers: number[];
924
- branchOffset: number;
939
+ branchOffsetCodeUnit: CodeUnit;
925
940
  }, Uint8Array<ArrayBufferLike>>;
926
941
  type DalvikBytecodeOperationIfGreaterThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToParser>>;
927
942
  declare const dalvikBytecodeIfGreaterThanParser: Parser<{
928
943
  operation: "if-gt";
929
944
  registers: number[];
930
- branchOffset: number;
945
+ branchOffsetCodeUnit: CodeUnit;
931
946
  }, Uint8Array<ArrayBufferLike>>;
932
947
  type DalvikBytecodeOperationIfGreaterThan = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanParser>>;
933
948
  declare const dalvikBytecodeIfLessThanOrEqualToParser: Parser<{
934
949
  operation: "if-le";
935
950
  registers: number[];
936
- branchOffset: number;
951
+ branchOffsetCodeUnit: CodeUnit;
937
952
  }, Uint8Array<ArrayBufferLike>>;
938
953
  type DalvikBytecodeOperationIfLessThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToParser>>;
939
954
  type DalvikBytecodeOperationIfTest = DalvikBytecodeOperationIfEqual | DalvikBytecodeOperationIfNotEqual | DalvikBytecodeOperationIfLessThan | DalvikBytecodeOperationIfGreaterThanOrEqualTo | DalvikBytecodeOperationIfGreaterThan | DalvikBytecodeOperationIfLessThanOrEqualTo;
940
955
  declare const dalvikBytecodeIfEqualZeroParser: Parser<{
941
956
  operation: "if-eqz";
942
957
  registers: number[];
943
- branchOffset: number;
958
+ branchOffsetCodeUnit: CodeUnit;
944
959
  }, Uint8Array<ArrayBufferLike>>;
945
960
  type DalvikBytecodeOperationIfEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfEqualZeroParser>>;
946
961
  declare const dalvikBytecodeIfNotEqualZeroParser: Parser<{
947
962
  operation: "if-nez";
948
963
  registers: number[];
949
- branchOffset: number;
964
+ branchOffsetCodeUnit: CodeUnit;
950
965
  }, Uint8Array<ArrayBufferLike>>;
951
966
  type DalvikBytecodeOperationIfNotEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualZeroParser>>;
952
967
  declare const dalvikBytecodeIfLessThanZeroParser: Parser<{
953
968
  operation: "if-ltz";
954
969
  registers: number[];
955
- branchOffset: number;
970
+ branchOffsetCodeUnit: CodeUnit;
956
971
  }, Uint8Array<ArrayBufferLike>>;
957
972
  type DalvikBytecodeOperationIfLessThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanZeroParser>>;
958
973
  declare const dalvikBytecodeIfGreaterThanOrEqualToZeroParser: Parser<{
959
974
  operation: "if-gez";
960
975
  registers: number[];
961
- branchOffset: number;
976
+ branchOffsetCodeUnit: CodeUnit;
962
977
  }, Uint8Array<ArrayBufferLike>>;
963
978
  type DalvikBytecodeOperationIfGreaterThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToZeroParser>>;
964
979
  declare const dalvikBytecodeIfGreaterThanZeroParser: Parser<{
965
980
  operation: "if-gtz";
966
981
  registers: number[];
967
- branchOffset: number;
982
+ branchOffsetCodeUnit: CodeUnit;
968
983
  }, Uint8Array<ArrayBufferLike>>;
969
984
  type DalvikBytecodeOperationIfGreaterThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanZeroParser>>;
970
985
  declare const dalvikBytecodeIfLessThanOrEqualToZeroParser: Parser<{
971
986
  operation: "if-lez";
972
987
  registers: number[];
973
- branchOffset: number;
988
+ branchOffsetCodeUnit: CodeUnit;
974
989
  }, Uint8Array<ArrayBufferLike>>;
975
990
  type DalvikBytecodeOperationIfLessThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToZeroParser>>;
976
991
  type DalvikBytecodeOperationIfTestZero = DalvikBytecodeOperationIfEqualZero | DalvikBytecodeOperationIfNotEqualZero | DalvikBytecodeOperationIfLessThanZero | DalvikBytecodeOperationIfGreaterThanOrEqualToZero | DalvikBytecodeOperationIfGreaterThanZero | DalvikBytecodeOperationIfLessThanOrEqualToZero;
@@ -989,6 +1004,11 @@ type DalvikBytecodeOperationConstMethodHandle = {
989
1004
  methodIndex: IndexIntoMethodIds;
990
1005
  registers: number[];
991
1006
  };
1007
+ type DalvikBytecodeOperationConstMethodType = {
1008
+ operation: 'const-method-type';
1009
+ protoIndex: IndexIntoPrototypeIds;
1010
+ registers: number[];
1011
+ };
992
1012
  type DalvikBytecodeOperationNewInstance = {
993
1013
  operation: 'new-instance';
994
1014
  typeIndex: IndexIntoTypeIds;
@@ -1011,7 +1031,7 @@ type DalvikBytecodeOperationFilledNewArrayRange = {
1011
1031
  };
1012
1032
  type DalvikBytecodeOperationFillArrayData = {
1013
1033
  operation: 'fill-array-data';
1014
- branchOffset: number;
1034
+ branchOffsetCodeUnit: CodeUnit;
1015
1035
  registers: number[];
1016
1036
  };
1017
1037
  type DalvikBytecodeOperationCheckCast = {
@@ -1088,6 +1108,14 @@ type DalvikBytecodeOperationMoveWide16 = {
1088
1108
  operation: 'move-wide/16';
1089
1109
  registers: number[];
1090
1110
  };
1111
+ type DalvikBytecodeOperationMove16 = {
1112
+ operation: 'move/16';
1113
+ registers: number[];
1114
+ };
1115
+ type DalvikBytecodeOperationMoveObject16 = {
1116
+ operation: 'move-object/16';
1117
+ registers: number[];
1118
+ };
1091
1119
  declare const dalvikBytecodeOperationReturnParser: Parser<{
1092
1120
  operation: "return";
1093
1121
  registers: number[];
@@ -1174,14 +1202,14 @@ declare const dalvikBytecodeOperationCompareLongParser: Parser<{
1174
1202
  }, Uint8Array<ArrayBufferLike>>;
1175
1203
  type DalvikBytecodeOperationCompareLong = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareLongParser>>;
1176
1204
  type DalvikBytecodeOperationCompare = DalvikBytecodeOperationCompareFloatWithLessThanBias | DalvikBytecodeOperationCompareFloatWithGreaterThanBias | DalvikBytecodeOperationCompareDoubleWithLessThanBias | DalvikBytecodeOperationCompareDoubleWithGreaterThanBias | DalvikBytecodeOperationCompareLong;
1177
- export type DalvikBytecodeOperation = DalvikBytecodeOperationNoOperation | DalvikBytecodeOperationIfTest | DalvikBytecodeOperationIfTestZero | DalvikBytecodeOperationBinaryOperation | DalvikBytecodeOperationBinaryOperationLiteral8 | DalvikBytecodeOperationBinaryOperationLiteral16 | DalvikBytecodeOperationBinaryOperationInPlace | DalvikBytecodeOperationUnaryOperation | DalvikBytecodeOperationGoto | DalvikBytecodeOperationGoto16 | DalvikBytecodeOperationGoto32 | DalvikBytecodeOperationPackedSwitch | DalvikBytecodeOperationPackedSwitchPayload | DalvikBytecodeOperationSparseSwitch | DalvikBytecodeOperationSparseSwitchPayload | DalvikBytecodeOperationNewArray | DalvikBytecodeOperationFilledNewArray | DalvikBytecodeOperationFilledNewArrayRange | DalvikBytecodeOperationFillArrayDataPayload | DalvikBytecodeOperationMoveResult1 | DalvikBytecodeOperationMove | DalvikBytecodeOperationMoveWide | DalvikBytecodeOperationMoveObject | DalvikBytecodeOperationMoveFrom16 | DalvikBytecodeOperationMoveWideFrom16 | DalvikBytecodeOperationMoveObjectFrom16 | DalvikBytecodeOperationMoveWide16 | DalvikBytecodeOperationInvoke | DalvikBytecodeOperationInvokeRange | DalvikBytecodeOperationInvokePolymorphic | DalvikBytecodeOperationInvokePolymorphicRange | DalvikBytecodeOperationNewInstance | DalvikBytecodeOperationFillArrayData | DalvikBytecodeOperationCheckCast | DalvikBytecodeOperationInstanceOf | DalvikBytecodeOperationArrayLength | DalvikBytecodeOperationArrayElement | DalvikBytecodeOperationInstanceField | DalvikBytecodeOperationStaticField | DalvikBytecodeOperationConst4 | DalvikBytecodeOperationConst16 | DalvikBytecodeOperationConstHigh16 | DalvikBytecodeOperationConstWide16 | DalvikBytecodeOperationConstWide32 | DalvikBytecodeOperationConstWide | DalvikBytecodeOperationConstWideHigh16 | DalvikBytecodeOperationConst | DalvikBytecodeOperationConstString | DalvikBytecodeOperationConstStringJumbo | DalvikBytecodeOperationConstMethodHandle | DalvikBytecodeOperationConstClass | DalvikBytecodeOperationMonitorEnter | DalvikBytecodeOperationMonitorExit | DalvikBytecodeOperationThrow | DalvikBytecodeOperationCompare | DalvikBytecodeOperationReturnVoid | DalvikBytecodeOperationReturn1;
1178
- export declare const dalvikBytecodeOperationCompanion: {
1179
- getRegisters(operation: DalvikBytecodeOperation): number[];
1205
+ export type RawDalvikBytecodeOperation = DalvikBytecodeOperationNoOperation | DalvikBytecodeOperationIfTest | DalvikBytecodeOperationIfTestZero | DalvikBytecodeOperationBinaryOperation | DalvikBytecodeOperationBinaryOperationLiteral8 | DalvikBytecodeOperationBinaryOperationLiteral16 | DalvikBytecodeOperationBinaryOperationInPlace | DalvikBytecodeOperationUnaryOperation | DalvikBytecodeOperationGoto | DalvikBytecodeOperationGoto16 | DalvikBytecodeOperationGoto32 | DalvikBytecodeOperationPackedSwitch | DalvikBytecodeOperationPackedSwitchPayload | DalvikBytecodeOperationSparseSwitch | DalvikBytecodeOperationSparseSwitchPayload | DalvikBytecodeOperationNewArray | DalvikBytecodeOperationFilledNewArray | DalvikBytecodeOperationFilledNewArrayRange | DalvikBytecodeOperationFillArrayDataPayload | DalvikBytecodeOperationMoveResult1 | DalvikBytecodeOperationMove | DalvikBytecodeOperationMoveWide | DalvikBytecodeOperationMoveObject | DalvikBytecodeOperationMoveFrom16 | DalvikBytecodeOperationMove16 | DalvikBytecodeOperationMoveWideFrom16 | DalvikBytecodeOperationMoveObjectFrom16 | DalvikBytecodeOperationMoveWide16 | DalvikBytecodeOperationMoveObject16 | DalvikBytecodeOperationInvoke | DalvikBytecodeOperationInvokeRange | DalvikBytecodeOperationInvokePolymorphic | DalvikBytecodeOperationInvokePolymorphicRange | DalvikBytecodeOperationInvokeCustom | DalvikBytecodeOperationInvokeCustomRange | DalvikBytecodeOperationNewInstance | DalvikBytecodeOperationFillArrayData | DalvikBytecodeOperationCheckCast | DalvikBytecodeOperationInstanceOf | DalvikBytecodeOperationArrayLength | DalvikBytecodeOperationArrayElement | DalvikBytecodeOperationInstanceField | DalvikBytecodeOperationStaticField | DalvikBytecodeOperationConst4 | DalvikBytecodeOperationConst16 | DalvikBytecodeOperationConstHigh16 | DalvikBytecodeOperationConstWide16 | DalvikBytecodeOperationConstWide32 | DalvikBytecodeOperationConstWide | DalvikBytecodeOperationConstWideHigh16 | DalvikBytecodeOperationConst | DalvikBytecodeOperationConstString | DalvikBytecodeOperationConstStringJumbo | DalvikBytecodeOperationConstMethodHandle | DalvikBytecodeOperationConstMethodType | DalvikBytecodeOperationConstClass | DalvikBytecodeOperationMonitorEnter | DalvikBytecodeOperationMonitorExit | DalvikBytecodeOperationThrow | DalvikBytecodeOperationCompare | DalvikBytecodeOperationReturnVoid | DalvikBytecodeOperationReturn1;
1206
+ export declare const rawDalvikBytecodeOperationCompanion: {
1207
+ getRegisters(operation: RawDalvikBytecodeOperation): number[];
1180
1208
  };
1181
- export type DalvikBytecode = DalvikBytecodeOperation[];
1182
- export declare const createDalvikBytecodeParser: (size: number) => Parser<DalvikBytecode, Uint8Array>;
1183
- type ResolvedDalvikBytecodeOperation<T extends DalvikBytecodeOperation> = T extends {
1184
- stringIndex: IndexIntoFieldIds;
1209
+ export type RawDalvikBytecode = RawDalvikBytecodeOperation[];
1210
+ export declare const createRawDalvikBytecodeParser: (size: number) => Parser<RawDalvikBytecode, Uint8Array>;
1211
+ export type IndexResolvedOperation<T> = T extends {
1212
+ stringIndex: IndexIntoStringIds;
1185
1213
  } ? Omit<T, 'stringIndex'> & {
1186
1214
  string: string;
1187
1215
  } : T extends {
@@ -1197,11 +1225,12 @@ type ResolvedDalvikBytecodeOperation<T extends DalvikBytecodeOperation> = T exte
1197
1225
  } ? Omit<T, 'fieldIndex'> & {
1198
1226
  field: DalvikExecutableField;
1199
1227
  } : T;
1200
- export type DalvikBytecodeOperationResolvers = {
1228
+ type IndexResolvedRawDalvikBytecodeOperation<T extends RawDalvikBytecodeOperation> = IndexResolvedOperation<T>;
1229
+ export type RawDalvikBytecodeOperationResolvers = {
1201
1230
  resolveIndexIntoStringIds: (index: IndexIntoStringIds) => string;
1202
1231
  resolveIndexIntoTypeIds: (index: IndexIntoTypeIds) => string;
1203
1232
  resolveIndexIntoMethodIds: (index: IndexIntoMethodIds) => DalvikExecutableMethod;
1204
1233
  resolveIndexIntoFieldIds: (index: IndexIntoFieldIds) => DalvikExecutableField;
1205
1234
  };
1206
- export declare function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation>(operation: T, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }: DalvikBytecodeOperationResolvers): ResolvedDalvikBytecodeOperation<T>;
1235
+ export declare function resolveRawDalvikBytecodeOperationIndices<T extends RawDalvikBytecodeOperation>(operation: T, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }: RawDalvikBytecodeOperationResolvers): IndexResolvedRawDalvikBytecodeOperation<T>;
1207
1236
  export {};
@@ -1,15 +1,16 @@
1
1
  import { createArrayParser } from './arrayParser.js';
2
2
  import { createDalvikBytecodeFormat21cParser, createDalvikBytecodeFormat21sParser, createDalvikBytecodeFormat21tParser, createDalvikBytecodeFormat22bParser, createDalvikBytecodeFormat22cParser, createDalvikBytecodeFormat22sParser, createDalvikBytecodeFormat22tParser, dalvikBytecodeFormat23xParser, createDalvikBytecodeFormat31cParser, dalvikBytecodeFormat31iParser, dalvikBytecodeFormat31tParser, createDalvikBytecodeFormat35cParser, createDalvikBytecodeFormat3rcParser, dalvikBytecodeFormat10tParser, dalvikBytecodeFormat10xParser, dalvikBytecodeFormat11xParser, dalvikBytecodeFormat11nParser, dalvikBytecodeFormat12xParser, dalvikBytecodeFormat20tParser, dalvikBytecodeFormat22xParser, dalvikBytecodeFormat32xParser, dalvikBytecodeFormat30tParser, dalvikBytecodeFormat51lParser, createDalvikBytecodeFormat45ccParser, createDalvikBytecodeFormat4rccParser, } from './dalvikBytecodeParser/formatParsers.js';
3
3
  import { ubyteParser, ushortParser, intParser, uintParser, createExactUshortParser, } from './dalvikExecutableParser/typeParsers.js';
4
- import { isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds, } from './dalvikExecutableParser/typedNumbers.js';
4
+ import { isoCodeUnit, isoIndexIntoCallSiteIds, isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds, } from './dalvikExecutableParser/typedNumbers.js';
5
5
  import { createExactElementParser } from './exactElementParser.js';
6
- import { createElementSwitchParser } from './exactElementSwitchParser.js';
6
+ import { createElementSwitchParser } from './elementSwitchParser.js';
7
7
  import { setParserName } from './parser.js';
8
8
  import { promiseCompose } from './promiseCompose.js';
9
9
  import { createSliceBoundedParser } from './sliceBoundedParser.js';
10
10
  import { createDisjunctionParser } from './disjunctionParser.js';
11
11
  import { parserCreatorCompose } from './parserCreatorCompose.js';
12
12
  import { createQuantifierParser } from './quantifierParser.js';
13
+ import { createObjectParser } from './objectParser.js';
13
14
  import { createTupleParser } from './tupleParser.js';
14
15
  // https://source.android.com/docs/core/runtime/dalvik-bytecode
15
16
  const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
@@ -21,10 +22,10 @@ const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
21
22
  parserContext.skip(1);
22
23
  };
23
24
  setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
24
- const dalvikBytecodeOperationNoOperationParser = promiseCompose(createExactUshortParser(0x00_00), // nop is 2 bytes: 0x00 0x00
25
- () => ({
25
+ const dalvikBytecodeOperationNoOperationParser = createObjectParser({
26
+ _opcode: createExactUshortParser(0x00_00), // nop is 2 bytes: 0x00 0x00
26
27
  operation: 'nop',
27
- }));
28
+ });
28
29
  setParserName(dalvikBytecodeOperationNoOperationParser, 'dalvikBytecodeOperationNoOperationParser');
29
30
  const createDalvikBytecodeOperationInvoke = (operation, opcode) => promiseCompose(createTupleParser([
30
31
  createExactElementParser(opcode),
@@ -98,33 +99,55 @@ const dalvikBytecodeOperationInvokePolymorphicRangeParser = promiseCompose(creat
98
99
  registers,
99
100
  }));
100
101
  setParserName(dalvikBytecodeOperationInvokePolymorphicRangeParser, 'dalvikBytecodeOperationInvokePolymorphicRangeParser');
102
+ const dalvikBytecodeOperationInvokeCustomParser = promiseCompose(createTupleParser([
103
+ createExactElementParser(0xFC),
104
+ createDalvikBytecodeFormat35cParser({
105
+ isoIndex: isoIndexIntoCallSiteIds,
106
+ }),
107
+ ]), ([_opcode, { index, registers },]) => ({
108
+ operation: 'invoke-custom',
109
+ callSiteIndex: index,
110
+ registers,
111
+ }));
112
+ setParserName(dalvikBytecodeOperationInvokeCustomParser, 'dalvikBytecodeOperationInvokeCustomParser');
113
+ const dalvikBytecodeOperationInvokeCustomRangeParser = promiseCompose(createTupleParser([
114
+ createExactElementParser(0xFD),
115
+ createDalvikBytecodeFormat3rcParser({
116
+ isoIndex: isoIndexIntoCallSiteIds,
117
+ }),
118
+ ]), ([_opcode, { index, registers },]) => ({
119
+ operation: 'invoke-custom/range',
120
+ callSiteIndex: index,
121
+ registers,
122
+ }));
123
+ setParserName(dalvikBytecodeOperationInvokeCustomRangeParser, 'dalvikBytecodeOperationInvokeCustomRangeParser');
101
124
  const dalvikBytecodeOperationGotoParser = promiseCompose(createTupleParser([
102
125
  createExactElementParser(0x28),
103
126
  dalvikBytecodeFormat10tParser,
104
- ]), ([_opcode, { branchOffset }]) => ({
127
+ ]), ([_opcode, { branchOffsetCodeUnit }]) => ({
105
128
  operation: 'goto',
106
- branchOffset,
129
+ branchOffsetCodeUnit,
107
130
  }));
108
131
  const dalvikBytecodeOperationGoto16Parser = promiseCompose(createTupleParser([
109
132
  createExactElementParser(0x29),
110
133
  dalvikBytecodeFormat20tParser,
111
- ]), ([_opcode, { branchOffset }]) => ({
134
+ ]), ([_opcode, { branchOffsetCodeUnit }]) => ({
112
135
  operation: 'goto/16',
113
- branchOffset,
136
+ branchOffsetCodeUnit,
114
137
  }));
115
138
  const dalvikBytecodeOperationGoto32Parser = promiseCompose(createTupleParser([
116
139
  createExactElementParser(0x2A),
117
140
  dalvikBytecodeFormat30tParser,
118
- ]), ([_opcode, { branchOffset }]) => ({
141
+ ]), ([_opcode, { branchOffsetCodeUnit }]) => ({
119
142
  operation: 'goto/32',
120
- branchOffset,
143
+ branchOffsetCodeUnit,
121
144
  }));
122
145
  const dalvikBytecodeOperationPackedSwitchParser = promiseCompose(createTupleParser([
123
146
  createExactElementParser(0x2B),
124
147
  dalvikBytecodeFormat31tParser,
125
- ]), ([_opcode, { branchOffset, registers }]) => ({
148
+ ]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
126
149
  operation: 'packed-switch',
127
- branchOffset,
150
+ branchOffsetCodeUnit,
128
151
  registers,
129
152
  }));
130
153
  setParserName(dalvikBytecodeOperationPackedSwitchParser, 'dalvikBytecodeOperationPackedSwitchParser');
@@ -138,15 +161,15 @@ const dalvikBytecodeOperationPackedSwitchPayloadParser = parserCreatorCompose(()
138
161
  })), ({ size, value }) => promiseCompose(createQuantifierParser(intParser, size), branchOffsets => ({
139
162
  operation: 'packed-switch-payload',
140
163
  value,
141
- branchOffsets,
164
+ branchOffsetsCodeUnit: branchOffsets.map(isoCodeUnit.wrap),
142
165
  })))();
143
166
  setParserName(dalvikBytecodeOperationPackedSwitchPayloadParser, 'dalvikBytecodeOperationPackedSwitchPayloadParser');
144
167
  const dalvikBytecodeOperationSparseSwitchParser = promiseCompose(createTupleParser([
145
168
  createExactElementParser(0x2C),
146
169
  dalvikBytecodeFormat31tParser,
147
- ]), ([_opcode, { branchOffset, registers }]) => ({
170
+ ]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
148
171
  operation: 'sparse-switch',
149
- branchOffset,
172
+ branchOffsetCodeUnit,
150
173
  registers,
151
174
  }));
152
175
  setParserName(dalvikBytecodeOperationSparseSwitchParser, 'dalvikBytecodeOperationSparseSwitchParser');
@@ -161,7 +184,7 @@ const dalvikBytecodeOperationSparseSwitchPayloadParser = parserCreatorCompose(()
161
184
  ]), ([keys, branchOffsets]) => ({
162
185
  operation: 'sparse-switch-payload',
163
186
  keys,
164
- branchOffsets,
187
+ branchOffsetsCodeUnit: branchOffsets.map(isoCodeUnit.wrap),
165
188
  })))();
166
189
  setParserName(dalvikBytecodeOperationSparseSwitchPayloadParser, 'dalvikBytecodeOperationSparseSwitchPayloadParser');
167
190
  const dalvikBytecodeOperationFillArrayDataPayloadParser = parserCreatorCompose(() => promiseCompose(createTupleParser([
@@ -482,6 +505,7 @@ const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinar
482
505
  const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xA7);
483
506
  const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xA8);
484
507
  const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xA9);
508
+ const dalvikBytecodeOperationRemainderFloatParser = createDalvikBytecodeOperationBinaryOperation('rem-float', 0xAA);
485
509
  const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xAB);
486
510
  const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xAC);
487
511
  const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xAD);
@@ -514,6 +538,7 @@ const dalvikBytecodeOperationBinaryOperationParser = createDisjunctionParser([
514
538
  dalvikBytecodeOperationSubtractFloatParser,
515
539
  dalvikBytecodeOperationMultiplyFloatParser,
516
540
  dalvikBytecodeOperationDivideFloatParser,
541
+ dalvikBytecodeOperationRemainderFloatParser,
517
542
  dalvikBytecodeOperationAddDoubleParser,
518
543
  dalvikBytecodeOperationSubtractDoubleParser,
519
544
  dalvikBytecodeOperationMultiplyDoubleParser,
@@ -577,19 +602,19 @@ setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperat
577
602
  const createDalvikBytecodeOperationIfTestCommutative = (operation, opcode) => promiseCompose(createTupleParser([
578
603
  createExactElementParser(opcode),
579
604
  createDalvikBytecodeFormat22tParser(),
580
- ]), ([_opcode, { registers, branchOffset }]) => ({
605
+ ]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
581
606
  operation,
582
607
  registers: registers.sort((a, b) => a - b),
583
- branchOffset,
608
+ branchOffsetCodeUnit,
584
609
  }));
585
610
  // For non-commutative comparison operations (if-lt, if-ge, if-gt, if-le), reverse to get correct semantic order
586
611
  const createDalvikBytecodeOperationIfTest = (operation, opcode) => promiseCompose(createTupleParser([
587
612
  createExactElementParser(opcode),
588
613
  createDalvikBytecodeFormat22tParser(),
589
- ]), ([_opcode, { registers, branchOffset }]) => ({
614
+ ]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
590
615
  operation,
591
616
  registers: registers.reverse(),
592
- branchOffset,
617
+ branchOffsetCodeUnit,
593
618
  }));
594
619
  const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-eq', 0x32);
595
620
  const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-ne', 0x33);
@@ -609,10 +634,10 @@ setParserName(dalvikBytecodeOperationIfTestParser, 'dalvikBytecodeOperationIfTes
609
634
  const createDalvikBytecodeOperationIfTestZero = (operation, opcode) => promiseCompose(createTupleParser([
610
635
  createExactElementParser(opcode),
611
636
  createDalvikBytecodeFormat21tParser(),
612
- ]), ([_opcode, { registers, branchOffset }]) => ({
637
+ ]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
613
638
  operation,
614
639
  registers,
615
- branchOffset,
640
+ branchOffsetCodeUnit,
616
641
  }));
617
642
  const dalvikBytecodeIfEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-eqz', 0x38);
618
643
  const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-nez', 0x39);
@@ -662,6 +687,17 @@ const dalvikBytecodeOperationConstMethodHandleParser = promiseCompose(createTupl
662
687
  registers,
663
688
  }));
664
689
  setParserName(dalvikBytecodeOperationConstMethodHandleParser, 'dalvikBytecodeOperationConstMethodHandleParser');
690
+ const dalvikBytecodeOperationConstMethodTypeParser = promiseCompose(createTupleParser([
691
+ createExactElementParser(0xFF),
692
+ createDalvikBytecodeFormat21cParser({
693
+ isoIndex: isoIndexIntoPrototypeIds,
694
+ }),
695
+ ]), ([_opcode, { index, registers }]) => ({
696
+ operation: 'const-method-type',
697
+ protoIndex: index,
698
+ registers,
699
+ }));
700
+ setParserName(dalvikBytecodeOperationConstMethodTypeParser, 'dalvikBytecodeOperationConstMethodTypeParser');
665
701
  const dalvikBytecodeOperationNewInstanceParser = promiseCompose(createTupleParser([
666
702
  createExactElementParser(0x22),
667
703
  createDalvikBytecodeFormat21cParser({
@@ -709,9 +745,9 @@ setParserName(dalvikBytecodeOperationFilledNewArrayRangeParser, 'dalvikBytecodeO
709
745
  const dalvikBytecodeOperationFillArrayDataParser = promiseCompose(createTupleParser([
710
746
  createExactElementParser(0x26),
711
747
  dalvikBytecodeFormat31tParser,
712
- ]), ([_opcode, { branchOffset, registers }]) => ({
748
+ ]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
713
749
  operation: 'fill-array-data',
714
- branchOffset,
750
+ branchOffsetCodeUnit,
715
751
  registers,
716
752
  }));
717
753
  setParserName(dalvikBytecodeOperationFillArrayDataParser, 'dalvikBytecodeOperationFillArrayDataParser');
@@ -761,12 +797,11 @@ const dalvikBytecodeOperationMonitorExitParser = promiseCompose(createTupleParse
761
797
  registers,
762
798
  }));
763
799
  setParserName(dalvikBytecodeOperationMonitorExitParser, 'dalvikBytecodeOperationMonitorExitParser');
764
- const dalvikBytecodeOperationReturnVoidParser = promiseCompose(createTupleParser([
765
- createExactElementParser(0x0E),
766
- dalvikBytecodeFormat10xParser,
767
- ]), () => ({
800
+ const dalvikBytecodeOperationReturnVoidParser = createObjectParser({
801
+ _opcode: createExactElementParser(0x0E),
802
+ _format: dalvikBytecodeFormat10xParser,
768
803
  operation: 'return-void',
769
- }));
804
+ });
770
805
  setParserName(dalvikBytecodeOperationReturnVoidParser, 'dalvikBytecodeOperationReturnVoidParser');
771
806
  const createDalvikBytecodeMoveResult1Parser = (operation, opcode) => promiseCompose(createTupleParser([
772
807
  createExactElementParser(opcode),
@@ -839,6 +874,22 @@ const dalvikBytecodeOperationMoveWide16Parser = promiseCompose(createTupleParser
839
874
  registers,
840
875
  }));
841
876
  setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationMoveWide16Parser');
877
+ const dalvikBytecodeOperationMove16Parser = promiseCompose(createTupleParser([
878
+ createExactElementParser(0x03),
879
+ dalvikBytecodeFormat32xParser,
880
+ ]), ([_opcode, { registers }]) => ({
881
+ operation: 'move/16',
882
+ registers,
883
+ }));
884
+ setParserName(dalvikBytecodeOperationMove16Parser, 'dalvikBytecodeOperationMove16Parser');
885
+ const dalvikBytecodeOperationMoveObject16Parser = promiseCompose(createTupleParser([
886
+ createExactElementParser(0x09),
887
+ dalvikBytecodeFormat32xParser,
888
+ ]), ([_opcode, { registers }]) => ({
889
+ operation: 'move-object/16',
890
+ registers,
891
+ }));
892
+ setParserName(dalvikBytecodeOperationMoveObject16Parser, 'dalvikBytecodeOperationMoveObject16Parser');
842
893
  const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
843
894
  const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0F);
844
895
  const dalvikBytecodeOperationReturnWideParser = createDalvikBytecodeOperationReturn1Parser('return-wide', 0x10);
@@ -949,7 +1000,7 @@ const dalvikBytecodeOperationCompareParser = createDisjunctionParser([
949
1000
  dalvikBytecodeOperationCompareLongParser,
950
1001
  ]);
951
1002
  setParserName(dalvikBytecodeOperationCompareParser, 'dalvikBytecodeOperationCompareParser');
952
- export const dalvikBytecodeOperationCompanion = {
1003
+ export const rawDalvikBytecodeOperationCompanion = {
953
1004
  getRegisters(operation) {
954
1005
  if (operation && typeof operation === 'object' && 'registers' in operation) {
955
1006
  return operation.registers;
@@ -974,6 +1025,9 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
974
1025
  // Invoke polymorphic operations
975
1026
  [0xFA, dalvikBytecodeOperationInvokePolymorphicParser],
976
1027
  [0xFB, dalvikBytecodeOperationInvokePolymorphicRangeParser],
1028
+ // Invoke custom operations
1029
+ [0xFC, dalvikBytecodeOperationInvokeCustomParser],
1030
+ [0xFD, dalvikBytecodeOperationInvokeCustomRangeParser],
977
1031
  // New instance/array operations
978
1032
  [0x22, dalvikBytecodeOperationNewInstanceParser],
979
1033
  [0x23, dalvikBytecodeOperationNewArrayParser],
@@ -1032,6 +1086,7 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
1032
1086
  [0x1A, dalvikBytecodeOperationConstStringParser],
1033
1087
  [0x1B, dalvikBytecodeOperationConstStringJumboParser],
1034
1088
  [0xFE, dalvikBytecodeOperationConstMethodHandleParser],
1089
+ [0xFF, dalvikBytecodeOperationConstMethodTypeParser],
1035
1090
  [0x1C, dalvikBytecodeOperationConstClassParser],
1036
1091
  // Monitor operations
1037
1092
  [0x1D, dalvikBytecodeOperationMonitorEnterParser],
@@ -1062,6 +1117,8 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
1062
1117
  [0x05, dalvikBytecodeOperationMoveWideFrom16Parser],
1063
1118
  [0x08, dalvikBytecodeOperationMoveObjectFrom16Parser],
1064
1119
  [0x06, dalvikBytecodeOperationMoveWide16Parser],
1120
+ [0x03, dalvikBytecodeOperationMove16Parser],
1121
+ [0x09, dalvikBytecodeOperationMoveObject16Parser],
1065
1122
  // Const value operations
1066
1123
  [0x12, dalvikBytecodeOperationConst4Parser],
1067
1124
  [0x13, dalvikBytecodeOperationConst16Parser],
@@ -1118,7 +1175,7 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
1118
1175
  [0xA7, dalvikBytecodeOperationSubtractFloatParser],
1119
1176
  [0xA8, dalvikBytecodeOperationMultiplyFloatParser],
1120
1177
  [0xA9, dalvikBytecodeOperationDivideFloatParser],
1121
- // Note: 0xAA (rem-float) parser is missing in codebase
1178
+ [0xAA, dalvikBytecodeOperationRemainderFloatParser],
1122
1179
  [0xAB, dalvikBytecodeOperationAddDoubleParser],
1123
1180
  [0xAC, dalvikBytecodeOperationSubtractDoubleParser],
1124
1181
  [0xAD, dalvikBytecodeOperationMultiplyDoubleParser],
@@ -1254,9 +1311,9 @@ const dalvikBytecodeOperationParser = promiseCompose(createTupleParser([
1254
1311
  // Console.log(operation);
1255
1312
  operation);
1256
1313
  setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
1257
- const dalvikBytecodeParser = promiseCompose(createArrayParser(dalvikBytecodeOperationParser), operations => operations.filter((operation) => operation !== undefined));
1258
- export const createDalvikBytecodeParser = (size) => createSliceBoundedParser(dalvikBytecodeParser, size, true);
1259
- export function resolveDalvikBytecodeOperation(operation, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }) {
1314
+ const rawDalvikBytecodeParser = promiseCompose(createArrayParser(dalvikBytecodeOperationParser), operations => operations.filter((operation) => operation !== undefined));
1315
+ export const createRawDalvikBytecodeParser = (size) => createSliceBoundedParser(rawDalvikBytecodeParser, size, true);
1316
+ export function resolveRawDalvikBytecodeOperationIndices(operation, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }) {
1260
1317
  if (operation && typeof operation === 'object' && 'stringIndex' in operation) {
1261
1318
  const { stringIndex, ...rest } = operation;
1262
1319
  return {
@@ -0,0 +1 @@
1
+ export {};