@futpib/parser 1.0.1 → 1.0.2

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 (304) hide show
  1. package/build/allSettledStream.js +32 -14
  2. package/build/allSettledStream.test.js +32 -0
  3. package/build/androidPackage.d.ts +39 -0
  4. package/build/androidPackageParser.d.ts +17 -0
  5. package/build/androidPackageParser.js +183 -0
  6. package/build/{apkParser.test.js → androidPackageParser.test.js} +6 -6
  7. package/build/androidPackageUnparser.d.ts +4 -0
  8. package/build/{apkUnparser.js → androidPackageUnparser.js} +23 -23
  9. package/build/androidPackageUnparser.test.js +26 -0
  10. package/build/arbitrarilySlicedAsyncInterable.d.ts +3 -1
  11. package/build/arbitrarilySlicedAsyncInterable.js +3 -3
  12. package/build/arrayParser.test.js +3 -3
  13. package/build/backsmali.d.ts +1 -0
  14. package/build/backsmali.js +22 -0
  15. package/build/bsonParser.js +6 -2
  16. package/build/customInvariant.d.ts +1 -1
  17. package/build/dalvikBytecodeParser/formatParsers.d.ts +97 -0
  18. package/build/dalvikBytecodeParser/formatParsers.js +169 -0
  19. package/build/dalvikBytecodeParser.d.ts +107 -0
  20. package/build/dalvikBytecodeParser.js +836 -0
  21. package/build/dalvikExecutable.d.ts +158 -0
  22. package/build/dalvikExecutable.js +20 -0
  23. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +4 -0
  24. package/build/dalvikExecutableParser/stringSyntaxParser.js +76 -0
  25. package/build/dalvikExecutableParser/typeParsers.d.ts +10 -0
  26. package/build/dalvikExecutableParser/typeParsers.js +34 -0
  27. package/build/dalvikExecutableParser/typedNumbers.d.ts +90 -0
  28. package/build/dalvikExecutableParser/typedNumbers.js +19 -0
  29. package/build/dalvikExecutableParser.d.ts +5 -0
  30. package/build/dalvikExecutableParser.js +1439 -0
  31. package/build/dalvikExecutableParser.test.js +70 -0
  32. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +298 -0
  33. package/build/debugLogInputParser.d.ts +4 -0
  34. package/build/debugLogInputParser.js +16 -0
  35. package/build/debugLogParser.js +14 -3
  36. package/build/disjunctionParser.d.ts +2 -1
  37. package/build/disjunctionParser.js +4 -2
  38. package/build/elementTerminatedArrayParser.d.ts +3 -0
  39. package/build/elementTerminatedArrayParser.js +18 -0
  40. package/build/elementTerminatedArrayParser.test.js +52 -0
  41. package/build/elementTerminatedSequenceArrayParser.d.ts +3 -0
  42. package/build/elementTerminatedSequenceArrayParser.js +32 -0
  43. package/build/elementTerminatedSequenceArrayParser.test.js +34 -0
  44. package/build/elementTerminatedSequenceParser.d.ts +3 -0
  45. package/build/elementTerminatedSequenceParser.js +27 -0
  46. package/build/elementTerminatedSequenceParser.test.js +34 -0
  47. package/build/exactElementParser.js +10 -5
  48. package/build/exactSequenceParser.d.ts +2 -1
  49. package/build/exactSequenceParser.js +12 -2
  50. package/build/fetchCid.d.ts +1 -0
  51. package/build/fetchCid.js +107 -0
  52. package/build/fixedLengthSequenceParser.d.ts +1 -0
  53. package/build/fixedLengthSequenceParser.js +18 -1
  54. package/build/fixedLengthSequenceParser.test.js +41 -0
  55. package/build/hasExecutable.d.ts +1 -0
  56. package/build/hasExecutable.js +8 -0
  57. package/build/highResolutionTimer.d.ts +16 -0
  58. package/build/highResolutionTimer.js +42 -0
  59. package/build/inputReader.d.ts +11 -0
  60. package/build/inputReader.js +37 -0
  61. package/build/inputReader.test.js +165 -0
  62. package/build/inputReaderState.d.ts +10 -0
  63. package/build/inputReaderState.js +16 -0
  64. package/build/inspect.d.ts +1 -0
  65. package/build/inspect.js +7 -0
  66. package/build/javaKeyStoreParser.test.js +2 -2
  67. package/build/jsonParser.d.ts +2 -0
  68. package/build/jsonParser.js +11 -14
  69. package/build/leb128Parser.d.ts +7 -0
  70. package/build/leb128Parser.js +82 -0
  71. package/build/leb128Parser.test.js +107 -0
  72. package/build/lookaheadParser.d.ts +2 -0
  73. package/build/lookaheadParser.js +14 -0
  74. package/build/negativeLookaheadParser.js +21 -15
  75. package/build/negativeLookaheadParser.test.js +30 -0
  76. package/build/nonEmptyArrayParser.d.ts +2 -0
  77. package/build/nonEmptyArrayParser.js +32 -0
  78. package/build/nonEmptyArrayParser.test.js +16 -0
  79. package/build/parser.d.ts +10 -1
  80. package/build/parser.js +66 -31
  81. package/build/parser.test.js +79 -12
  82. package/build/parserAccessorParser.js +9 -1
  83. package/build/parserConsumedSequenceParser.js +20 -15
  84. package/build/parserContext.d.ts +14 -0
  85. package/build/parserContext.js +56 -27
  86. package/build/parserContext.test.js +27 -0
  87. package/build/parserCreatorCompose.d.ts +1 -0
  88. package/build/parserCreatorCompose.js +8 -2
  89. package/build/parserError.d.ts +6 -0
  90. package/build/parserError.js +6 -6
  91. package/build/parserInputCompanion.d.ts +15 -0
  92. package/build/parserInputCompanion.js +38 -0
  93. package/build/promiseCompose.d.ts +1 -1
  94. package/build/promiseCompose.js +12 -1
  95. package/build/promiseSettled.d.ts +1 -0
  96. package/build/promiseSettled.js +4 -0
  97. package/build/separatedArrayParser.d.ts +2 -0
  98. package/build/separatedArrayParser.js +39 -0
  99. package/build/separatedArrayParser.test.d.ts +1 -0
  100. package/build/separatedArrayParser.test.js +21 -0
  101. package/build/sequenceBuffer.d.ts +10 -0
  102. package/build/sequenceBuffer.js +54 -2
  103. package/build/sequenceBuffer.test.js +57 -0
  104. package/build/sequenceTerminatedSequenceParser.d.ts +5 -0
  105. package/build/sequenceTerminatedSequenceParser.js +32 -0
  106. package/build/sequenceTerminatedSequenceParser.test.d.ts +1 -0
  107. package/build/sequenceTerminatedSequenceParser.test.js +37 -0
  108. package/build/skipParser.d.ts +1 -1
  109. package/build/skipParser.js +4 -2
  110. package/build/skipToParser.d.ts +2 -0
  111. package/build/skipToParser.js +11 -0
  112. package/build/sliceBoundedParser.d.ts +1 -1
  113. package/build/sliceBoundedParser.js +7 -2
  114. package/build/sliceBoundedParser.test.js +35 -1
  115. package/build/smali.d.ts +1 -0
  116. package/build/smali.js +17 -0
  117. package/build/smaliParser.d.ts +12 -0
  118. package/build/smaliParser.js +656 -0
  119. package/build/smaliParser.test.d.ts +1 -0
  120. package/build/smaliParser.test.js +115 -0
  121. package/build/terminatedArrayParser.d.ts +3 -1
  122. package/build/terminatedArrayParser.js +79 -2
  123. package/build/terminatedArrayParser.test.d.ts +1 -0
  124. package/build/terminatedArrayParser.test.js +131 -0
  125. package/build/toAsyncIterable.d.ts +1 -0
  126. package/build/toAsyncIterable.js +7 -0
  127. package/build/toAsyncIterator.d.ts +1 -0
  128. package/build/toAsyncIterator.js +33 -0
  129. package/build/tupleParser.d.ts +4 -0
  130. package/build/tupleParser.js +1 -5
  131. package/build/unionParser.d.ts +2 -1
  132. package/build/unionParser.js +27 -12
  133. package/build/unionParser.test.d.ts +1 -0
  134. package/build/unionParser.test.js +60 -0
  135. package/build/zipParser.d.ts +7 -2
  136. package/build/zipParser.js +36 -12
  137. package/build/zipUnparser.d.ts +4 -1
  138. package/build/zipUnparser.js +55 -26
  139. package/build/zipUnparser.test.js +14 -14
  140. package/package.json +23 -7
  141. package/src/allSettledStream.test.ts +40 -0
  142. package/src/allSettledStream.ts +47 -15
  143. package/src/androidPackage.ts +48 -0
  144. package/src/{apkParser.test.ts → androidPackageParser.test.ts} +6 -7
  145. package/src/{apkParser.test.ts.md → androidPackageParser.test.ts.md} +4 -4
  146. package/src/androidPackageParser.test.ts.snap +0 -0
  147. package/src/androidPackageParser.ts +440 -0
  148. package/src/androidPackageUnparser.test.ts +36 -0
  149. package/src/androidPackageUnparser.ts +120 -0
  150. package/src/arbitrarilySlicedAsyncInterable.ts +7 -2
  151. package/src/arrayParser.test.ts +3 -3
  152. package/src/backsmali.ts +30 -0
  153. package/src/bsonParser.ts +13 -2
  154. package/src/customInvariant.ts +1 -1
  155. package/src/dalvikBytecodeParser/formatParsers.ts +421 -0
  156. package/src/dalvikBytecodeParser.ts +2074 -0
  157. package/src/dalvikExecutable.ts +220 -0
  158. package/src/dalvikExecutableParser/stringSyntaxParser.ts +145 -0
  159. package/src/dalvikExecutableParser/typeParsers.ts +65 -0
  160. package/src/dalvikExecutableParser/typedNumbers.ts +57 -0
  161. package/src/dalvikExecutableParser.test.ts +89 -0
  162. package/src/dalvikExecutableParser.test.ts.md +634 -0
  163. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  164. package/src/dalvikExecutableParser.ts +2768 -0
  165. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +346 -0
  166. package/src/debugLogInputParser.ts +28 -0
  167. package/src/debugLogParser.ts +19 -3
  168. package/src/disjunctionParser.ts +10 -5
  169. package/src/elementTerminatedArrayParser.test.ts +99 -0
  170. package/src/elementTerminatedArrayParser.ts +31 -0
  171. package/src/elementTerminatedSequenceArrayParser.test.ts +54 -0
  172. package/src/elementTerminatedSequenceArrayParser.ts +52 -0
  173. package/src/elementTerminatedSequenceParser.test.ts +54 -0
  174. package/src/elementTerminatedSequenceParser.ts +43 -0
  175. package/src/exactElementParser.ts +17 -11
  176. package/src/exactSequenceParser.ts +23 -2
  177. package/src/fetchCid.ts +125 -0
  178. package/src/fixedLengthSequenceParser.test.ts +77 -0
  179. package/src/fixedLengthSequenceParser.ts +28 -1
  180. package/src/hasExecutable.ts +11 -0
  181. package/src/highResolutionTimer.ts +49 -0
  182. package/src/inputReader.test.ts +209 -0
  183. package/src/inputReader.ts +75 -0
  184. package/src/inputReaderState.ts +33 -0
  185. package/src/inspect.ts +9 -0
  186. package/src/javaKeyStoreParser.test.ts +2 -3
  187. package/src/jsonParser.ts +13 -25
  188. package/src/leb128Parser.test.ts +171 -0
  189. package/src/leb128Parser.ts +125 -0
  190. package/src/lookaheadParser.ts +19 -0
  191. package/src/negativeLookaheadParser.test.ts +53 -0
  192. package/src/negativeLookaheadParser.ts +26 -14
  193. package/src/nonEmptyArrayParser.test.ts +20 -0
  194. package/src/nonEmptyArrayParser.ts +44 -0
  195. package/src/optionalParser.ts +1 -0
  196. package/src/parser.test.ts +131 -12
  197. package/src/parser.test.ts.md +21 -21
  198. package/src/parser.test.ts.snap +0 -0
  199. package/src/parser.ts +149 -45
  200. package/src/parserAccessorParser.ts +12 -2
  201. package/src/parserConsumedSequenceParser.ts +25 -16
  202. package/src/parserContext.test.ts +31 -0
  203. package/src/parserContext.ts +109 -37
  204. package/src/parserCreatorCompose.ts +20 -2
  205. package/src/parserError.ts +9 -6
  206. package/src/parserInputCompanion.ts +55 -0
  207. package/src/promiseCompose.ts +17 -3
  208. package/src/promiseSettled.ts +6 -0
  209. package/src/separatedArrayParser.test.ts +34 -0
  210. package/src/separatedArrayParser.ts +55 -0
  211. package/src/sequenceBuffer.test.ts +70 -0
  212. package/src/sequenceBuffer.ts +88 -2
  213. package/src/sequenceTerminatedSequenceParser.test.ts +60 -0
  214. package/src/sequenceTerminatedSequenceParser.ts +62 -0
  215. package/src/skipParser.ts +7 -5
  216. package/src/skipToParser.ts +16 -0
  217. package/src/sliceBoundedParser.test.ts +43 -1
  218. package/src/sliceBoundedParser.ts +19 -1
  219. package/src/smali.ts +24 -0
  220. package/src/smaliParser.test.ts +132 -0
  221. package/src/smaliParser.test.ts.md +2320 -0
  222. package/src/smaliParser.test.ts.snap +0 -0
  223. package/src/smaliParser.ts +1166 -0
  224. package/src/terminatedArrayParser.test.ts +258 -0
  225. package/src/terminatedArrayParser.ts +108 -3
  226. package/src/toAsyncIterable.ts +7 -0
  227. package/src/toAsyncIterator.ts +48 -0
  228. package/src/tupleParser.ts +8 -5
  229. package/src/unionParser.test.ts +79 -0
  230. package/src/unionParser.ts +44 -16
  231. package/src/zipParser.ts +77 -18
  232. package/src/zipUnparser.test.ts +18 -18
  233. package/src/zipUnparser.ts +88 -27
  234. package/build/apk.d.ts +0 -39
  235. package/build/apkParser.d.ts +0 -16
  236. package/build/apkParser.js +0 -164
  237. package/build/apkUnparser.d.ts +0 -4
  238. package/build/apkUnparser.test.js +0 -26
  239. package/build/arbitraryDosDate.d.ts +0 -2
  240. package/build/arbitraryDosDate.js +0 -8
  241. package/build/arbitraryZipEntry.d.ts +0 -3
  242. package/build/arbitraryZipEntry.js +0 -26
  243. package/build/createDisjunctionParser.d.ts +0 -2
  244. package/build/createDisjunctionParser.js +0 -47
  245. package/build/createExactParser.d.ts +0 -2
  246. package/build/createExactParser.js +0 -12
  247. package/build/createSequentialUnionParser.d.ts +0 -2
  248. package/build/createSequentialUnionParser.js +0 -69
  249. package/build/fixedLengthChunkParser.d.ts +0 -2
  250. package/build/fixedLengthChunkParser.js +0 -12
  251. package/build/fixedLengthParser.d.ts +0 -2
  252. package/build/fixedLengthParser.js +0 -12
  253. package/build/inputChunkBuffer.d.ts +0 -15
  254. package/build/inputChunkBuffer.js +0 -40
  255. package/build/inputChunkBuffer.test.js +0 -34
  256. package/build/inputCompanion.d.ts +0 -18
  257. package/build/inputCompanion.js +0 -28
  258. package/build/invariantDefined.d.ts +0 -1
  259. package/build/invariantDefined.js +0 -5
  260. package/build/invariantIdentity.d.ts +0 -3
  261. package/build/invariantIdentity.js +0 -5
  262. package/build/javaKeystoreParser.d.ts +0 -2
  263. package/build/javaKeystoreParser.js +0 -7
  264. package/build/jsonParser2.d.ts +0 -3
  265. package/build/jsonParser2.js +0 -52
  266. package/build/jsonParser2.test.js +0 -22
  267. package/build/negativeLookahead.d.ts +0 -2
  268. package/build/negativeLookahead.js +0 -18
  269. package/build/parserCompose.d.ts +0 -3
  270. package/build/parserCompose.js +0 -7
  271. package/build/parserImplementationInvariantInvariant.d.ts +0 -3
  272. package/build/parserImplementationInvariantInvariant.js +0 -15
  273. package/build/parserInvariant.d.ts +0 -4
  274. package/build/parserInvariant.js +0 -11
  275. package/build/promiseFish.d.ts +0 -1
  276. package/build/promiseFish.js +0 -3
  277. package/build/sequenceParser.d.ts +0 -3
  278. package/build/sequenceParser.js +0 -10
  279. package/build/terminatedSequenceParser.d.ts +0 -2
  280. package/build/terminatedSequenceParser.js +0 -24
  281. package/build/unparserInputCompanion.d.ts +0 -15
  282. package/build/unparserInputCompanion.js +0 -13
  283. package/build/zipEntry.d.ts +0 -28
  284. package/build/zipFile.d.ts +0 -32
  285. package/build/zipFileEntry.d.ts +0 -6
  286. package/src/apk.ts +0 -48
  287. package/src/apkParser.test.ts.snap +0 -0
  288. package/src/apkParser.ts +0 -392
  289. package/src/apkUnparser.test.ts +0 -37
  290. package/src/apkUnparser.ts +0 -120
  291. package/src/invariantDefined.ts +0 -6
  292. package/src/invariantIdentity.ts +0 -8
  293. /package/build/{apk.js → androidPackage.js} +0 -0
  294. /package/build/{apkParser.test.d.ts → androidPackageParser.test.d.ts} +0 -0
  295. /package/build/{apkUnparser.test.d.ts → androidPackageUnparser.test.d.ts} +0 -0
  296. /package/build/{arbitraryDosPermissions.d.ts → dalvikExecutableParser.test.d.ts} +0 -0
  297. /package/build/{arbitraryDosPermissions.js → dalvikExecutableParserAgainstSmaliParser.test.d.ts} +0 -0
  298. /package/build/{inputChunkBuffer.test.d.ts → elementTerminatedArrayParser.test.d.ts} +0 -0
  299. /package/build/{jsonParser2.test.d.ts → elementTerminatedSequenceArrayParser.test.d.ts} +0 -0
  300. /package/build/{parserParsingInvariant.d.ts → elementTerminatedSequenceParser.test.d.ts} +0 -0
  301. /package/build/{parserParsingInvariant.js → fixedLengthSequenceParser.test.d.ts} +0 -0
  302. /package/build/{zipEntry.js → leb128Parser.test.d.ts} +0 -0
  303. /package/build/{zipFile.js → negativeLookaheadParser.test.d.ts} +0 -0
  304. /package/build/{zipFileEntry.js → nonEmptyArrayParser.test.d.ts} +0 -0
@@ -0,0 +1,836 @@
1
+ import { createArrayParser } from "./arrayParser.js";
2
+ import { createDalvikBytecodeFormat21cParser, createDalvikBytecodeFormat21sParser, createDalvikBytecodeFormat21tParser, createDalvikBytecodeFormat22bParser, createDalvikBytecodeFormat22cParser, createDalvikBytecodeFormat22sParser, createDalvikBytecodeFormat22tParser, dalvikBytecodeFormat23xParser, dalvikBytecodeFormat31iParser, createDalvikBytecodeFormat35cParser, createDalvikBytecodeFormat3rcParser, dalvikBytecodeFormat10tParser, dalvikBytecodeFormat10xParser, dalvikBytecodeFormat11xParser, dalvikBytecodeFormat12xParser, dalvikBytecodeFormat20tParser, dalvikBytecodeFormat22xParser, nibblesParser, dalvikBytecodeFormat32xParser } from "./dalvikBytecodeParser/formatParsers.js";
3
+ import { isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoStringIds, isoIndexIntoTypeIds } from "./dalvikExecutableParser/typedNumbers.js";
4
+ import { createExactElementParser } from "./exactElementParser.js";
5
+ import { setParserName } from "./parser.js";
6
+ import { promiseCompose } from "./promiseCompose.js";
7
+ import { createSliceBoundedParser } from "./sliceBoundedParser.js";
8
+ import { createTupleParser } from "./tupleParser.js";
9
+ import { createUnionParser } from "./unionParser.js";
10
+ // https://source.android.com/docs/core/runtime/dalvik-bytecode
11
+ const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
12
+ const opcode = await parserContext.read(0);
13
+ parserContext.invariant(((opcode >= 0x3e && opcode <= 0x43)
14
+ || (opcode === 0x73)
15
+ || (opcode >= 0x79 && opcode <= 0x7a)
16
+ || (opcode >= 0xe3 && opcode <= 0xf9)), 'Expected unused opcode');
17
+ parserContext.skip(1);
18
+ };
19
+ setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
20
+ const dalvikBytecodeOperationNoOperationParser = promiseCompose(createExactElementParser(0x00), () => ({
21
+ operation: 'no-operation',
22
+ }));
23
+ setParserName(dalvikBytecodeOperationNoOperationParser, 'dalvikBytecodeOperationNoOperationParser');
24
+ const createDalvikBytecodeOperationInvoke = (operation, opcode) => promiseCompose(createTupleParser([
25
+ createExactElementParser(opcode),
26
+ createDalvikBytecodeFormat35cParser({
27
+ isoIndex: isoIndexIntoMethodIds,
28
+ }),
29
+ ]), ([_opcode, { index, registers }]) => ({
30
+ operation,
31
+ methodIndex: index,
32
+ registers,
33
+ }));
34
+ const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual', 0x6e);
35
+ const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super', 0x6f);
36
+ const dalvikBytecodeOperationInvokeDirectParser = createDalvikBytecodeOperationInvoke('invoke-direct', 0x70);
37
+ const dalvikBytecodeOperationInvokeStaticParser = createDalvikBytecodeOperationInvoke('invoke-static', 0x71);
38
+ const dalvikBytecodeOperationInvokeInterfaceParser = createDalvikBytecodeOperationInvoke('invoke-interface', 0x72);
39
+ const dalvikBytecodeOperationInvokeParser = createUnionParser([
40
+ dalvikBytecodeOperationInvokeVirtualParser,
41
+ dalvikBytecodeOperationInvokeSuperParser,
42
+ dalvikBytecodeOperationInvokeDirectParser,
43
+ dalvikBytecodeOperationInvokeStaticParser,
44
+ dalvikBytecodeOperationInvokeInterfaceParser,
45
+ ]);
46
+ setParserName(dalvikBytecodeOperationInvokeParser, 'dalvikBytecodeOperationInvokeParser');
47
+ const createDalvikBytecodeOperationInvokeRange = (operation, opcode) => promiseCompose(createTupleParser([
48
+ createExactElementParser(opcode),
49
+ createDalvikBytecodeFormat3rcParser({
50
+ isoIndex: isoIndexIntoMethodIds,
51
+ }),
52
+ ]), ([_opcode, { index, registers }]) => ({
53
+ operation,
54
+ methodIndex: index,
55
+ registers,
56
+ }));
57
+ const dalvikBytecodeOperationInvokeVirtualRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-virtual/range', 0x74);
58
+ const dalvikBytecodeOperationInvokeSuperRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-super/range', 0x75);
59
+ const dalvikBytecodeOperationInvokeDirectRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-direct/range', 0x76);
60
+ const dalvikBytecodeOperationInvokeStaticRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-static/range', 0x77);
61
+ const dalvikBytecodeOperationInvokeInterfaceRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-interface/range', 0x78);
62
+ const dalvikBytecodeOperationInvokeRangeParser = createUnionParser([
63
+ dalvikBytecodeOperationInvokeVirtualRangeParser,
64
+ dalvikBytecodeOperationInvokeSuperRangeParser,
65
+ dalvikBytecodeOperationInvokeDirectRangeParser,
66
+ dalvikBytecodeOperationInvokeStaticRangeParser,
67
+ dalvikBytecodeOperationInvokeInterfaceRangeParser,
68
+ ]);
69
+ setParserName(dalvikBytecodeOperationInvokeRangeParser, 'dalvikBytecodeOperationInvokeRangeParser');
70
+ const dalvikBytecodeOperationGotoParser = promiseCompose(createTupleParser([
71
+ createExactElementParser(0x28),
72
+ dalvikBytecodeFormat10tParser,
73
+ ]), ([_opcode, { branchOffset }]) => ({
74
+ operation: 'goto',
75
+ branchOffset,
76
+ }));
77
+ const dalvikBytecodeOperationGoto16Parser = promiseCompose(createTupleParser([
78
+ createExactElementParser(0x29),
79
+ dalvikBytecodeFormat20tParser,
80
+ ]), ([_opcode, { branchOffset }]) => ({
81
+ operation: 'goto/16',
82
+ branchOffset,
83
+ }));
84
+ const dalvikBytecodeOperationInstanceOfParser = promiseCompose(createTupleParser([
85
+ createExactElementParser(0x20),
86
+ createDalvikBytecodeFormat22cParser({
87
+ isoIndex: isoIndexIntoTypeIds,
88
+ }),
89
+ ]), ([_opcode, { registers, index }]) => ({
90
+ operation: 'instance-of',
91
+ registers,
92
+ typeIndex: index,
93
+ }));
94
+ setParserName(dalvikBytecodeOperationInstanceOfParser, 'dalvikBytecodeOperationInstanceOfParser');
95
+ const createDalvikBytecodeOperationArrayElement = (operation, opcode) => promiseCompose(createTupleParser([
96
+ createExactElementParser(opcode),
97
+ dalvikBytecodeFormat23xParser,
98
+ ]), ([_opcode, { registers }]) => ({
99
+ operation,
100
+ registers,
101
+ }));
102
+ const dalvikBytecodeOperationArrayElementGetParser = createDalvikBytecodeOperationArrayElement('aget', 0x44);
103
+ const dalvikBytecodeOperationArrayElementGetWideParser = createDalvikBytecodeOperationArrayElement('aget-wide', 0x45);
104
+ const dalvikBytecodeOperationArrayElementGetObjectParser = createDalvikBytecodeOperationArrayElement('aget-object', 0x46);
105
+ const dalvikBytecodeOperationArrayElementGetBooleanParser = createDalvikBytecodeOperationArrayElement('aget-boolean', 0x47);
106
+ const dalvikBytecodeOperationArrayElementGetByteParser = createDalvikBytecodeOperationArrayElement('aget-byte', 0x48);
107
+ const dalvikBytecodeOperationArrayElementGetCharParser = createDalvikBytecodeOperationArrayElement('aget-char', 0x49);
108
+ const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short', 0x4a);
109
+ const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput', 0x4b);
110
+ const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide', 0x4c);
111
+ const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object', 0x4d);
112
+ const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean', 0x4e);
113
+ const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte', 0x4f);
114
+ const dalvikBytecodeOperationArrayElementPutCharParser = createDalvikBytecodeOperationArrayElement('aput-char', 0x50);
115
+ const dalvikBytecodeOperationArrayElementPutShortParser = createDalvikBytecodeOperationArrayElement('aput-short', 0x51);
116
+ const dalvikBytecodeOperationArrayElementParser = createUnionParser([
117
+ dalvikBytecodeOperationArrayElementGetParser,
118
+ dalvikBytecodeOperationArrayElementGetWideParser,
119
+ dalvikBytecodeOperationArrayElementGetObjectParser,
120
+ dalvikBytecodeOperationArrayElementGetBooleanParser,
121
+ dalvikBytecodeOperationArrayElementGetByteParser,
122
+ dalvikBytecodeOperationArrayElementGetCharParser,
123
+ dalvikBytecodeOperationArrayElementGetShortParser,
124
+ dalvikBytecodeOperationArrayElementPutParser,
125
+ dalvikBytecodeOperationArrayElementPutWideParser,
126
+ dalvikBytecodeOperationArrayElementPutObjectParser,
127
+ dalvikBytecodeOperationArrayElementPutBooleanParser,
128
+ dalvikBytecodeOperationArrayElementPutByteParser,
129
+ dalvikBytecodeOperationArrayElementPutCharParser,
130
+ dalvikBytecodeOperationArrayElementPutShortParser,
131
+ ]);
132
+ setParserName(dalvikBytecodeOperationArrayElementParser, 'dalvikBytecodeOperationArrayElementParser');
133
+ const createDalvikBytecodeOperationInstanceField = (operation, opcode) => promiseCompose(createTupleParser([
134
+ createExactElementParser(opcode),
135
+ createDalvikBytecodeFormat22cParser({
136
+ isoIndex: isoIndexIntoFieldIds,
137
+ }),
138
+ ]), ([_opcode, { registers, index }]) => ({
139
+ operation,
140
+ registers,
141
+ fieldIndex: index,
142
+ }));
143
+ const dalvikBytecodeOperationInstanceFieldGetParser = createDalvikBytecodeOperationInstanceField('iget', 0x52);
144
+ const dalvikBytecodeOperationInstanceFieldGetWideParser = createDalvikBytecodeOperationInstanceField('iget-wide', 0x53);
145
+ const dalvikBytecodeOperationInstanceFieldGetObjectParser = createDalvikBytecodeOperationInstanceField('iget-object', 0x54);
146
+ const dalvikBytecodeOperationInstanceFieldGetBooleanParser = createDalvikBytecodeOperationInstanceField('iget-boolean', 0x55);
147
+ const dalvikBytecodeOperationInstanceFieldGetByteParser = createDalvikBytecodeOperationInstanceField('iget-byte', 0x56);
148
+ const dalvikBytecodeOperationInstanceFieldGetCharParser = createDalvikBytecodeOperationInstanceField('iget-char', 0x57);
149
+ const dalvikBytecodeOperationInstanceFieldGetShortParser = createDalvikBytecodeOperationInstanceField('iget-short', 0x58);
150
+ const dalvikBytecodeOperationInstanceFieldPutParser = createDalvikBytecodeOperationInstanceField('iput', 0x59);
151
+ const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide', 0x5a);
152
+ const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object', 0x5b);
153
+ const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean', 0x5c);
154
+ const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte', 0x5d);
155
+ const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char', 0x5e);
156
+ const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short', 0x5f);
157
+ const dalvikBytecodeOperationInstanceFieldParser = createUnionParser([
158
+ dalvikBytecodeOperationInstanceFieldGetParser,
159
+ dalvikBytecodeOperationInstanceFieldGetWideParser,
160
+ dalvikBytecodeOperationInstanceFieldGetObjectParser,
161
+ dalvikBytecodeOperationInstanceFieldGetBooleanParser,
162
+ dalvikBytecodeOperationInstanceFieldGetByteParser,
163
+ dalvikBytecodeOperationInstanceFieldGetCharParser,
164
+ dalvikBytecodeOperationInstanceFieldGetShortParser,
165
+ dalvikBytecodeOperationInstanceFieldPutParser,
166
+ dalvikBytecodeOperationInstanceFieldPutWideParser,
167
+ dalvikBytecodeOperationInstanceFieldPutObjectParser,
168
+ dalvikBytecodeOperationInstanceFieldPutBooleanParser,
169
+ dalvikBytecodeOperationInstanceFieldPutByteParser,
170
+ dalvikBytecodeOperationInstanceFieldPutCharParser,
171
+ dalvikBytecodeOperationInstanceFieldPutShortParser,
172
+ ]);
173
+ setParserName(dalvikBytecodeOperationInstanceFieldParser, 'dalvikBytecodeOperationInstanceFieldParser');
174
+ const createDalvikBytecodeOperationStaticField = (operation, opcode) => promiseCompose(createTupleParser([
175
+ createExactElementParser(opcode),
176
+ createDalvikBytecodeFormat21cParser({
177
+ isoIndex: isoIndexIntoFieldIds,
178
+ }),
179
+ ]), ([_opcode, { registers, index }]) => ({
180
+ operation,
181
+ registers,
182
+ fieldIndex: index,
183
+ }));
184
+ const dalvikBytecodeOperationStaticFieldGetParser = createDalvikBytecodeOperationStaticField('sget', 0x60);
185
+ const dalvikBytecodeOperationStaticFieldGetWideParser = createDalvikBytecodeOperationStaticField('sget-wide', 0x61);
186
+ const dalvikBytecodeOperationStaticFieldGetObjectParser = createDalvikBytecodeOperationStaticField('sget-object', 0x62);
187
+ const dalvikBytecodeOperationStaticFieldGetBooleanParser = createDalvikBytecodeOperationStaticField('sget-boolean', 0x63);
188
+ const dalvikBytecodeOperationStaticFieldGetByteParser = createDalvikBytecodeOperationStaticField('sget-byte', 0x64);
189
+ const dalvikBytecodeOperationStaticFieldGetCharParser = createDalvikBytecodeOperationStaticField('sget-char', 0x65);
190
+ const dalvikBytecodeOperationStaticFieldGetShortParser = createDalvikBytecodeOperationStaticField('sget-short', 0x66);
191
+ const dalvikBytecodeOperationStaticFieldPutParser = createDalvikBytecodeOperationStaticField('sput', 0x67);
192
+ const dalvikBytecodeOperationStaticFieldPutWideParser = createDalvikBytecodeOperationStaticField('sput-wide', 0x68);
193
+ const dalvikBytecodeOperationStaticFieldPutObjectParser = createDalvikBytecodeOperationStaticField('sput-object', 0x69);
194
+ const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean', 0x6a);
195
+ const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte', 0x6b);
196
+ const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char', 0x6c);
197
+ const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short', 0x6d);
198
+ const dalvikBytecodeOperationStaticFieldParser = createUnionParser([
199
+ dalvikBytecodeOperationStaticFieldGetParser,
200
+ dalvikBytecodeOperationStaticFieldGetWideParser,
201
+ dalvikBytecodeOperationStaticFieldGetObjectParser,
202
+ dalvikBytecodeOperationStaticFieldGetBooleanParser,
203
+ dalvikBytecodeOperationStaticFieldGetByteParser,
204
+ dalvikBytecodeOperationStaticFieldGetCharParser,
205
+ dalvikBytecodeOperationStaticFieldGetShortParser,
206
+ dalvikBytecodeOperationStaticFieldPutParser,
207
+ dalvikBytecodeOperationStaticFieldPutWideParser,
208
+ dalvikBytecodeOperationStaticFieldPutObjectParser,
209
+ dalvikBytecodeOperationStaticFieldPutBooleanParser,
210
+ dalvikBytecodeOperationStaticFieldPutByteParser,
211
+ dalvikBytecodeOperationStaticFieldPutCharParser,
212
+ dalvikBytecodeOperationStaticFieldPutShortParser,
213
+ ]);
214
+ setParserName(dalvikBytecodeOperationStaticFieldParser, 'dalvikBytecodeOperationStaticFieldParser');
215
+ const createDalvikBytecodeOperationBinaryOperationLiteral8 = (operation, opcode) => promiseCompose(createTupleParser([
216
+ createExactElementParser(opcode),
217
+ createDalvikBytecodeFormat22bParser(),
218
+ ]), ([_opcode, { registers, value }]) => ({
219
+ operation,
220
+ registers,
221
+ value,
222
+ }));
223
+ const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8', 0xd8);
224
+ const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8', 0xd9);
225
+ const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8', 0xda);
226
+ const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8', 0xdb);
227
+ const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8', 0xdc);
228
+ const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8', 0xdd);
229
+ const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8', 0xde);
230
+ const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8', 0xdf);
231
+ const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8', 0xe0);
232
+ const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8', 0xe1);
233
+ const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8', 0xe2);
234
+ const dalvikBytecodeOperationBinaryOperationLiteral8Parser = createUnionParser([
235
+ dalvikBytecodeOperationAddIntLiteral8Parser,
236
+ dalvikBytecodeOperationReverseSubtractIntLiteral8Parser,
237
+ dalvikBytecodeOperationMultiplyIntLiteral8Parser,
238
+ dalvikBytecodeOperationDivideIntLiteral8Parser,
239
+ dalvikBytecodeOperationRemainderIntLiteral8Parser,
240
+ dalvikBytecodeOperationAndIntLiteral8Parser,
241
+ dalvikBytecodeOperationOrIntLiteral8Parser,
242
+ dalvikBytecodeOperationXorIntLiteral8Parser,
243
+ dalvikBytecodeOperationShiftLeftIntLiteral8Parser,
244
+ dalvikBytecodeOperationShiftRightIntLiteral8Parser,
245
+ dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser,
246
+ ]);
247
+ setParserName(dalvikBytecodeOperationBinaryOperationLiteral8Parser, 'dalvikBytecodeOperationBinaryOperationLiteral8Parser');
248
+ const createDalvikBytecodeOperationBinaryOperationLiteral16 = (operation, opcode) => promiseCompose(createTupleParser([
249
+ createExactElementParser(opcode),
250
+ createDalvikBytecodeFormat22sParser(),
251
+ ]), ([_opcode, { registers, value }]) => ({
252
+ operation,
253
+ registers,
254
+ value,
255
+ }));
256
+ const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16', 0xd0);
257
+ const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int/lit16', 0xd1);
258
+ const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16', 0xd2);
259
+ const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16', 0xd3);
260
+ const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16', 0xd4);
261
+ const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16', 0xd5);
262
+ const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16', 0xd6);
263
+ const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16', 0xd7);
264
+ const dalvikBytecodeOperationBinaryOperationLiteral16Parser = createUnionParser([
265
+ dalvikBytecodeOperationAddIntLiteral16Parser,
266
+ dalvikBytecodeOperationReverseSubtractIntLiteral16Parser,
267
+ dalvikBytecodeOperationMultiplyIntLiteral16Parser,
268
+ dalvikBytecodeOperationDivideIntLiteral16Parser,
269
+ dalvikBytecodeOperationRemainderIntLiteral16Parser,
270
+ dalvikBytecodeOperationAndIntLiteral16Parser,
271
+ dalvikBytecodeOperationOrIntLiteral16Parser,
272
+ dalvikBytecodeOperationXorIntLiteral16Parser,
273
+ ]);
274
+ setParserName(dalvikBytecodeOperationBinaryOperationLiteral16Parser, 'dalvikBytecodeOperationBinaryOperationLiteral16Parser');
275
+ const createDalvikBytecodeOperationBinaryOperationInPlace = (operation, opcode) => promiseCompose(createTupleParser([
276
+ createExactElementParser(opcode),
277
+ dalvikBytecodeFormat12xParser,
278
+ ]), ([_opcode, { registers }]) => ({
279
+ operation,
280
+ registers,
281
+ }));
282
+ const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr', 0xb0);
283
+ const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rsub-int', 0xb1);
284
+ const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr', 0xb2);
285
+ const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr', 0xb3);
286
+ const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr', 0xb4);
287
+ const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr', 0xb5);
288
+ const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr', 0xb6);
289
+ const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr', 0xb7);
290
+ const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr', 0xb8);
291
+ const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr', 0xb9);
292
+ const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr', 0xba);
293
+ const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr', 0xbb);
294
+ const dalvikBytecodeOperationReverseSubtractLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rsub-long', 0xbc);
295
+ const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr', 0xbd);
296
+ const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr', 0xbe);
297
+ const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr', 0xbf);
298
+ const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr', 0xc0);
299
+ const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr', 0xc1);
300
+ const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr', 0xc2);
301
+ const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr', 0xc3);
302
+ const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr', 0xc4);
303
+ const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr', 0xc5);
304
+ const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr', 0xc6);
305
+ const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr', 0xc7);
306
+ const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr', 0xc8);
307
+ const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr', 0xc9);
308
+ const dalvikBytecodeOperationAddDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-double/2addr', 0xca);
309
+ const dalvikBytecodeOperationSubtractDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-double/2addr', 0xcb);
310
+ const dalvikBytecodeOperationMultiplyDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-double/2addr', 0xcc);
311
+ const dalvikBytecodeOperationDivideDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-double/2addr', 0xcd);
312
+ const dalvikBytecodeOperationRemainderDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-double/2addr', 0xce);
313
+ const dalvikBytecodeOperationBinaryOperationInPlaceParser = createUnionParser([
314
+ dalvikBytecodeOperationAddIntInPlaceParser,
315
+ dalvikBytecodeOperationReverseSubtractIntInPlaceParser,
316
+ dalvikBytecodeOperationMultiplyIntInPlaceParser,
317
+ dalvikBytecodeOperationDivideIntInPlaceParser,
318
+ dalvikBytecodeOperationRemainderIntInPlaceParser,
319
+ dalvikBytecodeOperationAndIntInPlaceParser,
320
+ dalvikBytecodeOperationOrIntInPlaceParser,
321
+ dalvikBytecodeOperationXorIntInPlaceParser,
322
+ dalvikBytecodeOperationShiftLeftIntInPlaceParser,
323
+ dalvikBytecodeOperationShiftRightIntInPlaceParser,
324
+ dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser,
325
+ dalvikBytecodeOperationAddLongInPlaceParser,
326
+ dalvikBytecodeOperationReverseSubtractLongInPlaceParser,
327
+ dalvikBytecodeOperationMultiplyLongInPlaceParser,
328
+ dalvikBytecodeOperationDivideLongInPlaceParser,
329
+ dalvikBytecodeOperationRemainderLongInPlaceParser,
330
+ dalvikBytecodeOperationAndLongInPlaceParser,
331
+ dalvikBytecodeOperationOrLongInPlaceParser,
332
+ dalvikBytecodeOperationXorLongInPlaceParser,
333
+ dalvikBytecodeOperationShiftLeftLongInPlaceParser,
334
+ dalvikBytecodeOperationShiftRightLongInPlaceParser,
335
+ dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser,
336
+ dalvikBytecodeOperationAddFloatInPlaceParser,
337
+ dalvikBytecodeOperationSubtractFloatInPlaceParser,
338
+ dalvikBytecodeOperationMultiplyFloatInPlaceParser,
339
+ dalvikBytecodeOperationDivideFloatInPlaceParser,
340
+ dalvikBytecodeOperationAddDoubleInPlaceParser,
341
+ dalvikBytecodeOperationSubtractDoubleInPlaceParser,
342
+ dalvikBytecodeOperationMultiplyDoubleInPlaceParser,
343
+ dalvikBytecodeOperationDivideDoubleInPlaceParser,
344
+ dalvikBytecodeOperationRemainderDoubleInPlaceParser,
345
+ ]);
346
+ setParserName(dalvikBytecodeOperationBinaryOperationInPlaceParser, 'dalvikBytecodeOperationBinaryOperationInPlaceParser');
347
+ const createDalvikBytecodeOperationBinaryOperation = (operation, opcode) => promiseCompose(createTupleParser([
348
+ createExactElementParser(opcode),
349
+ dalvikBytecodeFormat23xParser,
350
+ ]), ([_opcode, { registers }]) => ({
351
+ operation,
352
+ registers,
353
+ }));
354
+ const dalvikBytecodeOperationAddIntParser = createDalvikBytecodeOperationBinaryOperation('add-int', 0x90);
355
+ const dalvikBytecodeOperationSubtractIntParser = createDalvikBytecodeOperationBinaryOperation('sub-int', 0x91);
356
+ const dalvikBytecodeOperationMultiplyIntParser = createDalvikBytecodeOperationBinaryOperation('mul-int', 0x92);
357
+ const dalvikBytecodeOperationDivideIntParser = createDalvikBytecodeOperationBinaryOperation('div-int', 0x93);
358
+ const dalvikBytecodeOperationRemainderIntParser = createDalvikBytecodeOperationBinaryOperation('rem-int', 0x94);
359
+ const dalvikBytecodeOperationAndIntParser = createDalvikBytecodeOperationBinaryOperation('and-int', 0x95);
360
+ const dalvikBytecodeOperationOrIntParser = createDalvikBytecodeOperationBinaryOperation('or-int', 0x96);
361
+ const dalvikBytecodeOperationXorIntParser = createDalvikBytecodeOperationBinaryOperation('xor-int', 0x97);
362
+ const dalvikBytecodeOperationShiftLeftIntParser = createDalvikBytecodeOperationBinaryOperation('shl-int', 0x98);
363
+ const dalvikBytecodeOperationShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('shr-int', 0x99);
364
+ const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int', 0x9a);
365
+ const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long', 0x9b);
366
+ const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long', 0x9c);
367
+ const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long', 0x9d);
368
+ const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long', 0x9e);
369
+ const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long', 0x9f);
370
+ const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long', 0xa0);
371
+ const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long', 0xa1);
372
+ const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long', 0xa2);
373
+ const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long', 0xa3);
374
+ const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long', 0xa4);
375
+ const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long', 0xa5);
376
+ const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float', 0xa6);
377
+ const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xa7);
378
+ const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xa8);
379
+ const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xa9);
380
+ const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xaa);
381
+ const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xab);
382
+ const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xac);
383
+ const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double', 0xad);
384
+ const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double', 0xae);
385
+ const dalvikBytecodeOperationBinaryOperationParser = createUnionParser([
386
+ dalvikBytecodeOperationAddIntParser,
387
+ dalvikBytecodeOperationSubtractIntParser,
388
+ dalvikBytecodeOperationMultiplyIntParser,
389
+ dalvikBytecodeOperationDivideIntParser,
390
+ dalvikBytecodeOperationRemainderIntParser,
391
+ dalvikBytecodeOperationAndIntParser,
392
+ dalvikBytecodeOperationOrIntParser,
393
+ dalvikBytecodeOperationXorIntParser,
394
+ dalvikBytecodeOperationShiftLeftIntParser,
395
+ dalvikBytecodeOperationShiftRightIntParser,
396
+ dalvikBytecodeOperationUnsignedShiftRightIntParser,
397
+ dalvikBytecodeOperationAddLongParser,
398
+ dalvikBytecodeOperationSubtractLongParser,
399
+ dalvikBytecodeOperationMultiplyLongParser,
400
+ dalvikBytecodeOperationDivideLongParser,
401
+ dalvikBytecodeOperationRemainderLongParser,
402
+ dalvikBytecodeOperationAndLongParser,
403
+ dalvikBytecodeOperationOrLongParser,
404
+ dalvikBytecodeOperationXorLongParser,
405
+ dalvikBytecodeOperationShiftLeftLongParser,
406
+ dalvikBytecodeOperationShiftRightLongParser,
407
+ dalvikBytecodeOperationUnsignedShiftRightLongParser,
408
+ dalvikBytecodeOperationAddFloatParser,
409
+ dalvikBytecodeOperationSubtractFloatParser,
410
+ dalvikBytecodeOperationMultiplyFloatParser,
411
+ dalvikBytecodeOperationDivideFloatParser,
412
+ dalvikBytecodeOperationAddDoubleParser,
413
+ dalvikBytecodeOperationSubtractDoubleParser,
414
+ dalvikBytecodeOperationMultiplyDoubleParser,
415
+ dalvikBytecodeOperationDivideDoubleParser,
416
+ dalvikBytecodeOperationRemainderDoubleParser,
417
+ ]);
418
+ setParserName(dalvikBytecodeOperationBinaryOperationParser, 'dalvikBytecodeOperationBinaryOperationParser');
419
+ const createDalvikBytecodeOperationUnaryOperation = (operation, opcode) => promiseCompose(createTupleParser([
420
+ createExactElementParser(opcode),
421
+ dalvikBytecodeFormat12xParser,
422
+ ]), ([_opcode, { registers }]) => ({
423
+ operation,
424
+ registers,
425
+ }));
426
+ const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int', 0x7b);
427
+ const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int', 0x7c);
428
+ const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long', 0x7d);
429
+ const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long', 0x7e);
430
+ const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float', 0x7f);
431
+ const dalvikBytecodeOperationNegateDoubleParser = createDalvikBytecodeOperationUnaryOperation('neg-double', 0x80);
432
+ const dalvikBytecodeOperationIntToLongParser = createDalvikBytecodeOperationUnaryOperation('int-to-long', 0x81);
433
+ const dalvikBytecodeOperationIntToFloatParser = createDalvikBytecodeOperationUnaryOperation('int-to-float', 0x82);
434
+ const dalvikBytecodeOperationIntToDoubleParser = createDalvikBytecodeOperationUnaryOperation('int-to-double', 0x83);
435
+ const dalvikBytecodeOperationLongToIntParser = createDalvikBytecodeOperationUnaryOperation('long-to-int', 0x84);
436
+ const dalvikBytecodeOperationLongToFloatParser = createDalvikBytecodeOperationUnaryOperation('long-to-float', 0x85);
437
+ const dalvikBytecodeOperationLongToDoubleParser = createDalvikBytecodeOperationUnaryOperation('long-to-double', 0x86);
438
+ const dalvikBytecodeOperationFloatToIntParser = createDalvikBytecodeOperationUnaryOperation('float-to-int', 0x87);
439
+ const dalvikBytecodeOperationFloatToLongParser = createDalvikBytecodeOperationUnaryOperation('float-to-long', 0x88);
440
+ const dalvikBytecodeOperationFloatToDoubleParser = createDalvikBytecodeOperationUnaryOperation('float-to-double', 0x89);
441
+ const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int', 0x8a);
442
+ const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long', 0x8b);
443
+ const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float', 0x8c);
444
+ const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte', 0x8d);
445
+ const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char', 0x8e);
446
+ const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short', 0x8f);
447
+ const dalvikBytecodeOperationUnaryOperationParser = createUnionParser([
448
+ dalvikBytecodeOperationNegateIntParser,
449
+ dalvikBytecodeOperationNotIntParser,
450
+ dalvikBytecodeOperationNegateLongParser,
451
+ dalvikBytecodeOperationNotLongParser,
452
+ dalvikBytecodeOperationNegateFloatParser,
453
+ dalvikBytecodeOperationNegateDoubleParser,
454
+ dalvikBytecodeOperationIntToLongParser,
455
+ dalvikBytecodeOperationIntToFloatParser,
456
+ dalvikBytecodeOperationIntToDoubleParser,
457
+ dalvikBytecodeOperationLongToIntParser,
458
+ dalvikBytecodeOperationLongToFloatParser,
459
+ dalvikBytecodeOperationLongToDoubleParser,
460
+ dalvikBytecodeOperationFloatToIntParser,
461
+ dalvikBytecodeOperationFloatToLongParser,
462
+ dalvikBytecodeOperationFloatToDoubleParser,
463
+ dalvikBytecodeOperationDoubleToIntParser,
464
+ dalvikBytecodeOperationDoubleToLongParser,
465
+ dalvikBytecodeOperationDoubleToFloatParser,
466
+ dalvikBytecodeOperationIntToByteParser,
467
+ dalvikBytecodeOperationIntToCharParser,
468
+ dalvikBytecodeOperationIntToShortParser,
469
+ ]);
470
+ setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperationUnaryOperationParser');
471
+ const createDalvikBytecodeOperationIfTest = (operation, opcode) => promiseCompose(createTupleParser([
472
+ createExactElementParser(opcode),
473
+ createDalvikBytecodeFormat22tParser(),
474
+ ]), ([_opcode, { registers, branchOffset }]) => ({
475
+ operation,
476
+ registers,
477
+ branchOffset,
478
+ }));
479
+ const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTest('if-eq', 0x32);
480
+ const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTest('if-neq', 0x33);
481
+ const dalvikBytecodeIfLessThanParser = createDalvikBytecodeOperationIfTest('if-lt', 0x34);
482
+ const dalvikBytecodeIfGreaterThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-ge', 0x35);
483
+ const dalvikBytecodeIfGreaterThanParser = createDalvikBytecodeOperationIfTest('if-gt', 0x36);
484
+ const dalvikBytecodeIfLessThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-le', 0x37);
485
+ const dalvikBytecodeOperationIfTestParser = createUnionParser([
486
+ dalvikBytecodeIfEqualParser,
487
+ dalvikBytecodeIfNotEqualParser,
488
+ dalvikBytecodeIfLessThanParser,
489
+ dalvikBytecodeIfGreaterThanOrEqualToParser,
490
+ dalvikBytecodeIfGreaterThanParser,
491
+ dalvikBytecodeIfLessThanOrEqualToParser,
492
+ ]);
493
+ setParserName(dalvikBytecodeOperationIfTestParser, 'dalvikBytecodeOperationIfTestParser');
494
+ const createDalvikBytecodeOperationIfTestZero = (operation, opcode) => promiseCompose(createTupleParser([
495
+ createExactElementParser(opcode),
496
+ createDalvikBytecodeFormat21tParser(),
497
+ ]), ([_opcode, { registers, branchOffset }]) => ({
498
+ operation,
499
+ registers,
500
+ branchOffset,
501
+ }));
502
+ const dalvikBytecodeIfEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-eqz', 0x38);
503
+ const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-nez', 0x39);
504
+ const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz', 0x3a);
505
+ const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez', 0x3b);
506
+ const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz', 0x3c);
507
+ const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez', 0x3d);
508
+ const dalvikBytecodeOperationIfTestZeroParser = createUnionParser([
509
+ dalvikBytecodeIfEqualZeroParser,
510
+ dalvikBytecodeIfNotEqualZeroParser,
511
+ dalvikBytecodeIfLessThanZeroParser,
512
+ dalvikBytecodeIfGreaterThanOrEqualToZeroParser,
513
+ dalvikBytecodeIfGreaterThanZeroParser,
514
+ dalvikBytecodeIfLessThanOrEqualToZeroParser,
515
+ ]);
516
+ setParserName(dalvikBytecodeOperationIfTestZeroParser, 'dalvikBytecodeOperationIfTestZeroParser');
517
+ const dalvikBytecodeOperationConstStringParser = promiseCompose(createTupleParser([
518
+ createExactElementParser(0x1a),
519
+ createDalvikBytecodeFormat21cParser({
520
+ isoIndex: isoIndexIntoStringIds,
521
+ }),
522
+ ]), ([_opcode, { index, registers }]) => ({
523
+ operation: 'const-string',
524
+ stringIndex: index,
525
+ registers,
526
+ }));
527
+ setParserName(dalvikBytecodeOperationConstStringParser, 'dalvikBytecodeOperationConstStringParser');
528
+ const dalvikBytecodeOperationConstMethodHandleParser = promiseCompose(createTupleParser([
529
+ createExactElementParser(0xfe),
530
+ createDalvikBytecodeFormat21cParser({
531
+ isoIndex: isoIndexIntoMethodIds,
532
+ }),
533
+ ]), ([_opcode, { index, registers }]) => ({
534
+ operation: 'const-method-handle',
535
+ methodIndex: index,
536
+ registers,
537
+ }));
538
+ setParserName(dalvikBytecodeOperationConstMethodHandleParser, 'dalvikBytecodeOperationConstMethodHandleParser');
539
+ const dalvikBytecodeOperationNewInstanceParser = promiseCompose(createTupleParser([
540
+ createExactElementParser(0x22),
541
+ createDalvikBytecodeFormat21cParser({
542
+ isoIndex: isoIndexIntoTypeIds,
543
+ }),
544
+ ]), ([_opcode, { index, registers }]) => ({
545
+ operation: 'new-instance',
546
+ typeIndex: index,
547
+ registers,
548
+ }));
549
+ setParserName(dalvikBytecodeOperationNewInstanceParser, 'dalvikBytecodeOperationNewInstanceParser');
550
+ const dalvikBytecodeOperationNewArrayParser = promiseCompose(createTupleParser([
551
+ createExactElementParser(0x23),
552
+ createDalvikBytecodeFormat22cParser({
553
+ isoIndex: isoIndexIntoTypeIds,
554
+ }),
555
+ ]), ([_opcode, { index, registers }]) => ({
556
+ operation: 'new-array',
557
+ typeIndex: index,
558
+ registers,
559
+ }));
560
+ setParserName(dalvikBytecodeOperationNewArrayParser, 'dalvikBytecodeOperationNewArrayParser');
561
+ const dalvikBytecodeOperationCheckCastParser = promiseCompose(createTupleParser([
562
+ createExactElementParser(0x1f),
563
+ createDalvikBytecodeFormat21cParser({
564
+ isoIndex: isoIndexIntoTypeIds,
565
+ }),
566
+ ]), ([_opcode, { index, registers }]) => ({
567
+ operation: 'check-cast',
568
+ typeIndex: index,
569
+ registers,
570
+ }));
571
+ setParserName(dalvikBytecodeOperationCheckCastParser, 'dalvikBytecodeOperationCheckCastParser');
572
+ const dalvikBytecodeOperationConstClassParser = promiseCompose(createTupleParser([
573
+ createExactElementParser(0x1c),
574
+ createDalvikBytecodeFormat21cParser({
575
+ isoIndex: isoIndexIntoTypeIds,
576
+ }),
577
+ ]), ([_opcode, { index, registers }]) => ({
578
+ operation: 'const-class',
579
+ typeIndex: index,
580
+ registers,
581
+ }));
582
+ setParserName(dalvikBytecodeOperationConstClassParser, 'dalvikBytecodeOperationConstClassParser');
583
+ const dalvikBytecodeOperationReturnVoidParser = promiseCompose(createTupleParser([
584
+ createExactElementParser(0x0e),
585
+ dalvikBytecodeFormat10xParser,
586
+ ]), () => ({
587
+ operation: 'return-void',
588
+ }));
589
+ setParserName(dalvikBytecodeOperationReturnVoidParser, 'dalvikBytecodeOperationReturnVoidParser');
590
+ const createDalvikBytecodeMoveResult1Parser = (operation, opcode) => promiseCompose(createTupleParser([
591
+ createExactElementParser(opcode),
592
+ dalvikBytecodeFormat11xParser,
593
+ ]), ([_opcode, { registers }]) => ({
594
+ operation,
595
+ registers,
596
+ }));
597
+ const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result', 0x0a);
598
+ const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide', 0x0b);
599
+ const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object', 0x0c);
600
+ const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception', 0x0d);
601
+ const dalvikBytecodeOperationMoveResult1Parser = createUnionParser([
602
+ dalvikBytecodeMoveResultParser,
603
+ dalvikBytecodeMoveResultWideParser,
604
+ dalvikBytecodeMoveResultObjectParser,
605
+ dalvikBytecodeMoveExceptionParser,
606
+ ]);
607
+ setParserName(dalvikBytecodeOperationMoveResult1Parser, 'dalvikBytecodeOperationMoveResult1Parser');
608
+ const dalvikBytecodeOperationMoveParser = promiseCompose(createTupleParser([
609
+ createExactElementParser(0x01),
610
+ dalvikBytecodeFormat12xParser,
611
+ ]), ([_opcode, { registers }]) => ({
612
+ operation: 'move',
613
+ registers,
614
+ }));
615
+ const dalvikBytecodeOperationMoveWideParser = promiseCompose(createTupleParser([
616
+ createExactElementParser(0x04),
617
+ dalvikBytecodeFormat12xParser,
618
+ ]), ([_opcode, { registers }]) => ({
619
+ operation: 'move-wide',
620
+ registers,
621
+ }));
622
+ const dalvikBytecodeOperationMoveObjectParser = promiseCompose(createTupleParser([
623
+ createExactElementParser(0x07),
624
+ dalvikBytecodeFormat12xParser,
625
+ ]), ([_opcode, { registers }]) => ({
626
+ operation: 'move-object',
627
+ registers,
628
+ }));
629
+ const dalvikBytecodeOperationMoveFrom16Parser = promiseCompose(createTupleParser([
630
+ createExactElementParser(0x02),
631
+ dalvikBytecodeFormat22xParser,
632
+ ]), ([_opcode, { registers }]) => ({
633
+ operation: 'move/from16',
634
+ registers,
635
+ }));
636
+ setParserName(dalvikBytecodeOperationMoveFrom16Parser, 'dalvikBytecodeOperationMoveFrom16Parser');
637
+ const dalvikBytecodeOperationMoveWideFrom16Parser = promiseCompose(createTupleParser([
638
+ createExactElementParser(0x05),
639
+ dalvikBytecodeFormat22xParser,
640
+ ]), ([_opcode, { registers }]) => ({
641
+ operation: 'move-wide/from16',
642
+ registers,
643
+ }));
644
+ setParserName(dalvikBytecodeOperationMoveWideFrom16Parser, 'dalvikBytecodeOperationMoveWideFrom16Parser');
645
+ const dalvikBytecodeOperationMoveObjectFrom16Parser = promiseCompose(createTupleParser([
646
+ createExactElementParser(0x08),
647
+ dalvikBytecodeFormat22xParser,
648
+ ]), ([_opcode, { registers }]) => ({
649
+ operation: 'move-object/from16',
650
+ registers,
651
+ }));
652
+ setParserName(dalvikBytecodeOperationMoveObjectFrom16Parser, 'dalvikBytecodeOperationMoveObjectFrom16Parser');
653
+ const dalvikBytecodeOperationMoveWide16Parser = promiseCompose(createTupleParser([
654
+ createExactElementParser(0x06),
655
+ dalvikBytecodeFormat32xParser,
656
+ ]), ([_opcode, { registers }]) => ({
657
+ operation: 'move-wide/16',
658
+ registers,
659
+ }));
660
+ setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationMoveWide16Parser');
661
+ const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
662
+ const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0f);
663
+ const dalvikBytecodeOperationReturnWideParser = createDalvikBytecodeOperationReturn1Parser('return-wide', 0x10);
664
+ const dalvikBytecodeOperationReturnObjectParser = createDalvikBytecodeOperationReturn1Parser('return-object', 0x11);
665
+ const dalvikBytecodeOperationReturn1Parser = createUnionParser([
666
+ dalvikBytecodeOperationReturnParser,
667
+ dalvikBytecodeOperationReturnWideParser,
668
+ dalvikBytecodeOperationReturnObjectParser,
669
+ ]);
670
+ setParserName(dalvikBytecodeOperationReturn1Parser, 'dalvikBytecodeOperationReturn1Parser');
671
+ const dalvikBytecodeOperationConst4Parser = promiseCompose(createTupleParser([
672
+ createExactElementParser(0x12),
673
+ nibblesParser,
674
+ ]), ([_opcode, [register0, value,],]) => ({
675
+ operation: 'const/4',
676
+ registers: [
677
+ register0,
678
+ ],
679
+ value: value << 28 >> 28,
680
+ }));
681
+ setParserName(dalvikBytecodeOperationConst4Parser, 'dalvikBytecodeOperationConst4Parser');
682
+ const dalvikBytecodeOperationConst16Parser = promiseCompose(createTupleParser([
683
+ createExactElementParser(0x13),
684
+ createDalvikBytecodeFormat21sParser(),
685
+ ]), ([_opcode, { registers, value }]) => ({
686
+ operation: 'const/16',
687
+ registers,
688
+ value: value << 16 >> 16,
689
+ }));
690
+ setParserName(dalvikBytecodeOperationConst16Parser, 'dalvikBytecodeOperationConst16Parser');
691
+ const dalvikBytecodeOperationConstHigh16Parser = promiseCompose(createTupleParser([
692
+ createExactElementParser(0x15),
693
+ createDalvikBytecodeFormat21sParser(),
694
+ ]), ([_opcode, { registers, value }]) => ({
695
+ operation: 'const/high16',
696
+ registers,
697
+ value: value << 16,
698
+ }));
699
+ setParserName(dalvikBytecodeOperationConstHigh16Parser, 'dalvikBytecodeOperationConstHigh16Parser');
700
+ const dalvikBytecodeOperationConstWide16Parser = promiseCompose(createTupleParser([
701
+ createExactElementParser(0x16),
702
+ createDalvikBytecodeFormat21sParser(),
703
+ ]), ([_opcode, { registers, value }]) => ({
704
+ operation: 'const-wide/16',
705
+ registers,
706
+ value: BigInt(value) << 48n >> 48n,
707
+ }));
708
+ setParserName(dalvikBytecodeOperationConstWide16Parser, 'dalvikBytecodeOperationConstWide16Parser');
709
+ const dalvikBytecodeOperationConstParser = promiseCompose(createTupleParser([
710
+ createExactElementParser(0x14),
711
+ dalvikBytecodeFormat31iParser,
712
+ ]), ([_opcode, { registers, value }]) => ({
713
+ operation: 'const',
714
+ registers,
715
+ value,
716
+ }));
717
+ setParserName(dalvikBytecodeOperationConstParser, 'dalvikBytecodeOperationConstParser');
718
+ const dalvikBytecodeOperationThrowParser = promiseCompose(createTupleParser([
719
+ createExactElementParser(0x27),
720
+ dalvikBytecodeFormat11xParser,
721
+ ]), ([_opcode, { registers }]) => ({
722
+ operation: 'throw',
723
+ registers,
724
+ }));
725
+ setParserName(dalvikBytecodeOperationThrowParser, 'dalvikBytecodeOperationThrowParser');
726
+ const createDalvikBytecodeOperationCompare = (operation, opcode) => promiseCompose(createTupleParser([
727
+ createExactElementParser(opcode),
728
+ dalvikBytecodeFormat23xParser,
729
+ ]), ([_opcode, { registers }]) => ({
730
+ operation,
731
+ registers,
732
+ }));
733
+ const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float', 0x2d);
734
+ const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float', 0x2e);
735
+ const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double', 0x2f);
736
+ const dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-double', 0x30);
737
+ const dalvikBytecodeOperationCompareLongParser = createDalvikBytecodeOperationCompare('cmp-long', 0x31);
738
+ const dalvikBytecodeOperationCompareParser = createUnionParser([
739
+ dalvikBytecodeOperationCompareFloatWithLessThanBiasParser,
740
+ dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser,
741
+ dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser,
742
+ dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser,
743
+ dalvikBytecodeOperationCompareLongParser,
744
+ ]);
745
+ setParserName(dalvikBytecodeOperationCompareParser, 'dalvikBytecodeOperationCompareParser');
746
+ export const dalvikBytecodeOperationCompanion = {
747
+ getRegisters(operation) {
748
+ if (operation && typeof operation === 'object' && 'registers' in operation) {
749
+ return operation.registers;
750
+ }
751
+ return [];
752
+ },
753
+ };
754
+ const dalvikBytecodeOperationParser = promiseCompose(createTupleParser([
755
+ () => { },
756
+ //createDebugLogInputParser(),
757
+ createUnionParser([
758
+ dalvikBytecodeOperationUnusedParser,
759
+ dalvikBytecodeOperationNoOperationParser,
760
+ dalvikBytecodeOperationInvokeParser,
761
+ dalvikBytecodeOperationInvokeRangeParser,
762
+ dalvikBytecodeOperationNewInstanceParser,
763
+ dalvikBytecodeOperationNewArrayParser,
764
+ dalvikBytecodeOperationCheckCastParser,
765
+ dalvikBytecodeOperationInstanceOfParser,
766
+ dalvikBytecodeOperationArrayElementParser,
767
+ dalvikBytecodeOperationInstanceFieldParser,
768
+ dalvikBytecodeOperationStaticFieldParser,
769
+ dalvikBytecodeOperationConstStringParser,
770
+ dalvikBytecodeOperationConstMethodHandleParser,
771
+ dalvikBytecodeOperationConstClassParser,
772
+ dalvikBytecodeOperationReturnVoidParser,
773
+ dalvikBytecodeOperationReturn1Parser,
774
+ dalvikBytecodeOperationThrowParser,
775
+ dalvikBytecodeOperationGotoParser,
776
+ dalvikBytecodeOperationGoto16Parser,
777
+ dalvikBytecodeOperationMoveResult1Parser,
778
+ dalvikBytecodeOperationMoveParser,
779
+ dalvikBytecodeOperationMoveWideParser,
780
+ dalvikBytecodeOperationMoveObjectParser,
781
+ dalvikBytecodeOperationMoveFrom16Parser,
782
+ dalvikBytecodeOperationMoveWideFrom16Parser,
783
+ dalvikBytecodeOperationMoveObjectFrom16Parser,
784
+ dalvikBytecodeOperationMoveWide16Parser,
785
+ dalvikBytecodeOperationConst4Parser,
786
+ dalvikBytecodeOperationConst16Parser,
787
+ dalvikBytecodeOperationConstHigh16Parser,
788
+ dalvikBytecodeOperationConstWide16Parser,
789
+ dalvikBytecodeOperationConstParser,
790
+ dalvikBytecodeOperationCompareParser,
791
+ dalvikBytecodeOperationIfTestParser,
792
+ dalvikBytecodeOperationIfTestZeroParser,
793
+ dalvikBytecodeOperationBinaryOperationParser,
794
+ dalvikBytecodeOperationBinaryOperationLiteral8Parser,
795
+ dalvikBytecodeOperationBinaryOperationLiteral16Parser,
796
+ dalvikBytecodeOperationBinaryOperationInPlaceParser,
797
+ dalvikBytecodeOperationUnaryOperationParser,
798
+ ]),
799
+ ]), ([_debug, operation,]) => {
800
+ // console.log(operation);
801
+ return operation;
802
+ });
803
+ setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
804
+ const dalvikBytecodeParser = promiseCompose(createArrayParser(dalvikBytecodeOperationParser), operations => operations.filter((operation) => operation !== undefined));
805
+ export const createDalvikBytecodeParser = (size) => createSliceBoundedParser(dalvikBytecodeParser, size, true);
806
+ export function resolveDalvikBytecodeOperation(operation, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }) {
807
+ if (operation && typeof operation === 'object' && 'stringIndex' in operation) {
808
+ const { stringIndex, ...rest } = operation;
809
+ return {
810
+ ...rest,
811
+ string: resolveIndexIntoStringIds(stringIndex),
812
+ };
813
+ }
814
+ if (operation && typeof operation === 'object' && 'typeIndex' in operation) {
815
+ const { typeIndex, ...rest } = operation;
816
+ return {
817
+ ...rest,
818
+ type: resolveIndexIntoTypeIds(typeIndex),
819
+ };
820
+ }
821
+ if (operation && typeof operation === 'object' && 'methodIndex' in operation) {
822
+ const { methodIndex, ...rest } = operation;
823
+ return {
824
+ ...rest,
825
+ method: resolveIndexIntoMethodIds(methodIndex),
826
+ };
827
+ }
828
+ if (operation && typeof operation === 'object' && 'fieldIndex' in operation) {
829
+ const { fieldIndex, ...rest } = operation;
830
+ return {
831
+ ...rest,
832
+ field: resolveIndexIntoFieldIds(fieldIndex),
833
+ };
834
+ }
835
+ return operation;
836
+ }