index.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. Object.defineProperty(exports, "getSectionForNode", {
  6. enumerable: true,
  7. get: function get() {
  8. return _section.getSectionForNode;
  9. }
  10. });
  11. exports["default"] = void 0;
  12. var _section = require("./section");
  13. var illegalop = "illegal";
  14. var magicModuleHeader = [0x00, 0x61, 0x73, 0x6d];
  15. var moduleVersion = [0x01, 0x00, 0x00, 0x00];
  16. function invertMap(obj) {
  17. var keyModifierFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (k) {
  18. return k;
  19. };
  20. var result = {};
  21. var keys = Object.keys(obj);
  22. for (var i = 0, length = keys.length; i < length; i++) {
  23. result[keyModifierFn(obj[keys[i]])] = keys[i];
  24. }
  25. return result;
  26. }
  27. function createSymbolObject(name
  28. /*: string */
  29. , object
  30. /*: string */
  31. )
  32. /*: Symbol*/
  33. {
  34. var numberOfArgs
  35. /*: number*/
  36. = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
  37. return {
  38. name: name,
  39. object: object,
  40. numberOfArgs: numberOfArgs
  41. };
  42. }
  43. function createSymbol(name
  44. /*: string */
  45. )
  46. /*: Symbol*/
  47. {
  48. var numberOfArgs
  49. /*: number*/
  50. = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  51. return {
  52. name: name,
  53. numberOfArgs: numberOfArgs
  54. };
  55. }
  56. var types = {
  57. func: 0x60,
  58. result: 0x40
  59. };
  60. var exportTypes = {
  61. 0x00: "Func",
  62. 0x01: "Table",
  63. 0x02: "Memory",
  64. 0x03: "Global"
  65. };
  66. var exportTypesByName = invertMap(exportTypes);
  67. var valtypes = {
  68. // numtype
  69. 0x7f: "i32",
  70. 0x7e: "i64",
  71. 0x7d: "f32",
  72. 0x7c: "f64",
  73. // vectype
  74. 0x7b: "v128",
  75. // reftype
  76. 0x70: "anyfunc",
  77. 0x6f: "externref"
  78. };
  79. var valtypesByString = invertMap(valtypes);
  80. var tableTypes = {
  81. 0x70: "anyfunc",
  82. 0x6f: "externref"
  83. };
  84. var blockTypes = Object.assign({}, valtypes, {
  85. // https://webassembly.github.io/spec/core/binary/types.html#binary-blocktype
  86. 0x40: null,
  87. // https://webassembly.github.io/spec/core/binary/types.html#binary-valtype
  88. 0x7f: "i32",
  89. 0x7e: "i64",
  90. 0x7d: "f32",
  91. 0x7c: "f64"
  92. });
  93. var globalTypes = {
  94. 0x00: "const",
  95. 0x01: "var"
  96. };
  97. var globalTypesByString = invertMap(globalTypes);
  98. var importTypes = {
  99. 0x00: "func",
  100. 0x01: "table",
  101. 0x02: "memory",
  102. 0x03: "global"
  103. };
  104. var sections = {
  105. custom: 0,
  106. type: 1,
  107. "import": 2,
  108. func: 3,
  109. table: 4,
  110. memory: 5,
  111. global: 6,
  112. "export": 7,
  113. start: 8,
  114. element: 9,
  115. code: 10,
  116. data: 11
  117. };
  118. var symbolsByByte = {
  119. 0x00: createSymbol("unreachable"),
  120. 0x01: createSymbol("nop"),
  121. 0x02: createSymbol("block"),
  122. 0x03: createSymbol("loop"),
  123. 0x04: createSymbol("if"),
  124. 0x05: createSymbol("else"),
  125. 0x06: illegalop,
  126. 0x07: illegalop,
  127. 0x08: illegalop,
  128. 0x09: illegalop,
  129. 0x0a: illegalop,
  130. 0x0b: createSymbol("end"),
  131. 0x0c: createSymbol("br", 1),
  132. 0x0d: createSymbol("br_if", 1),
  133. 0x0e: createSymbol("br_table"),
  134. 0x0f: createSymbol("return"),
  135. 0x10: createSymbol("call", 1),
  136. 0x11: createSymbol("call_indirect", 2),
  137. 0x12: illegalop,
  138. 0x13: illegalop,
  139. 0x14: illegalop,
  140. 0x15: illegalop,
  141. 0x16: illegalop,
  142. 0x17: illegalop,
  143. 0x18: illegalop,
  144. 0x19: illegalop,
  145. 0x1a: createSymbol("drop"),
  146. 0x1b: createSymbol("select"),
  147. 0x1c: illegalop,
  148. 0x1d: illegalop,
  149. 0x1e: illegalop,
  150. 0x1f: illegalop,
  151. 0x20: createSymbol("get_local", 1),
  152. 0x21: createSymbol("set_local", 1),
  153. 0x22: createSymbol("tee_local", 1),
  154. 0x23: createSymbol("get_global", 1),
  155. 0x24: createSymbol("set_global", 1),
  156. 0x25: createSymbol("table.get", 1),
  157. 0x26: createSymbol("table.set", 1),
  158. 0x27: illegalop,
  159. 0x28: createSymbolObject("load", "u32", 1),
  160. 0x29: createSymbolObject("load", "u64", 1),
  161. 0x2a: createSymbolObject("load", "f32", 1),
  162. 0x2b: createSymbolObject("load", "f64", 1),
  163. 0x2c: createSymbolObject("load8_s", "u32", 1),
  164. 0x2d: createSymbolObject("load8_u", "u32", 1),
  165. 0x2e: createSymbolObject("load16_s", "u32", 1),
  166. 0x2f: createSymbolObject("load16_u", "u32", 1),
  167. 0x30: createSymbolObject("load8_s", "u64", 1),
  168. 0x31: createSymbolObject("load8_u", "u64", 1),
  169. 0x32: createSymbolObject("load16_s", "u64", 1),
  170. 0x33: createSymbolObject("load16_u", "u64", 1),
  171. 0x34: createSymbolObject("load32_s", "u64", 1),
  172. 0x35: createSymbolObject("load32_u", "u64", 1),
  173. 0x36: createSymbolObject("store", "u32", 1),
  174. 0x37: createSymbolObject("store", "u64", 1),
  175. 0x38: createSymbolObject("store", "f32", 1),
  176. 0x39: createSymbolObject("store", "f64", 1),
  177. 0x3a: createSymbolObject("store8", "u32", 1),
  178. 0x3b: createSymbolObject("store16", "u32", 1),
  179. 0x3c: createSymbolObject("store8", "u64", 1),
  180. 0x3d: createSymbolObject("store16", "u64", 1),
  181. 0x3e: createSymbolObject("store32", "u64", 1),
  182. 0x3f: createSymbolObject("current_memory"),
  183. 0x40: createSymbolObject("grow_memory"),
  184. 0x41: createSymbolObject("const", "i32", 1),
  185. 0x42: createSymbolObject("const", "i64", 1),
  186. 0x43: createSymbolObject("const", "f32", 1),
  187. 0x44: createSymbolObject("const", "f64", 1),
  188. 0x45: createSymbolObject("eqz", "i32"),
  189. 0x46: createSymbolObject("eq", "i32"),
  190. 0x47: createSymbolObject("ne", "i32"),
  191. 0x48: createSymbolObject("lt_s", "i32"),
  192. 0x49: createSymbolObject("lt_u", "i32"),
  193. 0x4a: createSymbolObject("gt_s", "i32"),
  194. 0x4b: createSymbolObject("gt_u", "i32"),
  195. 0x4c: createSymbolObject("le_s", "i32"),
  196. 0x4d: createSymbolObject("le_u", "i32"),
  197. 0x4e: createSymbolObject("ge_s", "i32"),
  198. 0x4f: createSymbolObject("ge_u", "i32"),
  199. 0x50: createSymbolObject("eqz", "i64"),
  200. 0x51: createSymbolObject("eq", "i64"),
  201. 0x52: createSymbolObject("ne", "i64"),
  202. 0x53: createSymbolObject("lt_s", "i64"),
  203. 0x54: createSymbolObject("lt_u", "i64"),
  204. 0x55: createSymbolObject("gt_s", "i64"),
  205. 0x56: createSymbolObject("gt_u", "i64"),
  206. 0x57: createSymbolObject("le_s", "i64"),
  207. 0x58: createSymbolObject("le_u", "i64"),
  208. 0x59: createSymbolObject("ge_s", "i64"),
  209. 0x5a: createSymbolObject("ge_u", "i64"),
  210. 0x5b: createSymbolObject("eq", "f32"),
  211. 0x5c: createSymbolObject("ne", "f32"),
  212. 0x5d: createSymbolObject("lt", "f32"),
  213. 0x5e: createSymbolObject("gt", "f32"),
  214. 0x5f: createSymbolObject("le", "f32"),
  215. 0x60: createSymbolObject("ge", "f32"),
  216. 0x61: createSymbolObject("eq", "f64"),
  217. 0x62: createSymbolObject("ne", "f64"),
  218. 0x63: createSymbolObject("lt", "f64"),
  219. 0x64: createSymbolObject("gt", "f64"),
  220. 0x65: createSymbolObject("le", "f64"),
  221. 0x66: createSymbolObject("ge", "f64"),
  222. 0x67: createSymbolObject("clz", "i32"),
  223. 0x68: createSymbolObject("ctz", "i32"),
  224. 0x69: createSymbolObject("popcnt", "i32"),
  225. 0x6a: createSymbolObject("add", "i32"),
  226. 0x6b: createSymbolObject("sub", "i32"),
  227. 0x6c: createSymbolObject("mul", "i32"),
  228. 0x6d: createSymbolObject("div_s", "i32"),
  229. 0x6e: createSymbolObject("div_u", "i32"),
  230. 0x6f: createSymbolObject("rem_s", "i32"),
  231. 0x70: createSymbolObject("rem_u", "i32"),
  232. 0x71: createSymbolObject("and", "i32"),
  233. 0x72: createSymbolObject("or", "i32"),
  234. 0x73: createSymbolObject("xor", "i32"),
  235. 0x74: createSymbolObject("shl", "i32"),
  236. 0x75: createSymbolObject("shr_s", "i32"),
  237. 0x76: createSymbolObject("shr_u", "i32"),
  238. 0x77: createSymbolObject("rotl", "i32"),
  239. 0x78: createSymbolObject("rotr", "i32"),
  240. 0x79: createSymbolObject("clz", "i64"),
  241. 0x7a: createSymbolObject("ctz", "i64"),
  242. 0x7b: createSymbolObject("popcnt", "i64"),
  243. 0x7c: createSymbolObject("add", "i64"),
  244. 0x7d: createSymbolObject("sub", "i64"),
  245. 0x7e: createSymbolObject("mul", "i64"),
  246. 0x7f: createSymbolObject("div_s", "i64"),
  247. 0x80: createSymbolObject("div_u", "i64"),
  248. 0x81: createSymbolObject("rem_s", "i64"),
  249. 0x82: createSymbolObject("rem_u", "i64"),
  250. 0x83: createSymbolObject("and", "i64"),
  251. 0x84: createSymbolObject("or", "i64"),
  252. 0x85: createSymbolObject("xor", "i64"),
  253. 0x86: createSymbolObject("shl", "i64"),
  254. 0x87: createSymbolObject("shr_s", "i64"),
  255. 0x88: createSymbolObject("shr_u", "i64"),
  256. 0x89: createSymbolObject("rotl", "i64"),
  257. 0x8a: createSymbolObject("rotr", "i64"),
  258. 0x8b: createSymbolObject("abs", "f32"),
  259. 0x8c: createSymbolObject("neg", "f32"),
  260. 0x8d: createSymbolObject("ceil", "f32"),
  261. 0x8e: createSymbolObject("floor", "f32"),
  262. 0x8f: createSymbolObject("trunc", "f32"),
  263. 0x90: createSymbolObject("nearest", "f32"),
  264. 0x91: createSymbolObject("sqrt", "f32"),
  265. 0x92: createSymbolObject("add", "f32"),
  266. 0x93: createSymbolObject("sub", "f32"),
  267. 0x94: createSymbolObject("mul", "f32"),
  268. 0x95: createSymbolObject("div", "f32"),
  269. 0x96: createSymbolObject("min", "f32"),
  270. 0x97: createSymbolObject("max", "f32"),
  271. 0x98: createSymbolObject("copysign", "f32"),
  272. 0x99: createSymbolObject("abs", "f64"),
  273. 0x9a: createSymbolObject("neg", "f64"),
  274. 0x9b: createSymbolObject("ceil", "f64"),
  275. 0x9c: createSymbolObject("floor", "f64"),
  276. 0x9d: createSymbolObject("trunc", "f64"),
  277. 0x9e: createSymbolObject("nearest", "f64"),
  278. 0x9f: createSymbolObject("sqrt", "f64"),
  279. 0xa0: createSymbolObject("add", "f64"),
  280. 0xa1: createSymbolObject("sub", "f64"),
  281. 0xa2: createSymbolObject("mul", "f64"),
  282. 0xa3: createSymbolObject("div", "f64"),
  283. 0xa4: createSymbolObject("min", "f64"),
  284. 0xa5: createSymbolObject("max", "f64"),
  285. 0xa6: createSymbolObject("copysign", "f64"),
  286. 0xa7: createSymbolObject("wrap/i64", "i32"),
  287. 0xa8: createSymbolObject("trunc_s/f32", "i32"),
  288. 0xa9: createSymbolObject("trunc_u/f32", "i32"),
  289. 0xaa: createSymbolObject("trunc_s/f64", "i32"),
  290. 0xab: createSymbolObject("trunc_u/f64", "i32"),
  291. 0xac: createSymbolObject("extend_s/i32", "i64"),
  292. 0xad: createSymbolObject("extend_u/i32", "i64"),
  293. 0xae: createSymbolObject("trunc_s/f32", "i64"),
  294. 0xaf: createSymbolObject("trunc_u/f32", "i64"),
  295. 0xb0: createSymbolObject("trunc_s/f64", "i64"),
  296. 0xb1: createSymbolObject("trunc_u/f64", "i64"),
  297. 0xb2: createSymbolObject("convert_s/i32", "f32"),
  298. 0xb3: createSymbolObject("convert_u/i32", "f32"),
  299. 0xb4: createSymbolObject("convert_s/i64", "f32"),
  300. 0xb5: createSymbolObject("convert_u/i64", "f32"),
  301. 0xb6: createSymbolObject("demote/f64", "f32"),
  302. 0xb7: createSymbolObject("convert_s/i32", "f64"),
  303. 0xb8: createSymbolObject("convert_u/i32", "f64"),
  304. 0xb9: createSymbolObject("convert_s/i64", "f64"),
  305. 0xba: createSymbolObject("convert_u/i64", "f64"),
  306. 0xbb: createSymbolObject("promote/f32", "f64"),
  307. 0xbc: createSymbolObject("reinterpret/f32", "i32"),
  308. 0xbd: createSymbolObject("reinterpret/f64", "i64"),
  309. 0xbe: createSymbolObject("reinterpret/i32", "f32"),
  310. 0xbf: createSymbolObject("reinterpret/i64", "f64"),
  311. 0xc0: createSymbolObject("extend8_s", "i32"),
  312. 0xc1: createSymbolObject("extend16_s", "i32"),
  313. 0xc2: createSymbolObject("extend8_s", "i64"),
  314. 0xc3: createSymbolObject("extend16_s", "i64"),
  315. 0xc4: createSymbolObject("extend32_s", "i64"),
  316. 0xd0: createSymbol("ref.null"),
  317. 0xd1: createSymbol("ref.is_null"),
  318. 0xd2: createSymbol("ref.func", 1),
  319. 0xfc0a: createSymbol("memory.copy"),
  320. 0xfc0b: createSymbol("memory.fill"),
  321. // Table instructions
  322. // https://webassembly.github.io/spec/core/binary/instructions.html#table-instructions
  323. 0xfc0c: createSymbol("table.init", 2),
  324. 0xfc0d: createSymbol("elem.drop", 1),
  325. 0xfc0e: createSymbol("table.copy", 2),
  326. 0xfc0f: createSymbol("table.grow", 1),
  327. 0xfc10: createSymbol("table.size", 1),
  328. 0xfc11: createSymbol("table.fill", 1),
  329. // Atomic Memory Instructions
  330. 0xfe00: createSymbol("memory.atomic.notify", 1),
  331. 0xfe01: createSymbol("memory.atomic.wait32", 1),
  332. 0xfe02: createSymbol("memory.atomic.wait64", 1),
  333. 0xfe10: createSymbolObject("atomic.load", "i32", 1),
  334. 0xfe11: createSymbolObject("atomic.load", "i64", 1),
  335. 0xfe12: createSymbolObject("atomic.load8_u", "i32", 1),
  336. 0xfe13: createSymbolObject("atomic.load16_u", "i32", 1),
  337. 0xfe14: createSymbolObject("atomic.load8_u", "i64", 1),
  338. 0xfe15: createSymbolObject("atomic.load16_u", "i64", 1),
  339. 0xfe16: createSymbolObject("atomic.load32_u", "i64", 1),
  340. 0xfe17: createSymbolObject("atomic.store", "i32", 1),
  341. 0xfe18: createSymbolObject("atomic.store", "i64", 1),
  342. 0xfe19: createSymbolObject("atomic.store8_u", "i32", 1),
  343. 0xfe1a: createSymbolObject("atomic.store16_u", "i32", 1),
  344. 0xfe1b: createSymbolObject("atomic.store8_u", "i64", 1),
  345. 0xfe1c: createSymbolObject("atomic.store16_u", "i64", 1),
  346. 0xfe1d: createSymbolObject("atomic.store32_u", "i64", 1),
  347. 0xfe1e: createSymbolObject("atomic.rmw.add", "i32", 1),
  348. 0xfe1f: createSymbolObject("atomic.rmw.add", "i64", 1),
  349. 0xfe20: createSymbolObject("atomic.rmw8_u.add_u", "i32", 1),
  350. 0xfe21: createSymbolObject("atomic.rmw16_u.add_u", "i32", 1),
  351. 0xfe22: createSymbolObject("atomic.rmw8_u.add_u", "i64", 1),
  352. 0xfe23: createSymbolObject("atomic.rmw16_u.add_u", "i64", 1),
  353. 0xfe24: createSymbolObject("atomic.rmw32_u.add_u", "i64", 1),
  354. 0xfe25: createSymbolObject("atomic.rmw.sub", "i32", 1),
  355. 0xfe26: createSymbolObject("atomic.rmw.sub", "i64", 1),
  356. 0xfe27: createSymbolObject("atomic.rmw8_u.sub_u", "i32", 1),
  357. 0xfe28: createSymbolObject("atomic.rmw16_u.sub_u", "i32", 1),
  358. 0xfe29: createSymbolObject("atomic.rmw8_u.sub_u", "i64", 1),
  359. 0xfe2a: createSymbolObject("atomic.rmw16_u.sub_u", "i64", 1),
  360. 0xfe2b: createSymbolObject("atomic.rmw32_u.sub_u", "i64", 1),
  361. 0xfe2c: createSymbolObject("atomic.rmw.and", "i32", 1),
  362. 0xfe2d: createSymbolObject("atomic.rmw.and", "i64", 1),
  363. 0xfe2e: createSymbolObject("atomic.rmw8_u.and_u", "i32", 1),
  364. 0xfe2f: createSymbolObject("atomic.rmw16_u.and_u", "i32", 1),
  365. 0xfe30: createSymbolObject("atomic.rmw8_u.and_u", "i64", 1),
  366. 0xfe31: createSymbolObject("atomic.rmw16_u.and_u", "i64", 1),
  367. 0xfe32: createSymbolObject("atomic.rmw32_u.and_u", "i64", 1),
  368. 0xfe33: createSymbolObject("atomic.rmw.or", "i32", 1),
  369. 0xfe34: createSymbolObject("atomic.rmw.or", "i64", 1),
  370. 0xfe35: createSymbolObject("atomic.rmw8_u.or_u", "i32", 1),
  371. 0xfe36: createSymbolObject("atomic.rmw16_u.or_u", "i32", 1),
  372. 0xfe37: createSymbolObject("atomic.rmw8_u.or_u", "i64", 1),
  373. 0xfe38: createSymbolObject("atomic.rmw16_u.or_u", "i64", 1),
  374. 0xfe39: createSymbolObject("atomic.rmw32_u.or_u", "i64", 1),
  375. 0xfe3a: createSymbolObject("atomic.rmw.xor", "i32", 1),
  376. 0xfe3b: createSymbolObject("atomic.rmw.xor", "i64", 1),
  377. 0xfe3c: createSymbolObject("atomic.rmw8_u.xor_u", "i32", 1),
  378. 0xfe3d: createSymbolObject("atomic.rmw16_u.xor_u", "i32", 1),
  379. 0xfe3e: createSymbolObject("atomic.rmw8_u.xor_u", "i64", 1),
  380. 0xfe3f: createSymbolObject("atomic.rmw16_u.xor_u", "i64", 1),
  381. 0xfe40: createSymbolObject("atomic.rmw32_u.xor_u", "i64", 1),
  382. 0xfe41: createSymbolObject("atomic.rmw.xchg", "i32", 1),
  383. 0xfe42: createSymbolObject("atomic.rmw.xchg", "i64", 1),
  384. 0xfe43: createSymbolObject("atomic.rmw8_u.xchg_u", "i32", 1),
  385. 0xfe44: createSymbolObject("atomic.rmw16_u.xchg_u", "i32", 1),
  386. 0xfe45: createSymbolObject("atomic.rmw8_u.xchg_u", "i64", 1),
  387. 0xfe46: createSymbolObject("atomic.rmw16_u.xchg_u", "i64", 1),
  388. 0xfe47: createSymbolObject("atomic.rmw32_u.xchg_u", "i64", 1),
  389. 0xfe48: createSymbolObject("atomic.rmw.cmpxchg", "i32", 1),
  390. 0xfe49: createSymbolObject("atomic.rmw.cmpxchg", "i64", 1),
  391. 0xfe4a: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i32", 1),
  392. 0xfe4b: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i32", 1),
  393. 0xfe4c: createSymbolObject("atomic.rmw8_u.cmpxchg_u", "i64", 1),
  394. 0xfe4d: createSymbolObject("atomic.rmw16_u.cmpxchg_u", "i64", 1),
  395. 0xfe4e: createSymbolObject("atomic.rmw32_u.cmpxchg_u", "i64", 1)
  396. };
  397. var symbolsByName = invertMap(symbolsByByte, function (obj) {
  398. if (typeof obj.object === "string") {
  399. return "".concat(obj.object, ".").concat(obj.name);
  400. }
  401. return obj.name;
  402. });
  403. var _default = {
  404. symbolsByByte: symbolsByByte,
  405. sections: sections,
  406. magicModuleHeader: magicModuleHeader,
  407. moduleVersion: moduleVersion,
  408. types: types,
  409. valtypes: valtypes,
  410. exportTypes: exportTypes,
  411. blockTypes: blockTypes,
  412. tableTypes: tableTypes,
  413. globalTypes: globalTypes,
  414. importTypes: importTypes,
  415. valtypesByString: valtypesByString,
  416. globalTypesByString: globalTypesByString,
  417. exportTypesByName: exportTypesByName,
  418. symbolsByName: symbolsByName
  419. };
  420. exports["default"] = _default;