@futpib/parser 1.0.0 → 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 (380) 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} +7 -7
  7. package/build/androidPackageUnparser.d.ts +4 -0
  8. package/build/androidPackageUnparser.js +90 -0
  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/arbitraryFileSystemEntry.js +1 -1
  13. package/build/arbitraryZip.d.ts +1 -1
  14. package/build/arbitraryZip.js +13 -19
  15. package/build/arbitraryZipPermissions.d.ts +1 -8
  16. package/build/arbitraryZipPermissions.js +1 -16
  17. package/build/arbitraryZipStream.d.ts +1 -1
  18. package/build/arbitraryZipStream.js +3 -3
  19. package/build/arrayParser.d.ts +1 -1
  20. package/build/arrayParser.js +2 -2
  21. package/build/arrayParser.test.js +4 -4
  22. package/build/arrayUnparser.d.ts +2 -0
  23. package/build/arrayUnparser.js +8 -0
  24. package/build/backsmali.d.ts +1 -0
  25. package/build/backsmali.js +22 -0
  26. package/build/bsonParser.js +6 -2
  27. package/build/bsonParser.test.js +2 -2
  28. package/build/{parserInvariant.d.ts → customInvariant.d.ts} +1 -1
  29. package/build/{parserInvariant.js → customInvariant.js} +1 -1
  30. package/build/dalvikBytecodeParser/formatParsers.d.ts +97 -0
  31. package/build/dalvikBytecodeParser/formatParsers.js +169 -0
  32. package/build/dalvikBytecodeParser.d.ts +107 -0
  33. package/build/dalvikBytecodeParser.js +836 -0
  34. package/build/dalvikExecutable.d.ts +158 -0
  35. package/build/dalvikExecutable.js +20 -0
  36. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +4 -0
  37. package/build/dalvikExecutableParser/stringSyntaxParser.js +76 -0
  38. package/build/dalvikExecutableParser/typeParsers.d.ts +10 -0
  39. package/build/dalvikExecutableParser/typeParsers.js +34 -0
  40. package/build/dalvikExecutableParser/typedNumbers.d.ts +90 -0
  41. package/build/dalvikExecutableParser/typedNumbers.js +19 -0
  42. package/build/dalvikExecutableParser.d.ts +5 -0
  43. package/build/dalvikExecutableParser.js +1439 -0
  44. package/build/dalvikExecutableParser.test.js +70 -0
  45. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +298 -0
  46. package/build/debugLogInputParser.d.ts +4 -0
  47. package/build/debugLogInputParser.js +16 -0
  48. package/build/debugLogParser.d.ts +1 -1
  49. package/build/debugLogParser.js +15 -4
  50. package/build/disjunctionParser.d.ts +2 -1
  51. package/build/disjunctionParser.js +4 -2
  52. package/build/elementParser.d.ts +2 -2
  53. package/build/elementParser.js +1 -1
  54. package/build/elementTerminatedArrayParser.d.ts +3 -0
  55. package/build/elementTerminatedArrayParser.js +18 -0
  56. package/build/elementTerminatedArrayParser.test.js +52 -0
  57. package/build/elementTerminatedSequenceArrayParser.d.ts +3 -0
  58. package/build/elementTerminatedSequenceArrayParser.js +32 -0
  59. package/build/elementTerminatedSequenceArrayParser.test.js +34 -0
  60. package/build/elementTerminatedSequenceParser.d.ts +3 -0
  61. package/build/elementTerminatedSequenceParser.js +27 -0
  62. package/build/elementTerminatedSequenceParser.test.js +34 -0
  63. package/build/endOfInputParser.d.ts +2 -2
  64. package/build/exactElementParser.d.ts +1 -1
  65. package/build/exactElementParser.js +10 -5
  66. package/build/exactSequenceParser.d.ts +2 -1
  67. package/build/exactSequenceParser.js +12 -2
  68. package/build/fetchCid.d.ts +1 -0
  69. package/build/fetchCid.js +107 -0
  70. package/build/fixedLengthSequenceParser.d.ts +1 -0
  71. package/build/fixedLengthSequenceParser.js +18 -1
  72. package/build/fixedLengthSequenceParser.test.js +41 -0
  73. package/build/hasExecutable.d.ts +1 -0
  74. package/build/hasExecutable.js +8 -0
  75. package/build/highResolutionTimer.d.ts +16 -0
  76. package/build/highResolutionTimer.js +42 -0
  77. package/build/index.d.ts +5 -2
  78. package/build/index.js +3 -0
  79. package/build/inputReader.d.ts +14 -3
  80. package/build/inputReader.js +43 -6
  81. package/build/inputReader.test.js +172 -7
  82. package/build/inputReaderState.d.ts +10 -0
  83. package/build/inputReaderState.js +16 -0
  84. package/build/inspect.d.ts +1 -0
  85. package/build/inspect.js +7 -0
  86. package/build/javaKeyStoreParser.d.ts +2 -0
  87. package/build/javaKeyStoreParser.js +67 -0
  88. package/build/javaKeyStoreParser.test.d.ts +1 -0
  89. package/build/javaKeyStoreParser.test.js +16 -0
  90. package/build/jsonParser.d.ts +2 -0
  91. package/build/jsonParser.js +13 -15
  92. package/build/jsonParser.test.js +2 -2
  93. package/build/leb128Parser.d.ts +7 -0
  94. package/build/leb128Parser.js +82 -0
  95. package/build/leb128Parser.test.d.ts +1 -0
  96. package/build/leb128Parser.test.js +107 -0
  97. package/build/listParser.d.ts +1 -1
  98. package/build/listParser.js +5 -5
  99. package/build/lookaheadParser.d.ts +2 -0
  100. package/build/lookaheadParser.js +14 -0
  101. package/build/{negativeLookahead.d.ts → negativeLookaheadParser.d.ts} +1 -1
  102. package/build/negativeLookaheadParser.js +24 -0
  103. package/build/negativeLookaheadParser.test.d.ts +1 -0
  104. package/build/negativeLookaheadParser.test.js +30 -0
  105. package/build/nonEmptyArrayParser.d.ts +2 -0
  106. package/build/nonEmptyArrayParser.js +32 -0
  107. package/build/nonEmptyArrayParser.test.d.ts +1 -0
  108. package/build/nonEmptyArrayParser.test.js +16 -0
  109. package/build/optionalParser.d.ts +1 -1
  110. package/build/optionalParser.js +2 -2
  111. package/build/parser.d.ts +13 -4
  112. package/build/parser.js +67 -32
  113. package/build/parser.test.js +94 -27
  114. package/build/parserAccessorParser.d.ts +1 -1
  115. package/build/parserAccessorParser.js +9 -1
  116. package/build/parserConsumedSequenceParser.d.ts +2 -0
  117. package/build/parserConsumedSequenceParser.js +22 -0
  118. package/build/parserContext.d.ts +20 -6
  119. package/build/parserContext.js +70 -40
  120. package/build/parserContext.test.js +34 -7
  121. package/build/parserCreatorCompose.d.ts +4 -3
  122. package/build/parserCreatorCompose.js +9 -3
  123. package/build/parserError.d.ts +6 -0
  124. package/build/parserError.js +6 -6
  125. package/build/parserImplementationInvariant.d.ts +1 -1
  126. package/build/parserImplementationInvariant.js +2 -2
  127. package/build/parserInputCompanion.d.ts +35 -0
  128. package/build/parserInputCompanion.js +68 -0
  129. package/build/promiseCompose.d.ts +1 -1
  130. package/build/promiseCompose.js +12 -1
  131. package/build/promiseSettled.d.ts +1 -0
  132. package/build/promiseSettled.js +4 -0
  133. package/build/quantifierParser.d.ts +2 -0
  134. package/build/quantifierParser.js +17 -0
  135. package/build/separatedArrayParser.d.ts +2 -0
  136. package/build/separatedArrayParser.js +39 -0
  137. package/build/separatedArrayParser.test.d.ts +1 -0
  138. package/build/separatedArrayParser.test.js +21 -0
  139. package/build/sequenceBuffer.d.ts +13 -3
  140. package/build/sequenceBuffer.js +60 -8
  141. package/build/sequenceBuffer.test.js +59 -2
  142. package/build/sequenceTerminatedSequenceParser.d.ts +5 -0
  143. package/build/sequenceTerminatedSequenceParser.js +32 -0
  144. package/build/sequenceTerminatedSequenceParser.test.d.ts +1 -0
  145. package/build/sequenceTerminatedSequenceParser.test.js +37 -0
  146. package/build/sequenceUnparser.d.ts +2 -0
  147. package/build/sequenceUnparser.js +6 -0
  148. package/build/skipParser.d.ts +1 -1
  149. package/build/skipParser.js +4 -2
  150. package/build/skipToParser.d.ts +2 -0
  151. package/build/skipToParser.js +11 -0
  152. package/build/sliceBoundedParser.d.ts +2 -2
  153. package/build/sliceBoundedParser.js +8 -3
  154. package/build/sliceBoundedParser.test.js +37 -3
  155. package/build/smali.d.ts +1 -0
  156. package/build/smali.js +17 -0
  157. package/build/smaliParser.d.ts +12 -0
  158. package/build/smaliParser.js +656 -0
  159. package/build/smaliParser.test.d.ts +1 -0
  160. package/build/smaliParser.test.js +115 -0
  161. package/build/terminatedArrayParser.d.ts +4 -2
  162. package/build/terminatedArrayParser.js +82 -5
  163. package/build/terminatedArrayParser.test.d.ts +1 -0
  164. package/build/terminatedArrayParser.test.js +131 -0
  165. package/build/toAsyncIterable.d.ts +1 -0
  166. package/build/toAsyncIterable.js +7 -0
  167. package/build/toAsyncIterator.d.ts +1 -0
  168. package/build/toAsyncIterator.js +33 -0
  169. package/build/tupleParser.d.ts +4 -0
  170. package/build/tupleParser.js +1 -5
  171. package/build/uint8Array.d.ts +1 -0
  172. package/build/uint8Array.js +7 -0
  173. package/build/unionParser.d.ts +2 -1
  174. package/build/unionParser.js +27 -12
  175. package/build/unionParser.test.d.ts +1 -0
  176. package/build/unionParser.test.js +60 -0
  177. package/build/unparser.d.ts +8 -0
  178. package/build/unparser.js +104 -0
  179. package/build/unparser.test.d.ts +1 -0
  180. package/build/unparser.test.js +150 -0
  181. package/build/unparserContext.d.ts +31 -0
  182. package/build/unparserContext.js +74 -0
  183. package/build/unparserError.d.ts +9 -0
  184. package/build/unparserError.js +9 -0
  185. package/build/unparserImplementationInvariant.d.ts +2 -0
  186. package/build/unparserImplementationInvariant.js +5 -0
  187. package/build/unparserOutputCompanion.d.ts +15 -0
  188. package/build/unparserOutputCompanion.js +13 -0
  189. package/build/zip.d.ts +9 -17
  190. package/build/zipParser.d.ts +20 -12
  191. package/build/zipParser.js +83 -71
  192. package/build/zipParser.test.js +2 -7
  193. package/build/zipUnparser.d.ts +8 -0
  194. package/build/zipUnparser.js +200 -0
  195. package/build/zipUnparser.test.d.ts +1 -0
  196. package/build/zipUnparser.test.js +80 -0
  197. package/package.json +26 -8
  198. package/src/allSettledStream.test.ts +40 -0
  199. package/src/allSettledStream.ts +47 -15
  200. package/src/androidPackage.ts +48 -0
  201. package/src/{apkParser.test.ts → androidPackageParser.test.ts} +7 -8
  202. package/src/androidPackageParser.test.ts.md +271 -0
  203. package/src/androidPackageParser.test.ts.snap +0 -0
  204. package/src/androidPackageParser.ts +440 -0
  205. package/src/androidPackageUnparser.test.ts +36 -0
  206. package/src/androidPackageUnparser.ts +120 -0
  207. package/src/arbitrarilySlicedAsyncInterable.ts +7 -2
  208. package/src/arbitraryFileSystemEntry.ts +2 -4
  209. package/src/arbitraryZip.ts +20 -27
  210. package/src/arbitraryZipPermissions.ts +0 -25
  211. package/src/arbitraryZipStream.ts +4 -4
  212. package/src/arrayParser.test.ts +4 -4
  213. package/src/arrayParser.ts +3 -2
  214. package/src/arrayUnparser.ts +13 -0
  215. package/src/backsmali.ts +30 -0
  216. package/src/bsonParser.test.ts +2 -2
  217. package/src/bsonParser.ts +16 -5
  218. package/src/{parserInvariant.ts → customInvariant.ts} +2 -2
  219. package/src/dalvikBytecodeParser/formatParsers.ts +421 -0
  220. package/src/dalvikBytecodeParser.ts +2074 -0
  221. package/src/dalvikExecutable.ts +220 -0
  222. package/src/dalvikExecutableParser/stringSyntaxParser.ts +145 -0
  223. package/src/dalvikExecutableParser/typeParsers.ts +65 -0
  224. package/src/dalvikExecutableParser/typedNumbers.ts +57 -0
  225. package/src/dalvikExecutableParser.test.ts +89 -0
  226. package/src/dalvikExecutableParser.test.ts.md +634 -0
  227. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  228. package/src/dalvikExecutableParser.ts +2768 -0
  229. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +346 -0
  230. package/src/debugLogInputParser.ts +28 -0
  231. package/src/debugLogParser.ts +20 -4
  232. package/src/disjunctionParser.ts +10 -5
  233. package/src/elementParser.ts +3 -3
  234. package/src/elementTerminatedArrayParser.test.ts +99 -0
  235. package/src/elementTerminatedArrayParser.ts +31 -0
  236. package/src/elementTerminatedSequenceArrayParser.test.ts +54 -0
  237. package/src/elementTerminatedSequenceArrayParser.ts +52 -0
  238. package/src/elementTerminatedSequenceParser.test.ts +54 -0
  239. package/src/elementTerminatedSequenceParser.ts +43 -0
  240. package/src/endOfInputParser.ts +4 -4
  241. package/src/exactElementParser.ts +18 -12
  242. package/src/exactSequenceParser.ts +24 -3
  243. package/src/fetchCid.ts +125 -0
  244. package/src/fixedLengthSequenceParser.test.ts +77 -0
  245. package/src/fixedLengthSequenceParser.ts +28 -1
  246. package/src/hasExecutable.ts +11 -0
  247. package/src/highResolutionTimer.ts +49 -0
  248. package/src/index.ts +15 -2
  249. package/src/inputReader.test.ts +216 -7
  250. package/src/inputReader.ts +80 -5
  251. package/src/inputReaderState.ts +33 -0
  252. package/src/inspect.ts +9 -0
  253. package/src/javaKeyStore.ts +0 -0
  254. package/src/javaKeyStoreParser.test.ts +22 -0
  255. package/src/javaKeyStoreParser.test.ts.md +103 -0
  256. package/src/javaKeyStoreParser.test.ts.snap +0 -0
  257. package/src/javaKeyStoreParser.ts +136 -0
  258. package/src/jsonParser.test.ts +2 -2
  259. package/src/jsonParser.ts +23 -34
  260. package/src/leb128Parser.test.ts +171 -0
  261. package/src/leb128Parser.ts +125 -0
  262. package/src/listParser.ts +6 -6
  263. package/src/lookaheadParser.ts +19 -0
  264. package/src/negativeLookaheadParser.test.ts +53 -0
  265. package/src/negativeLookaheadParser.ts +36 -0
  266. package/src/nonEmptyArrayParser.test.ts +20 -0
  267. package/src/nonEmptyArrayParser.ts +44 -0
  268. package/src/optionalParser.ts +4 -3
  269. package/src/parser.test.ts +148 -27
  270. package/src/parser.test.ts.md +21 -21
  271. package/src/parser.test.ts.snap +0 -0
  272. package/src/parser.ts +153 -49
  273. package/src/parserAccessorParser.ts +12 -2
  274. package/src/parserConsumedSequenceParser.ts +29 -0
  275. package/src/parserContext.test.ts +38 -7
  276. package/src/parserContext.ts +127 -51
  277. package/src/parserCreatorCompose.ts +25 -7
  278. package/src/parserError.ts +9 -6
  279. package/src/parserImplementationInvariant.ts +2 -2
  280. package/src/parserInputCompanion.ts +102 -0
  281. package/src/promiseCompose.ts +17 -3
  282. package/src/promiseSettled.ts +6 -0
  283. package/src/quantifierParser.ts +25 -0
  284. package/src/separatedArrayParser.test.ts +34 -0
  285. package/src/separatedArrayParser.ts +55 -0
  286. package/src/sequenceBuffer.test.ts +72 -2
  287. package/src/sequenceBuffer.ts +93 -7
  288. package/src/sequenceTerminatedSequenceParser.test.ts +60 -0
  289. package/src/sequenceTerminatedSequenceParser.ts +62 -0
  290. package/src/sequenceUnparser.ts +9 -0
  291. package/src/skipParser.ts +7 -5
  292. package/src/skipToParser.ts +16 -0
  293. package/src/sliceBoundedParser.test.ts +45 -3
  294. package/src/sliceBoundedParser.ts +21 -3
  295. package/src/smali.ts +24 -0
  296. package/src/smaliParser.test.ts +132 -0
  297. package/src/smaliParser.test.ts.md +2320 -0
  298. package/src/smaliParser.test.ts.snap +0 -0
  299. package/src/smaliParser.ts +1166 -0
  300. package/src/terminatedArrayParser.test.ts +258 -0
  301. package/src/terminatedArrayParser.ts +111 -6
  302. package/src/toAsyncIterable.ts +7 -0
  303. package/src/toAsyncIterator.ts +48 -0
  304. package/src/tupleParser.ts +8 -5
  305. package/src/uint8Array.ts +10 -0
  306. package/src/unionParser.test.ts +79 -0
  307. package/src/unionParser.ts +44 -16
  308. package/src/unparser.test.ts +221 -0
  309. package/src/unparser.ts +209 -0
  310. package/src/unparserContext.ts +127 -0
  311. package/src/unparserError.ts +12 -0
  312. package/src/unparserImplementationInvariant.ts +6 -0
  313. package/src/unparserOutputCompanion.ts +24 -0
  314. package/src/zip.ts +10 -22
  315. package/src/zipParser.test.ts +2 -8
  316. package/src/zipParser.ts +223 -146
  317. package/src/zipUnparser.test.ts +119 -0
  318. package/src/zipUnparser.ts +300 -0
  319. package/build/apk.d.ts +0 -13
  320. package/build/apkParser.d.ts +0 -3
  321. package/build/apkParser.js +0 -135
  322. package/build/arbitraryDosDate.d.ts +0 -2
  323. package/build/arbitraryDosDate.js +0 -8
  324. package/build/arbitraryZipEntry.d.ts +0 -3
  325. package/build/arbitraryZipEntry.js +0 -26
  326. package/build/createDisjunctionParser.d.ts +0 -2
  327. package/build/createDisjunctionParser.js +0 -47
  328. package/build/createExactParser.d.ts +0 -2
  329. package/build/createExactParser.js +0 -12
  330. package/build/createSequentialUnionParser.d.ts +0 -2
  331. package/build/createSequentialUnionParser.js +0 -69
  332. package/build/fixedLengthChunkParser.d.ts +0 -2
  333. package/build/fixedLengthChunkParser.js +0 -12
  334. package/build/fixedLengthParser.d.ts +0 -2
  335. package/build/fixedLengthParser.js +0 -12
  336. package/build/inputChunkBuffer.d.ts +0 -15
  337. package/build/inputChunkBuffer.js +0 -40
  338. package/build/inputChunkBuffer.test.js +0 -34
  339. package/build/inputCompanion.d.ts +0 -18
  340. package/build/inputCompanion.js +0 -28
  341. package/build/invariantDefined.d.ts +0 -1
  342. package/build/invariantDefined.js +0 -5
  343. package/build/invariantIdentity.d.ts +0 -3
  344. package/build/invariantIdentity.js +0 -5
  345. package/build/jsonParser2.d.ts +0 -3
  346. package/build/jsonParser2.js +0 -52
  347. package/build/jsonParser2.test.js +0 -22
  348. package/build/negativeLookahead.js +0 -20
  349. package/build/parserCompose.d.ts +0 -3
  350. package/build/parserCompose.js +0 -7
  351. package/build/parserImplementationInvariantInvariant.d.ts +0 -3
  352. package/build/parserImplementationInvariantInvariant.js +0 -15
  353. package/build/promiseFish.d.ts +0 -1
  354. package/build/promiseFish.js +0 -3
  355. package/build/sequenceParser.d.ts +0 -3
  356. package/build/sequenceParser.js +0 -10
  357. package/build/terminatedSequenceParser.d.ts +0 -2
  358. package/build/terminatedSequenceParser.js +0 -24
  359. package/build/zipEntry.d.ts +0 -28
  360. package/build/zipFile.d.ts +0 -32
  361. package/build/zipFileEntry.d.ts +0 -6
  362. package/src/apk.ts +0 -16
  363. package/src/apkParser.test.ts.md +0 -268
  364. package/src/apkParser.test.ts.snap +0 -0
  365. package/src/apkParser.ts +0 -327
  366. package/src/inputCompanion.ts +0 -43
  367. package/src/invariantDefined.ts +0 -6
  368. package/src/invariantIdentity.ts +0 -8
  369. package/src/negativeLookahead.ts +0 -26
  370. /package/build/{apk.js → androidPackage.js} +0 -0
  371. /package/build/{apkParser.test.d.ts → androidPackageParser.test.d.ts} +0 -0
  372. /package/build/{arbitraryDosPermissions.d.ts → androidPackageUnparser.test.d.ts} +0 -0
  373. /package/build/{arbitraryDosPermissions.js → dalvikExecutableParser.test.d.ts} +0 -0
  374. /package/build/{inputChunkBuffer.test.d.ts → dalvikExecutableParserAgainstSmaliParser.test.d.ts} +0 -0
  375. /package/build/{jsonParser2.test.d.ts → elementTerminatedArrayParser.test.d.ts} +0 -0
  376. /package/build/{parserParsingInvariant.d.ts → elementTerminatedSequenceArrayParser.test.d.ts} +0 -0
  377. /package/build/{parserParsingInvariant.js → elementTerminatedSequenceParser.test.d.ts} +0 -0
  378. /package/build/{zipEntry.js → fixedLengthSequenceParser.test.d.ts} +0 -0
  379. /package/build/{zipFile.js → javaKeyStore.d.ts} +0 -0
  380. /package/build/{zipFileEntry.js → javaKeyStore.js} +0 -0
@@ -0,0 +1,2074 @@
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 { DalvikExecutableField, DalvikExecutableMethod } from "./dalvikExecutable.js";
4
+ import { IndexIntoFieldIds, IndexIntoMethodIds, IndexIntoStringIds, IndexIntoTypeIds, isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoStringIds, isoIndexIntoTypeIds } from "./dalvikExecutableParser/typedNumbers.js";
5
+ import { createExactElementParser } from "./exactElementParser.js";
6
+ import { Parser, setParserName } from "./parser.js";
7
+ import { promiseCompose } from "./promiseCompose.js";
8
+ import { createSliceBoundedParser } from "./sliceBoundedParser.js";
9
+ import { createTupleParser } from "./tupleParser.js";
10
+ import { createUnionParser } from "./unionParser.js";
11
+
12
+ // https://source.android.com/docs/core/runtime/dalvik-bytecode
13
+
14
+ const dalvikBytecodeOperationUnusedParser: Parser<void, Uint8Array> = async (parserContext) => {
15
+ const opcode = await parserContext.read(0);
16
+
17
+ parserContext.invariant(
18
+ (
19
+ (opcode >= 0x3e && opcode <= 0x43)
20
+ || (opcode === 0x73)
21
+ || (opcode >= 0x79 && opcode <= 0x7a)
22
+ || (opcode >= 0xe3 && opcode <= 0xf9)
23
+ ),
24
+ 'Expected unused opcode',
25
+ );
26
+
27
+ parserContext.skip(1);
28
+ };
29
+
30
+ setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
31
+
32
+ type DalvikBytecodeOperationNoOperation = {
33
+ operation: 'no-operation';
34
+ };
35
+
36
+ const dalvikBytecodeOperationNoOperationParser: Parser<DalvikBytecodeOperationNoOperation, Uint8Array> = promiseCompose(
37
+ createExactElementParser(0x00),
38
+ () => ({
39
+ operation: 'no-operation',
40
+ }),
41
+ );
42
+
43
+ setParserName(dalvikBytecodeOperationNoOperationParser, 'dalvikBytecodeOperationNoOperationParser');
44
+
45
+ const createDalvikBytecodeOperationInvoke = <T extends string>(operation: T, opcode: number): Parser<{
46
+ operation: T;
47
+ methodIndex: IndexIntoMethodIds;
48
+ registers: number[];
49
+ }, Uint8Array> => promiseCompose(
50
+ createTupleParser([
51
+ createExactElementParser(opcode),
52
+ createDalvikBytecodeFormat35cParser({
53
+ isoIndex: isoIndexIntoMethodIds,
54
+ }),
55
+ ]),
56
+ ([
57
+ _opcode,
58
+ { index, registers }
59
+ ]) => ({
60
+ operation,
61
+ methodIndex: index,
62
+ registers,
63
+ }),
64
+ );
65
+
66
+ const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual', 0x6e);
67
+
68
+ type DalvikBytecodeOperationInvokeVirtual = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeVirtualParser>>;
69
+
70
+ const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super', 0x6f);
71
+
72
+ type DalvikBytecodeOperationInvokeSuper = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeSuperParser>>;
73
+
74
+ const dalvikBytecodeOperationInvokeDirectParser = createDalvikBytecodeOperationInvoke('invoke-direct', 0x70);
75
+
76
+ type DalvikBytecodeOperationInvokeDirect = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeDirectParser>>;
77
+
78
+ const dalvikBytecodeOperationInvokeStaticParser = createDalvikBytecodeOperationInvoke('invoke-static', 0x71);
79
+
80
+ type DalvikBytecodeOperationInvokeStatic = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeStaticParser>>;
81
+
82
+ const dalvikBytecodeOperationInvokeInterfaceParser = createDalvikBytecodeOperationInvoke('invoke-interface', 0x72);
83
+
84
+ type DalvikBytecodeOperationInvokeInterface = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeInterfaceParser>>;
85
+
86
+ type DalvikBytecodeOperationInvoke =
87
+ | DalvikBytecodeOperationInvokeVirtual
88
+ | DalvikBytecodeOperationInvokeSuper
89
+ | DalvikBytecodeOperationInvokeDirect
90
+ | DalvikBytecodeOperationInvokeStatic
91
+ | DalvikBytecodeOperationInvokeInterface
92
+ ;
93
+
94
+ const dalvikBytecodeOperationInvokeParser: Parser<DalvikBytecodeOperationInvoke, Uint8Array> = createUnionParser([
95
+ dalvikBytecodeOperationInvokeVirtualParser,
96
+ dalvikBytecodeOperationInvokeSuperParser,
97
+ dalvikBytecodeOperationInvokeDirectParser,
98
+ dalvikBytecodeOperationInvokeStaticParser,
99
+ dalvikBytecodeOperationInvokeInterfaceParser,
100
+ ]);
101
+
102
+ setParserName(dalvikBytecodeOperationInvokeParser, 'dalvikBytecodeOperationInvokeParser');
103
+
104
+ const createDalvikBytecodeOperationInvokeRange = <T extends string>(operation: T, opcode: number): Parser<{
105
+ operation: T;
106
+ methodIndex: IndexIntoMethodIds;
107
+ registers: number[];
108
+ }, Uint8Array> => promiseCompose(
109
+ createTupleParser([
110
+ createExactElementParser(opcode),
111
+ createDalvikBytecodeFormat3rcParser({
112
+ isoIndex: isoIndexIntoMethodIds,
113
+ }),
114
+ ]),
115
+ ([
116
+ _opcode,
117
+ { index, registers }
118
+ ]) => ({
119
+ operation,
120
+ methodIndex: index,
121
+ registers,
122
+ }),
123
+ );
124
+
125
+ const dalvikBytecodeOperationInvokeVirtualRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-virtual/range', 0x74);
126
+
127
+ type DalvikBytecodeOperationInvokeVirtualRange = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeVirtualRangeParser>>;
128
+
129
+ const dalvikBytecodeOperationInvokeSuperRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-super/range', 0x75);
130
+
131
+ type DalvikBytecodeOperationInvokeSuperRange = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeSuperRangeParser>>;
132
+
133
+ const dalvikBytecodeOperationInvokeDirectRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-direct/range', 0x76);
134
+
135
+ type DalvikBytecodeOperationInvokeDirectRange = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeDirectRangeParser>>;
136
+
137
+ const dalvikBytecodeOperationInvokeStaticRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-static/range', 0x77);
138
+
139
+ type DalvikBytecodeOperationInvokeStaticRange = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeStaticRangeParser>>;
140
+
141
+ const dalvikBytecodeOperationInvokeInterfaceRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-interface/range', 0x78);
142
+
143
+ type DalvikBytecodeOperationInvokeInterfaceRange = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeInterfaceRangeParser>>;
144
+
145
+ type DalvikBytecodeOperationInvokeRange =
146
+ | DalvikBytecodeOperationInvokeVirtualRange
147
+ | DalvikBytecodeOperationInvokeSuperRange
148
+ | DalvikBytecodeOperationInvokeDirectRange
149
+ | DalvikBytecodeOperationInvokeStaticRange
150
+ | DalvikBytecodeOperationInvokeInterfaceRange
151
+ ;
152
+
153
+ const dalvikBytecodeOperationInvokeRangeParser: Parser<DalvikBytecodeOperationInvokeRange, Uint8Array> = createUnionParser([
154
+ dalvikBytecodeOperationInvokeVirtualRangeParser,
155
+ dalvikBytecodeOperationInvokeSuperRangeParser,
156
+ dalvikBytecodeOperationInvokeDirectRangeParser,
157
+ dalvikBytecodeOperationInvokeStaticRangeParser,
158
+ dalvikBytecodeOperationInvokeInterfaceRangeParser,
159
+ ]);
160
+
161
+ setParserName(dalvikBytecodeOperationInvokeRangeParser, 'dalvikBytecodeOperationInvokeRangeParser');
162
+
163
+ type DalvikBytecodeOperationGoto = {
164
+ operation: 'goto';
165
+ branchOffset: number;
166
+ };
167
+
168
+ const dalvikBytecodeOperationGotoParser: Parser<DalvikBytecodeOperationGoto, Uint8Array> = promiseCompose(
169
+ createTupleParser([
170
+ createExactElementParser(0x28),
171
+ dalvikBytecodeFormat10tParser,
172
+ ]),
173
+ ([ _opcode, { branchOffset } ]) => ({
174
+ operation: 'goto',
175
+ branchOffset,
176
+ }),
177
+ );
178
+
179
+ type DalvikBytecodeOperationGoto16 = {
180
+ operation: 'goto/16';
181
+ branchOffset: number;
182
+ };
183
+
184
+ const dalvikBytecodeOperationGoto16Parser: Parser<DalvikBytecodeOperationGoto16, Uint8Array> = promiseCompose(
185
+ createTupleParser([
186
+ createExactElementParser(0x29),
187
+ dalvikBytecodeFormat20tParser,
188
+ ]),
189
+ ([ _opcode, { branchOffset } ]) => ({
190
+ operation: 'goto/16',
191
+ branchOffset,
192
+ }),
193
+ );
194
+
195
+ type DalvikBytecodeOperationInstanceOf = {
196
+ operation: 'instance-of';
197
+ registers: number[];
198
+ typeIndex: IndexIntoTypeIds;
199
+ };
200
+
201
+ const dalvikBytecodeOperationInstanceOfParser: Parser<DalvikBytecodeOperationInstanceOf, Uint8Array> = promiseCompose(
202
+ createTupleParser([
203
+ createExactElementParser(0x20),
204
+ createDalvikBytecodeFormat22cParser({
205
+ isoIndex: isoIndexIntoTypeIds,
206
+ }),
207
+ ]),
208
+ ([ _opcode, { registers, index } ]) => ({
209
+ operation: 'instance-of',
210
+ registers,
211
+ typeIndex: index,
212
+ }),
213
+ );
214
+
215
+ setParserName(dalvikBytecodeOperationInstanceOfParser, 'dalvikBytecodeOperationInstanceOfParser');
216
+
217
+ const createDalvikBytecodeOperationArrayElement = <T extends string>(operation: T, opcode: number): Parser<{
218
+ operation: T;
219
+ registers: number[];
220
+ }, Uint8Array> => promiseCompose(
221
+ createTupleParser([
222
+ createExactElementParser(opcode),
223
+ dalvikBytecodeFormat23xParser,
224
+ ]),
225
+ ([ _opcode, { registers } ]) => ({
226
+ operation,
227
+ registers,
228
+ }),
229
+ );
230
+
231
+ const dalvikBytecodeOperationArrayElementGetParser = createDalvikBytecodeOperationArrayElement('aget', 0x44);
232
+
233
+ type DalvikBytecodeOperationArrayElementGet = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetParser>>;
234
+
235
+ const dalvikBytecodeOperationArrayElementGetWideParser = createDalvikBytecodeOperationArrayElement('aget-wide', 0x45);
236
+
237
+ type DalvikBytecodeOperationArrayElementGetWide = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetWideParser>>;
238
+
239
+ const dalvikBytecodeOperationArrayElementGetObjectParser = createDalvikBytecodeOperationArrayElement('aget-object', 0x46);
240
+
241
+ type DalvikBytecodeOperationArrayElementGetObject = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetObjectParser>>;
242
+
243
+ const dalvikBytecodeOperationArrayElementGetBooleanParser = createDalvikBytecodeOperationArrayElement('aget-boolean', 0x47);
244
+
245
+ type DalvikBytecodeOperationArrayElementGetBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetBooleanParser>>;
246
+
247
+ const dalvikBytecodeOperationArrayElementGetByteParser = createDalvikBytecodeOperationArrayElement('aget-byte', 0x48);
248
+
249
+ type DalvikBytecodeOperationArrayElementGetByte = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetByteParser>>;
250
+
251
+ const dalvikBytecodeOperationArrayElementGetCharParser = createDalvikBytecodeOperationArrayElement('aget-char', 0x49);
252
+
253
+ type DalvikBytecodeOperationArrayElementGetChar = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetCharParser>>;
254
+
255
+ const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short', 0x4a);
256
+
257
+ type DalvikBytecodeOperationArrayElementGetShort = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetShortParser>>;
258
+
259
+ const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput', 0x4b);
260
+
261
+ type DalvikBytecodeOperationArrayElementPut = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutParser>>;
262
+
263
+ const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide', 0x4c);
264
+
265
+ type DalvikBytecodeOperationArrayElementPutWide = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutWideParser>>;
266
+
267
+ const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object', 0x4d);
268
+
269
+ type DalvikBytecodeOperationArrayElementPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutObjectParser>>;
270
+
271
+ const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean', 0x4e);
272
+
273
+ type DalvikBytecodeOperationArrayElementPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutBooleanParser>>;
274
+
275
+ const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte', 0x4f);
276
+
277
+ type DalvikBytecodeOperationArrayElementPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutByteParser>>;
278
+
279
+ const dalvikBytecodeOperationArrayElementPutCharParser = createDalvikBytecodeOperationArrayElement('aput-char', 0x50);
280
+
281
+ type DalvikBytecodeOperationArrayElementPutChar = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutCharParser>>;
282
+
283
+ const dalvikBytecodeOperationArrayElementPutShortParser = createDalvikBytecodeOperationArrayElement('aput-short', 0x51);
284
+
285
+ type DalvikBytecodeOperationArrayElementPutShort = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutShortParser>>;
286
+
287
+ type DalvikBytecodeOperationArrayElement =
288
+ | DalvikBytecodeOperationArrayElementGet
289
+ | DalvikBytecodeOperationArrayElementGetWide
290
+ | DalvikBytecodeOperationArrayElementGetObject
291
+ | DalvikBytecodeOperationArrayElementGetBoolean
292
+ | DalvikBytecodeOperationArrayElementGetByte
293
+ | DalvikBytecodeOperationArrayElementGetChar
294
+ | DalvikBytecodeOperationArrayElementGetShort
295
+ | DalvikBytecodeOperationArrayElementPut
296
+ | DalvikBytecodeOperationArrayElementPutWide
297
+ | DalvikBytecodeOperationArrayElementPutObject
298
+ | DalvikBytecodeOperationArrayElementPutBoolean
299
+ | DalvikBytecodeOperationArrayElementPutByte
300
+ | DalvikBytecodeOperationArrayElementPutChar
301
+ | DalvikBytecodeOperationArrayElementPutShort
302
+ ;
303
+
304
+ const dalvikBytecodeOperationArrayElementParser: Parser<DalvikBytecodeOperationArrayElement, Uint8Array> = createUnionParser([
305
+ dalvikBytecodeOperationArrayElementGetParser,
306
+ dalvikBytecodeOperationArrayElementGetWideParser,
307
+ dalvikBytecodeOperationArrayElementGetObjectParser,
308
+ dalvikBytecodeOperationArrayElementGetBooleanParser,
309
+ dalvikBytecodeOperationArrayElementGetByteParser,
310
+ dalvikBytecodeOperationArrayElementGetCharParser,
311
+ dalvikBytecodeOperationArrayElementGetShortParser,
312
+ dalvikBytecodeOperationArrayElementPutParser,
313
+ dalvikBytecodeOperationArrayElementPutWideParser,
314
+ dalvikBytecodeOperationArrayElementPutObjectParser,
315
+ dalvikBytecodeOperationArrayElementPutBooleanParser,
316
+ dalvikBytecodeOperationArrayElementPutByteParser,
317
+ dalvikBytecodeOperationArrayElementPutCharParser,
318
+ dalvikBytecodeOperationArrayElementPutShortParser,
319
+ ]);
320
+
321
+ setParserName(dalvikBytecodeOperationArrayElementParser, 'dalvikBytecodeOperationArrayElementParser');
322
+
323
+ const createDalvikBytecodeOperationInstanceField = <T extends string>(operation: T, opcode: number): Parser<{
324
+ operation: T;
325
+ registers: number[];
326
+ fieldIndex: IndexIntoFieldIds;
327
+ }, Uint8Array> => promiseCompose(
328
+ createTupleParser([
329
+ createExactElementParser(opcode),
330
+ createDalvikBytecodeFormat22cParser({
331
+ isoIndex: isoIndexIntoFieldIds,
332
+ }),
333
+ ]),
334
+ ([ _opcode, { registers, index } ]) => ({
335
+ operation,
336
+ registers,
337
+ fieldIndex: index,
338
+ }),
339
+ );
340
+
341
+ const dalvikBytecodeOperationInstanceFieldGetParser = createDalvikBytecodeOperationInstanceField('iget', 0x52);
342
+
343
+ type DalvikBytecodeOperationInstanceFieldGet = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetParser>>;
344
+
345
+ const dalvikBytecodeOperationInstanceFieldGetWideParser = createDalvikBytecodeOperationInstanceField('iget-wide', 0x53);
346
+
347
+ type DalvikBytecodeOperationInstanceFieldGetWide = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetWideParser>>;
348
+
349
+ const dalvikBytecodeOperationInstanceFieldGetObjectParser = createDalvikBytecodeOperationInstanceField('iget-object', 0x54);
350
+
351
+ type DalvikBytecodeOperationInstanceFieldGetObject = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetObjectParser>>;
352
+
353
+ const dalvikBytecodeOperationInstanceFieldGetBooleanParser = createDalvikBytecodeOperationInstanceField('iget-boolean', 0x55);
354
+
355
+ type DalvikBytecodeOperationInstanceFieldGetBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetBooleanParser>>;
356
+
357
+ const dalvikBytecodeOperationInstanceFieldGetByteParser = createDalvikBytecodeOperationInstanceField('iget-byte', 0x56);
358
+
359
+ type DalvikBytecodeOperationInstanceFieldGetByte = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetByteParser>>;
360
+
361
+ const dalvikBytecodeOperationInstanceFieldGetCharParser = createDalvikBytecodeOperationInstanceField('iget-char', 0x57);
362
+
363
+ type DalvikBytecodeOperationInstanceFieldGetChar = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetCharParser>>;
364
+
365
+ const dalvikBytecodeOperationInstanceFieldGetShortParser = createDalvikBytecodeOperationInstanceField('iget-short', 0x58);
366
+
367
+ type DalvikBytecodeOperationInstanceFieldGetShort = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldGetShortParser>>;
368
+
369
+ const dalvikBytecodeOperationInstanceFieldPutParser = createDalvikBytecodeOperationInstanceField('iput', 0x59);
370
+
371
+ type DalvikBytecodeOperationInstanceFieldPut = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutParser>>;
372
+
373
+ const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide', 0x5a);
374
+
375
+ type DalvikBytecodeOperationInstanceFieldPutWide = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutWideParser>>;
376
+
377
+ const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object', 0x5b);
378
+
379
+ type DalvikBytecodeOperationInstanceFieldPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutObjectParser>>;
380
+
381
+ const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean', 0x5c);
382
+
383
+ type DalvikBytecodeOperationInstanceFieldPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutBooleanParser>>;
384
+
385
+ const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte', 0x5d);
386
+
387
+ type DalvikBytecodeOperationInstanceFieldPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutByteParser>>;
388
+
389
+ const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char', 0x5e);
390
+
391
+ type DalvikBytecodeOperationInstanceFieldPutChar = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutCharParser>>;
392
+
393
+ const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short', 0x5f);
394
+
395
+ type DalvikBytecodeOperationInstanceFieldPutShort = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutShortParser>>;
396
+
397
+ type DalvikBytecodeOperationInstanceField =
398
+ | DalvikBytecodeOperationInstanceFieldGet
399
+ | DalvikBytecodeOperationInstanceFieldGetWide
400
+ | DalvikBytecodeOperationInstanceFieldGetObject
401
+ | DalvikBytecodeOperationInstanceFieldGetBoolean
402
+ | DalvikBytecodeOperationInstanceFieldGetByte
403
+ | DalvikBytecodeOperationInstanceFieldGetChar
404
+ | DalvikBytecodeOperationInstanceFieldGetShort
405
+ | DalvikBytecodeOperationInstanceFieldPut
406
+ | DalvikBytecodeOperationInstanceFieldPutWide
407
+ | DalvikBytecodeOperationInstanceFieldPutObject
408
+ | DalvikBytecodeOperationInstanceFieldPutBoolean
409
+ | DalvikBytecodeOperationInstanceFieldPutByte
410
+ | DalvikBytecodeOperationInstanceFieldPutChar
411
+ | DalvikBytecodeOperationInstanceFieldPutShort
412
+ ;
413
+
414
+ const dalvikBytecodeOperationInstanceFieldParser: Parser<DalvikBytecodeOperationInstanceField, Uint8Array> = createUnionParser([
415
+ dalvikBytecodeOperationInstanceFieldGetParser,
416
+ dalvikBytecodeOperationInstanceFieldGetWideParser,
417
+ dalvikBytecodeOperationInstanceFieldGetObjectParser,
418
+ dalvikBytecodeOperationInstanceFieldGetBooleanParser,
419
+ dalvikBytecodeOperationInstanceFieldGetByteParser,
420
+ dalvikBytecodeOperationInstanceFieldGetCharParser,
421
+ dalvikBytecodeOperationInstanceFieldGetShortParser,
422
+ dalvikBytecodeOperationInstanceFieldPutParser,
423
+ dalvikBytecodeOperationInstanceFieldPutWideParser,
424
+ dalvikBytecodeOperationInstanceFieldPutObjectParser,
425
+ dalvikBytecodeOperationInstanceFieldPutBooleanParser,
426
+ dalvikBytecodeOperationInstanceFieldPutByteParser,
427
+ dalvikBytecodeOperationInstanceFieldPutCharParser,
428
+ dalvikBytecodeOperationInstanceFieldPutShortParser,
429
+ ]);
430
+
431
+ setParserName(dalvikBytecodeOperationInstanceFieldParser, 'dalvikBytecodeOperationInstanceFieldParser');
432
+
433
+ const createDalvikBytecodeOperationStaticField = <T extends string>(operation: T, opcode: number): Parser<{
434
+ operation: T;
435
+ registers: number[];
436
+ fieldIndex: IndexIntoFieldIds;
437
+ }, Uint8Array> => promiseCompose(
438
+ createTupleParser([
439
+ createExactElementParser(opcode),
440
+ createDalvikBytecodeFormat21cParser({
441
+ isoIndex: isoIndexIntoFieldIds,
442
+ }),
443
+ ]),
444
+ ([ _opcode, { registers, index } ]) => ({
445
+ operation,
446
+ registers,
447
+ fieldIndex: index,
448
+ }),
449
+ );
450
+
451
+ const dalvikBytecodeOperationStaticFieldGetParser = createDalvikBytecodeOperationStaticField('sget', 0x60);
452
+
453
+ type DalvikBytecodeOperationStaticFieldGet = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetParser>>;
454
+
455
+ const dalvikBytecodeOperationStaticFieldGetWideParser = createDalvikBytecodeOperationStaticField('sget-wide', 0x61);
456
+
457
+ type DalvikBytecodeOperationStaticFieldGetWide = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetWideParser>>;
458
+
459
+ const dalvikBytecodeOperationStaticFieldGetObjectParser = createDalvikBytecodeOperationStaticField('sget-object', 0x62);
460
+
461
+ type DalvikBytecodeOperationStaticFieldGetObject = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetObjectParser>>;
462
+
463
+ const dalvikBytecodeOperationStaticFieldGetBooleanParser = createDalvikBytecodeOperationStaticField('sget-boolean', 0x63);
464
+
465
+ type DalvikBytecodeOperationStaticFieldGetBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetBooleanParser>>;
466
+
467
+ const dalvikBytecodeOperationStaticFieldGetByteParser = createDalvikBytecodeOperationStaticField('sget-byte', 0x64);
468
+
469
+ type DalvikBytecodeOperationStaticFieldGetByte = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetByteParser>>;
470
+
471
+ const dalvikBytecodeOperationStaticFieldGetCharParser = createDalvikBytecodeOperationStaticField('sget-char', 0x65);
472
+
473
+ type DalvikBytecodeOperationStaticFieldGetChar = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetCharParser>>;
474
+
475
+ const dalvikBytecodeOperationStaticFieldGetShortParser = createDalvikBytecodeOperationStaticField('sget-short', 0x66);
476
+
477
+ type DalvikBytecodeOperationStaticFieldGetShort = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldGetShortParser>>;
478
+
479
+ const dalvikBytecodeOperationStaticFieldPutParser = createDalvikBytecodeOperationStaticField('sput', 0x67);
480
+
481
+ type DalvikBytecodeOperationStaticFieldPut = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutParser>>;
482
+
483
+ const dalvikBytecodeOperationStaticFieldPutWideParser = createDalvikBytecodeOperationStaticField('sput-wide', 0x68);
484
+
485
+ type DalvikBytecodeOperationStaticFieldPutWide = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutWideParser>>;
486
+
487
+ const dalvikBytecodeOperationStaticFieldPutObjectParser = createDalvikBytecodeOperationStaticField('sput-object', 0x69);
488
+
489
+ type DalvikBytecodeOperationStaticFieldPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutObjectParser>>;
490
+
491
+ const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean', 0x6a);
492
+
493
+ type DalvikBytecodeOperationStaticFieldPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutBooleanParser>>;
494
+
495
+ const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte', 0x6b);
496
+
497
+ type DalvikBytecodeOperationStaticFieldPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutByteParser>>;
498
+
499
+ const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char', 0x6c);
500
+
501
+ type DalvikBytecodeOperationStaticFieldPutChar = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutCharParser>>;
502
+
503
+ const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short', 0x6d);
504
+
505
+ type DalvikBytecodeOperationStaticFieldPutShort = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutShortParser>>;
506
+
507
+ type DalvikBytecodeOperationStaticField =
508
+ | DalvikBytecodeOperationStaticFieldGet
509
+ | DalvikBytecodeOperationStaticFieldGetWide
510
+ | DalvikBytecodeOperationStaticFieldGetObject
511
+ | DalvikBytecodeOperationStaticFieldGetBoolean
512
+ | DalvikBytecodeOperationStaticFieldGetByte
513
+ | DalvikBytecodeOperationStaticFieldGetChar
514
+ | DalvikBytecodeOperationStaticFieldGetShort
515
+ | DalvikBytecodeOperationStaticFieldPut
516
+ | DalvikBytecodeOperationStaticFieldPutWide
517
+ | DalvikBytecodeOperationStaticFieldPutObject
518
+ | DalvikBytecodeOperationStaticFieldPutBoolean
519
+ | DalvikBytecodeOperationStaticFieldPutByte
520
+ | DalvikBytecodeOperationStaticFieldPutChar
521
+ | DalvikBytecodeOperationStaticFieldPutShort
522
+ ;
523
+
524
+ const dalvikBytecodeOperationStaticFieldParser: Parser<DalvikBytecodeOperationStaticField, Uint8Array> = createUnionParser([
525
+ dalvikBytecodeOperationStaticFieldGetParser,
526
+ dalvikBytecodeOperationStaticFieldGetWideParser,
527
+ dalvikBytecodeOperationStaticFieldGetObjectParser,
528
+ dalvikBytecodeOperationStaticFieldGetBooleanParser,
529
+ dalvikBytecodeOperationStaticFieldGetByteParser,
530
+ dalvikBytecodeOperationStaticFieldGetCharParser,
531
+ dalvikBytecodeOperationStaticFieldGetShortParser,
532
+ dalvikBytecodeOperationStaticFieldPutParser,
533
+ dalvikBytecodeOperationStaticFieldPutWideParser,
534
+ dalvikBytecodeOperationStaticFieldPutObjectParser,
535
+ dalvikBytecodeOperationStaticFieldPutBooleanParser,
536
+ dalvikBytecodeOperationStaticFieldPutByteParser,
537
+ dalvikBytecodeOperationStaticFieldPutCharParser,
538
+ dalvikBytecodeOperationStaticFieldPutShortParser,
539
+ ]);
540
+
541
+ setParserName(dalvikBytecodeOperationStaticFieldParser, 'dalvikBytecodeOperationStaticFieldParser');
542
+
543
+ const createDalvikBytecodeOperationBinaryOperationLiteral8 = <T extends string>(operation: T, opcode: number): Parser<{
544
+ operation: T;
545
+ registers: number[];
546
+ value: number;
547
+ }, Uint8Array> => promiseCompose(
548
+ createTupleParser([
549
+ createExactElementParser(opcode),
550
+ createDalvikBytecodeFormat22bParser(),
551
+ ]),
552
+ ([ _opcode, { registers, value } ]) => ({
553
+ operation,
554
+ registers,
555
+ value,
556
+ }),
557
+ );
558
+
559
+ const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8', 0xd8);
560
+
561
+ type DalvikBytecodeOperationAddIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntLiteral8Parser>>;
562
+
563
+ const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8', 0xd9);
564
+
565
+ type DalvikBytecodeOperationReverseSubtractIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntLiteral8Parser>>;
566
+
567
+ const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8', 0xda);
568
+
569
+ type DalvikBytecodeOperationMultiplyIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntLiteral8Parser>>;
570
+
571
+ const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8', 0xdb);
572
+
573
+ type DalvikBytecodeOperationDivideIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntLiteral8Parser>>;
574
+
575
+ const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8', 0xdc);
576
+
577
+ type DalvikBytecodeOperationRemainderIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntLiteral8Parser>>;
578
+
579
+ const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8', 0xdd);
580
+
581
+ type DalvikBytecodeOperationAndIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntLiteral8Parser>>;
582
+
583
+ const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8', 0xde);
584
+
585
+ type DalvikBytecodeOperationOrIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntLiteral8Parser>>;
586
+
587
+ const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8', 0xdf);
588
+
589
+ type DalvikBytecodeOperationXorIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntLiteral8Parser>>;
590
+
591
+ const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8', 0xe0);
592
+
593
+ type DalvikBytecodeOperationShiftLeftIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftIntLiteral8Parser>>;
594
+
595
+ const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8', 0xe1);
596
+
597
+ type DalvikBytecodeOperationShiftRightIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntLiteral8Parser>>;
598
+
599
+ const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8', 0xe2);
600
+
601
+ type DalvikBytecodeOperationUnsignedShiftRightIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser>>;
602
+
603
+ type DalvikBytecodeOperationBinaryOperationLiteral8 =
604
+ | DalvikBytecodeOperationAddIntLiteral8
605
+ | DalvikBytecodeOperationReverseSubtractIntLiteral8
606
+ | DalvikBytecodeOperationMultiplyIntLiteral8
607
+ | DalvikBytecodeOperationDivideIntLiteral8
608
+ | DalvikBytecodeOperationRemainderIntLiteral8
609
+ | DalvikBytecodeOperationAndIntLiteral8
610
+ | DalvikBytecodeOperationOrIntLiteral8
611
+ | DalvikBytecodeOperationXorIntLiteral8
612
+ | DalvikBytecodeOperationShiftLeftIntLiteral8
613
+ | DalvikBytecodeOperationShiftRightIntLiteral8
614
+ | DalvikBytecodeOperationUnsignedShiftRightIntLiteral8
615
+ ;
616
+
617
+ const dalvikBytecodeOperationBinaryOperationLiteral8Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral8, Uint8Array> = createUnionParser([
618
+ dalvikBytecodeOperationAddIntLiteral8Parser,
619
+ dalvikBytecodeOperationReverseSubtractIntLiteral8Parser,
620
+ dalvikBytecodeOperationMultiplyIntLiteral8Parser,
621
+ dalvikBytecodeOperationDivideIntLiteral8Parser,
622
+ dalvikBytecodeOperationRemainderIntLiteral8Parser,
623
+ dalvikBytecodeOperationAndIntLiteral8Parser,
624
+ dalvikBytecodeOperationOrIntLiteral8Parser,
625
+ dalvikBytecodeOperationXorIntLiteral8Parser,
626
+ dalvikBytecodeOperationShiftLeftIntLiteral8Parser,
627
+ dalvikBytecodeOperationShiftRightIntLiteral8Parser,
628
+ dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser,
629
+ ]);
630
+
631
+ setParserName(dalvikBytecodeOperationBinaryOperationLiteral8Parser, 'dalvikBytecodeOperationBinaryOperationLiteral8Parser');
632
+
633
+ const createDalvikBytecodeOperationBinaryOperationLiteral16 = <T extends string>(operation: T, opcode: number): Parser<{
634
+ operation: T;
635
+ registers: number[];
636
+ value: number;
637
+ }, Uint8Array> => promiseCompose(
638
+ createTupleParser([
639
+ createExactElementParser(opcode),
640
+ createDalvikBytecodeFormat22sParser(),
641
+ ]),
642
+ ([ _opcode, { registers, value } ]) => ({
643
+ operation,
644
+ registers,
645
+ value,
646
+ }),
647
+ );
648
+
649
+ const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16', 0xd0);
650
+
651
+ type DalvikBytecodeOperationAddIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntLiteral16Parser>>;
652
+
653
+ const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int/lit16', 0xd1);
654
+
655
+ type DalvikBytecodeOperationReverseSubtractIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntLiteral16Parser>>;
656
+
657
+ const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16', 0xd2);
658
+
659
+ type DalvikBytecodeOperationMultiplyIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntLiteral16Parser>>;
660
+
661
+ const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16', 0xd3);
662
+
663
+ type DalvikBytecodeOperationDivideIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntLiteral16Parser>>;
664
+
665
+ const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16', 0xd4);
666
+
667
+ type DalvikBytecodeOperationRemainderIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntLiteral16Parser>>;
668
+
669
+ const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16', 0xd5);
670
+
671
+ type DalvikBytecodeOperationAndIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntLiteral16Parser>>;
672
+
673
+ const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16', 0xd6);
674
+
675
+ type DalvikBytecodeOperationOrIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntLiteral16Parser>>;
676
+
677
+ const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16', 0xd7);
678
+
679
+ type DalvikBytecodeOperationXorIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntLiteral16Parser>>;
680
+
681
+ type DalvikBytecodeOperationBinaryOperationLiteral16 =
682
+ | DalvikBytecodeOperationAddIntLiteral16
683
+ | DalvikBytecodeOperationReverseSubtractIntLiteral16
684
+ | DalvikBytecodeOperationMultiplyIntLiteral16
685
+ | DalvikBytecodeOperationDivideIntLiteral16
686
+ | DalvikBytecodeOperationRemainderIntLiteral16
687
+ | DalvikBytecodeOperationAndIntLiteral16
688
+ | DalvikBytecodeOperationOrIntLiteral16
689
+ | DalvikBytecodeOperationXorIntLiteral16
690
+ ;
691
+
692
+ const dalvikBytecodeOperationBinaryOperationLiteral16Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral16, Uint8Array> = createUnionParser([
693
+ dalvikBytecodeOperationAddIntLiteral16Parser,
694
+ dalvikBytecodeOperationReverseSubtractIntLiteral16Parser,
695
+ dalvikBytecodeOperationMultiplyIntLiteral16Parser,
696
+ dalvikBytecodeOperationDivideIntLiteral16Parser,
697
+ dalvikBytecodeOperationRemainderIntLiteral16Parser,
698
+ dalvikBytecodeOperationAndIntLiteral16Parser,
699
+ dalvikBytecodeOperationOrIntLiteral16Parser,
700
+ dalvikBytecodeOperationXorIntLiteral16Parser,
701
+ ]);
702
+
703
+ setParserName(dalvikBytecodeOperationBinaryOperationLiteral16Parser, 'dalvikBytecodeOperationBinaryOperationLiteral16Parser');
704
+
705
+ const createDalvikBytecodeOperationBinaryOperationInPlace = <T extends string>(operation: T, opcode: number): Parser<{
706
+ operation: T;
707
+ registers: number[];
708
+ }, Uint8Array> => promiseCompose(
709
+ createTupleParser([
710
+ createExactElementParser(opcode),
711
+ dalvikBytecodeFormat12xParser,
712
+ ]),
713
+ ([ _opcode, { registers } ]) => ({
714
+ operation,
715
+ registers,
716
+ }),
717
+ );
718
+
719
+ const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr', 0xb0);
720
+
721
+ type DalvikBytecodeOperationAddIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntInPlaceParser>>;
722
+
723
+ const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rsub-int', 0xb1);
724
+
725
+ type DalvikBytecodeOperationReverseSubtractIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntInPlaceParser>>;
726
+
727
+ const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr', 0xb2);
728
+
729
+ type DalvikBytecodeOperationMultiplyIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntInPlaceParser>>;
730
+
731
+ const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr', 0xb3);
732
+
733
+ type DalvikBytecodeOperationDivideIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntInPlaceParser>>;
734
+
735
+ const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr', 0xb4);
736
+
737
+ type DalvikBytecodeOperationRemainderIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntInPlaceParser>>;
738
+
739
+ const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr', 0xb5);
740
+
741
+ type DalvikBytecodeOperationAndIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntInPlaceParser>>;
742
+
743
+ const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr', 0xb6);
744
+
745
+ type DalvikBytecodeOperationOrIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntInPlaceParser>>;
746
+
747
+ const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr', 0xb7);
748
+
749
+ type DalvikBytecodeOperationXorIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntInPlaceParser>>;
750
+
751
+ const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr', 0xb8);
752
+
753
+ type DalvikBytecodeOperationShiftLeftIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftIntInPlaceParser>>;
754
+
755
+ const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr', 0xb9);
756
+
757
+ type DalvikBytecodeOperationShiftRightIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntInPlaceParser>>;
758
+
759
+ const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr', 0xba);
760
+
761
+ type DalvikBytecodeOperationUnsignedShiftRightIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser>>;
762
+
763
+ const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr', 0xbb);
764
+
765
+ type DalvikBytecodeOperationAddLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddLongInPlaceParser>>;
766
+
767
+ const dalvikBytecodeOperationReverseSubtractLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rsub-long', 0xbc);
768
+
769
+ type DalvikBytecodeOperationReverseSubtractLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractLongInPlaceParser>>;
770
+
771
+ const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr', 0xbd);
772
+
773
+ type DalvikBytecodeOperationMultiplyLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyLongInPlaceParser>>;
774
+
775
+ const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr', 0xbe);
776
+
777
+ type DalvikBytecodeOperationDivideLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideLongInPlaceParser>>;
778
+
779
+ const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr', 0xbf);
780
+
781
+ type DalvikBytecodeOperationRemainderLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderLongInPlaceParser>>;
782
+
783
+ const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr', 0xc0);
784
+
785
+ type DalvikBytecodeOperationAndLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAndLongInPlaceParser>>;
786
+
787
+ const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr', 0xc1);
788
+
789
+ type DalvikBytecodeOperationOrLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationOrLongInPlaceParser>>;
790
+
791
+ const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr', 0xc2);
792
+
793
+ type DalvikBytecodeOperationXorLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationXorLongInPlaceParser>>;
794
+
795
+ const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr', 0xc3);
796
+
797
+ type DalvikBytecodeOperationShiftLeftLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftLongInPlaceParser>>;
798
+
799
+ const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr', 0xc4);
800
+
801
+ type DalvikBytecodeOperationShiftRightLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightLongInPlaceParser>>;
802
+
803
+ const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr', 0xc5);
804
+
805
+ type DalvikBytecodeOperationUnsignedShiftRightLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser>>;
806
+
807
+ const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr', 0xc6);
808
+
809
+ type DalvikBytecodeOperationAddFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddFloatInPlaceParser>>;
810
+
811
+ const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr', 0xc7);
812
+
813
+ type DalvikBytecodeOperationSubtractFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractFloatInPlaceParser>>;
814
+
815
+ const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr', 0xc8);
816
+
817
+ type DalvikBytecodeOperationMultiplyFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyFloatInPlaceParser>>;
818
+
819
+ const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr', 0xc9);
820
+
821
+ type DalvikBytecodeOperationDivideFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatInPlaceParser>>;
822
+
823
+ const dalvikBytecodeOperationAddDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-double/2addr', 0xca);
824
+
825
+ type DalvikBytecodeOperationAddDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddDoubleInPlaceParser>>;
826
+
827
+ const dalvikBytecodeOperationSubtractDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-double/2addr', 0xcb);
828
+
829
+ type DalvikBytecodeOperationSubtractDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractDoubleInPlaceParser>>;
830
+
831
+ const dalvikBytecodeOperationMultiplyDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-double/2addr', 0xcc);
832
+
833
+ type DalvikBytecodeOperationMultiplyDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyDoubleInPlaceParser>>;
834
+
835
+ const dalvikBytecodeOperationDivideDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-double/2addr', 0xcd);
836
+
837
+ type DalvikBytecodeOperationDivideDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideDoubleInPlaceParser>>;
838
+
839
+ const dalvikBytecodeOperationRemainderDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-double/2addr', 0xce);
840
+
841
+ type DalvikBytecodeOperationRemainderDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleInPlaceParser>>;
842
+
843
+ type DalvikBytecodeOperationBinaryOperationInPlace =
844
+ | DalvikBytecodeOperationAddIntInPlace
845
+ | DalvikBytecodeOperationReverseSubtractIntInPlace
846
+ | DalvikBytecodeOperationMultiplyIntInPlace
847
+ | DalvikBytecodeOperationDivideIntInPlace
848
+ | DalvikBytecodeOperationRemainderIntInPlace
849
+ | DalvikBytecodeOperationAndIntInPlace
850
+ | DalvikBytecodeOperationOrIntInPlace
851
+ | DalvikBytecodeOperationXorIntInPlace
852
+ | DalvikBytecodeOperationShiftLeftIntInPlace
853
+ | DalvikBytecodeOperationShiftRightIntInPlace
854
+ | DalvikBytecodeOperationUnsignedShiftRightIntInPlace
855
+ | DalvikBytecodeOperationAddLongInPlace
856
+ | DalvikBytecodeOperationReverseSubtractLongInPlace
857
+ | DalvikBytecodeOperationMultiplyLongInPlace
858
+ | DalvikBytecodeOperationDivideLongInPlace
859
+ | DalvikBytecodeOperationRemainderLongInPlace
860
+ | DalvikBytecodeOperationAndLongInPlace
861
+ | DalvikBytecodeOperationOrLongInPlace
862
+ | DalvikBytecodeOperationXorLongInPlace
863
+ | DalvikBytecodeOperationShiftLeftLongInPlace
864
+ | DalvikBytecodeOperationShiftRightLongInPlace
865
+ | DalvikBytecodeOperationUnsignedShiftRightLongInPlace
866
+ | DalvikBytecodeOperationAddFloatInPlace
867
+ | DalvikBytecodeOperationSubtractFloatInPlace
868
+ | DalvikBytecodeOperationMultiplyFloatInPlace
869
+ | DalvikBytecodeOperationDivideFloatInPlace
870
+ | DalvikBytecodeOperationAddDoubleInPlace
871
+ | DalvikBytecodeOperationSubtractDoubleInPlace
872
+ | DalvikBytecodeOperationMultiplyDoubleInPlace
873
+ | DalvikBytecodeOperationDivideDoubleInPlace
874
+ | DalvikBytecodeOperationRemainderDoubleInPlace
875
+ ;
876
+
877
+ const dalvikBytecodeOperationBinaryOperationInPlaceParser: Parser<DalvikBytecodeOperationBinaryOperationInPlace, Uint8Array> = createUnionParser([
878
+ dalvikBytecodeOperationAddIntInPlaceParser,
879
+ dalvikBytecodeOperationReverseSubtractIntInPlaceParser,
880
+ dalvikBytecodeOperationMultiplyIntInPlaceParser,
881
+ dalvikBytecodeOperationDivideIntInPlaceParser,
882
+ dalvikBytecodeOperationRemainderIntInPlaceParser,
883
+ dalvikBytecodeOperationAndIntInPlaceParser,
884
+ dalvikBytecodeOperationOrIntInPlaceParser,
885
+ dalvikBytecodeOperationXorIntInPlaceParser,
886
+ dalvikBytecodeOperationShiftLeftIntInPlaceParser,
887
+ dalvikBytecodeOperationShiftRightIntInPlaceParser,
888
+ dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser,
889
+ dalvikBytecodeOperationAddLongInPlaceParser,
890
+ dalvikBytecodeOperationReverseSubtractLongInPlaceParser,
891
+ dalvikBytecodeOperationMultiplyLongInPlaceParser,
892
+ dalvikBytecodeOperationDivideLongInPlaceParser,
893
+ dalvikBytecodeOperationRemainderLongInPlaceParser,
894
+ dalvikBytecodeOperationAndLongInPlaceParser,
895
+ dalvikBytecodeOperationOrLongInPlaceParser,
896
+ dalvikBytecodeOperationXorLongInPlaceParser,
897
+ dalvikBytecodeOperationShiftLeftLongInPlaceParser,
898
+ dalvikBytecodeOperationShiftRightLongInPlaceParser,
899
+ dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser,
900
+ dalvikBytecodeOperationAddFloatInPlaceParser,
901
+ dalvikBytecodeOperationSubtractFloatInPlaceParser,
902
+ dalvikBytecodeOperationMultiplyFloatInPlaceParser,
903
+ dalvikBytecodeOperationDivideFloatInPlaceParser,
904
+ dalvikBytecodeOperationAddDoubleInPlaceParser,
905
+ dalvikBytecodeOperationSubtractDoubleInPlaceParser,
906
+ dalvikBytecodeOperationMultiplyDoubleInPlaceParser,
907
+ dalvikBytecodeOperationDivideDoubleInPlaceParser,
908
+ dalvikBytecodeOperationRemainderDoubleInPlaceParser,
909
+ ]);
910
+
911
+ setParserName(dalvikBytecodeOperationBinaryOperationInPlaceParser, 'dalvikBytecodeOperationBinaryOperationInPlaceParser');
912
+
913
+ const createDalvikBytecodeOperationBinaryOperation = <T extends string>(operation: T, opcode: number): Parser<{
914
+ operation: T;
915
+ registers: number[];
916
+ }, Uint8Array> => promiseCompose(
917
+ createTupleParser([
918
+ createExactElementParser(opcode),
919
+ dalvikBytecodeFormat23xParser,
920
+ ]),
921
+ ([ _opcode, { registers } ]) => ({
922
+ operation,
923
+ registers,
924
+ }),
925
+ );
926
+
927
+ const dalvikBytecodeOperationAddIntParser = createDalvikBytecodeOperationBinaryOperation('add-int', 0x90);
928
+
929
+ type DalvikBytecodeOperationAddInt = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntParser>>;
930
+
931
+ const dalvikBytecodeOperationSubtractIntParser = createDalvikBytecodeOperationBinaryOperation('sub-int', 0x91);
932
+
933
+ type DalvikBytecodeOperationSubtractInt = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractIntParser>>;
934
+
935
+ const dalvikBytecodeOperationMultiplyIntParser = createDalvikBytecodeOperationBinaryOperation('mul-int', 0x92);
936
+
937
+ type DalvikBytecodeOperationMultiplyInt = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntParser>>;
938
+
939
+ const dalvikBytecodeOperationDivideIntParser = createDalvikBytecodeOperationBinaryOperation('div-int', 0x93);
940
+
941
+ type DalvikBytecodeOperationDivideInt = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntParser>>;
942
+
943
+ const dalvikBytecodeOperationRemainderIntParser = createDalvikBytecodeOperationBinaryOperation('rem-int', 0x94);
944
+
945
+ type DalvikBytecodeOperationRemainderInt = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntParser>>;
946
+
947
+ const dalvikBytecodeOperationAndIntParser = createDalvikBytecodeOperationBinaryOperation('and-int', 0x95);
948
+
949
+ type DalvikBytecodeOperationAndInt = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntParser>>;
950
+
951
+ const dalvikBytecodeOperationOrIntParser = createDalvikBytecodeOperationBinaryOperation('or-int', 0x96);
952
+
953
+ type DalvikBytecodeOperationOrInt = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntParser>>;
954
+
955
+ const dalvikBytecodeOperationXorIntParser = createDalvikBytecodeOperationBinaryOperation('xor-int', 0x97);
956
+
957
+ type DalvikBytecodeOperationXorInt = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntParser>>;
958
+
959
+ const dalvikBytecodeOperationShiftLeftIntParser = createDalvikBytecodeOperationBinaryOperation('shl-int', 0x98);
960
+
961
+ type DalvikBytecodeOperationShiftLeftInt = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftIntParser>>;
962
+
963
+ const dalvikBytecodeOperationShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('shr-int', 0x99);
964
+
965
+ type DalvikBytecodeOperationShiftRightInt = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntParser>>;
966
+
967
+ const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int', 0x9a);
968
+
969
+ type DalvikBytecodeOperationUnsignedShiftRightInt = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntParser>>;
970
+
971
+ const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long', 0x9b);
972
+
973
+ type DalvikBytecodeOperationAddLong = Awaited<ReturnType<typeof dalvikBytecodeOperationAddLongParser>>;
974
+
975
+ const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long', 0x9c);
976
+
977
+ type DalvikBytecodeOperationSubtractLong = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractLongParser>>;
978
+
979
+ const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long', 0x9d);
980
+
981
+ type DalvikBytecodeOperationMultiplyLong = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyLongParser>>;
982
+
983
+ const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long', 0x9e);
984
+
985
+ type DalvikBytecodeOperationDivideLong = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideLongParser>>;
986
+
987
+ const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long', 0x9f);
988
+
989
+ type DalvikBytecodeOperationRemainderLong = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderLongParser>>;
990
+
991
+ const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long', 0xa0);
992
+
993
+ type DalvikBytecodeOperationAndLong = Awaited<ReturnType<typeof dalvikBytecodeOperationAndLongParser>>;
994
+
995
+ const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long', 0xa1);
996
+
997
+ type DalvikBytecodeOperationOrLong = Awaited<ReturnType<typeof dalvikBytecodeOperationOrLongParser>>;
998
+
999
+ const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long', 0xa2);
1000
+
1001
+ type DalvikBytecodeOperationXorLong = Awaited<ReturnType<typeof dalvikBytecodeOperationXorLongParser>>;
1002
+
1003
+ const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long', 0xa3);
1004
+
1005
+ type DalvikBytecodeOperationShiftLeftLong = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftLongParser>>;
1006
+
1007
+ const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long', 0xa4);
1008
+
1009
+ type DalvikBytecodeOperationShiftRightLong = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightLongParser>>;
1010
+
1011
+ const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long', 0xa5);
1012
+
1013
+ type DalvikBytecodeOperationUnsignedShiftRightLong = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightLongParser>>;
1014
+
1015
+ const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float', 0xa6);
1016
+
1017
+ type DalvikBytecodeOperationAddFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationAddFloatParser>>;
1018
+
1019
+ const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xa7);
1020
+
1021
+ type DalvikBytecodeOperationSubtractFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractFloatParser>>;
1022
+
1023
+ const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xa8);
1024
+
1025
+ type DalvikBytecodeOperationMultiplyFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyFloatParser>>;
1026
+
1027
+ const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xa9);
1028
+
1029
+ type DalvikBytecodeOperationDivideFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatParser>>;
1030
+
1031
+ const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xaa);
1032
+
1033
+ type DalvikBytecodeOperationAddDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationAddDoubleParser>>;
1034
+
1035
+ const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xab);
1036
+
1037
+ type DalvikBytecodeOperationSubtractDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractDoubleParser>>;
1038
+
1039
+ const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xac);
1040
+
1041
+ type DalvikBytecodeOperationMultiplyDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyDoubleParser>>;
1042
+
1043
+ const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double', 0xad);
1044
+
1045
+ type DalvikBytecodeOperationDivideDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideDoubleParser>>;
1046
+
1047
+ const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double', 0xae);
1048
+
1049
+ type DalvikBytecodeOperationRemainderDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleParser>>;
1050
+
1051
+ type DalvikBytecodeOperationBinaryOperation =
1052
+ | DalvikBytecodeOperationAddInt
1053
+ | DalvikBytecodeOperationSubtractInt
1054
+ | DalvikBytecodeOperationMultiplyInt
1055
+ | DalvikBytecodeOperationDivideInt
1056
+ | DalvikBytecodeOperationRemainderInt
1057
+ | DalvikBytecodeOperationAndInt
1058
+ | DalvikBytecodeOperationOrInt
1059
+ | DalvikBytecodeOperationXorInt
1060
+ | DalvikBytecodeOperationShiftLeftInt
1061
+ | DalvikBytecodeOperationShiftRightInt
1062
+ | DalvikBytecodeOperationUnsignedShiftRightInt
1063
+ | DalvikBytecodeOperationAddLong
1064
+ | DalvikBytecodeOperationSubtractLong
1065
+ | DalvikBytecodeOperationMultiplyLong
1066
+ | DalvikBytecodeOperationDivideLong
1067
+ | DalvikBytecodeOperationRemainderLong
1068
+ | DalvikBytecodeOperationAndLong
1069
+ | DalvikBytecodeOperationOrLong
1070
+ | DalvikBytecodeOperationXorLong
1071
+ | DalvikBytecodeOperationShiftLeftLong
1072
+ | DalvikBytecodeOperationShiftRightLong
1073
+ | DalvikBytecodeOperationUnsignedShiftRightLong
1074
+ | DalvikBytecodeOperationAddFloat
1075
+ | DalvikBytecodeOperationSubtractFloat
1076
+ | DalvikBytecodeOperationMultiplyFloat
1077
+ | DalvikBytecodeOperationDivideFloat
1078
+ | DalvikBytecodeOperationAddDouble
1079
+ | DalvikBytecodeOperationSubtractDouble
1080
+ | DalvikBytecodeOperationMultiplyDouble
1081
+ | DalvikBytecodeOperationDivideDouble
1082
+ | DalvikBytecodeOperationRemainderDouble
1083
+ ;
1084
+
1085
+ const dalvikBytecodeOperationBinaryOperationParser: Parser<DalvikBytecodeOperationBinaryOperation, Uint8Array> = createUnionParser([
1086
+ dalvikBytecodeOperationAddIntParser,
1087
+ dalvikBytecodeOperationSubtractIntParser,
1088
+ dalvikBytecodeOperationMultiplyIntParser,
1089
+ dalvikBytecodeOperationDivideIntParser,
1090
+ dalvikBytecodeOperationRemainderIntParser,
1091
+ dalvikBytecodeOperationAndIntParser,
1092
+ dalvikBytecodeOperationOrIntParser,
1093
+ dalvikBytecodeOperationXorIntParser,
1094
+ dalvikBytecodeOperationShiftLeftIntParser,
1095
+ dalvikBytecodeOperationShiftRightIntParser,
1096
+ dalvikBytecodeOperationUnsignedShiftRightIntParser,
1097
+ dalvikBytecodeOperationAddLongParser,
1098
+ dalvikBytecodeOperationSubtractLongParser,
1099
+ dalvikBytecodeOperationMultiplyLongParser,
1100
+ dalvikBytecodeOperationDivideLongParser,
1101
+ dalvikBytecodeOperationRemainderLongParser,
1102
+ dalvikBytecodeOperationAndLongParser,
1103
+ dalvikBytecodeOperationOrLongParser,
1104
+ dalvikBytecodeOperationXorLongParser,
1105
+ dalvikBytecodeOperationShiftLeftLongParser,
1106
+ dalvikBytecodeOperationShiftRightLongParser,
1107
+ dalvikBytecodeOperationUnsignedShiftRightLongParser,
1108
+ dalvikBytecodeOperationAddFloatParser,
1109
+ dalvikBytecodeOperationSubtractFloatParser,
1110
+ dalvikBytecodeOperationMultiplyFloatParser,
1111
+ dalvikBytecodeOperationDivideFloatParser,
1112
+ dalvikBytecodeOperationAddDoubleParser,
1113
+ dalvikBytecodeOperationSubtractDoubleParser,
1114
+ dalvikBytecodeOperationMultiplyDoubleParser,
1115
+ dalvikBytecodeOperationDivideDoubleParser,
1116
+ dalvikBytecodeOperationRemainderDoubleParser,
1117
+ ]);
1118
+
1119
+ setParserName(dalvikBytecodeOperationBinaryOperationParser, 'dalvikBytecodeOperationBinaryOperationParser');
1120
+
1121
+ const createDalvikBytecodeOperationUnaryOperation = <T extends string>(operation: T, opcode: number): Parser<{
1122
+ operation: T;
1123
+ registers: number[];
1124
+ }, Uint8Array> => promiseCompose(
1125
+ createTupleParser([
1126
+ createExactElementParser(opcode),
1127
+ dalvikBytecodeFormat12xParser,
1128
+ ]),
1129
+ ([ _opcode, { registers } ]) => ({
1130
+ operation,
1131
+ registers,
1132
+ }),
1133
+ );
1134
+
1135
+ const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int', 0x7b);
1136
+
1137
+ type DalvikBytecodeOperationNegateInt = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateIntParser>>;
1138
+
1139
+ const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int', 0x7c);
1140
+
1141
+ type DalvikBytecodeOperationNotInt = Awaited<ReturnType<typeof dalvikBytecodeOperationNotIntParser>>;
1142
+
1143
+ const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long', 0x7d);
1144
+
1145
+ type DalvikBytecodeOperationNegateLong = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateLongParser>>;
1146
+
1147
+ const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long', 0x7e);
1148
+
1149
+ type DalvikBytecodeOperationNotLong = Awaited<ReturnType<typeof dalvikBytecodeOperationNotLongParser>>;
1150
+
1151
+ const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float', 0x7f);
1152
+
1153
+ type DalvikBytecodeOperationNegateFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateFloatParser>>;
1154
+
1155
+ const dalvikBytecodeOperationNegateDoubleParser = createDalvikBytecodeOperationUnaryOperation('neg-double', 0x80);
1156
+
1157
+ type DalvikBytecodeOperationNegateDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateDoubleParser>>;
1158
+
1159
+ const dalvikBytecodeOperationIntToLongParser = createDalvikBytecodeOperationUnaryOperation('int-to-long', 0x81);
1160
+
1161
+ type DalvikBytecodeOperationIntToLong = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToLongParser>>;
1162
+
1163
+ const dalvikBytecodeOperationIntToFloatParser = createDalvikBytecodeOperationUnaryOperation('int-to-float', 0x82);
1164
+
1165
+ type DalvikBytecodeOperationIntToFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToFloatParser>>;
1166
+
1167
+ const dalvikBytecodeOperationIntToDoubleParser = createDalvikBytecodeOperationUnaryOperation('int-to-double', 0x83);
1168
+
1169
+ type DalvikBytecodeOperationIntToDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToDoubleParser>>;
1170
+
1171
+ const dalvikBytecodeOperationLongToIntParser = createDalvikBytecodeOperationUnaryOperation('long-to-int', 0x84);
1172
+
1173
+ type DalvikBytecodeOperationLongToInt = Awaited<ReturnType<typeof dalvikBytecodeOperationLongToIntParser>>;
1174
+
1175
+ const dalvikBytecodeOperationLongToFloatParser = createDalvikBytecodeOperationUnaryOperation('long-to-float', 0x85);
1176
+
1177
+ type DalvikBytecodeOperationLongToFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationLongToFloatParser>>;
1178
+
1179
+ const dalvikBytecodeOperationLongToDoubleParser = createDalvikBytecodeOperationUnaryOperation('long-to-double', 0x86);
1180
+
1181
+ type DalvikBytecodeOperationLongToDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationLongToDoubleParser>>;
1182
+
1183
+ const dalvikBytecodeOperationFloatToIntParser = createDalvikBytecodeOperationUnaryOperation('float-to-int', 0x87);
1184
+
1185
+ type DalvikBytecodeOperationFloatToInt = Awaited<ReturnType<typeof dalvikBytecodeOperationFloatToIntParser>>;
1186
+
1187
+ const dalvikBytecodeOperationFloatToLongParser = createDalvikBytecodeOperationUnaryOperation('float-to-long', 0x88);
1188
+
1189
+ type DalvikBytecodeOperationFloatToLong = Awaited<ReturnType<typeof dalvikBytecodeOperationFloatToLongParser>>;
1190
+
1191
+ const dalvikBytecodeOperationFloatToDoubleParser = createDalvikBytecodeOperationUnaryOperation('float-to-double', 0x89);
1192
+
1193
+ type DalvikBytecodeOperationFloatToDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationFloatToDoubleParser>>;
1194
+
1195
+ const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int', 0x8a);
1196
+
1197
+ type DalvikBytecodeOperationDoubleToInt = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToIntParser>>;
1198
+
1199
+ const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long', 0x8b);
1200
+
1201
+ type DalvikBytecodeOperationDoubleToLong = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToLongParser>>;
1202
+
1203
+ const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float', 0x8c);
1204
+
1205
+ type DalvikBytecodeOperationDoubleToFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToFloatParser>>;
1206
+
1207
+ const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte', 0x8d);
1208
+
1209
+ type DalvikBytecodeOperationIntToByte = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToByteParser>>;
1210
+
1211
+ const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char', 0x8e);
1212
+
1213
+ type DalvikBytecodeOperationIntToChar = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToCharParser>>;
1214
+
1215
+ const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short', 0x8f);
1216
+
1217
+ type DalvikBytecodeOperationIntToShort = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToShortParser>>;
1218
+
1219
+ type DalvikBytecodeOperationUnaryOperation =
1220
+ | DalvikBytecodeOperationNegateInt
1221
+ | DalvikBytecodeOperationNotInt
1222
+ | DalvikBytecodeOperationNegateLong
1223
+ | DalvikBytecodeOperationNotLong
1224
+ | DalvikBytecodeOperationNegateFloat
1225
+ | DalvikBytecodeOperationNegateDouble
1226
+ | DalvikBytecodeOperationIntToLong
1227
+ | DalvikBytecodeOperationIntToFloat
1228
+ | DalvikBytecodeOperationIntToDouble
1229
+ | DalvikBytecodeOperationLongToInt
1230
+ | DalvikBytecodeOperationLongToFloat
1231
+ | DalvikBytecodeOperationLongToDouble
1232
+ | DalvikBytecodeOperationFloatToInt
1233
+ | DalvikBytecodeOperationFloatToLong
1234
+ | DalvikBytecodeOperationFloatToDouble
1235
+ | DalvikBytecodeOperationDoubleToInt
1236
+ | DalvikBytecodeOperationDoubleToLong
1237
+ | DalvikBytecodeOperationDoubleToFloat
1238
+ | DalvikBytecodeOperationIntToByte
1239
+ | DalvikBytecodeOperationIntToChar
1240
+ | DalvikBytecodeOperationIntToShort
1241
+ ;
1242
+
1243
+ const dalvikBytecodeOperationUnaryOperationParser: Parser<DalvikBytecodeOperationUnaryOperation, Uint8Array> = createUnionParser([
1244
+ dalvikBytecodeOperationNegateIntParser,
1245
+ dalvikBytecodeOperationNotIntParser,
1246
+ dalvikBytecodeOperationNegateLongParser,
1247
+ dalvikBytecodeOperationNotLongParser,
1248
+ dalvikBytecodeOperationNegateFloatParser,
1249
+ dalvikBytecodeOperationNegateDoubleParser,
1250
+ dalvikBytecodeOperationIntToLongParser,
1251
+ dalvikBytecodeOperationIntToFloatParser,
1252
+ dalvikBytecodeOperationIntToDoubleParser,
1253
+ dalvikBytecodeOperationLongToIntParser,
1254
+ dalvikBytecodeOperationLongToFloatParser,
1255
+ dalvikBytecodeOperationLongToDoubleParser,
1256
+ dalvikBytecodeOperationFloatToIntParser,
1257
+ dalvikBytecodeOperationFloatToLongParser,
1258
+ dalvikBytecodeOperationFloatToDoubleParser,
1259
+ dalvikBytecodeOperationDoubleToIntParser,
1260
+ dalvikBytecodeOperationDoubleToLongParser,
1261
+ dalvikBytecodeOperationDoubleToFloatParser,
1262
+ dalvikBytecodeOperationIntToByteParser,
1263
+ dalvikBytecodeOperationIntToCharParser,
1264
+ dalvikBytecodeOperationIntToShortParser,
1265
+ ]);
1266
+
1267
+ setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperationUnaryOperationParser');
1268
+
1269
+ const createDalvikBytecodeOperationIfTest = <T extends string>(operation: T, opcode: number): Parser<{
1270
+ operation: T;
1271
+ registers: number[];
1272
+ branchOffset: number;
1273
+ }, Uint8Array> => promiseCompose(
1274
+ createTupleParser([
1275
+ createExactElementParser(opcode),
1276
+ createDalvikBytecodeFormat22tParser(),
1277
+ ]),
1278
+ ([ _opcode, { registers, branchOffset } ]) => ({
1279
+ operation,
1280
+ registers,
1281
+ branchOffset,
1282
+ }),
1283
+ );
1284
+
1285
+ const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTest('if-eq', 0x32);
1286
+
1287
+ type DalvikBytecodeOperationIfEqual = Awaited<ReturnType<typeof dalvikBytecodeIfEqualParser>>;
1288
+
1289
+ const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTest('if-neq', 0x33);
1290
+
1291
+ type DalvikBytecodeOperationIfNotEqual = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualParser>>;
1292
+
1293
+ const dalvikBytecodeIfLessThanParser = createDalvikBytecodeOperationIfTest('if-lt', 0x34);
1294
+
1295
+ type DalvikBytecodeOperationIfLessThan = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanParser>>;
1296
+
1297
+ const dalvikBytecodeIfGreaterThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-ge', 0x35);
1298
+
1299
+ type DalvikBytecodeOperationIfGreaterThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToParser>>;
1300
+
1301
+ const dalvikBytecodeIfGreaterThanParser = createDalvikBytecodeOperationIfTest('if-gt', 0x36);
1302
+
1303
+ type DalvikBytecodeOperationIfGreaterThan = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanParser>>;
1304
+
1305
+ const dalvikBytecodeIfLessThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-le', 0x37);
1306
+
1307
+ type DalvikBytecodeOperationIfLessThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToParser>>;
1308
+
1309
+ type DalvikBytecodeOperationIfTest =
1310
+ | DalvikBytecodeOperationIfEqual
1311
+ | DalvikBytecodeOperationIfNotEqual
1312
+ | DalvikBytecodeOperationIfLessThan
1313
+ | DalvikBytecodeOperationIfGreaterThanOrEqualTo
1314
+ | DalvikBytecodeOperationIfGreaterThan
1315
+ | DalvikBytecodeOperationIfLessThanOrEqualTo
1316
+ ;
1317
+
1318
+ const dalvikBytecodeOperationIfTestParser: Parser<DalvikBytecodeOperationIfTest, Uint8Array> = createUnionParser([
1319
+ dalvikBytecodeIfEqualParser,
1320
+ dalvikBytecodeIfNotEqualParser,
1321
+ dalvikBytecodeIfLessThanParser,
1322
+ dalvikBytecodeIfGreaterThanOrEqualToParser,
1323
+ dalvikBytecodeIfGreaterThanParser,
1324
+ dalvikBytecodeIfLessThanOrEqualToParser,
1325
+ ]);
1326
+
1327
+ setParserName(dalvikBytecodeOperationIfTestParser, 'dalvikBytecodeOperationIfTestParser');
1328
+
1329
+ const createDalvikBytecodeOperationIfTestZero = <T extends string>(operation: T, opcode: number): Parser<{
1330
+ operation: T;
1331
+ registers: number[];
1332
+ branchOffset: number;
1333
+ }, Uint8Array> => promiseCompose(
1334
+ createTupleParser([
1335
+ createExactElementParser(opcode),
1336
+ createDalvikBytecodeFormat21tParser(),
1337
+ ]),
1338
+ ([ _opcode, { registers, branchOffset } ]) => ({
1339
+ operation,
1340
+ registers,
1341
+ branchOffset,
1342
+ }),
1343
+ );
1344
+
1345
+ const dalvikBytecodeIfEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-eqz', 0x38);
1346
+
1347
+ type DalvikBytecodeOperationIfEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfEqualZeroParser>>;
1348
+
1349
+ const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-nez', 0x39);
1350
+
1351
+ type DalvikBytecodeOperationIfNotEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualZeroParser>>;
1352
+
1353
+ const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz', 0x3a);
1354
+
1355
+ type DalvikBytecodeOperationIfLessThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanZeroParser>>;
1356
+
1357
+ const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez', 0x3b);
1358
+
1359
+ type DalvikBytecodeOperationIfGreaterThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToZeroParser>>;
1360
+
1361
+ const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz', 0x3c);
1362
+
1363
+ type DalvikBytecodeOperationIfGreaterThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanZeroParser>>;
1364
+
1365
+ const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez', 0x3d);
1366
+
1367
+ type DalvikBytecodeOperationIfLessThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToZeroParser>>;
1368
+
1369
+ type DalvikBytecodeOperationIfTestZero =
1370
+ | DalvikBytecodeOperationIfEqualZero
1371
+ | DalvikBytecodeOperationIfNotEqualZero
1372
+ | DalvikBytecodeOperationIfLessThanZero
1373
+ | DalvikBytecodeOperationIfGreaterThanOrEqualToZero
1374
+ | DalvikBytecodeOperationIfGreaterThanZero
1375
+ | DalvikBytecodeOperationIfLessThanOrEqualToZero
1376
+ ;
1377
+
1378
+ const dalvikBytecodeOperationIfTestZeroParser: Parser<DalvikBytecodeOperationIfTestZero, Uint8Array> = createUnionParser([
1379
+ dalvikBytecodeIfEqualZeroParser,
1380
+ dalvikBytecodeIfNotEqualZeroParser,
1381
+ dalvikBytecodeIfLessThanZeroParser,
1382
+ dalvikBytecodeIfGreaterThanOrEqualToZeroParser,
1383
+ dalvikBytecodeIfGreaterThanZeroParser,
1384
+ dalvikBytecodeIfLessThanOrEqualToZeroParser,
1385
+ ]);
1386
+
1387
+ setParserName(dalvikBytecodeOperationIfTestZeroParser, 'dalvikBytecodeOperationIfTestZeroParser');
1388
+
1389
+ type DalvikBytecodeOperationConstString = {
1390
+ operation: 'const-string';
1391
+ stringIndex: IndexIntoStringIds;
1392
+ registers: number[];
1393
+ };
1394
+
1395
+ const dalvikBytecodeOperationConstStringParser: Parser<DalvikBytecodeOperationConstString, Uint8Array> = promiseCompose(
1396
+ createTupleParser([
1397
+ createExactElementParser(0x1a),
1398
+ createDalvikBytecodeFormat21cParser({
1399
+ isoIndex: isoIndexIntoStringIds,
1400
+ }),
1401
+ ]),
1402
+ ([ _opcode, { index, registers } ]) => ({
1403
+ operation: 'const-string',
1404
+ stringIndex: index,
1405
+ registers,
1406
+ }),
1407
+ );
1408
+
1409
+ setParserName(dalvikBytecodeOperationConstStringParser, 'dalvikBytecodeOperationConstStringParser');
1410
+
1411
+ type DalvikBytecodeOperationConstMethodHandle = {
1412
+ operation: 'const-method-handle';
1413
+ methodIndex: IndexIntoMethodIds;
1414
+ registers: number[];
1415
+ };
1416
+
1417
+ const dalvikBytecodeOperationConstMethodHandleParser: Parser<DalvikBytecodeOperationConstMethodHandle, Uint8Array> = promiseCompose(
1418
+ createTupleParser([
1419
+ createExactElementParser(0xfe),
1420
+ createDalvikBytecodeFormat21cParser({
1421
+ isoIndex: isoIndexIntoMethodIds,
1422
+ }),
1423
+ ]),
1424
+ ([ _opcode, { index, registers } ]) => ({
1425
+ operation: 'const-method-handle',
1426
+ methodIndex: index,
1427
+ registers,
1428
+ }),
1429
+ );
1430
+
1431
+ setParserName(dalvikBytecodeOperationConstMethodHandleParser, 'dalvikBytecodeOperationConstMethodHandleParser');
1432
+
1433
+ type DalvikBytecodeOperationNewInstance = {
1434
+ operation: 'new-instance';
1435
+ typeIndex: IndexIntoTypeIds;
1436
+ registers: number[];
1437
+ };
1438
+
1439
+ const dalvikBytecodeOperationNewInstanceParser: Parser<DalvikBytecodeOperationNewInstance, Uint8Array> = promiseCompose(
1440
+ createTupleParser([
1441
+ createExactElementParser(0x22),
1442
+ createDalvikBytecodeFormat21cParser({
1443
+ isoIndex: isoIndexIntoTypeIds,
1444
+ }),
1445
+ ]),
1446
+ ([ _opcode, { index, registers } ]) => ({
1447
+ operation: 'new-instance',
1448
+ typeIndex: index,
1449
+ registers,
1450
+ }),
1451
+ );
1452
+
1453
+ setParserName(dalvikBytecodeOperationNewInstanceParser, 'dalvikBytecodeOperationNewInstanceParser');
1454
+
1455
+ type DalvikBytecodeOperationNewArray = {
1456
+ operation: 'new-array';
1457
+ typeIndex: IndexIntoTypeIds;
1458
+ registers: number[];
1459
+ };
1460
+
1461
+ const dalvikBytecodeOperationNewArrayParser: Parser<DalvikBytecodeOperationNewArray, Uint8Array> = promiseCompose(
1462
+ createTupleParser([
1463
+ createExactElementParser(0x23),
1464
+ createDalvikBytecodeFormat22cParser({
1465
+ isoIndex: isoIndexIntoTypeIds,
1466
+ }),
1467
+ ]),
1468
+ ([ _opcode, { index, registers } ]) => ({
1469
+ operation: 'new-array',
1470
+ typeIndex: index,
1471
+ registers,
1472
+ }),
1473
+ );
1474
+
1475
+ setParserName(dalvikBytecodeOperationNewArrayParser, 'dalvikBytecodeOperationNewArrayParser');
1476
+
1477
+ type DalvikBytecodeOperationCheckCast = {
1478
+ operation: 'check-cast';
1479
+ typeIndex: IndexIntoTypeIds;
1480
+ registers: number[];
1481
+ };
1482
+
1483
+ const dalvikBytecodeOperationCheckCastParser: Parser<DalvikBytecodeOperationCheckCast, Uint8Array> = promiseCompose(
1484
+ createTupleParser([
1485
+ createExactElementParser(0x1f),
1486
+ createDalvikBytecodeFormat21cParser({
1487
+ isoIndex: isoIndexIntoTypeIds,
1488
+ }),
1489
+ ]),
1490
+ ([ _opcode, { index, registers } ]) => ({
1491
+ operation: 'check-cast',
1492
+ typeIndex: index,
1493
+ registers,
1494
+ }),
1495
+ );
1496
+
1497
+ setParserName(dalvikBytecodeOperationCheckCastParser, 'dalvikBytecodeOperationCheckCastParser');
1498
+
1499
+ type DalvikBytecodeOperationConstClass = {
1500
+ operation: 'const-class';
1501
+ typeIndex: IndexIntoTypeIds;
1502
+ registers: number[];
1503
+ };
1504
+
1505
+ const dalvikBytecodeOperationConstClassParser: Parser<DalvikBytecodeOperationConstClass, Uint8Array> = promiseCompose(
1506
+ createTupleParser([
1507
+ createExactElementParser(0x1c),
1508
+ createDalvikBytecodeFormat21cParser({
1509
+ isoIndex: isoIndexIntoTypeIds,
1510
+ }),
1511
+ ]),
1512
+ ([ _opcode, { index, registers } ]) => ({
1513
+ operation: 'const-class',
1514
+ typeIndex: index,
1515
+ registers,
1516
+ }),
1517
+ );
1518
+
1519
+ setParserName(dalvikBytecodeOperationConstClassParser, 'dalvikBytecodeOperationConstClassParser');
1520
+
1521
+ type DalvikBytecodeOperationReturnVoid = {
1522
+ operation: 'return-void';
1523
+ };
1524
+
1525
+ const dalvikBytecodeOperationReturnVoidParser: Parser<DalvikBytecodeOperationReturnVoid, Uint8Array> = promiseCompose(
1526
+ createTupleParser([
1527
+ createExactElementParser(0x0e),
1528
+ dalvikBytecodeFormat10xParser,
1529
+ ]),
1530
+ () => ({
1531
+ operation: 'return-void',
1532
+ }),
1533
+ );
1534
+
1535
+ setParserName(dalvikBytecodeOperationReturnVoidParser, 'dalvikBytecodeOperationReturnVoidParser');
1536
+
1537
+ const createDalvikBytecodeMoveResult1Parser = <T extends string>(operation: T, opcode: number): Parser<{
1538
+ operation: T;
1539
+ registers: number[];
1540
+ }, Uint8Array> => promiseCompose(
1541
+ createTupleParser([
1542
+ createExactElementParser(opcode),
1543
+ dalvikBytecodeFormat11xParser,
1544
+ ]),
1545
+ ([ _opcode, { registers } ]) => ({
1546
+ operation,
1547
+ registers,
1548
+ }),
1549
+ );
1550
+
1551
+ const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result', 0x0a);
1552
+
1553
+ type DalvikBytecodeOperationMoveResult = Awaited<ReturnType<typeof dalvikBytecodeMoveResultParser>>;
1554
+
1555
+ const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide', 0x0b);
1556
+
1557
+ type DalvikBytecodeOperationMoveResultWide = Awaited<ReturnType<typeof dalvikBytecodeMoveResultWideParser>>;
1558
+
1559
+ const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object', 0x0c);
1560
+
1561
+ type DalvikBytecodeOperationMoveResultObject = Awaited<ReturnType<typeof dalvikBytecodeMoveResultObjectParser>>;
1562
+
1563
+ const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception', 0x0d);
1564
+
1565
+ type DalvikBytecodeOperationMoveException = Awaited<ReturnType<typeof dalvikBytecodeMoveExceptionParser>>;
1566
+
1567
+ type DalvikBytecodeOperationMoveResult1 =
1568
+ | DalvikBytecodeOperationMoveResult
1569
+ | DalvikBytecodeOperationMoveResultWide
1570
+ | DalvikBytecodeOperationMoveResultObject
1571
+ | DalvikBytecodeOperationMoveException
1572
+ ;
1573
+
1574
+ const dalvikBytecodeOperationMoveResult1Parser: Parser<DalvikBytecodeOperationMoveResult1, Uint8Array> = createUnionParser([
1575
+ dalvikBytecodeMoveResultParser,
1576
+ dalvikBytecodeMoveResultWideParser,
1577
+ dalvikBytecodeMoveResultObjectParser,
1578
+ dalvikBytecodeMoveExceptionParser,
1579
+ ]);
1580
+
1581
+ setParserName(dalvikBytecodeOperationMoveResult1Parser, 'dalvikBytecodeOperationMoveResult1Parser');
1582
+
1583
+ type DalvikBytecodeOperationMove = {
1584
+ operation: 'move';
1585
+ registers: number[];
1586
+ };
1587
+
1588
+ const dalvikBytecodeOperationMoveParser: Parser<DalvikBytecodeOperationMove, Uint8Array> = promiseCompose(
1589
+ createTupleParser([
1590
+ createExactElementParser(0x01),
1591
+ dalvikBytecodeFormat12xParser,
1592
+ ]),
1593
+ ([ _opcode, { registers } ]) => ({
1594
+ operation: 'move',
1595
+ registers,
1596
+ }),
1597
+ );
1598
+
1599
+ type DalvikBytecodeOperationMoveWide = {
1600
+ operation: 'move-wide';
1601
+ registers: number[];
1602
+ };
1603
+
1604
+ const dalvikBytecodeOperationMoveWideParser: Parser<DalvikBytecodeOperationMoveWide, Uint8Array> = promiseCompose(
1605
+ createTupleParser([
1606
+ createExactElementParser(0x04),
1607
+ dalvikBytecodeFormat12xParser,
1608
+ ]),
1609
+ ([ _opcode, { registers } ]) => ({
1610
+ operation: 'move-wide',
1611
+ registers,
1612
+ }),
1613
+ );
1614
+
1615
+ type DalvikBytecodeOperationMoveObject = {
1616
+ operation: 'move-object';
1617
+ registers: number[];
1618
+ };
1619
+
1620
+ const dalvikBytecodeOperationMoveObjectParser: Parser<DalvikBytecodeOperationMoveObject, Uint8Array> = promiseCompose(
1621
+ createTupleParser([
1622
+ createExactElementParser(0x07),
1623
+ dalvikBytecodeFormat12xParser,
1624
+ ]),
1625
+ ([ _opcode, { registers } ]) => ({
1626
+ operation: 'move-object',
1627
+ registers,
1628
+ }),
1629
+ );
1630
+
1631
+ type DalvikBytecodeOperationMoveFrom16 = {
1632
+ operation: 'move/from16';
1633
+ registers: number[];
1634
+ };
1635
+
1636
+ const dalvikBytecodeOperationMoveFrom16Parser: Parser<DalvikBytecodeOperationMoveFrom16, Uint8Array> = promiseCompose(
1637
+ createTupleParser([
1638
+ createExactElementParser(0x02),
1639
+ dalvikBytecodeFormat22xParser,
1640
+ ]),
1641
+ ([ _opcode, { registers } ]) => ({
1642
+ operation: 'move/from16',
1643
+ registers,
1644
+ }),
1645
+ );
1646
+
1647
+ setParserName(dalvikBytecodeOperationMoveFrom16Parser, 'dalvikBytecodeOperationMoveFrom16Parser');
1648
+
1649
+ type DalvikBytecodeOperationMoveWideFrom16 = {
1650
+ operation: 'move-wide/from16';
1651
+ registers: number[];
1652
+ };
1653
+
1654
+ const dalvikBytecodeOperationMoveWideFrom16Parser: Parser<DalvikBytecodeOperationMoveWideFrom16, Uint8Array> = promiseCompose(
1655
+ createTupleParser([
1656
+ createExactElementParser(0x05),
1657
+ dalvikBytecodeFormat22xParser,
1658
+ ]),
1659
+ ([ _opcode, { registers } ]) => ({
1660
+ operation: 'move-wide/from16',
1661
+ registers,
1662
+ }),
1663
+ );
1664
+
1665
+ setParserName(dalvikBytecodeOperationMoveWideFrom16Parser, 'dalvikBytecodeOperationMoveWideFrom16Parser');
1666
+
1667
+ type DalvikBytecodeOperationMoveObjectFrom16 = {
1668
+ operation: 'move-object/from16';
1669
+ registers: number[];
1670
+ };
1671
+
1672
+ const dalvikBytecodeOperationMoveObjectFrom16Parser: Parser<DalvikBytecodeOperationMoveObjectFrom16, Uint8Array> = promiseCompose(
1673
+ createTupleParser([
1674
+ createExactElementParser(0x08),
1675
+ dalvikBytecodeFormat22xParser,
1676
+ ]),
1677
+ ([ _opcode, { registers } ]) => ({
1678
+ operation: 'move-object/from16',
1679
+ registers,
1680
+ }),
1681
+ );
1682
+
1683
+ setParserName(dalvikBytecodeOperationMoveObjectFrom16Parser, 'dalvikBytecodeOperationMoveObjectFrom16Parser');
1684
+
1685
+ type DalvikBytecodeOperationMoveWide16 = {
1686
+ operation: 'move-wide/16';
1687
+ registers: number[];
1688
+ };
1689
+
1690
+ const dalvikBytecodeOperationMoveWide16Parser: Parser<DalvikBytecodeOperationMoveWide16, Uint8Array> = promiseCompose(
1691
+ createTupleParser([
1692
+ createExactElementParser(0x06),
1693
+ dalvikBytecodeFormat32xParser,
1694
+ ]),
1695
+ ([ _opcode, { registers } ]) => ({
1696
+ operation: 'move-wide/16',
1697
+ registers,
1698
+ }),
1699
+ );
1700
+
1701
+ setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationMoveWide16Parser');
1702
+
1703
+ const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
1704
+
1705
+ const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0f);
1706
+
1707
+ type DalvikBytecodeOperationReturn = Awaited<ReturnType<typeof dalvikBytecodeOperationReturnParser>>;
1708
+
1709
+ const dalvikBytecodeOperationReturnWideParser = createDalvikBytecodeOperationReturn1Parser('return-wide', 0x10);
1710
+
1711
+ type DalvikBytecodeOperationReturnWide = Awaited<ReturnType<typeof dalvikBytecodeOperationReturnWideParser>>;
1712
+
1713
+ const dalvikBytecodeOperationReturnObjectParser = createDalvikBytecodeOperationReturn1Parser('return-object', 0x11);
1714
+
1715
+ type DalvikBytecodeOperationReturnObject = Awaited<ReturnType<typeof dalvikBytecodeOperationReturnObjectParser>>;
1716
+
1717
+ type DalvikBytecodeOperationReturn1 =
1718
+ | DalvikBytecodeOperationReturn
1719
+ | DalvikBytecodeOperationReturnWide
1720
+ | DalvikBytecodeOperationReturnObject
1721
+ ;
1722
+
1723
+ const dalvikBytecodeOperationReturn1Parser: Parser<DalvikBytecodeOperationReturn1, Uint8Array> = createUnionParser([
1724
+ dalvikBytecodeOperationReturnParser,
1725
+ dalvikBytecodeOperationReturnWideParser,
1726
+ dalvikBytecodeOperationReturnObjectParser,
1727
+ ]);
1728
+
1729
+ setParserName(dalvikBytecodeOperationReturn1Parser, 'dalvikBytecodeOperationReturn1Parser');
1730
+
1731
+ type DalvikBytecodeOperationConst4 = {
1732
+ operation: 'const/4';
1733
+ registers: number[];
1734
+ value: number;
1735
+ };
1736
+
1737
+ const dalvikBytecodeOperationConst4Parser: Parser<DalvikBytecodeOperationConst4, Uint8Array> = promiseCompose(
1738
+ createTupleParser([
1739
+ createExactElementParser(0x12),
1740
+ nibblesParser,
1741
+ ]),
1742
+ ([
1743
+ _opcode,
1744
+ [
1745
+ register0,
1746
+ value,
1747
+ ],
1748
+ ]) => ({
1749
+ operation: 'const/4',
1750
+ registers: [
1751
+ register0,
1752
+ ],
1753
+ value: value << 28 >> 28,
1754
+ }),
1755
+ );
1756
+
1757
+ setParserName(dalvikBytecodeOperationConst4Parser, 'dalvikBytecodeOperationConst4Parser');
1758
+
1759
+ type DalvikBytecodeOperationConst16 = {
1760
+ operation: 'const/16';
1761
+ registers: number[];
1762
+ value: number;
1763
+ };
1764
+
1765
+ const dalvikBytecodeOperationConst16Parser: Parser<DalvikBytecodeOperationConst16, Uint8Array> = promiseCompose(
1766
+ createTupleParser([
1767
+ createExactElementParser(0x13),
1768
+ createDalvikBytecodeFormat21sParser(),
1769
+ ]),
1770
+ ([ _opcode, { registers, value } ]) => ({
1771
+ operation: 'const/16',
1772
+ registers,
1773
+ value: value << 16 >> 16,
1774
+ }),
1775
+ );
1776
+
1777
+ setParserName(dalvikBytecodeOperationConst16Parser, 'dalvikBytecodeOperationConst16Parser');
1778
+
1779
+ type DalvikBytecodeOperationConstHigh16 = {
1780
+ operation: 'const/high16';
1781
+ registers: number[];
1782
+ value: number;
1783
+ };
1784
+
1785
+ const dalvikBytecodeOperationConstHigh16Parser: Parser<DalvikBytecodeOperationConstHigh16, Uint8Array> = promiseCompose(
1786
+ createTupleParser([
1787
+ createExactElementParser(0x15),
1788
+ createDalvikBytecodeFormat21sParser(),
1789
+ ]),
1790
+ ([ _opcode, { registers, value } ]) => ({
1791
+ operation: 'const/high16',
1792
+ registers,
1793
+ value: value << 16,
1794
+ }),
1795
+ );
1796
+
1797
+ setParserName(dalvikBytecodeOperationConstHigh16Parser, 'dalvikBytecodeOperationConstHigh16Parser');
1798
+
1799
+ type DalvikBytecodeOperationConstWide16 = {
1800
+ operation: 'const-wide/16';
1801
+ registers: number[];
1802
+ value: bigint;
1803
+ };
1804
+
1805
+ const dalvikBytecodeOperationConstWide16Parser: Parser<DalvikBytecodeOperationConstWide16, Uint8Array> = promiseCompose(
1806
+ createTupleParser([
1807
+ createExactElementParser(0x16),
1808
+ createDalvikBytecodeFormat21sParser(),
1809
+ ]),
1810
+ ([ _opcode, { registers, value } ]) => ({
1811
+ operation: 'const-wide/16',
1812
+ registers,
1813
+ value: BigInt(value) << 48n >> 48n,
1814
+ }),
1815
+ );
1816
+
1817
+ setParserName(dalvikBytecodeOperationConstWide16Parser, 'dalvikBytecodeOperationConstWide16Parser');
1818
+
1819
+ type DalvikBytecodeOperationConst = {
1820
+ operation: 'const';
1821
+ registers: number[];
1822
+ value: number;
1823
+ };
1824
+
1825
+ const dalvikBytecodeOperationConstParser: Parser<DalvikBytecodeOperationConst, Uint8Array> = promiseCompose(
1826
+ createTupleParser([
1827
+ createExactElementParser(0x14),
1828
+ dalvikBytecodeFormat31iParser,
1829
+ ]),
1830
+ ([ _opcode, { registers, value } ]) => ({
1831
+ operation: 'const',
1832
+ registers,
1833
+ value,
1834
+ }),
1835
+ );
1836
+
1837
+ setParserName(dalvikBytecodeOperationConstParser, 'dalvikBytecodeOperationConstParser');
1838
+
1839
+ type DalvikBytecodeOperationThrow = {
1840
+ operation: 'throw';
1841
+ registers: number[];
1842
+ };
1843
+
1844
+ const dalvikBytecodeOperationThrowParser: Parser<DalvikBytecodeOperationThrow, Uint8Array> = promiseCompose(
1845
+ createTupleParser([
1846
+ createExactElementParser(0x27),
1847
+ dalvikBytecodeFormat11xParser,
1848
+ ]),
1849
+ ([ _opcode, { registers } ]) => ({
1850
+ operation: 'throw',
1851
+ registers,
1852
+ }),
1853
+ );
1854
+
1855
+ setParserName(dalvikBytecodeOperationThrowParser, 'dalvikBytecodeOperationThrowParser');
1856
+
1857
+ const createDalvikBytecodeOperationCompare = <T extends string>(operation: T, opcode: number): Parser<{
1858
+ operation: T;
1859
+ registers: number[];
1860
+ }, Uint8Array> => promiseCompose(
1861
+ createTupleParser([
1862
+ createExactElementParser(opcode),
1863
+ dalvikBytecodeFormat23xParser,
1864
+ ]),
1865
+ ([ _opcode, { registers } ]) => ({
1866
+ operation,
1867
+ registers,
1868
+ }),
1869
+ );
1870
+
1871
+ const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float', 0x2d);
1872
+
1873
+ type DalvikBytecodeOperationCompareFloatWithLessThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareFloatWithLessThanBiasParser>>;
1874
+
1875
+ const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float', 0x2e);
1876
+
1877
+ type DalvikBytecodeOperationCompareFloatWithGreaterThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser>>;
1878
+
1879
+ const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double', 0x2f);
1880
+
1881
+ type DalvikBytecodeOperationCompareDoubleWithLessThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser>>;
1882
+
1883
+ const dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-double', 0x30);
1884
+
1885
+ type DalvikBytecodeOperationCompareDoubleWithGreaterThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser>>;
1886
+
1887
+ const dalvikBytecodeOperationCompareLongParser = createDalvikBytecodeOperationCompare('cmp-long', 0x31);
1888
+
1889
+ type DalvikBytecodeOperationCompareLong = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareLongParser>>;
1890
+
1891
+ type DalvikBytecodeOperationCompare =
1892
+ | DalvikBytecodeOperationCompareFloatWithLessThanBias
1893
+ | DalvikBytecodeOperationCompareFloatWithGreaterThanBias
1894
+ | DalvikBytecodeOperationCompareDoubleWithLessThanBias
1895
+ | DalvikBytecodeOperationCompareDoubleWithGreaterThanBias
1896
+ | DalvikBytecodeOperationCompareLong
1897
+ ;
1898
+
1899
+ const dalvikBytecodeOperationCompareParser: Parser<DalvikBytecodeOperationCompare, Uint8Array> = createUnionParser([
1900
+ dalvikBytecodeOperationCompareFloatWithLessThanBiasParser,
1901
+ dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser,
1902
+ dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser,
1903
+ dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser,
1904
+ dalvikBytecodeOperationCompareLongParser,
1905
+ ]);
1906
+
1907
+ setParserName(dalvikBytecodeOperationCompareParser, 'dalvikBytecodeOperationCompareParser');
1908
+
1909
+ export type DalvikBytecodeOperation =
1910
+ | DalvikBytecodeOperationNoOperation
1911
+
1912
+ | DalvikBytecodeOperationInvoke
1913
+ | DalvikBytecodeOperationNewInstance
1914
+ | DalvikBytecodeOperationCheckCast
1915
+ | DalvikBytecodeOperationInstanceOf
1916
+
1917
+ | DalvikBytecodeOperationReturnVoid
1918
+
1919
+ | DalvikBytecodeOperationMoveResult1
1920
+ ;
1921
+
1922
+ export const dalvikBytecodeOperationCompanion = {
1923
+ getRegisters(operation: DalvikBytecodeOperation): number[] {
1924
+ if (operation && typeof operation === 'object' && 'registers' in operation) {
1925
+ return operation.registers;
1926
+ }
1927
+
1928
+ return [];
1929
+ },
1930
+ };
1931
+
1932
+ const dalvikBytecodeOperationParser: Parser<DalvikBytecodeOperation | undefined, Uint8Array> = promiseCompose(
1933
+ createTupleParser([
1934
+ () => {},
1935
+ //createDebugLogInputParser(),
1936
+ createUnionParser<DalvikBytecodeOperation, Uint8Array>([
1937
+ dalvikBytecodeOperationUnusedParser,
1938
+
1939
+ dalvikBytecodeOperationNoOperationParser,
1940
+
1941
+ dalvikBytecodeOperationInvokeParser,
1942
+ dalvikBytecodeOperationInvokeRangeParser,
1943
+
1944
+ dalvikBytecodeOperationNewInstanceParser,
1945
+ dalvikBytecodeOperationNewArrayParser,
1946
+ dalvikBytecodeOperationCheckCastParser,
1947
+ dalvikBytecodeOperationInstanceOfParser,
1948
+
1949
+ dalvikBytecodeOperationArrayElementParser,
1950
+ dalvikBytecodeOperationInstanceFieldParser,
1951
+ dalvikBytecodeOperationStaticFieldParser,
1952
+
1953
+ dalvikBytecodeOperationConstStringParser,
1954
+ dalvikBytecodeOperationConstMethodHandleParser,
1955
+ dalvikBytecodeOperationConstClassParser,
1956
+
1957
+ dalvikBytecodeOperationReturnVoidParser,
1958
+ dalvikBytecodeOperationReturn1Parser,
1959
+
1960
+ dalvikBytecodeOperationThrowParser,
1961
+
1962
+ dalvikBytecodeOperationGotoParser,
1963
+ dalvikBytecodeOperationGoto16Parser,
1964
+
1965
+ dalvikBytecodeOperationMoveResult1Parser,
1966
+ dalvikBytecodeOperationMoveParser,
1967
+ dalvikBytecodeOperationMoveWideParser,
1968
+ dalvikBytecodeOperationMoveObjectParser,
1969
+ dalvikBytecodeOperationMoveFrom16Parser,
1970
+ dalvikBytecodeOperationMoveWideFrom16Parser,
1971
+ dalvikBytecodeOperationMoveObjectFrom16Parser,
1972
+ dalvikBytecodeOperationMoveWide16Parser,
1973
+
1974
+ dalvikBytecodeOperationConst4Parser,
1975
+ dalvikBytecodeOperationConst16Parser,
1976
+ dalvikBytecodeOperationConstHigh16Parser,
1977
+ dalvikBytecodeOperationConstWide16Parser,
1978
+ dalvikBytecodeOperationConstParser,
1979
+
1980
+ dalvikBytecodeOperationCompareParser,
1981
+
1982
+ dalvikBytecodeOperationIfTestParser,
1983
+ dalvikBytecodeOperationIfTestZeroParser,
1984
+
1985
+ dalvikBytecodeOperationBinaryOperationParser,
1986
+ dalvikBytecodeOperationBinaryOperationLiteral8Parser,
1987
+ dalvikBytecodeOperationBinaryOperationLiteral16Parser,
1988
+ dalvikBytecodeOperationBinaryOperationInPlaceParser,
1989
+ dalvikBytecodeOperationUnaryOperationParser,
1990
+ ]),
1991
+ ]),
1992
+ ([
1993
+ _debug,
1994
+ operation,
1995
+ ]) => {
1996
+ // console.log(operation);
1997
+ return operation;
1998
+ },
1999
+ );
2000
+
2001
+ setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
2002
+
2003
+ export type DalvikBytecode = DalvikBytecodeOperation[];
2004
+
2005
+ const dalvikBytecodeParser: Parser<DalvikBytecode, Uint8Array> = promiseCompose(
2006
+ createArrayParser(
2007
+ dalvikBytecodeOperationParser,
2008
+ ),
2009
+ operations => operations.filter((operation): operation is DalvikBytecodeOperation => operation !== undefined),
2010
+ );
2011
+
2012
+ export const createDalvikBytecodeParser = (size: number): Parser<DalvikBytecode, Uint8Array> => createSliceBoundedParser(dalvikBytecodeParser, size, true);
2013
+
2014
+ type ResolvedDalvikBytecodeOperation<T extends DalvikBytecodeOperation> = T extends { stringIndex: IndexIntoFieldIds }
2015
+ ? Omit<T, 'stringIndex'> & { string: string }
2016
+ : T extends { typeIndex: IndexIntoTypeIds }
2017
+ ? Omit<T, 'typeIndex'> & { type: string }
2018
+ : T extends { methodIndex: IndexIntoMethodIds }
2019
+ ? Omit<T, 'methodIndex'> & { method: DalvikExecutableMethod }
2020
+ : T extends { fieldIndex: IndexIntoFieldIds }
2021
+ ? Omit<T, 'fieldIndex'> & { field: DalvikExecutableField }
2022
+ : T;
2023
+
2024
+ export type DalvikBytecodeOperationResolvers = {
2025
+ resolveIndexIntoStringIds: (index: IndexIntoStringIds) => string;
2026
+ resolveIndexIntoTypeIds: (index: IndexIntoTypeIds) => string;
2027
+ resolveIndexIntoMethodIds: (index: IndexIntoMethodIds) => DalvikExecutableMethod;
2028
+ resolveIndexIntoFieldIds: (index: IndexIntoFieldIds) => DalvikExecutableField;
2029
+ };
2030
+
2031
+ export function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation>(operation: T, {
2032
+ resolveIndexIntoStringIds,
2033
+ resolveIndexIntoTypeIds,
2034
+ resolveIndexIntoMethodIds,
2035
+ resolveIndexIntoFieldIds,
2036
+ }: DalvikBytecodeOperationResolvers): ResolvedDalvikBytecodeOperation<T> {
2037
+ if (operation && typeof operation === 'object' && 'stringIndex' in operation) {
2038
+ const { stringIndex, ...rest } = operation;
2039
+
2040
+ return {
2041
+ ...rest,
2042
+ string: resolveIndexIntoStringIds(stringIndex as IndexIntoStringIds),
2043
+ } as ResolvedDalvikBytecodeOperation<T>;
2044
+ }
2045
+
2046
+ if (operation && typeof operation === 'object' && 'typeIndex' in operation) {
2047
+ const { typeIndex, ...rest } = operation;
2048
+
2049
+ return {
2050
+ ...rest,
2051
+ type: resolveIndexIntoTypeIds(typeIndex as IndexIntoTypeIds),
2052
+ } as ResolvedDalvikBytecodeOperation<T>;
2053
+ }
2054
+
2055
+ if (operation && typeof operation === 'object' && 'methodIndex' in operation) {
2056
+ const { methodIndex, ...rest } = operation;
2057
+
2058
+ return {
2059
+ ...rest,
2060
+ method: resolveIndexIntoMethodIds(methodIndex as IndexIntoMethodIds),
2061
+ } as ResolvedDalvikBytecodeOperation<T>;
2062
+ }
2063
+
2064
+ if (operation && typeof operation === 'object' && 'fieldIndex' in operation) {
2065
+ const { fieldIndex, ...rest } = operation;
2066
+
2067
+ return {
2068
+ ...rest,
2069
+ field: resolveIndexIntoFieldIds(fieldIndex as IndexIntoFieldIds),
2070
+ } as ResolvedDalvikBytecodeOperation<T>;
2071
+ }
2072
+
2073
+ return operation as ResolvedDalvikBytecodeOperation<T>;
2074
+ }