json-as 1.2.6 → 1.3.0

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 (348) hide show
  1. package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +5628 -0
  2. package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +5187 -0
  3. package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +5187 -0
  4. package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +5187 -0
  5. package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +5187 -0
  6. package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +5187 -0
  7. package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +5187 -0
  8. package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +5187 -0
  9. package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +5187 -0
  10. package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +5187 -0
  11. package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +5187 -0
  12. package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +5187 -0
  13. package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +5187 -0
  14. package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +5187 -0
  15. package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +5187 -0
  16. package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +5628 -0
  17. package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +5187 -0
  18. package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +5187 -0
  19. package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +5187 -0
  20. package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +5187 -0
  21. package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +5187 -0
  22. package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +5628 -0
  23. package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +5187 -0
  24. package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +5187 -0
  25. package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +5187 -0
  26. package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +5187 -0
  27. package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +5187 -0
  28. package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +5187 -0
  29. package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +5187 -0
  30. package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +5187 -0
  31. package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +5187 -0
  32. package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +5187 -0
  33. package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +5187 -0
  34. package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +5187 -0
  35. package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +5187 -0
  36. package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +5187 -0
  37. package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +5628 -0
  38. package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +5187 -0
  39. package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +5187 -0
  40. package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +5187 -0
  41. package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +5187 -0
  42. package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +5187 -0
  43. package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +5628 -0
  44. package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +5187 -0
  45. package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +5187 -0
  46. package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +5187 -0
  47. package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +5187 -0
  48. package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +5187 -0
  49. package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +5187 -0
  50. package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +5187 -0
  51. package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +5187 -0
  52. package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +5187 -0
  53. package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +5187 -0
  54. package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +5187 -0
  55. package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +5187 -0
  56. package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +5187 -0
  57. package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +5187 -0
  58. package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +5628 -0
  59. package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +5187 -0
  60. package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +5187 -0
  61. package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +5187 -0
  62. package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +5187 -0
  63. package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +5187 -0
  64. package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +943 -0
  65. package/.as-test/logs/naive/run.array.spec.ts.log.json +1053 -0
  66. package/.as-test/logs/naive/run.bool.spec.ts.log.json +257 -0
  67. package/.as-test/logs/naive/run.box.spec.ts.log.json +353 -0
  68. package/.as-test/logs/naive/run.custom.spec.ts.log.json +309 -0
  69. package/.as-test/logs/naive/run.date.spec.ts.log.json +397 -0
  70. package/.as-test/logs/naive/run.enum.spec.ts.log.json +343 -0
  71. package/.as-test/logs/naive/run.float.spec.ts.log.json +453 -0
  72. package/.as-test/logs/naive/run.generics.spec.ts.log.json +393 -0
  73. package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +325 -0
  74. package/.as-test/logs/naive/run.integer.spec.ts.log.json +373 -0
  75. package/.as-test/logs/naive/run.map.spec.ts.log.json +247 -0
  76. package/.as-test/logs/naive/run.namespace.spec.ts.log.json +361 -0
  77. package/.as-test/logs/naive/run.null.spec.ts.log.json +273 -0
  78. package/.as-test/logs/naive/run.raw.spec.ts.log.json +309 -0
  79. package/.as-test/logs/naive/run.resolving.spec.ts.log.json +273 -0
  80. package/.as-test/logs/naive/run.set.spec.ts.log.json +733 -0
  81. package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +931 -0
  82. package/.as-test/logs/naive/run.string.spec.ts.log.json +2289 -0
  83. package/.as-test/logs/naive/run.struct.spec.ts.log.json +523 -0
  84. package/.as-test/logs/naive/run.types.spec.ts.log.json +273 -0
  85. package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +943 -0
  86. package/.as-test/logs/naive/test.array.spec.ts.log.json +1053 -0
  87. package/.as-test/logs/naive/test.bool.spec.ts.log.json +257 -0
  88. package/.as-test/logs/naive/test.box.spec.ts.log.json +353 -0
  89. package/.as-test/logs/naive/test.custom.spec.ts.log.json +309 -0
  90. package/.as-test/logs/naive/test.date.spec.ts.log.json +397 -0
  91. package/.as-test/logs/naive/test.enum.spec.ts.log.json +343 -0
  92. package/.as-test/logs/naive/test.float.spec.ts.log.json +453 -0
  93. package/.as-test/logs/naive/test.generics.spec.ts.log.json +393 -0
  94. package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +325 -0
  95. package/.as-test/logs/naive/test.integer.spec.ts.log.json +373 -0
  96. package/.as-test/logs/naive/test.log.json +2289 -0
  97. package/.as-test/logs/naive/test.map.spec.ts.log.json +247 -0
  98. package/.as-test/logs/naive/test.namespace.spec.ts.log.json +361 -0
  99. package/.as-test/logs/naive/test.null.spec.ts.log.json +273 -0
  100. package/.as-test/logs/naive/test.raw.spec.ts.log.json +309 -0
  101. package/.as-test/logs/naive/test.resolving.spec.ts.log.json +273 -0
  102. package/.as-test/logs/naive/test.set.spec.ts.log.json +733 -0
  103. package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +931 -0
  104. package/.as-test/logs/naive/test.string.spec.ts.log.json +2345 -0
  105. package/.as-test/logs/naive/test.struct.spec.ts.log.json +523 -0
  106. package/.as-test/logs/naive/test.types.spec.ts.log.json +273 -0
  107. package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +943 -0
  108. package/.as-test/logs/simd/run.array.spec.ts.log.json +1053 -0
  109. package/.as-test/logs/simd/run.bool.spec.ts.log.json +257 -0
  110. package/.as-test/logs/simd/run.box.spec.ts.log.json +353 -0
  111. package/.as-test/logs/simd/run.custom.spec.ts.log.json +309 -0
  112. package/.as-test/logs/simd/run.date.spec.ts.log.json +397 -0
  113. package/.as-test/logs/simd/run.enum.spec.ts.log.json +343 -0
  114. package/.as-test/logs/simd/run.float.spec.ts.log.json +453 -0
  115. package/.as-test/logs/simd/run.generics.spec.ts.log.json +393 -0
  116. package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +325 -0
  117. package/.as-test/logs/simd/run.integer.spec.ts.log.json +373 -0
  118. package/.as-test/logs/simd/run.map.spec.ts.log.json +247 -0
  119. package/.as-test/logs/simd/run.namespace.spec.ts.log.json +361 -0
  120. package/.as-test/logs/simd/run.null.spec.ts.log.json +273 -0
  121. package/.as-test/logs/simd/run.raw.spec.ts.log.json +309 -0
  122. package/.as-test/logs/simd/run.resolving.spec.ts.log.json +273 -0
  123. package/.as-test/logs/simd/run.set.spec.ts.log.json +733 -0
  124. package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +931 -0
  125. package/.as-test/logs/simd/run.string.spec.ts.log.json +2289 -0
  126. package/.as-test/logs/simd/run.struct.spec.ts.log.json +523 -0
  127. package/.as-test/logs/simd/run.types.spec.ts.log.json +273 -0
  128. package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +943 -0
  129. package/.as-test/logs/simd/test.array.spec.ts.log.json +1053 -0
  130. package/.as-test/logs/simd/test.bool.spec.ts.log.json +257 -0
  131. package/.as-test/logs/simd/test.box.spec.ts.log.json +353 -0
  132. package/.as-test/logs/simd/test.custom.spec.ts.log.json +309 -0
  133. package/.as-test/logs/simd/test.date.spec.ts.log.json +397 -0
  134. package/.as-test/logs/simd/test.enum.spec.ts.log.json +343 -0
  135. package/.as-test/logs/simd/test.float.spec.ts.log.json +453 -0
  136. package/.as-test/logs/simd/test.generics.spec.ts.log.json +393 -0
  137. package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +325 -0
  138. package/.as-test/logs/simd/test.integer.spec.ts.log.json +373 -0
  139. package/.as-test/logs/simd/test.log.json +11371 -0
  140. package/.as-test/logs/simd/test.map.spec.ts.log.json +247 -0
  141. package/.as-test/logs/simd/test.namespace.spec.ts.log.json +361 -0
  142. package/.as-test/logs/simd/test.null.spec.ts.log.json +273 -0
  143. package/.as-test/logs/simd/test.raw.spec.ts.log.json +309 -0
  144. package/.as-test/logs/simd/test.resolving.spec.ts.log.json +273 -0
  145. package/.as-test/logs/simd/test.set.spec.ts.log.json +733 -0
  146. package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +931 -0
  147. package/.as-test/logs/simd/test.string.spec.ts.log.json +2345 -0
  148. package/.as-test/logs/simd/test.struct.spec.ts.log.json +523 -0
  149. package/.as-test/logs/simd/test.types.spec.ts.log.json +273 -0
  150. package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +943 -0
  151. package/.as-test/logs/swar/run.array.spec.ts.log.json +1053 -0
  152. package/.as-test/logs/swar/run.bool.spec.ts.log.json +257 -0
  153. package/.as-test/logs/swar/run.box.spec.ts.log.json +353 -0
  154. package/.as-test/logs/swar/run.custom.spec.ts.log.json +309 -0
  155. package/.as-test/logs/swar/run.date.spec.ts.log.json +397 -0
  156. package/.as-test/logs/swar/run.enum.spec.ts.log.json +343 -0
  157. package/.as-test/logs/swar/run.float.spec.ts.log.json +453 -0
  158. package/.as-test/logs/swar/run.generics.spec.ts.log.json +393 -0
  159. package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +325 -0
  160. package/.as-test/logs/swar/run.integer.spec.ts.log.json +373 -0
  161. package/.as-test/logs/swar/run.map.spec.ts.log.json +247 -0
  162. package/.as-test/logs/swar/run.namespace.spec.ts.log.json +361 -0
  163. package/.as-test/logs/swar/run.null.spec.ts.log.json +273 -0
  164. package/.as-test/logs/swar/run.raw.spec.ts.log.json +309 -0
  165. package/.as-test/logs/swar/run.resolving.spec.ts.log.json +273 -0
  166. package/.as-test/logs/swar/run.set.spec.ts.log.json +733 -0
  167. package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +931 -0
  168. package/.as-test/logs/swar/run.string.spec.ts.log.json +2289 -0
  169. package/.as-test/logs/swar/run.struct.spec.ts.log.json +523 -0
  170. package/.as-test/logs/swar/run.types.spec.ts.log.json +273 -0
  171. package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +943 -0
  172. package/.as-test/logs/swar/test.array.spec.ts.log.json +1053 -0
  173. package/.as-test/logs/swar/test.bool.spec.ts.log.json +257 -0
  174. package/.as-test/logs/swar/test.box.spec.ts.log.json +353 -0
  175. package/.as-test/logs/swar/test.custom.spec.ts.log.json +309 -0
  176. package/.as-test/logs/swar/test.date.spec.ts.log.json +397 -0
  177. package/.as-test/logs/swar/test.enum.spec.ts.log.json +343 -0
  178. package/.as-test/logs/swar/test.float.spec.ts.log.json +453 -0
  179. package/.as-test/logs/swar/test.generics.spec.ts.log.json +393 -0
  180. package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +325 -0
  181. package/.as-test/logs/swar/test.integer.spec.ts.log.json +373 -0
  182. package/.as-test/logs/swar/test.log.json +11371 -0
  183. package/.as-test/logs/swar/test.map.spec.ts.log.json +247 -0
  184. package/.as-test/logs/swar/test.namespace.spec.ts.log.json +361 -0
  185. package/.as-test/logs/swar/test.null.spec.ts.log.json +273 -0
  186. package/.as-test/logs/swar/test.raw.spec.ts.log.json +309 -0
  187. package/.as-test/logs/swar/test.resolving.spec.ts.log.json +273 -0
  188. package/.as-test/logs/swar/test.set.spec.ts.log.json +733 -0
  189. package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +931 -0
  190. package/.as-test/logs/swar/test.string.spec.ts.log.json +2345 -0
  191. package/.as-test/logs/swar/test.struct.spec.ts.log.json +523 -0
  192. package/.as-test/logs/swar/test.types.spec.ts.log.json +273 -0
  193. package/.as-test/logs/test.arbitrary.spec.ts.log.json +943 -0
  194. package/.as-test/logs/test.array.spec.ts.log.json +1053 -0
  195. package/.as-test/logs/test.bool.spec.ts.log.json +257 -0
  196. package/.as-test/logs/test.box.spec.ts.log.json +353 -0
  197. package/.as-test/logs/test.custom.spec.ts.log.json +309 -0
  198. package/.as-test/logs/test.date.spec.ts.log.json +397 -0
  199. package/.as-test/logs/test.enum.spec.ts.log.json +343 -0
  200. package/.as-test/logs/test.float.spec.ts.log.json +453 -0
  201. package/.as-test/logs/test.generics.spec.ts.log.json +393 -0
  202. package/.as-test/logs/test.hierarchy.spec.ts.log.json +325 -0
  203. package/.as-test/logs/test.integer.spec.ts.log.json +373 -0
  204. package/.as-test/logs/test.log.json +11371 -0
  205. package/.as-test/logs/test.map.spec.ts.log.json +247 -0
  206. package/.as-test/logs/test.namespace.spec.ts.log.json +361 -0
  207. package/.as-test/logs/test.null.spec.ts.log.json +273 -0
  208. package/.as-test/logs/test.raw.spec.ts.log.json +309 -0
  209. package/.as-test/logs/test.resolving.spec.ts.log.json +273 -0
  210. package/.as-test/logs/test.set.spec.ts.log.json +733 -0
  211. package/.as-test/logs/test.staticarray.spec.ts.log.json +931 -0
  212. package/.as-test/logs/test.string.spec.ts.log.json +2289 -0
  213. package/.as-test/logs/test.struct.spec.ts.log.json +523 -0
  214. package/.as-test/logs/test.types.spec.ts.log.json +273 -0
  215. package/.as-test/runners/default.bindings.js +68 -0
  216. package/.as-test/runners/default.wasi.js +38 -0
  217. package/ARCHITECTURE.md +6 -3
  218. package/CONTRIBUTING.md +9 -3
  219. package/README.md +39 -22
  220. package/as-test.config.json +40 -0
  221. package/assembly/custom/util.ts +24 -70
  222. package/assembly/deserialize/float.ts +181 -0
  223. package/assembly/deserialize/helpers/uint.ts +12 -0
  224. package/assembly/deserialize/index/arbitrary.ts +25 -0
  225. package/assembly/deserialize/index/array.ts +61 -0
  226. package/assembly/deserialize/index/bool.ts +1 -0
  227. package/assembly/deserialize/index/date.ts +1 -0
  228. package/assembly/deserialize/index/float.ts +1 -0
  229. package/assembly/deserialize/index/integer.ts +1 -0
  230. package/assembly/deserialize/index/map.ts +1 -0
  231. package/assembly/deserialize/index/object.ts +1 -0
  232. package/assembly/deserialize/index/raw.ts +1 -0
  233. package/assembly/deserialize/index/set.ts +1 -0
  234. package/assembly/deserialize/index/staticarray.ts +1 -0
  235. package/assembly/deserialize/index/string.ts +15 -0
  236. package/assembly/deserialize/index/struct.ts +1 -0
  237. package/assembly/deserialize/index/typedarray.ts +1 -0
  238. package/assembly/deserialize/index/unsigned.ts +1 -0
  239. package/assembly/deserialize/index.ts +14 -0
  240. package/assembly/deserialize/integer.ts +42 -0
  241. package/assembly/deserialize/simd/array/integer.ts +307 -0
  242. package/assembly/deserialize/simd/string.ts +129 -10
  243. package/assembly/deserialize/simple/arbitrary.ts +5 -12
  244. package/assembly/deserialize/simple/array/arbitrary.ts +12 -36
  245. package/assembly/deserialize/simple/array/array.ts +2 -8
  246. package/assembly/deserialize/simple/array/bool.ts +2 -8
  247. package/assembly/deserialize/simple/array/box.ts +2 -8
  248. package/assembly/deserialize/simple/array/float.ts +2 -8
  249. package/assembly/deserialize/simple/array/integer.ts +2 -8
  250. package/assembly/deserialize/simple/array/map.ts +6 -26
  251. package/assembly/deserialize/simple/array/object.ts +6 -26
  252. package/assembly/deserialize/simple/array/raw.ts +18 -61
  253. package/assembly/deserialize/simple/array/string.ts +5 -10
  254. package/assembly/deserialize/simple/array/struct.ts +6 -26
  255. package/assembly/deserialize/simple/array.ts +2 -5
  256. package/assembly/deserialize/simple/bool.ts +2 -6
  257. package/assembly/deserialize/simple/map.ts +29 -102
  258. package/assembly/deserialize/simple/object.ts +24 -81
  259. package/assembly/deserialize/simple/raw.ts +1 -4
  260. package/assembly/deserialize/simple/set.ts +11 -37
  261. package/assembly/deserialize/simple/staticarray/array.ts +1 -1
  262. package/assembly/deserialize/simple/staticarray/bool.ts +1 -1
  263. package/assembly/deserialize/simple/staticarray/float.ts +1 -1
  264. package/assembly/deserialize/simple/staticarray/integer.ts +1 -1
  265. package/assembly/deserialize/simple/staticarray/string.ts +7 -14
  266. package/assembly/deserialize/simple/staticarray/struct.ts +1 -1
  267. package/assembly/deserialize/simple/staticarray.ts +57 -21
  268. package/assembly/deserialize/simple/string.ts +2 -8
  269. package/assembly/deserialize/simple/struct.ts +25 -121
  270. package/assembly/deserialize/simple/typedarray.ts +94 -0
  271. package/assembly/deserialize/swar/array/arbitrary.ts +8 -0
  272. package/assembly/deserialize/swar/array/array.ts +39 -0
  273. package/assembly/deserialize/swar/array/bool.ts +47 -0
  274. package/assembly/deserialize/swar/array/box.ts +8 -0
  275. package/assembly/deserialize/swar/array/float.ts +39 -0
  276. package/assembly/deserialize/swar/array/integer.ts +461 -0
  277. package/assembly/deserialize/swar/array/map.ts +7 -0
  278. package/assembly/deserialize/swar/array/object.ts +44 -0
  279. package/assembly/deserialize/swar/array/raw.ts +8 -0
  280. package/assembly/deserialize/swar/array/shared.ts +96 -0
  281. package/assembly/deserialize/swar/array/string.ts +39 -0
  282. package/assembly/deserialize/swar/array/struct.ts +44 -0
  283. package/assembly/deserialize/swar/array.ts +49 -0
  284. package/assembly/deserialize/swar/string.ts +650 -14
  285. package/assembly/deserialize/unsigned.ts +75 -0
  286. package/assembly/index.d.ts +1 -3
  287. package/assembly/index.ts +251 -265
  288. package/assembly/serialize/index/arbitrary.ts +70 -0
  289. package/assembly/serialize/index/array.ts +1 -0
  290. package/assembly/serialize/index/bool.ts +1 -0
  291. package/assembly/serialize/index/date.ts +1 -0
  292. package/assembly/serialize/index/float.ts +1 -0
  293. package/assembly/serialize/index/integer.ts +1 -0
  294. package/assembly/serialize/index/map.ts +1 -0
  295. package/assembly/serialize/index/object.ts +46 -0
  296. package/assembly/serialize/index/raw.ts +1 -0
  297. package/assembly/serialize/index/set.ts +1 -0
  298. package/assembly/serialize/index/staticarray.ts +1 -0
  299. package/assembly/serialize/index/string.ts +15 -0
  300. package/assembly/serialize/index/struct.ts +1 -0
  301. package/assembly/serialize/index/typedarray.ts +1 -0
  302. package/assembly/serialize/index.ts +13 -0
  303. package/assembly/serialize/simd/string.ts +1 -2
  304. package/assembly/serialize/simple/raw.ts +1 -5
  305. package/assembly/serialize/simple/typedarray.ts +63 -0
  306. package/assembly/serialize/swar/string.ts +3 -10
  307. package/assembly/test.ts +21 -27
  308. package/assembly/util/concat.ts +1 -5
  309. package/assembly/util/index.ts +1 -0
  310. package/assembly/util/masks.ts +12 -18
  311. package/assembly/util/memory.ts +0 -0
  312. package/assembly/util/snp.ts +1 -4
  313. package/assembly/util/stringScan.ts +24 -0
  314. package/assembly/util/swar.ts +1 -6
  315. package/eslint.config.js +21 -13
  316. package/lib/as-bs.ts +69 -78
  317. package/package.json +8 -5
  318. package/test.ts +99 -0
  319. package/tools/assemblyscript-eslint-local.js +1 -24
  320. package/tools/assemblyscript-eslint.js +38 -14
  321. package/tools/assemblyscript-prettier-plugin.js +33 -0
  322. package/tools/replacer.js +63 -0
  323. package/transform/lib/builder.d.ts.map +1 -1
  324. package/transform/lib/builder.js +5 -13
  325. package/transform/lib/builder.js.map +1 -1
  326. package/transform/lib/index.d.ts.map +1 -1
  327. package/transform/lib/index.js +529 -735
  328. package/transform/lib/index.js.map +1 -1
  329. package/transform/lib/linkers/alias.d.ts.map +1 -1
  330. package/transform/lib/linkers/alias.js.map +1 -1
  331. package/transform/lib/linkers/custom.d.ts.map +1 -1
  332. package/transform/lib/linkers/custom.js +4 -9
  333. package/transform/lib/linkers/custom.js.map +1 -1
  334. package/transform/lib/linkers/imports.d.ts.map +1 -1
  335. package/transform/lib/linkers/imports.js.map +1 -1
  336. package/transform/lib/types.d.ts +4 -0
  337. package/transform/lib/types.d.ts.map +1 -1
  338. package/transform/lib/types.js +70 -21
  339. package/transform/lib/types.js.map +1 -1
  340. package/transform/lib/util.d.ts.map +1 -1
  341. package/transform/lib/util.js +1 -1
  342. package/transform/lib/util.js.map +1 -1
  343. package/transform/lib/visitor.d.ts.map +1 -1
  344. package/transform/lib/visitor.js +1 -2
  345. package/transform/lib/visitor.js.map +1 -1
  346. package/.prettierrc +0 -3
  347. package/assembly/deserialize/simple/float.ts +0 -11
  348. package/assembly/deserialize/simple/integer.ts +0 -9
@@ -0,0 +1,307 @@
1
+ import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../../custom/chars";
2
+ import { deserializeIntegerArray_SLOW } from "../../swar/array/integer";
3
+
4
+ const ASCII_LANE_MASK_4: u64 = 0x00ff00ff00ff00ff;
5
+ const ASCII_ZERO_4: u64 = 0x0030003000300030;
6
+
7
+
8
+ @lazy const SPLAT_30 = i16x8.splat(0x30);
9
+
10
+
11
+ @lazy const SPLAT_09 = i16x8.splat(9);
12
+
13
+
14
+ @lazy const ZERO_I16X8 = i16x8.splat(0);
15
+
16
+
17
+ @lazy const ZERO_I32X4 = i32x4.splat(0);
18
+
19
+
20
+ @lazy const PACK_WEIGHTS_10_1 = i8x16(10, 1, 10, 1, 10, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0);
21
+
22
+
23
+ @lazy const PAIR_WEIGHTS_100_1 = i16x8(100, 1, 100, 1, 0, 0, 0, 0);
24
+
25
+
26
+ @inline function pushSignedInteger<T extends number[]>(out: T, value: i64): void {
27
+ if (sizeof<valueof<T>>() == sizeof<i8>()) {
28
+ out.push(<valueof<T>>(<i8>value));
29
+ } else if (sizeof<valueof<T>>() == sizeof<i16>()) {
30
+ out.push(<valueof<T>>(<i16>value));
31
+ } else if (sizeof<valueof<T>>() == sizeof<i32>()) {
32
+ out.push(<valueof<T>>(<i32>value));
33
+ } else if (sizeof<valueof<T>>() == sizeof<isize>()) {
34
+ out.push(<valueof<T>>(<isize>value));
35
+ } else {
36
+ out.push(<valueof<T>>value);
37
+ }
38
+ }
39
+
40
+
41
+ @inline function pushUnsignedInteger<T extends number[]>(out: T, value: u64): void {
42
+ if (sizeof<valueof<T>>() == sizeof<u8>()) {
43
+ out.push(<valueof<T>>(<u8>value));
44
+ } else if (sizeof<valueof<T>>() == sizeof<u16>()) {
45
+ out.push(<valueof<T>>(<u16>value));
46
+ } else if (sizeof<valueof<T>>() == sizeof<u32>()) {
47
+ out.push(<valueof<T>>(<u32>value));
48
+ } else if (sizeof<valueof<T>>() == sizeof<usize>()) {
49
+ out.push(<valueof<T>>(<usize>value));
50
+ } else {
51
+ out.push(<valueof<T>>value);
52
+ }
53
+ }
54
+
55
+
56
+ @inline function storeSignedInteger<T extends number[]>(slot: usize, value: i64): void {
57
+ if (sizeof<valueof<T>>() == sizeof<i8>()) {
58
+ store<i8>(slot, <i8>value);
59
+ } else if (sizeof<valueof<T>>() == sizeof<i16>()) {
60
+ store<i16>(slot, <i16>value);
61
+ } else if (sizeof<valueof<T>>() == sizeof<i32>()) {
62
+ store<i32>(slot, <i32>value);
63
+ } else if (sizeof<valueof<T>>() == sizeof<isize>()) {
64
+ store<isize>(slot, <isize>value);
65
+ } else {
66
+ store<i64>(slot, value);
67
+ }
68
+ }
69
+
70
+
71
+ @inline function storeUnsignedInteger<T extends number[]>(slot: usize, value: u64): void {
72
+ if (sizeof<valueof<T>>() == sizeof<u8>()) {
73
+ store<u8>(slot, <u8>value);
74
+ } else if (sizeof<valueof<T>>() == sizeof<u16>()) {
75
+ store<u16>(slot, <u16>value);
76
+ } else if (sizeof<valueof<T>>() == sizeof<u32>()) {
77
+ store<u32>(slot, <u32>value);
78
+ } else if (sizeof<valueof<T>>() == sizeof<usize>()) {
79
+ store<usize>(slot, <usize>value);
80
+ } else {
81
+ store<u64>(slot, value);
82
+ }
83
+ }
84
+
85
+
86
+ @inline function tryParseEightDigitsSIMD(srcStart: usize, value: u64): u64 {
87
+ const block = load<v128>(srcStart);
88
+ const digits = i16x8.sub(block, SPLAT_30);
89
+ if (v128.any_true(i16x8.gt_u(digits, SPLAT_09))) return 0;
90
+
91
+ const packed = i8x16.narrow_i16x8_u(digits, ZERO_I16X8);
92
+ const products = i16x8.extmul_low_i8x16_u(packed, PACK_WEIGHTS_10_1);
93
+ const pairs = i32x4.extadd_pairwise_i16x8_u(products);
94
+ const pairs16 = i16x8.narrow_i32x4_u(pairs, ZERO_I32X4);
95
+ const groups = i32x4.dot_i16x8_s(pairs16, PAIR_WEIGHTS_100_1);
96
+
97
+ const lo = i32x4.extract_lane(groups, 0);
98
+ const hi = i32x4.extract_lane(groups, 1);
99
+ return value * 100000000 + (<u64>lo * 10000 + <u64>hi);
100
+ }
101
+
102
+
103
+ @inline function parseSignedIntegerSIMD<T extends number[]>(srcStart: usize, srcEnd: usize, out: T): usize {
104
+ let negative = false;
105
+ let code = load<u16>(srcStart);
106
+ if (code == 45) {
107
+ negative = true;
108
+ srcStart += 2;
109
+ if (srcStart >= srcEnd) return 0;
110
+ code = load<u16>(srcStart);
111
+ }
112
+
113
+ let digit = <u32>code - 48;
114
+ if (digit > 9) return 0;
115
+
116
+ let value: u64 = digit;
117
+ srcStart += 2;
118
+
119
+ while (srcStart + 14 < srcEnd) {
120
+ const next = tryParseEightDigitsSIMD(srcStart, value);
121
+ if (!next) break;
122
+ value = next;
123
+ srcStart += 16;
124
+ }
125
+
126
+ while (srcStart < srcEnd) {
127
+ digit = <u32>load<u16>(srcStart) - 48;
128
+ if (digit > 9) break;
129
+ value = value * 10 + digit;
130
+ srcStart += 2;
131
+ }
132
+
133
+ pushSignedInteger<T>(out, negative ? -(<i64>value) : <i64>value);
134
+ return srcStart;
135
+ }
136
+
137
+
138
+ @inline function parseUnsignedIntegerSIMD<T extends number[]>(srcStart: usize, srcEnd: usize, out: T): usize {
139
+ let digit = <u32>load<u16>(srcStart) - 48;
140
+ if (digit > 9) return 0;
141
+
142
+ let value: u64 = digit;
143
+ srcStart += 2;
144
+
145
+ while (srcStart + 14 < srcEnd) {
146
+ const next = tryParseEightDigitsSIMD(srcStart, value);
147
+ if (!next) break;
148
+ value = next;
149
+ srcStart += 16;
150
+ }
151
+
152
+ while (srcStart < srcEnd) {
153
+ digit = <u32>load<u16>(srcStart) - 48;
154
+ if (digit > 9) break;
155
+ value = value * 10 + digit;
156
+ srcStart += 2;
157
+ }
158
+
159
+ pushUnsignedInteger<T>(out, value);
160
+ return srcStart;
161
+ }
162
+
163
+ // @ts-ignore: Decorator valid here
164
+ export function deserializeIntegerArray_SIMD<T extends number[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
165
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
166
+ const originalSrcStart = srcStart;
167
+ const reusableLength = out.length;
168
+
169
+ if (reusableLength != 0) {
170
+ const dataStart = out.dataStart;
171
+ let index = 0;
172
+
173
+ do {
174
+ if (srcStart >= srcEnd || load<u16>(srcStart) != BRACKET_LEFT) break;
175
+ srcStart += 2;
176
+ if (srcStart >= srcEnd) break;
177
+ if (load<u16>(srcStart) == BRACKET_RIGHT) {
178
+ out.length = 0;
179
+ return out;
180
+ }
181
+
182
+ if (isSigned<valueof<T>>()) {
183
+ while (srcStart < srcEnd) {
184
+ let negative = false;
185
+ let code = load<u16>(srcStart);
186
+ if (code == 45) {
187
+ negative = true;
188
+ srcStart += 2;
189
+ if (srcStart >= srcEnd) break;
190
+ code = load<u16>(srcStart);
191
+ }
192
+
193
+ let digit = <u32>code - 48;
194
+ if (digit > 9) break;
195
+
196
+ let value: u64 = digit;
197
+ srcStart += 2;
198
+ while (srcStart + 14 < srcEnd) {
199
+ const next = tryParseEightDigitsSIMD(srcStart, value);
200
+ if (!next) break;
201
+ value = next;
202
+ srcStart += 16;
203
+ }
204
+ while (srcStart < srcEnd) {
205
+ digit = <u32>load<u16>(srcStart) - 48;
206
+ if (digit > 9) break;
207
+ value = value * 10 + digit;
208
+ srcStart += 2;
209
+ }
210
+
211
+ if (index >= reusableLength) break;
212
+ storeSignedInteger<T>(dataStart + <usize>index * sizeof<valueof<T>>(), negative ? -(<i64>value) : <i64>value);
213
+ index++;
214
+ if (srcStart >= srcEnd) break;
215
+
216
+ code = load<u16>(srcStart);
217
+ if (code == COMMA) {
218
+ srcStart += 2;
219
+ continue;
220
+ }
221
+ if (code == BRACKET_RIGHT) {
222
+ out.length = index;
223
+ return out;
224
+ }
225
+ break;
226
+ }
227
+ } else {
228
+ while (srcStart < srcEnd) {
229
+ let digit = <u32>load<u16>(srcStart) - 48;
230
+ if (digit > 9) break;
231
+
232
+ let value: u64 = digit;
233
+ srcStart += 2;
234
+ while (srcStart + 14 < srcEnd) {
235
+ const next = tryParseEightDigitsSIMD(srcStart, value);
236
+ if (!next) break;
237
+ value = next;
238
+ srcStart += 16;
239
+ }
240
+ while (srcStart < srcEnd) {
241
+ digit = <u32>load<u16>(srcStart) - 48;
242
+ if (digit > 9) break;
243
+ value = value * 10 + digit;
244
+ srcStart += 2;
245
+ }
246
+
247
+ if (index >= reusableLength) break;
248
+ storeUnsignedInteger<T>(dataStart + <usize>index * sizeof<valueof<T>>(), value);
249
+ index++;
250
+ if (srcStart >= srcEnd) break;
251
+
252
+ const code = load<u16>(srcStart);
253
+ if (code == COMMA) {
254
+ srcStart += 2;
255
+ continue;
256
+ }
257
+ if (code == BRACKET_RIGHT) {
258
+ out.length = index;
259
+ return out;
260
+ }
261
+ break;
262
+ }
263
+ }
264
+ } while (false);
265
+
266
+ srcStart = originalSrcStart;
267
+ }
268
+
269
+ out.length = 0;
270
+
271
+ do {
272
+ if (srcStart >= srcEnd || load<u16>(srcStart) != BRACKET_LEFT) break;
273
+ srcStart += 2;
274
+ if (srcStart >= srcEnd) break;
275
+ if (load<u16>(srcStart) == BRACKET_RIGHT) return out;
276
+
277
+ if (isSigned<valueof<T>>()) {
278
+ while (srcStart < srcEnd) {
279
+ srcStart = parseSignedIntegerSIMD<T>(srcStart, srcEnd, out);
280
+ if (!srcStart || srcStart >= srcEnd) break;
281
+
282
+ const code = load<u16>(srcStart);
283
+ if (code == COMMA) {
284
+ srcStart += 2;
285
+ continue;
286
+ }
287
+ if (code == BRACKET_RIGHT) return out;
288
+ break;
289
+ }
290
+ } else {
291
+ while (srcStart < srcEnd) {
292
+ srcStart = parseUnsignedIntegerSIMD<T>(srcStart, srcEnd, out);
293
+ if (!srcStart || srcStart >= srcEnd) break;
294
+
295
+ const code = load<u16>(srcStart);
296
+ if (code == COMMA) {
297
+ srcStart += 2;
298
+ continue;
299
+ }
300
+ if (code == BRACKET_RIGHT) return out;
301
+ break;
302
+ }
303
+ }
304
+ } while (false);
305
+
306
+ return deserializeIntegerArray_SLOW<T>(originalSrcStart, srcEnd, changetype<usize>(out));
307
+ }
@@ -1,13 +1,15 @@
1
1
  import { bs } from "../../../lib/as-bs";
2
+ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
3
+ import { QUOTE } from "../../custom/chars";
2
4
  import { BACK_SLASH } from "../../custom/chars";
3
- import {
4
- DESERIALIZE_ESCAPE_TABLE,
5
- ESCAPE_HEX_TABLE,
6
- } from "../../globals/tables";
5
+ import { DESERIALIZE_ESCAPE_TABLE, ESCAPE_HEX_TABLE } from "../../globals/tables";
7
6
  import { hex4_to_u16_swar } from "../../util/swar";
7
+ import { deserializeStringField_SWAR } from "../swar/string";
8
8
 
9
9
  // @ts-expect-error: @lazy is a valid decorator
10
10
  @lazy const SPLAT_5C = i16x8.splat(0x5c); // \
11
+ // @ts-expect-error: @lazy is a valid decorator
12
+ @lazy const SPLAT_22 = i16x8.splat(0x22); // "
11
13
 
12
14
  // Overflow Pattern for Unicode Escapes (READ)
13
15
  // \u0001 0 \u0001__| + 0
@@ -61,13 +63,48 @@ import { hex4_to_u16_swar } from "../../util/swar";
61
63
  * @param dst buffer to write to
62
64
  * @returns number of bytes written
63
65
  */
66
+ // @ts-expect-error: @inline is a valid decorator
67
+ @inline function copyStringFromSource_SIMD(srcStart: usize, byteLength: usize): string {
68
+ if (byteLength == 0) return changetype<string>("");
69
+ // @ts-expect-error: __new is a runtime builtin
70
+ const out = __new(byteLength, idof<string>());
71
+ memory.copy(out, srcStart, byteLength);
72
+ return changetype<string>(out);
73
+ }
74
+
75
+ // @ts-expect-error: @inline is a valid decorator
76
+ @inline function writeStringToField_SIMD(dstFieldPtr: usize, srcStart: usize, byteLength: u32): void {
77
+ if (byteLength == 0) {
78
+ store<usize>(dstFieldPtr, changetype<usize>(""));
79
+ return;
80
+ }
81
+
82
+ const current = load<usize>(dstFieldPtr);
83
+ 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);
89
+ } else {
90
+ stringPtr = __new(byteLength, idof<string>());
91
+ store<usize>(dstFieldPtr, stringPtr);
92
+ }
93
+ memory.copy(stringPtr, srcStart, byteLength);
94
+ }
95
+
64
96
  // todo: optimize and stuff. it works, its not pretty. ideally, i'd like this to be (nearly) branchless
65
- export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
66
- // Strip quotes
67
- srcStart += 2;
68
- srcEnd -= 2;
97
+ // @ts-expect-error: @inline is a valid decorator
98
+ @inline function deserializeEscapedString_SIMD(payloadStart: usize, escapeStart: usize, srcEnd: usize): string {
99
+ const prefixLen = <u32>(escapeStart - payloadStart);
100
+ let srcStart = escapeStart;
69
101
  const srcEnd16 = srcEnd - 16;
70
102
  bs.ensureSize(u32(srcEnd - srcStart));
103
+ bs.offset = bs.buffer;
104
+ if (prefixLen != 0) {
105
+ memory.copy(bs.buffer, payloadStart, prefixLen);
106
+ bs.offset += prefixLen;
107
+ }
71
108
 
72
109
  while (srcStart < srcEnd16) {
73
110
  const block = load<v128>(srcStart);
@@ -145,8 +182,7 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
145
182
  const code = load<u16>(srcStart);
146
183
  if (code !== 0x75) {
147
184
  // Short escapes (\n \t \" \\)
148
- const block = load<u16>(srcStart);
149
- const escape = load<u16>(DESERIALIZE_ESCAPE_TABLE + block);
185
+ const escape = load<u16>(DESERIALIZE_ESCAPE_TABLE + code);
150
186
  store<u16>(bs.offset, escape);
151
187
  srcStart += 2;
152
188
  } else {
@@ -161,3 +197,86 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
161
197
 
162
198
  return bs.out<string>();
163
199
  }
200
+
201
+ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
202
+ // Strip quotes
203
+ srcStart += 2;
204
+ srcEnd -= 2;
205
+ const payloadStart = srcStart;
206
+ const srcEnd16 = srcEnd - 16;
207
+
208
+ while (srcStart < srcEnd16) {
209
+ const block = load<v128>(srcStart);
210
+ const eq5C = i16x8.eq(block, SPLAT_5C);
211
+
212
+ if (!v128.any_true(eq5C)) {
213
+ srcStart += 16;
214
+ continue;
215
+ }
216
+
217
+ const laneIdx = usize(ctz(i16x8.bitmask(eq5C)) << 1);
218
+ return inline.always(deserializeEscapedString_SIMD(payloadStart, srcStart + laneIdx, srcEnd));
219
+ }
220
+
221
+ while (srcStart < srcEnd) {
222
+ if (load<u16>(srcStart) == BACK_SLASH) {
223
+ return inline.always(deserializeEscapedString_SIMD(payloadStart, srcStart, srcEnd));
224
+ }
225
+ srcStart += 2;
226
+ }
227
+
228
+ return copyStringFromSource_SIMD(payloadStart, srcEnd - payloadStart);
229
+ }
230
+
231
+ // @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 {
233
+ if (srcStart + 2 > srcEnd || load<u16>(srcStart) != QUOTE) abort("Expected leading quote");
234
+
235
+ const quotedStart = srcStart;
236
+ const payloadStart = srcStart + 2;
237
+ const srcEnd16 = srcEnd >= 16 ? srcEnd - 16 : 0;
238
+ srcStart = payloadStart;
239
+
240
+ while (srcStart <= srcEnd16) {
241
+ const block = load<v128>(srcStart);
242
+ let mask = i16x8.bitmask(v128.or(i16x8.eq(block, SPLAT_5C), i16x8.eq(block, SPLAT_22)));
243
+
244
+ if (mask == 0) {
245
+ srcStart += 16;
246
+ continue;
247
+ }
248
+
249
+ do {
250
+ const laneIdx = usize(ctz(mask) << 1);
251
+ mask &= mask - 1;
252
+ const srcIdx = srcStart + laneIdx;
253
+ const char = load<u16>(srcIdx);
254
+
255
+ if (char == QUOTE) {
256
+ writeStringToField_SIMD(dstFieldPtr, payloadStart, <u32>(srcIdx - payloadStart));
257
+ return srcIdx + 2;
258
+ }
259
+
260
+ if (char == BACK_SLASH) {
261
+ return deserializeStringField_SWAR<T>(quotedStart, srcEnd, dstFieldPtr);
262
+ }
263
+ } while (mask != 0);
264
+
265
+ srcStart += 16;
266
+ }
267
+
268
+ while (srcStart < srcEnd) {
269
+ const char = load<u16>(srcStart);
270
+ if (char == QUOTE) {
271
+ writeStringToField_SIMD(dstFieldPtr, payloadStart, <u32>(srcStart - payloadStart));
272
+ return srcStart + 2;
273
+ }
274
+ if (char == BACK_SLASH) {
275
+ return deserializeStringField_SWAR<T>(quotedStart, srcEnd, dstFieldPtr);
276
+ }
277
+ srcStart += 2;
278
+ }
279
+
280
+ abort("Unterminated string literal");
281
+ return srcStart;
282
+ }
@@ -1,27 +1,20 @@
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";
8
8
 
9
- export function deserializeArbitrary(
10
- srcStart: usize,
11
- srcEnd: usize,
12
- dst: usize,
13
- ): JSON.Value {
9
+ export function deserializeArbitrary(srcStart: usize, srcEnd: usize, dst: usize): JSON.Value {
14
10
  const firstChar = load<u16>(srcStart);
15
11
  if (firstChar == QUOTE) {
16
12
  return JSON.Value.from(deserializeString(srcStart, srcEnd));
17
- } else if (firstChar == BRACE_LEFT)
18
- return JSON.Value.from(deserializeObject(srcStart, srcEnd, 0));
19
- else if (firstChar - 48 <= 9 || firstChar == 45)
20
- return JSON.Value.from(deserializeFloat<f64>(srcStart, srcEnd));
13
+ } else if (firstChar == BRACE_LEFT) return JSON.Value.from(deserializeObject(srcStart, srcEnd, 0));
14
+ else if (firstChar - 48 <= 9 || firstChar == 45) return JSON.Value.from(deserializeFloat<f64>(srcStart, srcEnd));
21
15
  else if (firstChar == BRACKET_LEFT) {
22
16
  return JSON.Value.from(deserializeArray<JSON.Value[]>(srcStart, srcEnd, 0));
23
- } else if (firstChar == 116 || firstChar == 102)
24
- return JSON.Value.from(deserializeBoolean(srcStart, srcEnd));
17
+ } else if (firstChar == 116 || firstChar == 102) return JSON.Value.from(deserializeBoolean(srcStart, srcEnd));
25
18
  else if (firstChar == CHAR_N) {
26
19
  const value = JSON.Value.from<usize>(0);
27
20
  return value;
@@ -1,27 +1,10 @@
1
- import {
2
- BACK_SLASH,
3
- BRACE_LEFT,
4
- BRACE_RIGHT,
5
- BRACKET_LEFT,
6
- BRACKET_RIGHT,
7
- CHAR_F,
8
- CHAR_N,
9
- CHAR_T,
10
- COMMA,
11
- QUOTE,
12
- } from "../../../custom/chars";
1
+ import { BACK_SLASH, BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BRACKET_RIGHT, CHAR_F, CHAR_N, CHAR_T, COMMA, QUOTE } from "../../../custom/chars";
13
2
  import { JSON } from "../../../";
14
- import { isSpace } from "util/string";
3
+ import { isSpace, scanStringEnd } from "../../../util";
15
4
  import { ptrToStr } from "../../../util/ptrToStr";
16
5
 
17
- export function deserializeArbitraryArray(
18
- srcStart: usize,
19
- srcEnd: usize,
20
- dst: usize,
21
- ): JSON.Value[] {
22
- const out = changetype<JSON.Value[]>(
23
- dst || changetype<usize>(instantiate<JSON.Value[]>()),
24
- );
6
+ export function deserializeArbitraryArray(srcStart: usize, srcEnd: usize, dst: usize): JSON.Value[] {
7
+ const out = changetype<JSON.Value[]>(dst || changetype<usize>(instantiate<JSON.Value[]>()));
25
8
  let lastIndex: usize = 0;
26
9
  let depth: u32 = 0;
27
10
  // if (load<u16>(srcStart) != BRACKET_LEFT)
@@ -47,21 +30,11 @@ export function deserializeArbitraryArray(
47
30
  }
48
31
  } else if (code == QUOTE) {
49
32
  lastIndex = srcStart;
33
+ srcStart = scanStringEnd(srcStart, srcEnd);
34
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON array");
35
+ // @ts-ignore: exists
36
+ out.push(JSON.__deserialize<JSON.Value>(lastIndex, srcStart + 2));
50
37
  srcStart += 2;
51
- while (srcStart < srcEnd) {
52
- const code = load<u16>(srcStart);
53
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
54
- // while (isSpace(load<u16>((srcStart += 2)))) {
55
- // /* empty */
56
- // }
57
- // console.log("Value (string): " + ptrToStr(lastIndex, srcStart + 2));
58
- // @ts-ignore: exists
59
- out.push(JSON.__deserialize<JSON.Value>(lastIndex, srcStart + 2));
60
- srcStart += 2;
61
- break;
62
- }
63
- srcStart += 2;
64
- }
65
38
  // console.log("next: " + String.fromCharCode(load<u16>(srcStart)));
66
39
  } else if (code - 48 <= 9 || code == 45) {
67
40
  // console.log("trigger int")
@@ -103,7 +76,10 @@ export function deserializeArbitraryArray(
103
76
  srcStart += 2;
104
77
  while (srcStart < srcEnd) {
105
78
  const code = load<u16>(srcStart);
106
- if (code == BRACKET_RIGHT) {
79
+ if (code == QUOTE) {
80
+ srcStart = scanStringEnd(srcStart, srcEnd);
81
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON array");
82
+ } else if (code == BRACKET_RIGHT) {
107
83
  if (--depth == 0) {
108
84
  // @ts-ignore: type
109
85
  out.push(JSON.__deserialize<JSON.Value>(lastIndex, srcStart + 2));
@@ -1,14 +1,8 @@
1
1
  import { BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
2
2
  import { JSON } from "../../../";
3
3
 
4
- export function deserializeArrayArray<T extends unknown[][]>(
5
- srcStart: usize,
6
- srcEnd: usize,
7
- dst: usize,
8
- ): T {
9
- const out = changetype<nonnull<T>>(
10
- dst || changetype<usize>(instantiate<T>()),
11
- );
4
+ export function deserializeArrayArray<T extends unknown[][]>(srcStart: usize, srcEnd: usize, dst: usize): T {
5
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
12
6
  let lastIndex: usize = 0;
13
7
  let depth: u32 = 0;
14
8
  srcStart += 2;
@@ -1,11 +1,5 @@
1
- export function deserializeBooleanArray<T extends boolean[]>(
2
- srcStart: usize,
3
- srcEnd: usize,
4
- dst: usize,
5
- ): T {
6
- const out = changetype<nonnull<T>>(
7
- dst || changetype<usize>(instantiate<T>()),
8
- );
1
+ export function deserializeBooleanArray<T extends boolean[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
2
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
9
3
  srcStart += 2; // skip [
10
4
  while (srcStart < srcEnd) {
11
5
  const block = load<u64>(srcStart);
@@ -2,14 +2,8 @@ import { isSpace } from "../../../util";
2
2
  import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
3
  import { JSON } from "../../..";
4
4
 
5
- export function deserializeBoxArray<T extends JSON.Box<any>[]>(
6
- srcStart: usize,
7
- srcEnd: usize,
8
- dst: usize,
9
- ): T {
10
- const out = changetype<nonnull<T>>(
11
- dst || changetype<usize>(instantiate<T>()),
12
- );
5
+ export function deserializeBoxArray<T extends JSON.Box<any>[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
13
7
  if (isBoolean<valueof<T>>()) {
14
8
  srcStart += 2; // skip [
15
9
  while (srcStart < srcEnd) {
@@ -2,14 +2,8 @@ import { isSpace } from "../../../util";
2
2
  import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
3
  import { JSON } from "../../..";
4
4
 
5
- export function deserializeFloatArray<T extends number[]>(
6
- srcStart: usize,
7
- srcEnd: usize,
8
- dst: usize,
9
- ): T {
10
- const out = changetype<nonnull<T>>(
11
- dst || changetype<usize>(instantiate<T>()),
12
- );
5
+ export function deserializeFloatArray<T extends number[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
13
7
  let lastIndex: usize = 0;
14
8
  while (srcStart < srcEnd) {
15
9
  const code = load<u16>(srcStart);
@@ -1,14 +1,8 @@
1
1
  import { atoi, isSpace } from "../../../util";
2
2
  import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
3
 
4
- export function deserializeIntegerArray<T extends number[]>(
5
- srcStart: usize,
6
- srcEnd: usize,
7
- dst: usize,
8
- ): T {
9
- const out = changetype<nonnull<T>>(
10
- dst || changetype<usize>(instantiate<T>()),
11
- );
4
+ export function deserializeIntegerArray<T extends number[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
5
+ const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
12
6
  let lastIndex: usize = 0;
13
7
  while (srcStart < srcEnd) {
14
8
  const code = load<u16>(srcStart);