goscript 0.0.34 → 0.0.36

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 (358) hide show
  1. package/compiler/analysis.go +28 -20
  2. package/compiler/analysis_test.go +14 -0
  3. package/compiler/assignment.go +19 -7
  4. package/compiler/compiler.go +15 -99
  5. package/compiler/composite-lit.go +60 -17
  6. package/compiler/decl.go +1 -1
  7. package/compiler/expr-call.go +233 -35
  8. package/compiler/expr-selector.go +28 -2
  9. package/compiler/expr.go +13 -37
  10. package/compiler/lit.go +111 -2
  11. package/compiler/primitive.go +6 -6
  12. package/compiler/protobuf.go +0 -5
  13. package/compiler/sanitize.go +101 -0
  14. package/compiler/spec-struct.go +41 -8
  15. package/compiler/spec-value.go +29 -18
  16. package/compiler/stmt-assign.go +22 -1
  17. package/compiler/stmt.go +26 -9
  18. package/compiler/type.go +3 -3
  19. package/dist/gs/builtin/builtin.d.ts +3 -2
  20. package/dist/gs/builtin/builtin.js +2 -1
  21. package/dist/gs/builtin/builtin.js.map +1 -1
  22. package/dist/gs/builtin/map.js.map +1 -1
  23. package/dist/gs/builtin/slice.d.ts +7 -1
  24. package/dist/gs/builtin/slice.js +112 -22
  25. package/dist/gs/builtin/slice.js.map +1 -1
  26. package/dist/gs/github.com/pkg/errors/errors.d.ts +13 -0
  27. package/dist/gs/github.com/pkg/errors/errors.js +232 -0
  28. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -0
  29. package/dist/gs/github.com/pkg/errors/go113.d.ts +4 -0
  30. package/dist/gs/github.com/pkg/errors/go113.js +34 -0
  31. package/dist/gs/github.com/pkg/errors/go113.js.map +1 -0
  32. package/dist/gs/github.com/pkg/errors/index.d.ts +3 -0
  33. package/dist/gs/github.com/pkg/errors/index.js +4 -0
  34. package/dist/gs/github.com/pkg/errors/index.js.map +1 -0
  35. package/dist/gs/github.com/pkg/errors/stack.d.ts +32 -0
  36. package/dist/gs/github.com/pkg/errors/stack.js +111 -0
  37. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -0
  38. package/dist/gs/maps/index.d.ts +2 -2
  39. package/dist/gs/maps/index.js +2 -2
  40. package/dist/gs/maps/index.js.map +1 -1
  41. package/dist/gs/maps/iter.d.ts +7 -0
  42. package/dist/gs/maps/iter.js +57 -0
  43. package/dist/gs/maps/iter.js.map +1 -0
  44. package/dist/gs/maps/maps.d.ts +7 -0
  45. package/dist/gs/maps/maps.js +67 -0
  46. package/dist/gs/maps/maps.js.map +1 -0
  47. package/dist/gs/math/abs.gs.d.ts +1 -0
  48. package/dist/gs/math/abs.gs.js +10 -0
  49. package/dist/gs/math/abs.gs.js.map +1 -0
  50. package/dist/gs/math/acosh.gs.d.ts +2 -0
  51. package/dist/gs/math/acosh.gs.js +14 -0
  52. package/dist/gs/math/acosh.gs.js.map +1 -0
  53. package/dist/gs/math/asin.gs.d.ts +4 -0
  54. package/dist/gs/math/asin.gs.js +24 -0
  55. package/dist/gs/math/asin.gs.js.map +1 -0
  56. package/dist/gs/math/asinh.gs.d.ts +2 -0
  57. package/dist/gs/math/asinh.gs.js +14 -0
  58. package/dist/gs/math/asinh.gs.js.map +1 -0
  59. package/dist/gs/math/atan.gs.d.ts +4 -0
  60. package/dist/gs/math/atan.gs.js +22 -0
  61. package/dist/gs/math/atan.gs.js.map +1 -0
  62. package/dist/gs/math/atan2.gs.d.ts +2 -0
  63. package/dist/gs/math/atan2.gs.js +30 -0
  64. package/dist/gs/math/atan2.gs.js.map +1 -0
  65. package/dist/gs/math/atanh.gs.d.ts +2 -0
  66. package/dist/gs/math/atanh.gs.js +16 -0
  67. package/dist/gs/math/atanh.gs.js.map +1 -0
  68. package/dist/gs/math/bits.gs.d.ts +5 -0
  69. package/dist/gs/math/bits.gs.js +46 -0
  70. package/dist/gs/math/bits.gs.js.map +1 -0
  71. package/dist/gs/math/cbrt.gs.d.ts +2 -0
  72. package/dist/gs/math/cbrt.gs.js +14 -0
  73. package/dist/gs/math/cbrt.gs.js.map +1 -0
  74. package/dist/gs/math/const.gs.d.ts +30 -0
  75. package/dist/gs/math/const.gs.js +61 -0
  76. package/dist/gs/math/const.gs.js.map +1 -0
  77. package/dist/gs/math/copysign.gs.d.ts +1 -0
  78. package/dist/gs/math/copysign.gs.js +20 -0
  79. package/dist/gs/math/copysign.gs.js.map +1 -0
  80. package/dist/gs/math/dim.gs.d.ts +5 -0
  81. package/dist/gs/math/dim.gs.js +69 -0
  82. package/dist/gs/math/dim.gs.js.map +1 -0
  83. package/dist/gs/math/erf.gs.d.ts +4 -0
  84. package/dist/gs/math/erf.gs.js +336 -0
  85. package/dist/gs/math/erf.gs.js.map +1 -0
  86. package/dist/gs/math/erfinv.gs.d.ts +2 -0
  87. package/dist/gs/math/erfinv.gs.js +118 -0
  88. package/dist/gs/math/erfinv.gs.js.map +1 -0
  89. package/dist/gs/math/exp.gs.d.ts +5 -0
  90. package/dist/gs/math/exp.gs.js +30 -0
  91. package/dist/gs/math/exp.gs.js.map +1 -0
  92. package/dist/gs/math/expm1.gs.d.ts +2 -0
  93. package/dist/gs/math/expm1.gs.js +17 -0
  94. package/dist/gs/math/expm1.gs.js.map +1 -0
  95. package/dist/gs/math/floor.gs.d.ts +8 -0
  96. package/dist/gs/math/floor.gs.js +75 -0
  97. package/dist/gs/math/floor.gs.js.map +1 -0
  98. package/dist/gs/math/fma.gs.d.ts +1 -0
  99. package/dist/gs/math/fma.gs.js +8 -0
  100. package/dist/gs/math/fma.gs.js.map +1 -0
  101. package/dist/gs/math/frexp.gs.d.ts +2 -0
  102. package/dist/gs/math/frexp.gs.js +28 -0
  103. package/dist/gs/math/frexp.gs.js.map +1 -0
  104. package/dist/gs/math/gamma.gs.d.ts +3 -0
  105. package/dist/gs/math/gamma.gs.js +149 -0
  106. package/dist/gs/math/gamma.gs.js.map +1 -0
  107. package/dist/gs/math/hypot.gs.d.ts +2 -0
  108. package/dist/gs/math/hypot.gs.js +16 -0
  109. package/dist/gs/math/hypot.gs.js.map +1 -0
  110. package/dist/gs/math/index.d.ts +44 -0
  111. package/dist/gs/math/index.js +45 -0
  112. package/dist/gs/math/index.js.map +1 -0
  113. package/dist/gs/math/j0.gs.d.ts +4 -0
  114. package/dist/gs/math/j0.gs.js +228 -0
  115. package/dist/gs/math/j0.gs.js.map +1 -0
  116. package/dist/gs/math/j1.gs.d.ts +4 -0
  117. package/dist/gs/math/j1.gs.js +211 -0
  118. package/dist/gs/math/j1.gs.js.map +1 -0
  119. package/dist/gs/math/jn.gs.d.ts +2 -0
  120. package/dist/gs/math/jn.gs.js +412 -0
  121. package/dist/gs/math/jn.gs.js.map +1 -0
  122. package/dist/gs/math/ldexp.gs.d.ts +2 -0
  123. package/dist/gs/math/ldexp.gs.js +20 -0
  124. package/dist/gs/math/ldexp.gs.js.map +1 -0
  125. package/dist/gs/math/lgamma.gs.d.ts +2 -0
  126. package/dist/gs/math/lgamma.gs.js +243 -0
  127. package/dist/gs/math/lgamma.gs.js.map +1 -0
  128. package/dist/gs/math/log.gs.d.ts +2 -0
  129. package/dist/gs/math/log.gs.js +16 -0
  130. package/dist/gs/math/log.gs.js.map +1 -0
  131. package/dist/gs/math/log10.gs.d.ts +4 -0
  132. package/dist/gs/math/log10.gs.js +17 -0
  133. package/dist/gs/math/log10.gs.js.map +1 -0
  134. package/dist/gs/math/log1p.gs.d.ts +2 -0
  135. package/dist/gs/math/log1p.gs.js +17 -0
  136. package/dist/gs/math/log1p.gs.js.map +1 -0
  137. package/dist/gs/math/logb.gs.d.ts +3 -0
  138. package/dist/gs/math/logb.gs.js +43 -0
  139. package/dist/gs/math/logb.gs.js.map +1 -0
  140. package/dist/gs/math/mod.gs.d.ts +2 -0
  141. package/dist/gs/math/mod.gs.js +26 -0
  142. package/dist/gs/math/mod.gs.js.map +1 -0
  143. package/dist/gs/math/modf.gs.d.ts +2 -0
  144. package/dist/gs/math/modf.gs.js +24 -0
  145. package/dist/gs/math/modf.gs.js.map +1 -0
  146. package/dist/gs/math/nextafter.gs.d.ts +2 -0
  147. package/dist/gs/math/nextafter.gs.js +66 -0
  148. package/dist/gs/math/nextafter.gs.js.map +1 -0
  149. package/dist/gs/math/pow.gs.d.ts +3 -0
  150. package/dist/gs/math/pow.gs.js +40 -0
  151. package/dist/gs/math/pow.gs.js.map +1 -0
  152. package/dist/gs/math/pow10.gs.d.ts +1 -0
  153. package/dist/gs/math/pow10.gs.js +14 -0
  154. package/dist/gs/math/pow10.gs.js.map +1 -0
  155. package/dist/gs/math/remainder.gs.d.ts +2 -0
  156. package/dist/gs/math/remainder.gs.js +25 -0
  157. package/dist/gs/math/remainder.gs.js.map +1 -0
  158. package/dist/gs/math/signbit.gs.d.ts +1 -0
  159. package/dist/gs/math/signbit.gs.js +5 -0
  160. package/dist/gs/math/signbit.gs.js.map +1 -0
  161. package/dist/gs/math/sin.gs.d.ts +4 -0
  162. package/dist/gs/math/sin.gs.js +29 -0
  163. package/dist/gs/math/sin.gs.js.map +1 -0
  164. package/dist/gs/math/sincos.gs.d.ts +1 -0
  165. package/dist/gs/math/sincos.gs.js +11 -0
  166. package/dist/gs/math/sincos.gs.js.map +1 -0
  167. package/dist/gs/math/sinh.gs.d.ts +4 -0
  168. package/dist/gs/math/sinh.gs.js +27 -0
  169. package/dist/gs/math/sinh.gs.js.map +1 -0
  170. package/dist/gs/math/sqrt.gs.d.ts +2 -0
  171. package/dist/gs/math/sqrt.gs.js +15 -0
  172. package/dist/gs/math/sqrt.gs.js.map +1 -0
  173. package/dist/gs/math/tan.gs.d.ts +2 -0
  174. package/dist/gs/math/tan.gs.js +17 -0
  175. package/dist/gs/math/tan.gs.js.map +1 -0
  176. package/dist/gs/math/tanh.gs.d.ts +2 -0
  177. package/dist/gs/math/tanh.gs.js +17 -0
  178. package/dist/gs/math/tanh.gs.js.map +1 -0
  179. package/dist/gs/math/trig_reduce.gs.d.ts +1 -0
  180. package/dist/gs/math/trig_reduce.gs.js +62 -0
  181. package/dist/gs/math/trig_reduce.gs.js.map +1 -0
  182. package/dist/gs/math/unsafe.gs.d.ts +4 -0
  183. package/dist/gs/math/unsafe.gs.js +47 -0
  184. package/dist/gs/math/unsafe.gs.js.map +1 -0
  185. package/dist/gs/strconv/atob.gs.d.ts +4 -0
  186. package/dist/gs/strconv/atob.gs.js +42 -0
  187. package/dist/gs/strconv/atob.gs.js.map +1 -0
  188. package/dist/gs/strconv/atof.gs.d.ts +2 -0
  189. package/dist/gs/strconv/atof.gs.js +51 -0
  190. package/dist/gs/strconv/atof.gs.js.map +1 -0
  191. package/dist/gs/strconv/atoi.gs.d.ts +33 -0
  192. package/dist/gs/strconv/atoi.gs.js +200 -0
  193. package/dist/gs/strconv/atoi.gs.js.map +1 -0
  194. package/dist/gs/strconv/doc.gs.d.ts +1 -0
  195. package/dist/gs/strconv/doc.gs.js +2 -0
  196. package/dist/gs/strconv/doc.gs.js.map +1 -0
  197. package/dist/gs/strconv/ftoa.gs.d.ts +3 -0
  198. package/dist/gs/strconv/ftoa.gs.js +58 -0
  199. package/dist/gs/strconv/ftoa.gs.js.map +1 -0
  200. package/dist/gs/strconv/index.d.ts +6 -0
  201. package/dist/gs/strconv/index.js +7 -0
  202. package/dist/gs/strconv/index.js.map +1 -0
  203. package/dist/gs/strconv/itoa.gs.d.ts +6 -0
  204. package/dist/gs/strconv/itoa.gs.js +37 -0
  205. package/dist/gs/strconv/itoa.gs.js.map +1 -0
  206. package/dist/gs/strconv/quote.gs.d.ts +19 -0
  207. package/dist/gs/strconv/quote.gs.js +217 -0
  208. package/dist/gs/strconv/quote.gs.js.map +1 -0
  209. package/dist/gs/strings/index.d.ts +3 -0
  210. package/dist/gs/strings/index.js +4 -0
  211. package/dist/gs/strings/index.js.map +1 -1
  212. package/dist/gs/strings/replace.d.ts +0 -74
  213. package/dist/gs/strings/replace.js +6 -204
  214. package/dist/gs/strings/replace.js.map +1 -1
  215. package/dist/gs/strings/search.d.ts +0 -1
  216. package/dist/gs/strings/search.js +0 -21
  217. package/dist/gs/strings/search.js.map +1 -1
  218. package/dist/gs/sync/atomic/doc.gs.d.ts +28 -0
  219. package/dist/gs/sync/atomic/doc.gs.js +265 -0
  220. package/dist/gs/sync/atomic/doc.gs.js.map +1 -0
  221. package/dist/gs/sync/atomic/doc_64.gs.d.ts +15 -0
  222. package/dist/gs/sync/atomic/doc_64.gs.js +165 -0
  223. package/dist/gs/sync/atomic/doc_64.gs.js.map +1 -0
  224. package/dist/gs/sync/atomic/index.d.ts +4 -0
  225. package/dist/gs/sync/atomic/index.js +5 -0
  226. package/dist/gs/sync/atomic/index.js.map +1 -0
  227. package/dist/gs/sync/atomic/type.gs.d.ts +130 -0
  228. package/dist/gs/sync/atomic/type.gs.js +433 -0
  229. package/dist/gs/sync/atomic/type.gs.js.map +1 -0
  230. package/dist/gs/sync/atomic/value.gs.d.ts +19 -0
  231. package/dist/gs/sync/atomic/value.gs.js +116 -0
  232. package/dist/gs/sync/atomic/value.gs.js.map +1 -0
  233. package/dist/gs/unsafe/unsafe.d.ts +1 -0
  234. package/dist/gs/unsafe/unsafe.js +5 -0
  235. package/dist/gs/unsafe/unsafe.js.map +1 -1
  236. package/gs/builtin/builtin.ts +9 -7
  237. package/gs/builtin/map.ts +5 -1
  238. package/gs/builtin/slice.ts +152 -24
  239. package/gs/github.com/pkg/errors/errors.ts +307 -0
  240. package/gs/github.com/pkg/errors/go113.ts +39 -0
  241. package/gs/github.com/pkg/errors/index.ts +3 -0
  242. package/gs/github.com/pkg/errors/stack.ts +127 -0
  243. package/gs/maps/index.ts +2 -2
  244. package/gs/maps/iter.ts +67 -0
  245. package/gs/maps/maps.ts +89 -0
  246. package/gs/math/TODO.md +156 -0
  247. package/gs/math/abs.gs.test.ts +29 -0
  248. package/gs/math/abs.gs.ts +13 -0
  249. package/gs/math/acosh.gs.test.ts +39 -0
  250. package/gs/math/acosh.gs.ts +21 -0
  251. package/gs/math/asin.gs.test.ts +66 -0
  252. package/gs/math/asin.gs.ts +27 -0
  253. package/gs/math/asinh.gs.test.ts +37 -0
  254. package/gs/math/asinh.gs.ts +21 -0
  255. package/gs/math/atan.gs.test.ts +49 -0
  256. package/gs/math/atan.gs.ts +27 -0
  257. package/gs/math/atan2.gs.test.ts +55 -0
  258. package/gs/math/atan2.gs.ts +37 -0
  259. package/gs/math/atanh.gs.test.ts +47 -0
  260. package/gs/math/atanh.gs.ts +21 -0
  261. package/gs/math/bits.gs.test.ts +88 -0
  262. package/gs/math/bits.gs.ts +61 -0
  263. package/gs/math/cbrt.gs.test.ts +57 -0
  264. package/gs/math/cbrt.gs.ts +20 -0
  265. package/gs/math/const.gs.test.ts +54 -0
  266. package/gs/math/const.gs.ts +93 -0
  267. package/gs/math/copysign.gs.test.ts +44 -0
  268. package/gs/math/copysign.gs.ts +27 -0
  269. package/gs/math/dim.gs.test.ts +102 -0
  270. package/gs/math/dim.gs.ts +84 -0
  271. package/gs/math/erf.gs.test.ts +92 -0
  272. package/gs/math/erf.gs.ts +409 -0
  273. package/gs/math/erfinv.gs.test.ts +104 -0
  274. package/gs/math/erfinv.gs.ts +169 -0
  275. package/gs/math/exp.gs.test.ts +82 -0
  276. package/gs/math/exp.gs.ts +39 -0
  277. package/gs/math/expm1.gs.test.ts +48 -0
  278. package/gs/math/expm1.gs.ts +23 -0
  279. package/gs/math/floor.gs.test.ts +146 -0
  280. package/gs/math/floor.gs.ts +88 -0
  281. package/gs/math/fma.gs.test.ts +83 -0
  282. package/gs/math/fma.gs.ts +7 -0
  283. package/gs/math/frexp.gs.test.ts +146 -0
  284. package/gs/math/frexp.gs.ts +37 -0
  285. package/gs/math/gamma.gs.test.ts +66 -0
  286. package/gs/math/gamma.gs.ts +158 -0
  287. package/gs/math/hypot.gs.test.ts +73 -0
  288. package/gs/math/hypot.gs.ts +23 -0
  289. package/gs/math/index.ts +44 -0
  290. package/gs/math/j0.gs.test.ts +74 -0
  291. package/gs/math/j0.gs.ts +257 -0
  292. package/gs/math/j1.gs.test.ts +81 -0
  293. package/gs/math/j1.gs.ts +231 -0
  294. package/gs/math/jn.gs.test.ts +133 -0
  295. package/gs/math/jn.gs.ts +447 -0
  296. package/gs/math/ldexp.gs.test.ts +128 -0
  297. package/gs/math/ldexp.gs.ts +28 -0
  298. package/gs/math/lgamma.gs.test.ts +102 -0
  299. package/gs/math/lgamma.gs.ts +251 -0
  300. package/gs/math/log.gs.test.ts +40 -0
  301. package/gs/math/log.gs.ts +21 -0
  302. package/gs/math/log10.gs.test.ts +80 -0
  303. package/gs/math/log10.gs.ts +25 -0
  304. package/gs/math/log1p.gs.test.ts +55 -0
  305. package/gs/math/log1p.gs.ts +24 -0
  306. package/gs/math/logb.gs.test.ts +87 -0
  307. package/gs/math/logb.gs.ts +54 -0
  308. package/gs/math/mod.gs.test.ts +64 -0
  309. package/gs/math/mod.gs.ts +36 -0
  310. package/gs/math/modf.gs.test.ts +80 -0
  311. package/gs/math/modf.gs.ts +32 -0
  312. package/gs/math/nextafter.gs.test.ts +107 -0
  313. package/gs/math/nextafter.gs.ts +71 -0
  314. package/gs/math/pow.gs.test.ts +103 -0
  315. package/gs/math/pow.gs.ts +55 -0
  316. package/gs/math/pow10.gs.test.ts +58 -0
  317. package/gs/math/pow10.gs.ts +19 -0
  318. package/gs/math/remainder.gs.test.ts +70 -0
  319. package/gs/math/remainder.gs.ts +33 -0
  320. package/gs/math/signbit.gs.test.ts +33 -0
  321. package/gs/math/signbit.gs.ts +8 -0
  322. package/gs/math/sin.gs.test.ts +83 -0
  323. package/gs/math/sin.gs.ts +38 -0
  324. package/gs/math/sincos.gs.test.ts +91 -0
  325. package/gs/math/sincos.gs.ts +15 -0
  326. package/gs/math/sinh.gs.test.ts +66 -0
  327. package/gs/math/sinh.gs.ts +34 -0
  328. package/gs/math/sqrt.gs.test.ts +49 -0
  329. package/gs/math/sqrt.gs.ts +20 -0
  330. package/gs/math/tan.gs.test.ts +50 -0
  331. package/gs/math/tan.gs.ts +23 -0
  332. package/gs/math/tanh.gs.test.ts +52 -0
  333. package/gs/math/tanh.gs.ts +23 -0
  334. package/gs/math/trig_reduce.gs.ts +66 -0
  335. package/gs/math/unsafe.gs.ts +52 -0
  336. package/gs/strconv/atob.gs.ts +45 -0
  337. package/gs/strconv/atof.gs.ts +60 -0
  338. package/gs/strconv/atoi.gs.ts +243 -0
  339. package/gs/strconv/doc.gs.ts +2 -0
  340. package/gs/strconv/ftoa.gs.ts +66 -0
  341. package/gs/strconv/index.ts +6 -0
  342. package/gs/strconv/itoa.gs.ts +41 -0
  343. package/gs/strconv/quote.gs.ts +245 -0
  344. package/gs/strings/index.ts +4 -0
  345. package/gs/strings/replace.ts +9 -237
  346. package/gs/strings/search.ts +0 -28
  347. package/gs/sync/atomic/doc.gs.ts +276 -0
  348. package/gs/sync/atomic/doc_64.gs.ts +168 -0
  349. package/gs/sync/atomic/index.ts +4 -0
  350. package/gs/sync/atomic/type.gs.ts +596 -0
  351. package/gs/sync/atomic/value.gs.ts +158 -0
  352. package/gs/unsafe/unsafe.ts +6 -0
  353. package/package.json +1 -1
  354. package/gs/maps/iter.gs.ts +0 -71
  355. package/gs/maps/maps.gs.ts +0 -87
  356. package/gs/stringslite/godoc.txt +0 -17
  357. package/gs/stringslite/index.ts +0 -1
  358. package/gs/stringslite/strings.ts +0 -82
@@ -0,0 +1,245 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { ErrSyntax } from "./atoi.gs.js";
3
+
4
+ // Quote returns a double-quoted Go string literal representing s.
5
+ // The returned string uses Go escape sequences (\t, \n, \xFF, \u0100) for control characters and non-printable characters.
6
+ export function Quote(s: string): string {
7
+ return JSON.stringify(s);
8
+ }
9
+
10
+ // QuoteToASCII returns a double-quoted Go string literal representing s.
11
+ // The returned string uses Go escape sequences (\t, \n, \xFF, \u0100) for control characters and non-ASCII characters.
12
+ export function QuoteToASCII(s: string): string {
13
+ // For simplicity, use JSON.stringify and then escape non-ASCII
14
+ const quoted = JSON.stringify(s);
15
+ return quoted.replace(/[\u0080-\uFFFF]/g, (match) => {
16
+ const code = match.charCodeAt(0);
17
+ if (code <= 0xFF) {
18
+ return '\\x' + code.toString(16).padStart(2, '0');
19
+ } else {
20
+ return '\\u' + code.toString(16).padStart(4, '0');
21
+ }
22
+ });
23
+ }
24
+
25
+ // QuoteToGraphic returns a double-quoted Go string literal representing s.
26
+ // The returned string leaves Unicode graphic characters unchanged.
27
+ export function QuoteToGraphic(s: string): string {
28
+ return Quote(s); // Simplified
29
+ }
30
+
31
+ // QuoteRune returns a single-quoted Go character literal representing the rune.
32
+ export function QuoteRune(r: number): string {
33
+ const char = String.fromCharCode(r);
34
+ if (r === 39) { // single quote
35
+ return "'\\'";
36
+ }
37
+ if (r === 92) { // backslash
38
+ return "'\\\\'";
39
+ }
40
+ if (r >= 32 && r <= 126) { // printable ASCII
41
+ return "'" + char + "'";
42
+ }
43
+ // Use escape sequences for non-printable
44
+ if (r <= 0xFF) {
45
+ return "'\\x" + r.toString(16).padStart(2, '0') + "'";
46
+ }
47
+ return "'\\u" + r.toString(16).padStart(4, '0') + "'";
48
+ }
49
+
50
+ // QuoteRuneToASCII returns a single-quoted Go character literal representing the rune.
51
+ export function QuoteRuneToASCII(r: number): string {
52
+ return QuoteRune(r); // Same as QuoteRune for simplicity
53
+ }
54
+
55
+ // QuoteRuneToGraphic returns a single-quoted Go character literal representing the rune.
56
+ export function QuoteRuneToGraphic(r: number): string {
57
+ return QuoteRune(r); // Same as QuoteRune for simplicity
58
+ }
59
+
60
+ // CanBackquote reports whether the string s can be represented unchanged as a single-line backquoted string.
61
+ export function CanBackquote(s: string): boolean {
62
+ // Check if string contains backticks or control characters
63
+ for (let i = 0; i < s.length; i++) {
64
+ const c = s.charCodeAt(i);
65
+ if (c === 96 || c < 32 || c === 127) { // backtick or control character
66
+ return false;
67
+ }
68
+ }
69
+ return true;
70
+ }
71
+
72
+ // Unquote interprets s as a single-quoted, double-quoted, or backquoted Go string literal.
73
+ export function Unquote(s: string): [string, $.GoError] {
74
+ const n = s.length;
75
+ if (n < 2) {
76
+ return ["", ErrSyntax];
77
+ }
78
+
79
+ const quote = s[0];
80
+ if (quote !== s[n-1]) {
81
+ return ["", ErrSyntax];
82
+ }
83
+
84
+ s = s.slice(1, n-1);
85
+
86
+ if (quote === '`') {
87
+ // Backquoted string - no escapes processed
88
+ if (s.includes('`')) {
89
+ return ["", ErrSyntax];
90
+ }
91
+ if (s.includes('\r')) {
92
+ return ["", ErrSyntax];
93
+ }
94
+ return [s, null];
95
+ }
96
+
97
+ if (quote !== '"' && quote !== "'") {
98
+ return ["", ErrSyntax];
99
+ }
100
+
101
+ // Use JSON.parse for double-quoted strings as a starting point
102
+ if (quote === '"') {
103
+ try {
104
+ const result = JSON.parse('"' + s + '"');
105
+ return [result, null];
106
+ } catch {
107
+ return ["", ErrSyntax];
108
+ }
109
+ }
110
+
111
+ // Single-quoted string - should contain single rune
112
+ if (quote === "'") {
113
+ // Simplified: just handle basic cases
114
+ if (s.length === 1) {
115
+ return [s, null];
116
+ }
117
+ if (s.length === 2 && s[0] === '\\') {
118
+ switch (s[1]) {
119
+ case 'n': return ['\n', null];
120
+ case 't': return ['\t', null];
121
+ case 'r': return ['\r', null];
122
+ case '\\': return ['\\', null];
123
+ case "'": return ["'", null];
124
+ default: return ["", ErrSyntax];
125
+ }
126
+ }
127
+ return ["", ErrSyntax];
128
+ }
129
+
130
+ return ["", ErrSyntax];
131
+ }
132
+
133
+ // UnquoteChar decodes the first character or byte in the escaped string or character literal represented by the string s.
134
+ export function UnquoteChar(s: string, quote: number): [number, boolean, string, $.GoError] {
135
+ // Simplified implementation
136
+ if (s.length === 0) {
137
+ return [0, false, "", ErrSyntax];
138
+ }
139
+
140
+ const c = s.charCodeAt(0);
141
+ if (c === quote) {
142
+ return [0, false, "", ErrSyntax];
143
+ }
144
+
145
+ if (c !== 92) { // not backslash
146
+ return [c, c >= 128, s.slice(1), null];
147
+ }
148
+
149
+ // Handle escape sequence - simplified
150
+ if (s.length < 2) {
151
+ return [0, false, "", ErrSyntax];
152
+ }
153
+
154
+ switch (s[1]) {
155
+ case 'n': return [10, false, s.slice(2), null]; // \n
156
+ case 't': return [9, false, s.slice(2), null]; // \t
157
+ case 'r': return [13, false, s.slice(2), null]; // \r
158
+ case '\\': return [92, false, s.slice(2), null]; // \\
159
+ case '"': return [34, false, s.slice(2), null]; // \"
160
+ case "'": return [39, false, s.slice(2), null]; // \'
161
+ default: return [0, false, "", ErrSyntax];
162
+ }
163
+ }
164
+
165
+ // QuotedPrefix returns the quoted string (as understood by Unquote) at the prefix of s.
166
+ export function QuotedPrefix(s: string): [string, $.GoError] {
167
+ if (s.length === 0) {
168
+ return ["", ErrSyntax];
169
+ }
170
+
171
+ const quote = s[0];
172
+ if (quote !== '"' && quote !== "'" && quote !== '`') {
173
+ return ["", ErrSyntax];
174
+ }
175
+
176
+ // Find matching quote
177
+ for (let i = 1; i < s.length; i++) {
178
+ if (s[i] === quote) {
179
+ if (quote === '`') {
180
+ return [s.slice(0, i+1), null];
181
+ }
182
+ // For " and ', need to handle escapes
183
+ let escaped = false;
184
+ for (let j = 1; j < i; j++) {
185
+ if (s[j] === '\\' && !escaped) {
186
+ escaped = true;
187
+ } else {
188
+ escaped = false;
189
+ }
190
+ }
191
+ if (!escaped || s[i-1] !== '\\') {
192
+ return [s.slice(0, i+1), null];
193
+ }
194
+ }
195
+ }
196
+
197
+ return ["", ErrSyntax];
198
+ }
199
+
200
+ // AppendQuote appends a double-quoted Go string literal representing s to dst and returns the extended buffer.
201
+ export function AppendQuote(dst: $.Bytes, s: string): $.Bytes {
202
+ const quoted = Quote(s);
203
+ return $.append(dst, ...$.stringToBytes(quoted)!);
204
+ }
205
+
206
+ // AppendQuoteToASCII appends a double-quoted Go string literal representing s to dst and returns the extended buffer.
207
+ export function AppendQuoteToASCII(dst: $.Bytes, s: string): $.Bytes {
208
+ const quoted = QuoteToASCII(s);
209
+ return $.append(dst, ...$.stringToBytes(quoted)!);
210
+ }
211
+
212
+ // AppendQuoteToGraphic appends a double-quoted Go string literal representing s to dst and returns the extended buffer.
213
+ export function AppendQuoteToGraphic(dst: $.Bytes, s: string): $.Bytes {
214
+ const quoted = QuoteToGraphic(s);
215
+ return $.append(dst, ...$.stringToBytes(quoted)!);
216
+ }
217
+
218
+ // AppendQuoteRune appends a single-quoted Go character literal representing the rune to dst and returns the extended buffer.
219
+ export function AppendQuoteRune(dst: $.Bytes, r: number): $.Bytes {
220
+ const quoted = QuoteRune(r);
221
+ return $.append(dst, ...$.stringToBytes(quoted)!);
222
+ }
223
+
224
+ // AppendQuoteRuneToASCII appends a single-quoted Go character literal representing the rune to dst and returns the extended buffer.
225
+ export function AppendQuoteRuneToASCII(dst: $.Bytes, r: number): $.Bytes {
226
+ const quoted = QuoteRuneToASCII(r);
227
+ return $.append(dst, ...$.stringToBytes(quoted)!);
228
+ }
229
+
230
+ // AppendQuoteRuneToGraphic appends a single-quoted Go character literal representing the rune to dst and returns the extended buffer.
231
+ export function AppendQuoteRuneToGraphic(dst: $.Bytes, r: number): $.Bytes {
232
+ const quoted = QuoteRuneToGraphic(r);
233
+ return $.append(dst, ...$.stringToBytes(quoted)!);
234
+ }
235
+
236
+ // IsPrint reports whether the rune is defined as printable by Go.
237
+ export function IsPrint(r: number): boolean {
238
+ // Simplified: consider ASCII printable characters
239
+ return r >= 32 && r <= 126;
240
+ }
241
+
242
+ // IsGraphic reports whether the rune is defined as a Graphic by Unicode.
243
+ export function IsGraphic(r: number): boolean {
244
+ return IsPrint(r); // Simplified
245
+ }
@@ -1,2 +1,6 @@
1
1
  export * from './builder.js'
2
2
  export * from './strings.js'
3
+ export * from './reader.js'
4
+ export { Replacer, NewReplacer } from './replace.js'
5
+ export { Lines, FieldsSeq, FieldsFuncSeq, SplitSeq, SplitAfterSeq } from './iter.js'
6
+ // Clone and Compare are already exported from strings.js, so we don't re-export them
@@ -435,40 +435,7 @@ class trieNode {
435
435
  }
436
436
  }
437
437
 
438
- // Register this type with the runtime type system
439
- static __typeInfo = $.registerStructType(
440
- 'trieNode',
441
- new trieNode(),
442
- [
443
- {
444
- name: 'add',
445
- args: [
446
- { name: 'key', type: { kind: $.TypeKind.Basic, name: 'string' } },
447
- { name: 'val', type: { kind: $.TypeKind.Basic, name: 'string' } },
448
- {
449
- name: 'priority',
450
- type: { kind: $.TypeKind.Basic, name: 'number' },
451
- },
452
- {
453
- name: 'r',
454
- type: { kind: $.TypeKind.Pointer, elemType: 'genericReplacer' },
455
- },
456
- ],
457
- returns: [],
458
- },
459
- ],
460
- trieNode,
461
- {
462
- value: { kind: $.TypeKind.Basic, name: 'string' },
463
- priority: { kind: $.TypeKind.Basic, name: 'number' },
464
- prefix: { kind: $.TypeKind.Basic, name: 'string' },
465
- next: { kind: $.TypeKind.Pointer, elemType: 'trieNode' },
466
- table: {
467
- kind: $.TypeKind.Slice,
468
- elemType: { kind: $.TypeKind.Pointer, elemType: 'trieNode' },
469
- },
470
- },
471
- )
438
+
472
439
  }
473
440
 
474
441
  class genericReplacer {
@@ -656,72 +623,9 @@ class genericReplacer {
656
623
  }
657
624
  return [n, err]
658
625
  }
659
-
660
- // Register this type with the runtime type system
661
- static __typeInfo = $.registerStructType(
662
- 'genericReplacer',
663
- new genericReplacer(),
664
- [
665
- {
666
- name: 'lookup',
667
- args: [
668
- { name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } },
669
- {
670
- name: 'ignoreRoot',
671
- type: { kind: $.TypeKind.Basic, name: 'boolean' },
672
- },
673
- ],
674
- returns: [
675
- { type: { kind: $.TypeKind.Basic, name: 'string' } },
676
- { type: { kind: $.TypeKind.Basic, name: 'number' } },
677
- { type: { kind: $.TypeKind.Basic, name: 'boolean' } },
678
- ],
679
- },
680
- {
681
- name: 'Replace',
682
- args: [{ name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } }],
683
- returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
684
- },
685
- {
686
- name: 'WriteString',
687
- args: [
688
- { name: 'w', type: 'Writer' },
689
- { name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } },
690
- ],
691
- returns: [
692
- { type: { kind: $.TypeKind.Basic, name: 'number' } },
693
- {
694
- type: {
695
- kind: $.TypeKind.Interface,
696
- name: 'GoError',
697
- methods: [
698
- {
699
- name: 'Error',
700
- args: [],
701
- returns: [
702
- { type: { kind: $.TypeKind.Basic, name: 'string' } },
703
- ],
704
- },
705
- ],
706
- },
707
- },
708
- ],
709
- },
710
- ],
711
- genericReplacer,
712
- {
713
- root: 'trieNode',
714
- tableSize: { kind: $.TypeKind.Basic, name: 'number' },
715
- mapping: {
716
- kind: $.TypeKind.Array,
717
- length: 256,
718
- elemType: { kind: $.TypeKind.Basic, name: 'number' },
719
- },
720
- },
721
- )
722
626
  }
723
627
 
724
- export function makeGenericReplacer(
628
+ function makeGenericReplacer(
725
629
  oldnew: $.Slice<string>,
726
630
  ): genericReplacer | null {
727
631
  let r = new genericReplacer()
@@ -773,65 +677,25 @@ class stringWriter {
773
677
  w: $.VarRef<io.Writer>
774
678
  }
775
679
 
776
- constructor(init?: Partial<{ w?: io.Writer }>) {
680
+ constructor(w: io.Writer) {
777
681
  this._fields = {
778
- w: $.varRef(init!.w!),
682
+ w: $.varRef(w),
779
683
  }
780
684
  }
781
685
 
782
- public clone(): stringWriter {
783
- const cloned = new stringWriter()
784
- cloned._fields = {
785
- w: $.varRef(this._fields.w.value),
786
- }
787
- return cloned
788
- }
789
-
790
686
  public WriteString(s: string): [number, $.GoError] {
791
687
  const w = this
792
688
  return w.w!.Write($.stringToBytes(s))
793
689
  }
794
-
795
- // Register this type with the runtime type system
796
- static __typeInfo = $.registerStructType(
797
- 'stringWriter',
798
- new stringWriter(),
799
- [
800
- {
801
- name: 'WriteString',
802
- args: [{ name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } }],
803
- returns: [
804
- { type: { kind: $.TypeKind.Basic, name: 'number' } },
805
- {
806
- type: {
807
- kind: $.TypeKind.Interface,
808
- name: 'GoError',
809
- methods: [
810
- {
811
- name: 'Error',
812
- args: [],
813
- returns: [
814
- { type: { kind: $.TypeKind.Basic, name: 'string' } },
815
- ],
816
- },
817
- ],
818
- },
819
- },
820
- ],
821
- },
822
- ],
823
- stringWriter,
824
- { w: 'Writer' },
825
- )
826
690
  }
827
691
 
828
- export function getStringWriter(w: io.Writer): io.StringWriter {
692
+ function getStringWriter(w: io.Writer): io.StringWriter {
829
693
  let { value: sw, ok: ok } = $.typeAssert<io.StringWriter>(
830
694
  w,
831
695
  'io.StringWriter',
832
696
  )
833
697
  if (!ok) {
834
- sw = new stringWriter({ w: w })
698
+ sw = new stringWriter(w)
835
699
  }
836
700
  return sw
837
701
  }
@@ -926,51 +790,10 @@ class singleStringReplacer {
926
790
  return [n, err]
927
791
  }
928
792
 
929
- // Register this type with the runtime type system
930
- static __typeInfo = $.registerStructType(
931
- 'singleStringReplacer',
932
- new singleStringReplacer(),
933
- [
934
- {
935
- name: 'Replace',
936
- args: [{ name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } }],
937
- returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
938
- },
939
- {
940
- name: 'WriteString',
941
- args: [
942
- { name: 'w', type: 'Writer' },
943
- { name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } },
944
- ],
945
- returns: [
946
- { type: { kind: $.TypeKind.Basic, name: 'number' } },
947
- {
948
- type: {
949
- kind: $.TypeKind.Interface,
950
- name: 'GoError',
951
- methods: [
952
- {
953
- name: 'Error',
954
- args: [],
955
- returns: [
956
- { type: { kind: $.TypeKind.Basic, name: 'string' } },
957
- ],
958
- },
959
- ],
960
- },
961
- },
962
- ],
963
- },
964
- ],
965
- singleStringReplacer,
966
- {
967
- finder: { kind: $.TypeKind.Pointer, elemType: 'stringFinder' },
968
- value: { kind: $.TypeKind.Basic, name: 'string' },
969
- },
970
- )
793
+
971
794
  }
972
795
 
973
- export function makeSingleStringReplacer(
796
+ function makeSingleStringReplacer(
974
797
  pattern: string,
975
798
  value: string,
976
799
  ): singleStringReplacer | null {
@@ -1243,58 +1066,7 @@ class byteStringReplacer {
1243
1066
  return [n, err]
1244
1067
  }
1245
1068
 
1246
- // Register this type with the runtime type system
1247
- static __typeInfo = $.registerStructType(
1248
- 'byteStringReplacer',
1249
- new byteStringReplacer(),
1250
- [
1251
- {
1252
- name: 'Replace',
1253
- args: [{ name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } }],
1254
- returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
1255
- },
1256
- {
1257
- name: 'WriteString',
1258
- args: [
1259
- { name: 'w', type: 'Writer' },
1260
- { name: 's', type: { kind: $.TypeKind.Basic, name: 'string' } },
1261
- ],
1262
- returns: [
1263
- { type: { kind: $.TypeKind.Basic, name: 'number' } },
1264
- {
1265
- type: {
1266
- kind: $.TypeKind.Interface,
1267
- name: 'GoError',
1268
- methods: [
1269
- {
1270
- name: 'Error',
1271
- args: [],
1272
- returns: [
1273
- { type: { kind: $.TypeKind.Basic, name: 'string' } },
1274
- ],
1275
- },
1276
- ],
1277
- },
1278
- },
1279
- ],
1280
- },
1281
- ],
1282
- byteStringReplacer,
1283
- {
1284
- replacements: {
1285
- kind: $.TypeKind.Array,
1286
- length: 256,
1287
- elemType: {
1288
- kind: $.TypeKind.Slice,
1289
- elemType: { kind: $.TypeKind.Basic, name: 'number' },
1290
- },
1291
- },
1292
- toReplace: {
1293
- kind: $.TypeKind.Slice,
1294
- elemType: { kind: $.TypeKind.Basic, name: 'string' },
1295
- },
1296
- },
1297
- )
1069
+
1298
1070
  }
1299
1071
 
1300
1072
  // Helper function to copy bytes
@@ -111,34 +111,6 @@ export class stringFinder {
111
111
  }
112
112
  return -1
113
113
  }
114
-
115
- // Register this type with the runtime type system
116
- static __typeInfo = $.registerStructType(
117
- 'stringFinder',
118
- new stringFinder(),
119
- [
120
- {
121
- name: 'next',
122
- args: [
123
- { name: 'text', type: { kind: $.TypeKind.Basic, name: 'string' } },
124
- ],
125
- returns: [{ type: { kind: $.TypeKind.Basic, name: 'number' } }],
126
- },
127
- ],
128
- stringFinder,
129
- {
130
- pattern: { kind: $.TypeKind.Basic, name: 'string' },
131
- badCharSkip: {
132
- kind: $.TypeKind.Array,
133
- length: 256,
134
- elemType: { kind: $.TypeKind.Basic, name: 'number' },
135
- },
136
- goodSuffixSkip: {
137
- kind: $.TypeKind.Slice,
138
- elemType: { kind: $.TypeKind.Basic, name: 'number' },
139
- },
140
- },
141
- )
142
114
  }
143
115
 
144
116
  export function makeStringFinder(pattern: string): stringFinder | null {