gofront 1.8.0 → 1.9.1

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 (178) hide show
  1. package/README.md +3 -3
  2. package/package.json +6 -5
  3. package/src/backend/js/expressions.js +1157 -408
  4. package/src/backend/js/index.js +327 -153
  5. package/src/backend/js/natives.js +383 -0
  6. package/src/backend/js/runtime.js +559 -2552
  7. package/src/backend/js/statements.js +670 -158
  8. package/src/backend/js/stdlib/index.js +45 -93
  9. package/src/backend/js/templ.js +32 -45
  10. package/src/backend/js/type-info.js +298 -19
  11. package/src/backend/shared/fixed-float.js +20 -0
  12. package/src/backend/shared/fmt-types.js +91 -170
  13. package/src/backend/shared/host-unicode.js +36 -0
  14. package/src/backend/wasm/boundary.js +490 -965
  15. package/src/backend/wasm/emit-builtins.js +884 -256
  16. package/src/backend/wasm/emit-exprs.js +185 -77
  17. package/src/backend/wasm/emit-maps.js +17 -367
  18. package/src/backend/wasm/emit-shared.js +4 -1
  19. package/src/backend/wasm/emit-stmts.js +524 -240
  20. package/src/backend/wasm/emit.js +176 -38
  21. package/src/backend/wasm/globals.js +48 -8
  22. package/src/backend/wasm/glue.js +2 -4
  23. package/src/backend/wasm/index.js +44 -530
  24. package/src/backend/wasm/method-expr.js +12 -1
  25. package/src/backend/wasm/module-emitter.js +299 -770
  26. package/src/backend/wasm/monomorph.js +139 -8
  27. package/src/backend/wasm/natives.js +600 -0
  28. package/src/backend/wasm/prescan.js +5 -153
  29. package/src/backend/wasm/prune-funcs.js +89 -0
  30. package/src/backend/wasm/stdlib/index.js +2 -32
  31. package/src/backend/wasm/types.js +97 -20
  32. package/src/backend/wasm/variadic.js +9 -4
  33. package/src/cli/cli-core.js +5 -1
  34. package/src/cli/test-runner.js +115 -342
  35. package/src/compiler.js +113 -130
  36. package/src/lexer/lexer.js +106 -11
  37. package/src/lexer/templ-lexer.js +61 -18
  38. package/src/lexer/tokens.js +1 -0
  39. package/src/link/stdlib.js +355 -132
  40. package/src/link/type-names.js +204 -0
  41. package/src/link/wasm.js +30 -6
  42. package/src/lower/bounds.js +153 -0
  43. package/src/lower/captures.js +92 -33
  44. package/src/lower/embedding.js +62 -5
  45. package/src/lower/errors-as.js +196 -0
  46. package/src/lower/fmt-formatters.js +929 -0
  47. package/src/lower/functions.js +225 -7
  48. package/src/lower/gen-types.js +293 -0
  49. package/src/lower/index.js +14 -2
  50. package/src/lower/json-codecs.js +334 -245
  51. package/src/lower/ownership.js +25 -7
  52. package/src/lower/reachability.js +69 -51
  53. package/src/lower/walk.js +12 -0
  54. package/src/parser/declarations.js +30 -5
  55. package/src/parser/expressions.js +111 -57
  56. package/src/parser/statements.js +108 -0
  57. package/src/parser/templ.js +44 -5
  58. package/src/parser/types.js +12 -0
  59. package/src/resolver.js +1 -2
  60. package/src/typechecker/assignability.js +214 -19
  61. package/src/typechecker/const-fold.js +70 -27
  62. package/src/typechecker/constants.js +156 -8
  63. package/src/typechecker/expressions.js +490 -108
  64. package/src/typechecker/index.js +346 -42
  65. package/src/typechecker/init-order.js +136 -40
  66. package/src/typechecker/operand-text.js +41 -0
  67. package/src/typechecker/resolve.js +490 -65
  68. package/src/typechecker/statements.js +288 -27
  69. package/src/typechecker/stdlib/excluded.js +9 -5
  70. package/src/typechecker/stdlib/index.js +25 -9
  71. package/src/typechecker/termination.js +10 -1
  72. package/src/typechecker/types.js +287 -575
  73. package/stdlib/bytes/buffer.go +479 -0
  74. package/stdlib/bytes/bytes.go +1010 -0
  75. package/stdlib/bytes/reader.go +161 -0
  76. package/stdlib/context/context.go +115 -0
  77. package/stdlib/crypto/rand/rand.go +34 -0
  78. package/stdlib/crypto/sha256/sha256.go +249 -0
  79. package/stdlib/encoding/base64/base64.go +331 -0
  80. package/stdlib/encoding/binary/binary.go +332 -0
  81. package/stdlib/encoding/hex/hex.go +140 -0
  82. package/stdlib/encoding/json/json.go +62 -0
  83. package/stdlib/errors/errors.go +174 -0
  84. package/stdlib/fmt/errors.go +110 -0
  85. package/stdlib/fmt/format.go +732 -0
  86. package/stdlib/fmt/print.go +1232 -0
  87. package/stdlib/gom/gom.go +293 -0
  88. package/stdlib/html/html.go +251 -0
  89. package/stdlib/internal/fmtrt/fmtrt.go +163 -0
  90. package/stdlib/internal/jsonrt/dec.go +171 -38
  91. package/stdlib/internal/jsonrt/enc.go +186 -36
  92. package/stdlib/internal/jsonrt/scanner.go +17 -8
  93. package/stdlib/io/io.go +157 -1
  94. package/stdlib/maps/maps.go +131 -0
  95. package/stdlib/math/bits/bits.go +507 -0
  96. package/stdlib/math/extra.go +16 -14
  97. package/stdlib/math/math.go +439 -0
  98. package/stdlib/math/rand/rand.go +297 -0
  99. package/stdlib/os/os.go +93 -0
  100. package/stdlib/path/filepath/filepath.go +47 -0
  101. package/stdlib/path/path.go +394 -0
  102. package/stdlib/regexp/regexp.go +231 -0
  103. package/stdlib/slices/slices.go +526 -0
  104. package/stdlib/slices/sort.go +209 -0
  105. package/stdlib/slices/zsort_cmp.go +480 -0
  106. package/stdlib/slices/zsort_ordered.go +482 -0
  107. package/stdlib/sort/sort.go +391 -452
  108. package/stdlib/sort/zsort_func.go +480 -0
  109. package/stdlib/sort/zsort_iface.go +480 -0
  110. package/stdlib/strconv/float.go +1699 -0
  111. package/stdlib/strconv/isprint.go +752 -0
  112. package/stdlib/strconv/quote.go +235 -50
  113. package/stdlib/strconv/strconv.go +616 -0
  114. package/stdlib/strings/builder.go +95 -0
  115. package/stdlib/strings/reader.go +163 -0
  116. package/stdlib/strings/replacer.go +102 -0
  117. package/stdlib/strings/strings.go +807 -0
  118. package/stdlib/sync/sync.go +268 -0
  119. package/stdlib/testing/async_js.go +61 -0
  120. package/stdlib/testing/benchmark.go +297 -0
  121. package/stdlib/testing/testing.go +523 -0
  122. package/stdlib/time/duration.go +233 -0
  123. package/stdlib/time/format.go +745 -0
  124. package/stdlib/time/parse.go +790 -0
  125. package/stdlib/time/sleep_js.go +63 -0
  126. package/stdlib/time/time.go +834 -0
  127. package/stdlib/unicode/unicode.go +141 -3
  128. package/stdlib/unicode/utf8/utf8.go +464 -0
  129. package/src/backend/js/fmt-runtime.js +0 -573
  130. package/src/backend/js/stdlib/base64.js +0 -12
  131. package/src/backend/js/stdlib/binary.js +0 -102
  132. package/src/backend/js/stdlib/bits.js +0 -119
  133. package/src/backend/js/stdlib/builder.js +0 -98
  134. package/src/backend/js/stdlib/bytes.js +0 -368
  135. package/src/backend/js/stdlib/errors.js +0 -45
  136. package/src/backend/js/stdlib/fmt.js +0 -517
  137. package/src/backend/js/stdlib/gom.js +0 -155
  138. package/src/backend/js/stdlib/hex.js +0 -17
  139. package/src/backend/js/stdlib/html.js +0 -20
  140. package/src/backend/js/stdlib/io.js +0 -137
  141. package/src/backend/js/stdlib/json.js +0 -1167
  142. package/src/backend/js/stdlib/maps.js +0 -37
  143. package/src/backend/js/stdlib/math.js +0 -85
  144. package/src/backend/js/stdlib/os.js +0 -13
  145. package/src/backend/js/stdlib/path.js +0 -48
  146. package/src/backend/js/stdlib/rand.js +0 -32
  147. package/src/backend/js/stdlib/regexp.js +0 -54
  148. package/src/backend/js/stdlib/sha256.js +0 -12
  149. package/src/backend/js/stdlib/shared.js +0 -17
  150. package/src/backend/js/stdlib/simd.js +0 -34
  151. package/src/backend/js/stdlib/slices.js +0 -107
  152. package/src/backend/js/stdlib/sort.js +0 -30
  153. package/src/backend/js/stdlib/strconv.js +0 -79
  154. package/src/backend/js/stdlib/strings.js +0 -301
  155. package/src/backend/js/stdlib/sync.js +0 -13
  156. package/src/backend/js/stdlib/testing.js +0 -41
  157. package/src/backend/js/stdlib/time.js +0 -152
  158. package/src/backend/js/stdlib/unicode.js +0 -25
  159. package/src/backend/js/stdlib/utf8.js +0 -26
  160. package/src/backend/wasm/stdlib/bytes.js +0 -6716
  161. package/src/backend/wasm/stdlib/core.js +0 -10278
  162. package/src/backend/wasm/stdlib/io.js +0 -3578
  163. package/src/backend/wasm/stdlib/packages.js +0 -2402
  164. package/src/backend/wasm/stdlib/pure.js +0 -720
  165. package/src/backend/wasm/stdlib/time.js +0 -2229
  166. package/src/typechecker/stdlib/core.js +0 -1079
  167. package/src/typechecker/stdlib/extended.js +0 -1210
  168. package/stdlib/bytes/iter.go +0 -192
  169. package/stdlib/bytes/search.go +0 -240
  170. package/stdlib/bytes/split.go +0 -218
  171. package/stdlib/errors/overlay.go +0 -12
  172. package/stdlib/maps/iter.go +0 -65
  173. package/stdlib/slices/extra.go +0 -73
  174. package/stdlib/slices/iter.go +0 -113
  175. package/stdlib/strings/extra.go +0 -35
  176. package/stdlib/strings/iter.go +0 -122
  177. package/stdlib/sync/extra.go +0 -105
  178. package/stdlib/unicode/utf8/bytes.go +0 -239
@@ -1,239 +0,0 @@
1
- //go:build gofront
2
-
3
- //gofront:target both
4
-
5
- package utf8
6
-
7
- // RuneSelf characters below RuneSelf are represented as themselves in a single byte.
8
- const RuneSelf = 0x80
9
-
10
- const (
11
- t2 = 0b11000000
12
- t3 = 0b11100000
13
- t4 = 0b11110000
14
-
15
- maskx = 0b00111111
16
- mask2 = 0b00011111
17
- mask3 = 0b00001111
18
- mask4 = 0b00000111
19
-
20
- locb = 0b10000000
21
- hicb = 0b10111111
22
-
23
- xx = 0xF1 // invalid: size 1
24
- as = 0xF0 // ASCII: size 1
25
- s1 = 0x02 // accept 0, size 2
26
- s2 = 0x13 // accept 1, size 3
27
- s3 = 0x03 // accept 0, size 3
28
- s4 = 0x23 // accept 2, size 3
29
- s5 = 0x34 // accept 3, size 4
30
- s6 = 0x04 // accept 0, size 4
31
- s7 = 0x44 // accept 4, size 4
32
- )
33
-
34
- var first = [256]uint8{
35
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
36
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
37
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
38
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
39
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
40
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
41
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
42
- as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as,
43
- xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
44
- xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
45
- xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
46
- xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
47
- xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1,
48
- s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1,
49
- s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3,
50
- s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
51
- }
52
-
53
- type acceptRange struct {
54
- lo uint8
55
- hi uint8
56
- }
57
-
58
- var acceptRanges = [16]acceptRange{
59
- 0: {locb, hicb},
60
- 1: {0xA0, hicb},
61
- 2: {locb, 0x9F},
62
- 3: {0x90, hicb},
63
- 4: {locb, 0x8F},
64
- }
65
-
66
- // RuneStart reports whether the byte could be the first byte of an encoded rune.
67
- func RuneStart(b byte) bool {
68
- return b&0xC0 != 0x80
69
- }
70
-
71
- // FullRune reports whether the bytes in p begin with a full UTF-8 encoding of a rune.
72
- func FullRune(p []byte) bool {
73
- n := len(p)
74
- if n == 0 {
75
- return false
76
- }
77
- x := first[p[0]]
78
- if n >= int(x&7) {
79
- return true
80
- }
81
- accept := acceptRanges[x>>4]
82
- if n > 1 && (p[1] < accept.lo || p[1] > accept.hi) {
83
- return true
84
- } else if n > 2 && (p[2] < locb || p[2] > hicb) {
85
- return true
86
- }
87
- return false
88
- }
89
-
90
- func decodeMulti(p []byte, p0 byte) (rune, int) {
91
- x := first[p0]
92
- if x >= as {
93
- return RuneError, 1
94
- }
95
- sz := int(x & 7)
96
- accept := acceptRanges[x>>4]
97
- if len(p) < sz {
98
- return RuneError, 1
99
- }
100
- b1 := p[1]
101
- if b1 < accept.lo || b1 > accept.hi {
102
- return RuneError, 1
103
- }
104
- if sz <= 2 {
105
- return rune(p0&mask2)<<6 | rune(b1&maskx), 2
106
- }
107
- b2 := p[2]
108
- if b2 < locb || b2 > hicb {
109
- return RuneError, 1
110
- }
111
- if sz <= 3 {
112
- return rune(p0&mask3)<<12 | rune(b1&maskx)<<6 | rune(b2&maskx), 3
113
- }
114
- b3 := p[3]
115
- if b3 < locb || b3 > hicb {
116
- return RuneError, 1
117
- }
118
- return rune(p0&mask4)<<18 | rune(b1&maskx)<<12 | rune(b2&maskx)<<6 | rune(b3&maskx), 4
119
- }
120
-
121
- // DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes.
122
- func DecodeRune(p []byte) (r rune, size int) {
123
- if len(p) < 1 {
124
- return RuneError, 0
125
- }
126
- p0 := p[0]
127
- if p0 < RuneSelf {
128
- return rune(p0), 1
129
- }
130
- r, size = decodeMulti(p, p0)
131
- return r, size
132
- }
133
-
134
- // DecodeLastRune unpacks the last UTF-8 encoding in p and returns the rune and its width in bytes.
135
- func DecodeLastRune(p []byte) (r rune, size int) {
136
- end := len(p)
137
- if end == 0 {
138
- return RuneError, 0
139
- }
140
- start := end - 1
141
- if p[start] < RuneSelf {
142
- return rune(p[start]), 1
143
- }
144
- lim := end - UTFMax
145
- if lim < 0 {
146
- lim = 0
147
- }
148
- for start--; start >= lim; start-- {
149
- if RuneStart(p[start]) {
150
- break
151
- }
152
- }
153
- if start < 0 {
154
- start = 0
155
- }
156
- r, size = DecodeRune(p[start:end])
157
- if start+size != end {
158
- return RuneError, 1
159
- }
160
- return r, size
161
- }
162
-
163
- // EncodeRune writes into p (which must be large enough) the UTF-8 encoding of the rune.
164
- func EncodeRune(p []byte, r rune) int {
165
- switch i := uint32(r); {
166
- case i <= 0x7F:
167
- p[0] = byte(r)
168
- return 1
169
- case i <= 0x7FF:
170
- p[0] = t2 | byte(r>>6)
171
- p[1] = locb | byte(r)&maskx
172
- return 2
173
- case i < 0xD800, i > 0xDFFF && i <= 0xFFFF:
174
- p[0] = t3 | byte(r>>12)
175
- p[1] = locb | byte(r>>6)&maskx
176
- p[2] = locb | byte(r)&maskx
177
- return 3
178
- case i > 0xFFFF && i <= MaxRune:
179
- p[0] = t4 | byte(r>>18)
180
- p[1] = locb | byte(r>>12)&maskx
181
- p[2] = locb | byte(r>>6)&maskx
182
- p[3] = locb | byte(r)&maskx
183
- return 4
184
- default:
185
- p[0] = 0xEF
186
- p[1] = 0xBF
187
- p[2] = 0xBD
188
- return 3
189
- }
190
- }
191
-
192
- // AppendRune appends the UTF-8 encoding of r to the end of p.
193
- func AppendRune(p []byte, r rune) []byte {
194
- switch i := uint32(r); {
195
- case i <= 0x7F:
196
- return append(p, byte(r))
197
- case i <= 0x7FF:
198
- return append(p, t2|byte(r>>6), locb|byte(r)&maskx)
199
- case i < 0xD800, i > 0xDFFF && i <= 0xFFFF:
200
- return append(p, t3|byte(r>>12), locb|byte(r>>6)&maskx, locb|byte(r)&maskx)
201
- case i > 0xFFFF && i <= MaxRune:
202
- return append(p, t4|byte(r>>18), locb|byte(r>>12)&maskx, locb|byte(r>>6)&maskx, locb|byte(r)&maskx)
203
- default:
204
- return append(p, 0xEF, 0xBF, 0xBD)
205
- }
206
- }
207
-
208
- // RuneCount returns the number of runes in p.
209
- func RuneCount(p []byte) int {
210
- np := len(p)
211
- var n int
212
- for i := 0; i < np; {
213
- if p[i] < RuneSelf {
214
- i++
215
- n++
216
- continue
217
- }
218
- _, sz := DecodeRune(p[i:])
219
- i += sz
220
- n++
221
- }
222
- return n
223
- }
224
-
225
- // Valid reports whether p consists entirely of valid UTF-8-encoded runes.
226
- func Valid(p []byte) bool {
227
- for len(p) > 0 {
228
- if p[0] < RuneSelf {
229
- p = p[1:]
230
- continue
231
- }
232
- _, sz := DecodeRune(p)
233
- if sz == 1 {
234
- return false
235
- }
236
- p = p[sz:]
237
- }
238
- return true
239
- }