json-as 1.3.0 → 1.3.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 (295) hide show
  1. package/CHANGELOG.md +400 -0
  2. package/README.md +137 -32
  3. package/assembly/deserialize/index/arbitrary.ts +1 -1
  4. package/assembly/deserialize/index/array.ts +6 -1
  5. package/assembly/deserialize/index/float.ts +1 -1
  6. package/assembly/deserialize/index/integer.ts +1 -1
  7. package/assembly/deserialize/index/typedarray.ts +14 -0
  8. package/assembly/deserialize/index/unsigned.ts +1 -1
  9. package/assembly/deserialize/simd/string.ts +20 -16
  10. package/assembly/deserialize/simple/arbitrary.ts +1 -1
  11. package/assembly/deserialize/simple/array/generic.ts +42 -0
  12. package/assembly/deserialize/simple/array.ts +8 -1
  13. package/assembly/deserialize/{float.ts → simple/float.ts} +22 -2
  14. package/assembly/deserialize/{integer.ts → simple/integer.ts} +3 -2
  15. package/assembly/deserialize/simple/map.ts +60 -12
  16. package/assembly/deserialize/simple/object.ts +1 -1
  17. package/assembly/deserialize/simple/set.ts +119 -134
  18. package/assembly/deserialize/simple/staticarray.ts +12 -1
  19. package/assembly/deserialize/simple/string.ts +93 -2
  20. package/assembly/deserialize/simple/struct.ts +7 -157
  21. package/assembly/deserialize/simple/typedarray.ts +1 -1
  22. package/assembly/deserialize/{unsigned.ts → simple/unsigned.ts} +3 -2
  23. package/assembly/deserialize/swar/array/array.ts +42 -7
  24. package/assembly/deserialize/swar/array/bool.ts +5 -2
  25. package/assembly/deserialize/swar/array/float.ts +7 -3
  26. package/assembly/deserialize/swar/array/generic.ts +40 -0
  27. package/assembly/deserialize/swar/array/integer.ts +7 -4
  28. package/assembly/deserialize/swar/array/object.ts +20 -4
  29. package/assembly/deserialize/swar/array/shared.ts +18 -4
  30. package/assembly/deserialize/swar/array/string.ts +5 -2
  31. package/assembly/deserialize/swar/array/struct.ts +20 -4
  32. package/assembly/deserialize/swar/array.ts +56 -2
  33. package/assembly/deserialize/swar/string.ts +245 -370
  34. package/assembly/index.ts +207 -194
  35. package/assembly/serialize/index/arbitrary.ts +8 -3
  36. package/assembly/serialize/index/float.ts +1 -1
  37. package/assembly/serialize/index/object.ts +1 -5
  38. package/assembly/serialize/index/typedarray.ts +65 -0
  39. package/assembly/serialize/simd/string.ts +7 -16
  40. package/assembly/serialize/simple/arbitrary.ts +9 -3
  41. package/assembly/serialize/simple/array.ts +17 -6
  42. package/assembly/serialize/simple/float.ts +18 -4
  43. package/assembly/serialize/simple/map.ts +10 -27
  44. package/assembly/serialize/simple/object.ts +1 -5
  45. package/assembly/serialize/simple/set.ts +3 -4
  46. package/assembly/serialize/simple/staticarray.ts +4 -3
  47. package/assembly/serialize/simple/string.ts +3 -11
  48. package/assembly/serialize/simple/typedarray.ts +9 -7
  49. package/assembly/serialize/swar/string.ts +3 -12
  50. package/assembly/tsconfig.json +3 -2
  51. package/assembly/util/dragonbox-cache.ts +1322 -0
  52. package/assembly/util/dragonbox.ts +596 -0
  53. package/assembly/util/swar.ts +49 -0
  54. package/lib/as-bs.ts +92 -70
  55. package/package.json +35 -10
  56. package/transform/lib/index.d.ts +1 -0
  57. package/transform/lib/index.d.ts.map +1 -1
  58. package/transform/lib/index.js +559 -221
  59. package/transform/lib/index.js.map +1 -1
  60. package/transform/lib/linkers/custom.d.ts.map +1 -1
  61. package/transform/lib/linkers/custom.js +7 -3
  62. package/transform/lib/linkers/custom.js.map +1 -1
  63. package/transform/lib/types.d.ts +2 -0
  64. package/transform/lib/types.d.ts.map +1 -1
  65. package/transform/lib/types.js +13 -0
  66. package/transform/lib/types.js.map +1 -1
  67. package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +0 -5628
  68. package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +0 -5187
  69. package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +0 -5187
  70. package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +0 -5187
  71. package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +0 -5187
  72. package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +0 -5187
  73. package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +0 -5187
  74. package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +0 -5187
  75. package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +0 -5187
  76. package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +0 -5187
  77. package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +0 -5187
  78. package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +0 -5187
  79. package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +0 -5187
  80. package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +0 -5187
  81. package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +0 -5187
  82. package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +0 -5628
  83. package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +0 -5187
  84. package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +0 -5187
  85. package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +0 -5187
  86. package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +0 -5187
  87. package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +0 -5187
  88. package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +0 -5628
  89. package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +0 -5187
  90. package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +0 -5187
  91. package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +0 -5187
  92. package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +0 -5187
  93. package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +0 -5187
  94. package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +0 -5187
  95. package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +0 -5187
  96. package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +0 -5187
  97. package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +0 -5187
  98. package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +0 -5187
  99. package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +0 -5187
  100. package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +0 -5187
  101. package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +0 -5187
  102. package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +0 -5187
  103. package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +0 -5628
  104. package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +0 -5187
  105. package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +0 -5187
  106. package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +0 -5187
  107. package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +0 -5187
  108. package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +0 -5187
  109. package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +0 -5628
  110. package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +0 -5187
  111. package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +0 -5187
  112. package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +0 -5187
  113. package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +0 -5187
  114. package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +0 -5187
  115. package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +0 -5187
  116. package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +0 -5187
  117. package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +0 -5187
  118. package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +0 -5187
  119. package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +0 -5187
  120. package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +0 -5187
  121. package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +0 -5187
  122. package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +0 -5187
  123. package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +0 -5187
  124. package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +0 -5628
  125. package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +0 -5187
  126. package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +0 -5187
  127. package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +0 -5187
  128. package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +0 -5187
  129. package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +0 -5187
  130. package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +0 -943
  131. package/.as-test/logs/naive/run.array.spec.ts.log.json +0 -1053
  132. package/.as-test/logs/naive/run.bool.spec.ts.log.json +0 -257
  133. package/.as-test/logs/naive/run.box.spec.ts.log.json +0 -353
  134. package/.as-test/logs/naive/run.custom.spec.ts.log.json +0 -309
  135. package/.as-test/logs/naive/run.date.spec.ts.log.json +0 -397
  136. package/.as-test/logs/naive/run.enum.spec.ts.log.json +0 -343
  137. package/.as-test/logs/naive/run.float.spec.ts.log.json +0 -453
  138. package/.as-test/logs/naive/run.generics.spec.ts.log.json +0 -393
  139. package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +0 -325
  140. package/.as-test/logs/naive/run.integer.spec.ts.log.json +0 -373
  141. package/.as-test/logs/naive/run.map.spec.ts.log.json +0 -247
  142. package/.as-test/logs/naive/run.namespace.spec.ts.log.json +0 -361
  143. package/.as-test/logs/naive/run.null.spec.ts.log.json +0 -273
  144. package/.as-test/logs/naive/run.raw.spec.ts.log.json +0 -309
  145. package/.as-test/logs/naive/run.resolving.spec.ts.log.json +0 -273
  146. package/.as-test/logs/naive/run.set.spec.ts.log.json +0 -733
  147. package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +0 -931
  148. package/.as-test/logs/naive/run.string.spec.ts.log.json +0 -2289
  149. package/.as-test/logs/naive/run.struct.spec.ts.log.json +0 -523
  150. package/.as-test/logs/naive/run.types.spec.ts.log.json +0 -273
  151. package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +0 -943
  152. package/.as-test/logs/naive/test.array.spec.ts.log.json +0 -1053
  153. package/.as-test/logs/naive/test.bool.spec.ts.log.json +0 -257
  154. package/.as-test/logs/naive/test.box.spec.ts.log.json +0 -353
  155. package/.as-test/logs/naive/test.custom.spec.ts.log.json +0 -309
  156. package/.as-test/logs/naive/test.date.spec.ts.log.json +0 -397
  157. package/.as-test/logs/naive/test.enum.spec.ts.log.json +0 -343
  158. package/.as-test/logs/naive/test.float.spec.ts.log.json +0 -453
  159. package/.as-test/logs/naive/test.generics.spec.ts.log.json +0 -393
  160. package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +0 -325
  161. package/.as-test/logs/naive/test.integer.spec.ts.log.json +0 -373
  162. package/.as-test/logs/naive/test.log.json +0 -2289
  163. package/.as-test/logs/naive/test.map.spec.ts.log.json +0 -247
  164. package/.as-test/logs/naive/test.namespace.spec.ts.log.json +0 -361
  165. package/.as-test/logs/naive/test.null.spec.ts.log.json +0 -273
  166. package/.as-test/logs/naive/test.raw.spec.ts.log.json +0 -309
  167. package/.as-test/logs/naive/test.resolving.spec.ts.log.json +0 -273
  168. package/.as-test/logs/naive/test.set.spec.ts.log.json +0 -733
  169. package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +0 -931
  170. package/.as-test/logs/naive/test.string.spec.ts.log.json +0 -2345
  171. package/.as-test/logs/naive/test.struct.spec.ts.log.json +0 -523
  172. package/.as-test/logs/naive/test.types.spec.ts.log.json +0 -273
  173. package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +0 -943
  174. package/.as-test/logs/simd/run.array.spec.ts.log.json +0 -1053
  175. package/.as-test/logs/simd/run.bool.spec.ts.log.json +0 -257
  176. package/.as-test/logs/simd/run.box.spec.ts.log.json +0 -353
  177. package/.as-test/logs/simd/run.custom.spec.ts.log.json +0 -309
  178. package/.as-test/logs/simd/run.date.spec.ts.log.json +0 -397
  179. package/.as-test/logs/simd/run.enum.spec.ts.log.json +0 -343
  180. package/.as-test/logs/simd/run.float.spec.ts.log.json +0 -453
  181. package/.as-test/logs/simd/run.generics.spec.ts.log.json +0 -393
  182. package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +0 -325
  183. package/.as-test/logs/simd/run.integer.spec.ts.log.json +0 -373
  184. package/.as-test/logs/simd/run.map.spec.ts.log.json +0 -247
  185. package/.as-test/logs/simd/run.namespace.spec.ts.log.json +0 -361
  186. package/.as-test/logs/simd/run.null.spec.ts.log.json +0 -273
  187. package/.as-test/logs/simd/run.raw.spec.ts.log.json +0 -309
  188. package/.as-test/logs/simd/run.resolving.spec.ts.log.json +0 -273
  189. package/.as-test/logs/simd/run.set.spec.ts.log.json +0 -733
  190. package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +0 -931
  191. package/.as-test/logs/simd/run.string.spec.ts.log.json +0 -2289
  192. package/.as-test/logs/simd/run.struct.spec.ts.log.json +0 -523
  193. package/.as-test/logs/simd/run.types.spec.ts.log.json +0 -273
  194. package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +0 -943
  195. package/.as-test/logs/simd/test.array.spec.ts.log.json +0 -1053
  196. package/.as-test/logs/simd/test.bool.spec.ts.log.json +0 -257
  197. package/.as-test/logs/simd/test.box.spec.ts.log.json +0 -353
  198. package/.as-test/logs/simd/test.custom.spec.ts.log.json +0 -309
  199. package/.as-test/logs/simd/test.date.spec.ts.log.json +0 -397
  200. package/.as-test/logs/simd/test.enum.spec.ts.log.json +0 -343
  201. package/.as-test/logs/simd/test.float.spec.ts.log.json +0 -453
  202. package/.as-test/logs/simd/test.generics.spec.ts.log.json +0 -393
  203. package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +0 -325
  204. package/.as-test/logs/simd/test.integer.spec.ts.log.json +0 -373
  205. package/.as-test/logs/simd/test.log.json +0 -11371
  206. package/.as-test/logs/simd/test.map.spec.ts.log.json +0 -247
  207. package/.as-test/logs/simd/test.namespace.spec.ts.log.json +0 -361
  208. package/.as-test/logs/simd/test.null.spec.ts.log.json +0 -273
  209. package/.as-test/logs/simd/test.raw.spec.ts.log.json +0 -309
  210. package/.as-test/logs/simd/test.resolving.spec.ts.log.json +0 -273
  211. package/.as-test/logs/simd/test.set.spec.ts.log.json +0 -733
  212. package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +0 -931
  213. package/.as-test/logs/simd/test.string.spec.ts.log.json +0 -2345
  214. package/.as-test/logs/simd/test.struct.spec.ts.log.json +0 -523
  215. package/.as-test/logs/simd/test.types.spec.ts.log.json +0 -273
  216. package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +0 -943
  217. package/.as-test/logs/swar/run.array.spec.ts.log.json +0 -1053
  218. package/.as-test/logs/swar/run.bool.spec.ts.log.json +0 -257
  219. package/.as-test/logs/swar/run.box.spec.ts.log.json +0 -353
  220. package/.as-test/logs/swar/run.custom.spec.ts.log.json +0 -309
  221. package/.as-test/logs/swar/run.date.spec.ts.log.json +0 -397
  222. package/.as-test/logs/swar/run.enum.spec.ts.log.json +0 -343
  223. package/.as-test/logs/swar/run.float.spec.ts.log.json +0 -453
  224. package/.as-test/logs/swar/run.generics.spec.ts.log.json +0 -393
  225. package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +0 -325
  226. package/.as-test/logs/swar/run.integer.spec.ts.log.json +0 -373
  227. package/.as-test/logs/swar/run.map.spec.ts.log.json +0 -247
  228. package/.as-test/logs/swar/run.namespace.spec.ts.log.json +0 -361
  229. package/.as-test/logs/swar/run.null.spec.ts.log.json +0 -273
  230. package/.as-test/logs/swar/run.raw.spec.ts.log.json +0 -309
  231. package/.as-test/logs/swar/run.resolving.spec.ts.log.json +0 -273
  232. package/.as-test/logs/swar/run.set.spec.ts.log.json +0 -733
  233. package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +0 -931
  234. package/.as-test/logs/swar/run.string.spec.ts.log.json +0 -2289
  235. package/.as-test/logs/swar/run.struct.spec.ts.log.json +0 -523
  236. package/.as-test/logs/swar/run.types.spec.ts.log.json +0 -273
  237. package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +0 -943
  238. package/.as-test/logs/swar/test.array.spec.ts.log.json +0 -1053
  239. package/.as-test/logs/swar/test.bool.spec.ts.log.json +0 -257
  240. package/.as-test/logs/swar/test.box.spec.ts.log.json +0 -353
  241. package/.as-test/logs/swar/test.custom.spec.ts.log.json +0 -309
  242. package/.as-test/logs/swar/test.date.spec.ts.log.json +0 -397
  243. package/.as-test/logs/swar/test.enum.spec.ts.log.json +0 -343
  244. package/.as-test/logs/swar/test.float.spec.ts.log.json +0 -453
  245. package/.as-test/logs/swar/test.generics.spec.ts.log.json +0 -393
  246. package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +0 -325
  247. package/.as-test/logs/swar/test.integer.spec.ts.log.json +0 -373
  248. package/.as-test/logs/swar/test.log.json +0 -11371
  249. package/.as-test/logs/swar/test.map.spec.ts.log.json +0 -247
  250. package/.as-test/logs/swar/test.namespace.spec.ts.log.json +0 -361
  251. package/.as-test/logs/swar/test.null.spec.ts.log.json +0 -273
  252. package/.as-test/logs/swar/test.raw.spec.ts.log.json +0 -309
  253. package/.as-test/logs/swar/test.resolving.spec.ts.log.json +0 -273
  254. package/.as-test/logs/swar/test.set.spec.ts.log.json +0 -733
  255. package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +0 -931
  256. package/.as-test/logs/swar/test.string.spec.ts.log.json +0 -2345
  257. package/.as-test/logs/swar/test.struct.spec.ts.log.json +0 -523
  258. package/.as-test/logs/swar/test.types.spec.ts.log.json +0 -273
  259. package/.as-test/logs/test.arbitrary.spec.ts.log.json +0 -943
  260. package/.as-test/logs/test.array.spec.ts.log.json +0 -1053
  261. package/.as-test/logs/test.bool.spec.ts.log.json +0 -257
  262. package/.as-test/logs/test.box.spec.ts.log.json +0 -353
  263. package/.as-test/logs/test.custom.spec.ts.log.json +0 -309
  264. package/.as-test/logs/test.date.spec.ts.log.json +0 -397
  265. package/.as-test/logs/test.enum.spec.ts.log.json +0 -343
  266. package/.as-test/logs/test.float.spec.ts.log.json +0 -453
  267. package/.as-test/logs/test.generics.spec.ts.log.json +0 -393
  268. package/.as-test/logs/test.hierarchy.spec.ts.log.json +0 -325
  269. package/.as-test/logs/test.integer.spec.ts.log.json +0 -373
  270. package/.as-test/logs/test.log.json +0 -11371
  271. package/.as-test/logs/test.map.spec.ts.log.json +0 -247
  272. package/.as-test/logs/test.namespace.spec.ts.log.json +0 -361
  273. package/.as-test/logs/test.null.spec.ts.log.json +0 -273
  274. package/.as-test/logs/test.raw.spec.ts.log.json +0 -309
  275. package/.as-test/logs/test.resolving.spec.ts.log.json +0 -273
  276. package/.as-test/logs/test.set.spec.ts.log.json +0 -733
  277. package/.as-test/logs/test.staticarray.spec.ts.log.json +0 -931
  278. package/.as-test/logs/test.string.spec.ts.log.json +0 -2289
  279. package/.as-test/logs/test.struct.spec.ts.log.json +0 -523
  280. package/.as-test/logs/test.types.spec.ts.log.json +0 -273
  281. package/.as-test/runners/default.bindings.js +0 -68
  282. package/.as-test/runners/default.wasi.js +0 -38
  283. package/ARCHITECTURE.md +0 -323
  284. package/CONTRIBUTING.md +0 -244
  285. package/TODO +0 -1
  286. package/as-test.config.json +0 -40
  287. package/assembly/test.ts +0 -24
  288. package/eslint.config.js +0 -68
  289. package/lib/tsconfig.json +0 -8
  290. package/test.ts +0 -99
  291. package/tools/assemblyscript-eslint-local.js +0 -6
  292. package/tools/assemblyscript-eslint.js +0 -53
  293. package/tools/assemblyscript-prettier-plugin.js +0 -33
  294. package/tools/replacer.js +0 -63
  295. package/transform/tsconfig.json +0 -35
@@ -4,6 +4,7 @@ import { deserializeArrayArray } from "../simple/array/array";
4
4
  import { deserializeBooleanArray } from "../simple/array/bool";
5
5
  import { deserializeBoxArray } from "../simple/array/box";
6
6
  import { deserializeFloatArray } from "../simple/array/float";
7
+ import { deserializeGenericArray } from "../simple/array/generic";
7
8
  import { deserializeIntegerArray as deserializeIntegerArray_NAIVE } from "../simple/array/integer";
8
9
  import { deserializeMapArray } from "../simple/array/map";
9
10
  import { deserializeObjectArray } from "../simple/array/object";
@@ -45,13 +46,17 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
45
46
  return deserializeObjectArray<T>(srcStart, srcEnd, dst);
46
47
  } else if (type instanceof JSON.Raw) {
47
48
  return deserializeRawArray(srcStart, srcEnd, dst) as T;
49
+ } else if (type instanceof Date) {
50
+ return deserializeGenericArray<T>(srcStart, srcEnd, dst);
51
+ } else if (type instanceof Set) {
52
+ return deserializeGenericArray<T>(srcStart, srcEnd, dst);
48
53
  } else if (type instanceof Map) {
49
54
  return deserializeMapArray<T>(srcStart, srcEnd, dst);
50
55
  // @ts-ignore: defined by transform
51
56
  } else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
52
57
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
53
58
  // @ts-ignore: defined by transform
54
- } else if (isDefined(type.__DESERIALIZE)) {
59
+ } else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
55
60
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
56
61
  }
57
62
  throw new Error("Could not parse array of type " + nameof<T>() + "!");
@@ -1 +1 @@
1
- export { deserializeFloat } from "../float";
1
+ export { deserializeFloat } from "../simple/float";
@@ -1 +1 @@
1
- export { deserializeInteger } from "../integer";
1
+ export { deserializeInteger } from "../simple/integer";
@@ -1 +1,15 @@
1
+ import { bytes } from "../../util";
1
2
  export { deserializeArrayBuffer, deserializeTypedArray } from "../simple/typedarray";
3
+ import { deserializeArrayBuffer, deserializeTypedArray } from "../simple/typedarray";
4
+
5
+
6
+ @inline export function parseArrayBuffer(data: string): ArrayBuffer {
7
+ const dataSize = bytes(data);
8
+ const dataPtr = changetype<usize>(data);
9
+ return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0);
10
+ }
11
+
12
+
13
+ @inline export function __deserializeArrayBuffer(srcStart: usize, srcEnd: usize, dst: usize = 0): ArrayBuffer {
14
+ return deserializeArrayBuffer(srcStart, srcEnd, dst);
15
+ }
@@ -1 +1 @@
1
- export { deserializeUnsigned } from "../unsigned";
1
+ export { deserializeUnsigned } from "../simple/unsigned";
@@ -1,5 +1,6 @@
1
1
  import { bs } from "../../../lib/as-bs";
2
2
  import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
3
+ import { __heap_base } from "memory";
3
4
  import { QUOTE } from "../../custom/chars";
4
5
  import { BACK_SLASH } from "../../custom/chars";
5
6
  import { DESERIALIZE_ESCAPE_TABLE, ESCAPE_HEX_TABLE } from "../../globals/tables";
@@ -81,11 +82,13 @@ import { deserializeStringField_SWAR } from "../swar/string";
81
82
 
82
83
  const current = load<usize>(dstFieldPtr);
83
84
  let stringPtr: usize;
84
- if (current != 0 && changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
85
- stringPtr = current;
86
- } else if (current != 0 && current != changetype<usize>("")) {
87
- stringPtr = __renew(current, byteLength);
88
- store<usize>(dstFieldPtr, stringPtr);
85
+ if (current >= __heap_base) {
86
+ if (changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
87
+ stringPtr = current;
88
+ } else {
89
+ stringPtr = __renew(current, byteLength);
90
+ store<usize>(dstFieldPtr, stringPtr);
91
+ }
89
92
  } else {
90
93
  stringPtr = __new(byteLength, idof<string>());
91
94
  store<usize>(dstFieldPtr, stringPtr);
@@ -93,16 +96,18 @@ import { deserializeStringField_SWAR } from "../swar/string";
93
96
  memory.copy(stringPtr, srcStart, byteLength);
94
97
  }
95
98
 
99
+ // @ts-expect-error: @inline is a valid decorator
100
+
96
101
  // todo: optimize and stuff. it works, its not pretty. ideally, i'd like this to be (nearly) branchless
97
102
  // @ts-expect-error: @inline is a valid decorator
98
103
  @inline function deserializeEscapedString_SIMD(payloadStart: usize, escapeStart: usize, srcEnd: usize): string {
99
104
  const prefixLen = <u32>(escapeStart - payloadStart);
100
105
  let srcStart = escapeStart;
101
106
  const srcEnd16 = srcEnd - 16;
107
+ const outStart = bs.offset - bs.buffer;
102
108
  bs.ensureSize(u32(srcEnd - srcStart));
103
- bs.offset = bs.buffer;
104
109
  if (prefixLen != 0) {
105
- memory.copy(bs.buffer, payloadStart, prefixLen);
110
+ memory.copy(bs.offset, payloadStart, prefixLen);
106
111
  bs.offset += prefixLen;
107
112
  }
108
113
 
@@ -111,16 +116,14 @@ import { deserializeStringField_SWAR } from "../swar/string";
111
116
  store<v128>(bs.offset, block);
112
117
 
113
118
  const eq5C = i16x8.eq(block, SPLAT_5C);
119
+ let mask = i16x8.bitmask(eq5C);
114
120
 
115
- // Early exit
116
- if (!v128.any_true(eq5C)) {
121
+ if (mask == 0) {
117
122
  srcStart += 16;
118
123
  bs.offset += 16;
119
124
  continue;
120
125
  }
121
126
 
122
- let mask = i16x8.bitmask(eq5C);
123
-
124
127
  let srcChg: usize = 0;
125
128
  let lastLane: usize = 0;
126
129
  do {
@@ -195,7 +198,7 @@ import { deserializeStringField_SWAR } from "../swar/string";
195
198
  bs.offset += 2;
196
199
  }
197
200
 
198
- return bs.out<string>();
201
+ return bs.sliceOut<string>(outStart);
199
202
  }
200
203
 
201
204
  export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
@@ -207,14 +210,14 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
207
210
 
208
211
  while (srcStart < srcEnd16) {
209
212
  const block = load<v128>(srcStart);
210
- const eq5C = i16x8.eq(block, SPLAT_5C);
213
+ const mask = i16x8.bitmask(i16x8.eq(block, SPLAT_5C));
211
214
 
212
- if (!v128.any_true(eq5C)) {
215
+ if (mask == 0) {
213
216
  srcStart += 16;
214
217
  continue;
215
218
  }
216
219
 
217
- const laneIdx = usize(ctz(i16x8.bitmask(eq5C)) << 1);
220
+ const laneIdx = usize(ctz(mask) << 1);
218
221
  return inline.always(deserializeEscapedString_SIMD(payloadStart, srcStart + laneIdx, srcEnd));
219
222
  }
220
223
 
@@ -229,7 +232,8 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
229
232
  }
230
233
 
231
234
  // @ts-expect-error: @inline is a valid decorator
232
- @inline export function deserializeStringField_SIMD<T extends string | null>(srcStart: usize, srcEnd: usize, dstFieldPtr: usize): usize {
235
+ @inline export function deserializeStringField_SIMD<T extends string | null>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
236
+ const dstFieldPtr = dstObj + dstOffset;
233
237
  if (srcStart + 2 > srcEnd || load<u16>(srcStart) != QUOTE) abort("Expected leading quote");
234
238
 
235
239
  const quotedStart = srcStart;
@@ -1,7 +1,7 @@
1
1
  import { JSON } from "../..";
2
2
  import { deserializeArray } from "./array";
3
3
  import { deserializeBoolean } from "./bool";
4
- import { deserializeFloat } from "../float";
4
+ import { deserializeFloat } from "./float";
5
5
  import { deserializeString } from "./string";
6
6
  import { deserializeObject } from "./object";
7
7
  import { BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE } from "../../custom/chars";
@@ -0,0 +1,42 @@
1
+ import { JSON } from "../../..";
2
+ import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../../custom/chars";
3
+ import { isSpace } from "../../../util";
4
+ import { scanValueEnd } from "../../swar/array/shared";
5
+
6
+ export function deserializeGenericArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
7
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
8
+ out.length = 0;
9
+
10
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
11
+ while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
12
+
13
+ if (srcStart >= srcEnd) throw new Error("Input string had zero length or was all whitespace");
14
+ if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of array");
15
+ srcStart += 2;
16
+
17
+ while (srcStart < srcEnd) {
18
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
19
+ if (srcStart >= srcEnd) break;
20
+
21
+ if (load<u16>(srcStart) == BRACKET_RIGHT) return out;
22
+
23
+ const valueEnd = scanValueEnd(srcStart, srcEnd);
24
+ if (!valueEnd || valueEnd <= srcStart) break;
25
+
26
+ out.push(JSON.__deserialize<valueof<T>>(srcStart, valueEnd));
27
+ srcStart = valueEnd;
28
+
29
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
30
+ if (srcStart >= srcEnd) break;
31
+
32
+ const code = load<u16>(srcStart);
33
+ if (code == COMMA) {
34
+ srcStart += 2;
35
+ continue;
36
+ }
37
+ if (code == BRACKET_RIGHT) return out;
38
+ break;
39
+ }
40
+
41
+ throw new Error("Failed to parse JSON!");
42
+ }
@@ -3,6 +3,7 @@ import { deserializeArbitraryArray } from "./array/arbitrary";
3
3
  import { deserializeArrayArray } from "./array/array";
4
4
  import { deserializeBooleanArray } from "./array/bool";
5
5
  import { deserializeFloatArray } from "./array/float";
6
+ import { deserializeGenericArray } from "./array/generic";
6
7
  import { deserializeIntegerArray } from "./array/integer";
7
8
  import { deserializeMapArray } from "./array/map";
8
9
  import { deserializeStructArray } from "./array/struct";
@@ -42,6 +43,12 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
42
43
  } else if (type instanceof JSON.Raw) {
43
44
  // @ts-ignore: type
44
45
  return deserializeRawArray(srcStart, srcEnd, dst);
46
+ } else if (type instanceof Date) {
47
+ // @ts-ignore: type
48
+ return deserializeGenericArray<T>(srcStart, srcEnd, dst);
49
+ } else if (type instanceof Set) {
50
+ // @ts-ignore: type
51
+ return deserializeGenericArray<T>(srcStart, srcEnd, dst);
45
52
  } else if (type instanceof Map) {
46
53
  // @ts-ignore: type
47
54
  return deserializeMapArray<T>(srcStart, srcEnd, dst);
@@ -49,7 +56,7 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
49
56
  } else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
50
57
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
51
58
  // @ts-ignore: defined by transform
52
- } else if (isDefined(type.__DESERIALIZE)) {
59
+ } else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
53
60
  return deserializeStructArray<T>(srcStart, srcEnd, dst);
54
61
  }
55
62
  throw new Error("Could not parse array of type " + nameof<T>() + "!");
@@ -1,7 +1,26 @@
1
- import { ptrToStr } from "../util/ptrToStr";
1
+ import { ptrToStr } from "../../util/ptrToStr";
2
2
 
3
3
  // @ts-ignore: inline
4
4
  @inline function pow10Fast(exponent: u32): f64 {
5
+ if (exponent == 0) return 1.0;
6
+ if (exponent == 1) return 10.0;
7
+ if (exponent == 2) return 100.0;
8
+ if (exponent == 3) return 1e3;
9
+ if (exponent == 4) return 1e4;
10
+ if (exponent == 5) return 1e5;
11
+ if (exponent == 6) return 1e6;
12
+ if (exponent == 7) return 1e7;
13
+ if (exponent == 8) return 1e8;
14
+ if (exponent == 9) return 1e9;
15
+ if (exponent == 10) return 1e10;
16
+ if (exponent == 11) return 1e11;
17
+ if (exponent == 12) return 1e12;
18
+ if (exponent == 13) return 1e13;
19
+ if (exponent == 14) return 1e14;
20
+ if (exponent == 15) return 1e15;
21
+ if (exponent == 16) return 1e16;
22
+ if (exponent == 17) return 1e17;
23
+ if (exponent == 18) return 1e18;
5
24
  let result = 1.0;
6
25
  if (exponent & 1) result *= 1e1;
7
26
  if (exponent & 2) result *= 1e2;
@@ -100,7 +119,8 @@ import { ptrToStr } from "../util/ptrToStr";
100
119
  }
101
120
 
102
121
  // @ts-ignore: inline
103
- @inline export function deserializeFloatField<T extends number>(srcStart: usize, srcEnd: usize, fieldPtr: usize): usize {
122
+ @inline export function deserializeFloatField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
123
+ const fieldPtr = dstObj + dstOffset;
104
124
  let negative = false;
105
125
  if (load<u16>(srcStart) == 45) {
106
126
  negative = true;
@@ -1,4 +1,4 @@
1
- import { atoi } from "../util/atoi";
1
+ import { atoi } from "../../util/atoi";
2
2
 
3
3
  // @ts-ignore: inline
4
4
  @inline export function deserializeInteger<T>(srcStart: usize, srcEnd: usize): T {
@@ -6,7 +6,8 @@ import { atoi } from "../util/atoi";
6
6
  }
7
7
 
8
8
  // @ts-ignore: inline
9
- @inline export function deserializeIntegerField<T extends number>(srcStart: usize, srcEnd: usize, fieldPtr: usize): usize {
9
+ @inline export function deserializeIntegerField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
10
+ const fieldPtr = dstObj + dstOffset;
10
11
  let negative = false;
11
12
  if (load<u16>(srcStart) == 45) {
12
13
  negative = true;
@@ -1,17 +1,17 @@
1
1
  import { JSON } from "../..";
2
2
  import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
3
3
  import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
4
+ import { scanValueEnd } from "../swar/array/shared";
4
5
 
5
6
  // @ts-ignore: Decorator is valid here
6
- @inline function normalizeQuotes<T>(start: usize, end: usize): T {
7
- if (isString<T>()) return JSON.__deserialize<T>(start - 2, end + 2);
8
- return JSON.__deserialize<T>(start, end);
7
+ @inline function deserializeMapKey<T>(start: usize, end: usize): T {
8
+ const keyText = JSON.__deserialize<string>(start - 2, end + 2);
9
+ if (isString<T>()) return changetype<T>(keyText);
10
+ return JSON.parse<T>(keyText);
9
11
  }
10
12
 
11
13
  export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
12
14
  const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
13
- // @ts-ignore: type
14
- if (!isString<indexof<T>>() && !isInteger<indexof<T>>() && !isFloat<indexof<T>>()) throw new Error("Map key must also be a valid JSON key!");
15
15
 
16
16
  let keyStart: usize = 0;
17
17
  let keyEnd: usize = 0;
@@ -53,7 +53,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
53
53
  srcStart = scanStringEnd(srcStart, srcEnd);
54
54
  if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
55
55
  // @ts-ignore: type
56
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
56
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
57
57
  srcStart += 2;
58
58
  keyStart = 0;
59
59
  continue;
@@ -65,7 +65,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
65
65
  if (code == COMMA || code == BRACE_RIGHT || isSpace(code)) {
66
66
  // console.log("Value (number): " + ptrToStr(lastIndex, srcStart));
67
67
  // @ts-ignore: type
68
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart));
68
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart));
69
69
  // while (isSpace(load<u16>((srcStart += 2)))) {
70
70
  // /* empty */
71
71
  // }
@@ -89,7 +89,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
89
89
  if (--depth == 0) {
90
90
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
91
91
  // @ts-ignore: type
92
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
92
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
93
93
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
94
94
  keyStart = 0;
95
95
  // while (isSpace(load<u16>(srcStart))) {
@@ -113,7 +113,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
113
113
  if (--depth == 0) {
114
114
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
115
115
  // @ts-ignore: type
116
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
116
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
117
117
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
118
118
  keyStart = 0;
119
119
  // while (isSpace(load<u16>((srcStart += 2)))) {
@@ -128,7 +128,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
128
128
  if (load<u64>(srcStart) == 28429475166421108) {
129
129
  // console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 8));
130
130
  // @ts-ignore: type
131
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
131
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
132
132
  // while (isSpace(load<u16>((srcStart += 2)))) {
133
133
  // /* empty */
134
134
  // }
@@ -140,7 +140,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
140
140
  if (load<u64>(srcStart, 2) == 28429466576093281) {
141
141
  // console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 10));
142
142
  // @ts-ignore: type
143
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 10)));
143
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 10)));
144
144
  // while (isSpace(load<u16>((srcStart += 2)))) {
145
145
  // /* empty */
146
146
  // }
@@ -152,7 +152,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
152
152
  if (load<u64>(srcStart) == 30399761348886638) {
153
153
  // console.log("Value (null): " + ptrToStr(srcStart, srcStart + 8));
154
154
  // @ts-ignore: type
155
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
155
+ out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
156
156
  // while (isSpace(load<u16>((srcStart += 2)))) {
157
157
  /* empty */
158
158
  // }
@@ -169,3 +169,51 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
169
169
  }
170
170
  return out;
171
171
  }
172
+
173
+ @inline export function deserializeMapInto<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, out: T): usize {
174
+ changetype<nonnull<T>>(out).clear();
175
+
176
+ if (srcStart >= srcEnd || load<u16>(srcStart) != BRACE_LEFT) throw new Error("Failed to parse JSON!");
177
+ srcStart += 2;
178
+ if (srcStart >= srcEnd) throw new Error("Failed to parse JSON!");
179
+ if (load<u16>(srcStart) == BRACE_RIGHT) return srcStart + 2;
180
+
181
+ while (srcStart < srcEnd) {
182
+ if (load<u16>(srcStart) != QUOTE) break;
183
+
184
+ const keyStart = srcStart + 2;
185
+ const keyEnd = scanStringEnd(srcStart, srcEnd);
186
+ if (keyEnd >= srcEnd) break;
187
+
188
+ srcStart = keyEnd + 2;
189
+ if (srcStart >= srcEnd || load<u16>(srcStart) != COLON) break;
190
+ srcStart += 2;
191
+
192
+ const valueEnd = scanValueEnd(srcStart, srcEnd);
193
+ if (!valueEnd || valueEnd <= srcStart) break;
194
+
195
+ // @ts-ignore: type
196
+ changetype<nonnull<T>>(out).set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, valueEnd));
197
+ srcStart = valueEnd;
198
+
199
+ if (srcStart >= srcEnd) break;
200
+ const code = load<u16>(srcStart);
201
+ if (code == COMMA) {
202
+ srcStart += 2;
203
+ continue;
204
+ }
205
+ if (code == BRACE_RIGHT) return srcStart + 2;
206
+ break;
207
+ }
208
+
209
+ throw new Error("Failed to parse JSON!");
210
+ }
211
+
212
+ @inline export function deserializeMapField<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
213
+ let out = load<T>(dstObj, dstOffset);
214
+ if (!changetype<usize>(out)) {
215
+ out = changetype<T>(instantiate<T>());
216
+ store<T>(dstObj, out, dstOffset);
217
+ }
218
+ return deserializeMapInto<T>(srcStart, srcEnd, out);
219
+ }
@@ -7,7 +7,7 @@ import { deserializeString_SWAR } from "../swar/string";
7
7
  import { deserializeArbitrary } from "./arbitrary";
8
8
  import { deserializeArray } from "./array";
9
9
  import { deserializeBoolean } from "./bool";
10
- import { deserializeFloat } from "../float";
10
+ import { deserializeFloat } from "./float";
11
11
  import { deserializeString } from "./string";
12
12
 
13
13
  export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): JSON.Obj {