@futpib/parser 1.0.2 → 1.0.4

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 (311) hide show
  1. package/.github/copilot-instructions.md +149 -0
  2. package/.github/workflows/copilot-setup-steps.yml +18 -0
  3. package/.github/workflows/main.yml +29 -8
  4. package/.yarn/releases/yarn-4.9.4.cjs +942 -0
  5. package/.yarnrc.yml +1 -1
  6. package/build/allSettledStream.js +1 -1
  7. package/build/allSettledStream.test.js +2 -2
  8. package/build/androidPackageParser.d.ts +1 -1
  9. package/build/androidPackageParser.js +5 -3
  10. package/build/androidPackageParser.test.js +7 -7
  11. package/build/androidPackageUnparser.d.ts +2 -2
  12. package/build/androidPackageUnparser.js +18 -14
  13. package/build/androidPackageUnparser.test.js +7 -7
  14. package/build/arbitrarilySlicedAsyncInterator.js +2 -1
  15. package/build/arbitraryDalvikBytecode.d.ts +4 -0
  16. package/build/arbitraryDalvikBytecode.js +640 -0
  17. package/build/arbitraryDalvikExecutable.d.ts +3 -0
  18. package/build/arbitraryDalvikExecutable.js +282 -0
  19. package/build/arbitraryDosDateTime.js +1 -0
  20. package/build/arbitraryZipStream.js +1 -1
  21. package/build/arrayParser.js +2 -2
  22. package/build/arrayUnparser.d.ts +1 -1
  23. package/build/backsmali.d.ts +3 -1
  24. package/build/backsmali.js +31 -3
  25. package/build/bash.d.ts +84 -0
  26. package/build/bash.js +1 -0
  27. package/build/bashParser.d.ts +6 -0
  28. package/build/bashParser.js +294 -0
  29. package/build/bashParser.test.d.ts +1 -0
  30. package/build/bashParser.test.js +181 -0
  31. package/build/customInvariant.d.ts +2 -1
  32. package/build/customInvariant.js +4 -6
  33. package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
  34. package/build/dalvikBytecodeParser/formatParsers.js +146 -11
  35. package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
  36. package/build/dalvikBytecodeParser/formatSizes.js +34 -0
  37. package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
  38. package/build/dalvikBytecodeParser/operationFormats.js +225 -0
  39. package/build/dalvikBytecodeParser.d.ts +1105 -5
  40. package/build/dalvikBytecodeParser.js +658 -205
  41. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
  42. package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
  43. package/build/dalvikBytecodeUnparser.d.ts +3 -0
  44. package/build/dalvikBytecodeUnparser.js +642 -0
  45. package/build/dalvikBytecodeUnparser.test.d.ts +1 -0
  46. package/build/dalvikBytecodeUnparser.test.js +25 -0
  47. package/build/dalvikExecutable.d.ts +65 -8
  48. package/build/dalvikExecutable.js +36 -0
  49. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
  50. package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
  51. package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
  52. package/build/dalvikExecutableParser/typeParsers.js +16 -11
  53. package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
  54. package/build/dalvikExecutableParser/typedNumbers.js +0 -1
  55. package/build/dalvikExecutableParser.d.ts +2 -2
  56. package/build/dalvikExecutableParser.js +655 -337
  57. package/build/dalvikExecutableParser.test.js +24 -22
  58. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
  59. package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
  60. package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
  61. package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
  62. package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
  63. package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
  64. package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
  65. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
  66. package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
  67. package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
  68. package/build/dalvikExecutableUnparser/utils.js +108 -0
  69. package/build/dalvikExecutableUnparser.d.ts +4 -0
  70. package/build/dalvikExecutableUnparser.js +406 -0
  71. package/build/dalvikExecutableUnparser.test.d.ts +1 -0
  72. package/build/dalvikExecutableUnparser.test.js +31 -0
  73. package/build/debugLogInputParser.js +1 -1
  74. package/build/disjunctionParser.d.ts +2 -2
  75. package/build/disjunctionParser.js +2 -2
  76. package/build/elementTerminatedArrayParser.d.ts +2 -2
  77. package/build/elementTerminatedArrayParser.js +1 -1
  78. package/build/elementTerminatedArrayParser.test.js +5 -5
  79. package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
  80. package/build/elementTerminatedSequenceArrayParser.js +1 -1
  81. package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
  82. package/build/elementTerminatedSequenceParser.d.ts +2 -2
  83. package/build/elementTerminatedSequenceParser.js +1 -1
  84. package/build/elementTerminatedSequenceParser.test.js +2 -2
  85. package/build/endOfInputParser.d.ts +1 -1
  86. package/build/exactElementSwitchParser.d.ts +3 -0
  87. package/build/exactElementSwitchParser.js +22 -0
  88. package/build/fetchCid.js +2 -6
  89. package/build/fetchCid.test.d.ts +1 -0
  90. package/build/fetchCid.test.js +16 -0
  91. package/build/fixedLengthSequenceParser.test.js +2 -2
  92. package/build/hasExecutable.js +2 -2
  93. package/build/highResolutionTimer.js +1 -1
  94. package/build/index.d.ts +24 -2
  95. package/build/index.js +22 -1
  96. package/build/inputReader.d.ts +1 -1
  97. package/build/inputReader.test.js +33 -45
  98. package/build/javaKeyStoreParser.test.js +6 -6
  99. package/build/jsonParser.js +8 -8
  100. package/build/lazyMessageError.d.ts +48 -0
  101. package/build/lazyMessageError.js +53 -0
  102. package/build/lazyMessageError.test.d.ts +1 -0
  103. package/build/lazyMessageError.test.js +15 -0
  104. package/build/leb128Parser.d.ts +1 -1
  105. package/build/leb128Parser.js +10 -10
  106. package/build/leb128Parser.test.js +7 -7
  107. package/build/negativeLookaheadParser.js +2 -2
  108. package/build/negativeLookaheadParser.test.js +4 -4
  109. package/build/noStackCaptureOverheadError.d.ts +4 -0
  110. package/build/noStackCaptureOverheadError.js +9 -0
  111. package/build/noStackCaptureOverheadError.test.d.ts +1 -0
  112. package/build/noStackCaptureOverheadError.test.js +15 -0
  113. package/build/nonEmptyArrayParser.js +2 -2
  114. package/build/nonEmptyArrayParser.test.js +2 -1
  115. package/build/optionalParser.js +2 -2
  116. package/build/parser.d.ts +2 -1
  117. package/build/parser.js +23 -8
  118. package/build/parser.test.js +78 -29
  119. package/build/parserConsumedSequenceParser.d.ts +1 -1
  120. package/build/parserConsumedSequenceParser.js +2 -2
  121. package/build/parserContext.d.ts +8 -6
  122. package/build/parserContext.js +60 -33
  123. package/build/parserContext.test.js +7 -3
  124. package/build/parserError.d.ts +603 -44
  125. package/build/parserError.js +98 -53
  126. package/build/parserImplementationInvariant.d.ts +1 -1
  127. package/build/parserImplementationInvariant.js +2 -2
  128. package/build/parserInputCompanion.js +2 -2
  129. package/build/promiseCompose.js +1 -2
  130. package/build/regexpParser.d.ts +2 -0
  131. package/build/regexpParser.js +71 -0
  132. package/build/regexpParser.test.d.ts +1 -0
  133. package/build/regexpParser.test.js +83 -0
  134. package/build/regularExpression.d.ts +63 -0
  135. package/build/regularExpression.js +1 -0
  136. package/build/regularExpressionParser.d.ts +3 -0
  137. package/build/regularExpressionParser.js +580 -0
  138. package/build/regularExpressionParser.test.d.ts +1 -0
  139. package/build/regularExpressionParser.test.js +89 -0
  140. package/build/separatedArrayParser.js +2 -2
  141. package/build/separatedNonEmptyArrayParser.d.ts +2 -0
  142. package/build/separatedNonEmptyArrayParser.js +40 -0
  143. package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
  144. package/build/separatedNonEmptyArrayParser.test.js +66 -0
  145. package/build/sequenceBuffer.js +1 -1
  146. package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
  147. package/build/sequenceTerminatedSequenceParser.js +3 -3
  148. package/build/sequenceTerminatedSequenceParser.test.js +1 -1
  149. package/build/sequenceUnparser.d.ts +1 -1
  150. package/build/skipToParser.d.ts +1 -1
  151. package/build/skipToParser.js +2 -2
  152. package/build/sliceBoundedParser.test.js +4 -9
  153. package/build/smali.d.ts +1 -1
  154. package/build/smali.js +6 -2
  155. package/build/smaliParser.d.ts +62 -6
  156. package/build/smaliParser.js +1721 -296
  157. package/build/smaliParser.test.js +338 -43
  158. package/build/stringFromAsyncIterable.d.ts +1 -0
  159. package/build/stringFromAsyncIterable.js +7 -0
  160. package/build/terminatedArrayParser.js +4 -4
  161. package/build/terminatedArrayParser.test.js +7 -7
  162. package/build/toAsyncIterator.js +4 -4
  163. package/build/unionParser.d.ts +1 -1
  164. package/build/unionParser.js +2 -2
  165. package/build/unionParser.test.js +3 -3
  166. package/build/unparser.d.ts +3 -3
  167. package/build/unparser.js +6 -4
  168. package/build/unparser.test.js +7 -19
  169. package/build/unparserContext.d.ts +2 -2
  170. package/build/unparserContext.js +2 -3
  171. package/build/unparserError.d.ts +2 -1
  172. package/build/unparserError.js +2 -1
  173. package/build/unparserImplementationInvariant.d.ts +1 -1
  174. package/build/unparserOutputCompanion.d.ts +1 -1
  175. package/build/unparserOutputCompanion.js +1 -1
  176. package/build/zipParser.js +1 -1
  177. package/build/zipUnparser.d.ts +3 -3
  178. package/build/zipUnparser.js +9 -19
  179. package/build/zipUnparser.test.js +1 -1
  180. package/package.json +20 -26
  181. package/src/allSettledStream.test.ts +2 -2
  182. package/src/allSettledStream.ts +3 -3
  183. package/src/androidPackageParser.test.ts +17 -19
  184. package/src/androidPackageParser.ts +129 -171
  185. package/src/androidPackageUnparser.test.ts +19 -21
  186. package/src/androidPackageUnparser.ts +23 -17
  187. package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
  188. package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
  189. package/src/arbitraryDalvikBytecode.ts +992 -0
  190. package/src/arbitraryDalvikExecutable.ts +434 -0
  191. package/src/arbitraryDosDateTime.ts +1 -0
  192. package/src/arbitraryZipStream.ts +1 -1
  193. package/src/arrayParser.ts +2 -2
  194. package/src/arrayUnparser.ts +2 -2
  195. package/src/backsmali.ts +48 -4
  196. package/src/bash.ts +120 -0
  197. package/src/bashParser.test.ts +332 -0
  198. package/src/bashParser.ts +461 -0
  199. package/src/bsonParser.test.ts +12 -14
  200. package/src/customInvariant.ts +8 -12
  201. package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
  202. package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
  203. package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
  204. package/src/dalvikBytecodeParser.ts +1042 -243
  205. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
  206. package/src/dalvikBytecodeUnparser.test.ts +44 -0
  207. package/src/dalvikBytecodeUnparser.ts +758 -0
  208. package/src/dalvikExecutable.ts +110 -48
  209. package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
  210. package/src/dalvikExecutableParser/typeParsers.ts +23 -14
  211. package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
  212. package/src/dalvikExecutableParser.test.ts +60 -60
  213. package/src/dalvikExecutableParser.test.ts.md +6 -6
  214. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  215. package/src/dalvikExecutableParser.ts +911 -434
  216. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
  217. package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
  218. package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
  219. package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
  220. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
  221. package/src/dalvikExecutableUnparser/utils.ts +149 -0
  222. package/src/dalvikExecutableUnparser.test.ts +57 -0
  223. package/src/dalvikExecutableUnparser.ts +581 -0
  224. package/src/debugLogInputParser.ts +1 -1
  225. package/src/disjunctionParser.ts +5 -5
  226. package/src/elementTerminatedArrayParser.test.ts +8 -8
  227. package/src/elementTerminatedArrayParser.ts +2 -2
  228. package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
  229. package/src/elementTerminatedSequenceArrayParser.ts +2 -2
  230. package/src/elementTerminatedSequenceParser.test.ts +4 -6
  231. package/src/elementTerminatedSequenceParser.ts +2 -2
  232. package/src/endOfInputParser.ts +1 -1
  233. package/src/exactElementSwitchParser.ts +41 -0
  234. package/src/fetchCid.test.ts +20 -0
  235. package/src/fetchCid.ts +3 -7
  236. package/src/fixedLengthSequenceParser.test.ts +10 -12
  237. package/src/hasExecutable.ts +2 -2
  238. package/src/highResolutionTimer.ts +1 -1
  239. package/src/index.ts +113 -2
  240. package/src/inputReader.test.ts +39 -52
  241. package/src/inputReader.ts +2 -4
  242. package/src/inputReaderState.ts +1 -1
  243. package/src/inspect.ts +1 -1
  244. package/src/javaKeyStoreParser.test.ts +12 -14
  245. package/src/javaKeyStoreParser.ts +2 -6
  246. package/src/jsonParser.test.ts +2 -4
  247. package/src/jsonParser.ts +34 -38
  248. package/src/lazyMessageError.test.ts +21 -0
  249. package/src/lazyMessageError.ts +88 -0
  250. package/src/leb128Parser.test.ts +25 -23
  251. package/src/leb128Parser.ts +19 -19
  252. package/src/negativeLookaheadParser.test.ts +7 -11
  253. package/src/negativeLookaheadParser.ts +2 -2
  254. package/src/noStackCaptureOverheadError.test.ts +17 -0
  255. package/src/noStackCaptureOverheadError.ts +12 -0
  256. package/src/nonEmptyArrayParser.test.ts +3 -2
  257. package/src/nonEmptyArrayParser.ts +2 -2
  258. package/src/optionalParser.ts +2 -2
  259. package/src/parser.test.ts +96 -43
  260. package/src/parser.test.ts.md +13 -6
  261. package/src/parser.test.ts.snap +0 -0
  262. package/src/parser.ts +35 -12
  263. package/src/parserAccessorParser.ts +1 -1
  264. package/src/parserConsumedSequenceParser.ts +3 -3
  265. package/src/parserContext.test.ts +7 -3
  266. package/src/parserContext.ts +82 -48
  267. package/src/parserError.ts +143 -63
  268. package/src/parserImplementationInvariant.ts +3 -3
  269. package/src/parserInputCompanion.ts +2 -2
  270. package/src/promiseCompose.ts +2 -2
  271. package/src/regexpParser.test.ts +186 -0
  272. package/src/regexpParser.ts +94 -0
  273. package/src/regularExpression.ts +24 -0
  274. package/src/regularExpressionParser.test.ts +102 -0
  275. package/src/regularExpressionParser.ts +921 -0
  276. package/src/separatedArrayParser.ts +3 -3
  277. package/src/separatedNonEmptyArrayParser.test.ts +117 -0
  278. package/src/separatedNonEmptyArrayParser.ts +61 -0
  279. package/src/sequenceBuffer.test.ts +9 -9
  280. package/src/sequenceBuffer.ts +4 -4
  281. package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
  282. package/src/sequenceTerminatedSequenceParser.ts +4 -4
  283. package/src/sequenceUnparser.ts +2 -2
  284. package/src/skipToParser.ts +2 -2
  285. package/src/sliceBoundedParser.test.ts +4 -12
  286. package/src/sliceBoundedParser.ts +2 -2
  287. package/src/smali.ts +8 -3
  288. package/src/smaliParser.test.ts +377 -66
  289. package/src/smaliParser.test.ts.md +1635 -48
  290. package/src/smaliParser.test.ts.snap +0 -0
  291. package/src/smaliParser.ts +2751 -569
  292. package/src/stringFromAsyncIterable.ts +9 -0
  293. package/src/terminatedArrayParser.test.ts +11 -11
  294. package/src/terminatedArrayParser.ts +5 -7
  295. package/src/toAsyncIterator.ts +8 -8
  296. package/src/uint8Array.ts +2 -3
  297. package/src/unionParser.test.ts +22 -23
  298. package/src/unionParser.ts +6 -8
  299. package/src/unparser.test.ts +18 -34
  300. package/src/unparser.ts +13 -9
  301. package/src/unparserContext.ts +9 -13
  302. package/src/unparserError.ts +2 -1
  303. package/src/unparserImplementationInvariant.ts +1 -1
  304. package/src/unparserOutputCompanion.ts +1 -1
  305. package/src/zip.ts +2 -6
  306. package/src/zipParser.ts +10 -18
  307. package/src/zipUnparser.test.ts +1 -1
  308. package/src/zipUnparser.ts +52 -64
  309. package/tsconfig.json +7 -1
  310. package/xo.config.ts +15 -0
  311. package/.yarn/releases/yarn-4.5.3.cjs +0 -934
@@ -1,15 +1,17 @@
1
- import { Iso } from "monocle-ts";
2
- import { byteParser, intParser, shortParser, ubyteParser, ushortParser } from "../dalvikExecutableParser/typeParsers.js";
3
- import { createElementParser } from "../elementParser.js";
4
- import { Parser, setParserName } from "../parser.js";
5
- import { promiseCompose } from "../promiseCompose.js";
6
- import { createTupleParser } from "../tupleParser.js";
1
+ import { type Iso } from 'monocle-ts';
2
+ import {
3
+ byteParser, intParser, longParser, shortParser, ubyteParser, uintParser, ushortParser,
4
+ } from '../dalvikExecutableParser/typeParsers.js';
5
+ import { createElementParser } from '../elementParser.js';
6
+ import { type Parser, setParserName } from '../parser.js';
7
+ import { promiseCompose } from '../promiseCompose.js';
8
+ import { createTupleParser } from '../tupleParser.js';
7
9
 
8
10
  // https://source.android.com/docs/core/runtime/instruction-formats
9
11
 
10
12
  export const nibblesParser: Parser<[ number, number ], Uint8Array> = promiseCompose(
11
13
  createElementParser(),
12
- (byte) => [
14
+ byte => [
13
15
  byte >> 4,
14
16
  byte & 0b1111,
15
17
  ],
@@ -23,7 +25,7 @@ type DalvikBytecodeFormat10t = {
23
25
 
24
26
  export const dalvikBytecodeFormat10tParser: Parser<DalvikBytecodeFormat10t, Uint8Array> = promiseCompose(
25
27
  byteParser,
26
- (branchOffset) => ({
28
+ branchOffset => ({
27
29
  branchOffset,
28
30
  }),
29
31
  );
@@ -48,6 +50,24 @@ export const dalvikBytecodeFormat11xParser: Parser<DalvikBytecodeFormat11x, Uint
48
50
  }),
49
51
  );
50
52
 
53
+ type DalvikBytecodeFormat11n = {
54
+ value: number;
55
+ registers: number[];
56
+ };
57
+
58
+ export const dalvikBytecodeFormat11nParser: Parser<DalvikBytecodeFormat11n, Uint8Array> = promiseCompose(
59
+ nibblesParser,
60
+ ([
61
+ value,
62
+ register0,
63
+ ]) => ({
64
+ value: value << 28 >> 28, // Sign extend 4-bit value
65
+ registers: [
66
+ register0,
67
+ ],
68
+ }),
69
+ );
70
+
51
71
  type DalvikBytecodeFormat12x = {
52
72
  registers: number[];
53
73
  };
@@ -70,8 +90,14 @@ type DalvikBytecodeFormat20t = {
70
90
  };
71
91
 
72
92
  export const dalvikBytecodeFormat20tParser: Parser<DalvikBytecodeFormat20t, Uint8Array> = promiseCompose(
73
- shortParser,
74
- (branchOffset) => ({
93
+ createTupleParser([
94
+ ubyteParser,
95
+ shortParser,
96
+ ]),
97
+ ([
98
+ _zero,
99
+ branchOffset,
100
+ ]) => ({
75
101
  branchOffset,
76
102
  }),
77
103
  );
@@ -122,7 +148,7 @@ export const dalvikBytecodeFormat21hParser: Parser<DalvikBytecodeFormat21h, Uint
122
148
  }),
123
149
  );
124
150
 
125
- type DalvikBytecodeFormat21t= {
151
+ type DalvikBytecodeFormat21t = {
126
152
  branchOffset: number;
127
153
  registers: number[];
128
154
  };
@@ -143,7 +169,7 @@ export const createDalvikBytecodeFormat21tParser = (): Parser<DalvikBytecodeForm
143
169
  }),
144
170
  );
145
171
 
146
- type DalvikBytecodeFormat21s= {
172
+ type DalvikBytecodeFormat21s = {
147
173
  registers: number[];
148
174
  value: number;
149
175
  };
@@ -204,8 +230,8 @@ export const createDalvikBytecodeFormat22cParser = <Index>({
204
230
  ]),
205
231
  ([
206
232
  [
207
- register0,
208
233
  register1,
234
+ register0,
209
235
  ],
210
236
  index,
211
237
  ]) => ({
@@ -236,8 +262,8 @@ export const createDalvikBytecodeFormat22sParser = (): Parser<DalvikBytecodeForm
236
262
  ]) => ({
237
263
  value,
238
264
  registers: [
239
- register0,
240
265
  register1,
266
+ register0,
241
267
  ],
242
268
  }),
243
269
  );
@@ -289,7 +315,7 @@ export const dalvikBytecodeFormat22xParser: Parser<DalvikBytecodeFormat22x, Uint
289
315
 
290
316
  type DalvikBytecodeFormat23x = {
291
317
  registers: number[];
292
- }
318
+ };
293
319
 
294
320
  export const dalvikBytecodeFormat23xParser: Parser<DalvikBytecodeFormat23x, Uint8Array> = promiseCompose(
295
321
  createTupleParser([
@@ -310,6 +336,17 @@ export const dalvikBytecodeFormat23xParser: Parser<DalvikBytecodeFormat23x, Uint
310
336
  }),
311
337
  );
312
338
 
339
+ type DalvikBytecodeFormat30t = {
340
+ branchOffset: number;
341
+ };
342
+
343
+ export const dalvikBytecodeFormat30tParser: Parser<DalvikBytecodeFormat30t, Uint8Array> = promiseCompose(
344
+ intParser,
345
+ branchOffset => ({
346
+ branchOffset,
347
+ }),
348
+ );
349
+
313
350
  type DalvikBytecodeFormat31i = {
314
351
  value: number;
315
352
  registers: number[];
@@ -331,6 +368,52 @@ export const dalvikBytecodeFormat31iParser: Parser<DalvikBytecodeFormat31i, Uint
331
368
  }),
332
369
  );
333
370
 
371
+ type DalvikBytecodeFormat31c<Index> = {
372
+ index: Index;
373
+ registers: number[];
374
+ };
375
+
376
+ export const createDalvikBytecodeFormat31cParser = <Index>({
377
+ isoIndex,
378
+ }: {
379
+ isoIndex: Iso<Index, number>;
380
+ }): Parser<DalvikBytecodeFormat31c<Index>, Uint8Array> => promiseCompose(
381
+ createTupleParser([
382
+ ubyteParser,
383
+ uintParser,
384
+ ]),
385
+ ([
386
+ register0,
387
+ index,
388
+ ]) => ({
389
+ index: isoIndex.wrap(index),
390
+ registers: [
391
+ register0,
392
+ ],
393
+ }),
394
+ );
395
+
396
+ type DalvikBytecodeFormat31t = {
397
+ branchOffset: number;
398
+ registers: number[];
399
+ };
400
+
401
+ export const dalvikBytecodeFormat31tParser: Parser<DalvikBytecodeFormat31t, Uint8Array> = promiseCompose(
402
+ createTupleParser([
403
+ ubyteParser,
404
+ intParser,
405
+ ]),
406
+ ([
407
+ register0,
408
+ branchOffset,
409
+ ]) => ({
410
+ branchOffset,
411
+ registers: [
412
+ register0,
413
+ ],
414
+ }),
415
+ );
416
+
334
417
  type DalvikBytecodeFormat32x = {
335
418
  registers: number[];
336
419
  };
@@ -374,12 +457,12 @@ export const createDalvikBytecodeFormat35cParser = <Index>({
374
457
  ],
375
458
  index,
376
459
  [
377
- register0,
378
460
  register1,
461
+ register0,
379
462
  ],
380
463
  [
381
- register2,
382
464
  register3,
465
+ register2,
383
466
  ],
384
467
  ]) => ({
385
468
  index: isoIndex.wrap(index),
@@ -419,3 +502,279 @@ export const createDalvikBytecodeFormat3rcParser = <Index>({
419
502
  registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
420
503
  }),
421
504
  );
505
+
506
+ type DalvikBytecodeFormat51l = {
507
+ value: bigint;
508
+ registers: number[];
509
+ };
510
+
511
+ export const dalvikBytecodeFormat51lParser: Parser<DalvikBytecodeFormat51l, Uint8Array> = promiseCompose(
512
+ createTupleParser([
513
+ ubyteParser,
514
+ longParser,
515
+ ]),
516
+ ([
517
+ register0,
518
+ value,
519
+ ]) => ({
520
+ value,
521
+ registers: [
522
+ register0,
523
+ ],
524
+ }),
525
+ );
526
+
527
+ // Format 20bc: throw-verification-error
528
+ type DalvikBytecodeFormat20bc = {
529
+ kind: number;
530
+ index: number;
531
+ };
532
+
533
+ export const dalvikBytecodeFormat20bcParser: Parser<DalvikBytecodeFormat20bc, Uint8Array> = promiseCompose(
534
+ createTupleParser([
535
+ ubyteParser,
536
+ ushortParser,
537
+ ]),
538
+ ([
539
+ kind,
540
+ index,
541
+ ]) => ({
542
+ kind,
543
+ index,
544
+ }),
545
+ );
546
+
547
+ // Format 22cs: field access quick (deprecated)
548
+ type DalvikBytecodeFormat22cs = {
549
+ registers: number[];
550
+ fieldOffset: number;
551
+ };
552
+
553
+ export const dalvikBytecodeFormat22csParser: Parser<DalvikBytecodeFormat22cs, Uint8Array> = promiseCompose(
554
+ createTupleParser([
555
+ nibblesParser,
556
+ ushortParser,
557
+ ]),
558
+ ([
559
+ [
560
+ register0,
561
+ register1,
562
+ ],
563
+ fieldOffset,
564
+ ]) => ({
565
+ fieldOffset,
566
+ registers: [
567
+ register0,
568
+ register1,
569
+ ],
570
+ }),
571
+ );
572
+
573
+ // Format 35mi: invoke-*/inline (deprecated)
574
+ type DalvikBytecodeFormat35mi = {
575
+ inlineIndex: number;
576
+ registers: number[];
577
+ };
578
+
579
+ export const dalvikBytecodeFormat35miParser: Parser<DalvikBytecodeFormat35mi, Uint8Array> = promiseCompose(
580
+ createTupleParser([
581
+ nibblesParser,
582
+ ushortParser,
583
+ nibblesParser,
584
+ nibblesParser,
585
+ ]),
586
+ ([
587
+ [
588
+ registerCount,
589
+ register4,
590
+ ],
591
+ inlineIndex,
592
+ [
593
+ register1,
594
+ register0,
595
+ ],
596
+ [
597
+ register3,
598
+ register2,
599
+ ],
600
+ ]) => ({
601
+ inlineIndex,
602
+ registers: Object.assign([
603
+ register0,
604
+ register1,
605
+ register2,
606
+ register3,
607
+ register4,
608
+ ], {
609
+ length: registerCount,
610
+ }),
611
+ }),
612
+ );
613
+
614
+ // Format 35ms: invoke-*/quick (deprecated)
615
+ type DalvikBytecodeFormat35ms = {
616
+ vtableOffset: number;
617
+ registers: number[];
618
+ };
619
+
620
+ export const dalvikBytecodeFormat35msParser: Parser<DalvikBytecodeFormat35ms, Uint8Array> = promiseCompose(
621
+ createTupleParser([
622
+ nibblesParser,
623
+ ushortParser,
624
+ nibblesParser,
625
+ nibblesParser,
626
+ ]),
627
+ ([
628
+ [
629
+ registerCount,
630
+ register4,
631
+ ],
632
+ vtableOffset,
633
+ [
634
+ register1,
635
+ register0,
636
+ ],
637
+ [
638
+ register3,
639
+ register2,
640
+ ],
641
+ ]) => ({
642
+ vtableOffset,
643
+ registers: Object.assign([
644
+ register0,
645
+ register1,
646
+ register2,
647
+ register3,
648
+ register4,
649
+ ], {
650
+ length: registerCount,
651
+ }),
652
+ }),
653
+ );
654
+
655
+ // Format 3rmi: invoke-*/inline/range (deprecated)
656
+ type DalvikBytecodeFormat3rmi = {
657
+ inlineIndex: number;
658
+ registers: number[];
659
+ };
660
+
661
+ export const dalvikBytecodeFormat3rmiParser: Parser<DalvikBytecodeFormat3rmi, Uint8Array> = promiseCompose(
662
+ createTupleParser([
663
+ ubyteParser,
664
+ ushortParser,
665
+ ushortParser,
666
+ ]),
667
+ ([
668
+ registerCount,
669
+ inlineIndex,
670
+ firstRegister,
671
+ ]) => ({
672
+ inlineIndex,
673
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
674
+ }),
675
+ );
676
+
677
+ // Format 3rms: invoke-*/quick/range (deprecated)
678
+ type DalvikBytecodeFormat3rms = {
679
+ vtableOffset: number;
680
+ registers: number[];
681
+ };
682
+
683
+ export const dalvikBytecodeFormat3rmsParser: Parser<DalvikBytecodeFormat3rms, Uint8Array> = promiseCompose(
684
+ createTupleParser([
685
+ ubyteParser,
686
+ ushortParser,
687
+ ushortParser,
688
+ ]),
689
+ ([
690
+ registerCount,
691
+ vtableOffset,
692
+ firstRegister,
693
+ ]) => ({
694
+ vtableOffset,
695
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
696
+ }),
697
+ );
698
+
699
+ // Format 45cc: invoke-polymorphic
700
+ type DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex> = {
701
+ methodIndex: MethodIndex;
702
+ protoIndex: ProtoIndex;
703
+ registers: number[];
704
+ };
705
+
706
+ export const createDalvikBytecodeFormat45ccParser = <MethodIndex, ProtoIndex>({
707
+ isoMethodIndex,
708
+ isoProtoIndex,
709
+ }: {
710
+ isoMethodIndex: Iso<MethodIndex, number>;
711
+ isoProtoIndex: Iso<ProtoIndex, number>;
712
+ }): Parser<DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
713
+ createTupleParser([
714
+ nibblesParser,
715
+ ushortParser,
716
+ nibblesParser,
717
+ nibblesParser,
718
+ ushortParser,
719
+ ]),
720
+ ([
721
+ [
722
+ registerCount,
723
+ register4,
724
+ ],
725
+ methodIndex,
726
+ [
727
+ register1,
728
+ register0,
729
+ ],
730
+ [
731
+ register3,
732
+ register2,
733
+ ],
734
+ protoIndex,
735
+ ]) => ({
736
+ methodIndex: isoMethodIndex.wrap(methodIndex),
737
+ protoIndex: isoProtoIndex.wrap(protoIndex),
738
+ registers: Object.assign([
739
+ register0,
740
+ register1,
741
+ register2,
742
+ register3,
743
+ register4,
744
+ ], {
745
+ length: registerCount,
746
+ }),
747
+ }),
748
+ );
749
+
750
+ // Format 4rcc: invoke-polymorphic/range
751
+ type DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex> = {
752
+ methodIndex: MethodIndex;
753
+ protoIndex: ProtoIndex;
754
+ registers: number[];
755
+ };
756
+
757
+ export const createDalvikBytecodeFormat4rccParser = <MethodIndex, ProtoIndex>({
758
+ isoMethodIndex,
759
+ isoProtoIndex,
760
+ }: {
761
+ isoMethodIndex: Iso<MethodIndex, number>;
762
+ isoProtoIndex: Iso<ProtoIndex, number>;
763
+ }): Parser<DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
764
+ createTupleParser([
765
+ ubyteParser,
766
+ ushortParser,
767
+ ushortParser,
768
+ ushortParser,
769
+ ]),
770
+ ([
771
+ registerCount,
772
+ methodIndex,
773
+ firstRegister,
774
+ protoIndex,
775
+ ]) => ({
776
+ methodIndex: isoMethodIndex.wrap(methodIndex),
777
+ protoIndex: isoProtoIndex.wrap(protoIndex),
778
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
779
+ }),
780
+ );
@@ -0,0 +1,35 @@
1
+
2
+ export const formatSizes = {
3
+ '10x': 1,
4
+ '11x': 1,
5
+ '11n': 1,
6
+ '12x': 1,
7
+ '10t': 1,
8
+ '20t': 2,
9
+ '20bc': 2,
10
+ '22x': 2,
11
+ '21t': 2,
12
+ '21s': 2,
13
+ '21h': 2,
14
+ '21c': 2,
15
+ '23x': 2,
16
+ '22b': 2,
17
+ '22t': 2,
18
+ '22s': 2,
19
+ '22c': 2,
20
+ '22cs': 2,
21
+ '30t': 3,
22
+ '32x': 3,
23
+ '31i': 3,
24
+ '31t': 3,
25
+ '31c': 3,
26
+ '35c': 3,
27
+ '35ms': 3,
28
+ '35mi': 3,
29
+ '3rc': 3,
30
+ '3rms': 3,
31
+ '3rmi': 3,
32
+ '45cc': 4,
33
+ '4rcc': 4,
34
+ '51l': 5,
35
+ } as const;