gofront 1.7.0 → 1.9.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.
- package/README.md +14 -14
- package/package.json +10 -38
- package/src/backend/js/expressions.js +2060 -389
- package/src/backend/js/index.js +586 -174
- package/src/backend/js/natives.js +383 -0
- package/src/backend/js/runtime.js +936 -1644
- package/src/backend/js/statements.js +1349 -132
- package/src/backend/js/stdlib/index.js +51 -94
- package/src/backend/js/templ.js +67 -118
- package/src/backend/js/type-info.js +436 -0
- package/src/backend/shared/fixed-float.js +20 -0
- package/src/backend/shared/fmt-types.js +80 -0
- package/src/backend/shared/host-unicode.js +36 -0
- package/src/backend/wasm/boundary.js +753 -872
- package/src/backend/wasm/emit-builtins.js +914 -237
- package/src/backend/wasm/emit-exprs.js +1456 -195
- package/src/backend/wasm/emit-maps.js +78 -380
- package/src/backend/wasm/emit-stmts.js +1659 -214
- package/src/backend/wasm/emit.js +614 -88
- package/src/backend/wasm/encode.js +43 -13
- package/src/backend/wasm/globals.js +491 -0
- package/src/backend/wasm/glue.js +2 -4
- package/src/backend/wasm/index.js +406 -3195
- package/src/backend/wasm/method-expr.js +392 -0
- package/src/backend/wasm/module-emitter.js +1615 -0
- package/src/backend/wasm/monomorph.js +164 -9
- package/src/backend/wasm/natives.js +596 -0
- package/src/backend/wasm/prescan.js +249 -0
- package/src/backend/wasm/prune-funcs.js +89 -0
- package/src/backend/wasm/stdlib/index.js +2 -37
- package/src/backend/wasm/stdlib/simd.js +293 -28
- package/src/backend/wasm/types.js +260 -27
- package/src/backend/wasm/variadic.js +93 -0
- package/src/backend/wasm/wat.js +47 -20
- package/src/{cli-core.js → cli/cli-core.js} +241 -11
- package/src/{test-runner.js → cli/test-runner.js} +188 -122
- package/src/{vendor.js → cli/vendor.js} +3 -4
- package/src/compiler.js +202 -386
- package/src/index.js +15 -169
- package/src/{lexer.js → lexer/lexer.js} +203 -62
- package/src/{templ-lexer.js → lexer/templ-lexer.js} +61 -18
- package/src/{tokens.js → lexer/tokens.js} +2 -0
- package/src/link/sourcemap.js +97 -0
- package/src/link/stdlib.js +737 -0
- package/src/link/type-names.js +148 -0
- package/src/link/wasm.js +318 -0
- package/src/lower/bounds.js +547 -0
- package/src/lower/boxing.js +1 -1
- package/src/lower/captures.js +267 -64
- package/src/lower/embedding.js +32 -3
- package/src/lower/errors-as.js +196 -0
- package/src/lower/fmt-formatters.js +905 -0
- package/src/lower/functions.js +2 -0
- package/src/lower/gen-types.js +274 -0
- package/src/lower/index.js +33 -19
- package/src/lower/json-codecs.js +1379 -0
- package/src/lower/ownership.js +47 -8
- package/src/lower/range.js +86 -1
- package/src/lower/reachability.js +150 -0
- package/src/lower/walk.js +12 -0
- package/src/parser/declarations.js +83 -15
- package/src/parser/expressions.js +110 -18
- package/src/parser/index.js +2 -1
- package/src/parser/statements.js +38 -22
- package/src/{templ-parser.js → parser/templ.js} +179 -17
- package/src/parser/types.js +70 -9
- package/src/resolver.js +21 -1
- package/src/typechecker/assignability.js +291 -19
- package/src/typechecker/const-fold.js +399 -0
- package/src/typechecker/constants.js +282 -0
- package/src/typechecker/expressions.js +1220 -183
- package/src/typechecker/index.js +659 -92
- package/src/typechecker/init-order.js +426 -0
- package/src/typechecker/operand-text.js +40 -0
- package/src/typechecker/resolve.js +613 -62
- package/src/typechecker/statements.js +212 -20
- package/src/typechecker/stdlib/excluded.js +902 -0
- package/src/typechecker/stdlib/index.js +38 -0
- package/src/typechecker/stdlib/simd.js +65 -15
- package/src/typechecker/termination.js +11 -2
- package/src/typechecker/types.js +268 -514
- package/stdlib/bytes/buffer.go +479 -0
- package/stdlib/bytes/bytes.go +1010 -0
- package/stdlib/bytes/reader.go +161 -0
- package/stdlib/cmp/cmp.go +65 -0
- package/stdlib/context/context.go +115 -0
- package/stdlib/crypto/rand/rand.go +34 -0
- package/stdlib/crypto/sha256/sha256.go +249 -0
- package/stdlib/encoding/base64/base64.go +331 -0
- package/stdlib/encoding/binary/binary.go +332 -0
- package/stdlib/encoding/hex/hex.go +140 -0
- package/stdlib/encoding/json/errors.go +31 -0
- package/stdlib/encoding/json/indent.go +71 -0
- package/stdlib/encoding/json/json.go +62 -0
- package/stdlib/encoding/json/number.go +12 -0
- package/stdlib/encoding/json/stream.go +173 -0
- package/stdlib/errors/errors.go +174 -0
- package/stdlib/fmt/errors.go +110 -0
- package/stdlib/fmt/format.go +732 -0
- package/stdlib/fmt/print.go +1232 -0
- package/stdlib/gom/gom.go +293 -0
- package/stdlib/hash/hash.go +53 -0
- package/stdlib/html/html.go +251 -0
- package/stdlib/internal/fmtrt/fmtrt.go +163 -0
- package/stdlib/internal/jsonrt/dec.go +871 -0
- package/stdlib/internal/jsonrt/enc.go +516 -0
- package/stdlib/internal/jsonrt/indent.go +135 -0
- package/stdlib/internal/jsonrt/number.go +27 -0
- package/stdlib/internal/jsonrt/reader.go +73 -0
- package/stdlib/internal/jsonrt/scanner.go +658 -0
- package/stdlib/io/io.go +502 -0
- package/stdlib/iter/iter.go +18 -0
- package/stdlib/maps/maps.go +131 -0
- package/stdlib/math/bits/bits.go +507 -0
- package/stdlib/math/extra.go +272 -0
- package/stdlib/math/math.go +439 -0
- package/stdlib/math/rand/rand.go +297 -0
- package/stdlib/os/os.go +93 -0
- package/stdlib/path/filepath/filepath.go +47 -0
- package/stdlib/path/path.go +394 -0
- package/stdlib/regexp/regexp.go +231 -0
- package/stdlib/slices/slices.go +526 -0
- package/stdlib/slices/sort.go +209 -0
- package/stdlib/slices/zsort_cmp.go +480 -0
- package/stdlib/slices/zsort_ordered.go +482 -0
- package/stdlib/sort/sort.go +500 -0
- package/stdlib/sort/zsort_func.go +480 -0
- package/stdlib/sort/zsort_iface.go +480 -0
- package/stdlib/strconv/float.go +1699 -0
- package/stdlib/strconv/isprint.go +752 -0
- package/stdlib/strconv/quote.go +526 -0
- package/stdlib/strconv/strconv.go +616 -0
- package/stdlib/strings/builder.go +95 -0
- package/stdlib/strings/reader.go +163 -0
- package/stdlib/strings/replacer.go +102 -0
- package/stdlib/strings/strings.go +807 -0
- package/stdlib/sync/sync.go +268 -0
- package/stdlib/testing/async_js.go +61 -0
- package/stdlib/testing/benchmark.go +297 -0
- package/stdlib/testing/testing.go +523 -0
- package/stdlib/time/duration.go +233 -0
- package/stdlib/time/format.go +745 -0
- package/stdlib/time/parse.go +790 -0
- package/stdlib/time/sleep_js.go +63 -0
- package/stdlib/time/time.go +834 -0
- package/stdlib/unicode/unicode.go +250 -0
- package/stdlib/unicode/utf8/utf8.go +464 -0
- package/src/backend/js/stdlib/base64.js +0 -12
- package/src/backend/js/stdlib/binary.js +0 -102
- package/src/backend/js/stdlib/bits.js +0 -46
- package/src/backend/js/stdlib/builder.js +0 -63
- package/src/backend/js/stdlib/bytes.js +0 -122
- package/src/backend/js/stdlib/errors.js +0 -44
- package/src/backend/js/stdlib/fmt.js +0 -178
- package/src/backend/js/stdlib/gom.js +0 -155
- package/src/backend/js/stdlib/hex.js +0 -17
- package/src/backend/js/stdlib/html.js +0 -20
- package/src/backend/js/stdlib/io.js +0 -137
- package/src/backend/js/stdlib/json.js +0 -972
- package/src/backend/js/stdlib/maps.js +0 -45
- package/src/backend/js/stdlib/math.js +0 -69
- package/src/backend/js/stdlib/os.js +0 -13
- package/src/backend/js/stdlib/path.js +0 -48
- package/src/backend/js/stdlib/rand.js +0 -32
- package/src/backend/js/stdlib/regexp.js +0 -54
- package/src/backend/js/stdlib/sha256.js +0 -12
- package/src/backend/js/stdlib/shared.js +0 -17
- package/src/backend/js/stdlib/simd.js +0 -24
- package/src/backend/js/stdlib/slices.js +0 -77
- package/src/backend/js/stdlib/sort.js +0 -30
- package/src/backend/js/stdlib/strconv.js +0 -74
- package/src/backend/js/stdlib/strings.js +0 -222
- package/src/backend/js/stdlib/sync.js +0 -13
- package/src/backend/js/stdlib/testing.js +0 -34
- package/src/backend/js/stdlib/time.js +0 -128
- package/src/backend/js/stdlib/unicode.js +0 -25
- package/src/backend/js/stdlib/utf8.js +0 -26
- package/src/backend/wasm/const-fold.js +0 -205
- package/src/backend/wasm/emit-stdlib.js +0 -13
- package/src/backend/wasm/stdlib/bytes.js +0 -5039
- package/src/backend/wasm/stdlib/core.js +0 -8903
- package/src/backend/wasm/stdlib/io.js +0 -2161
- package/src/backend/wasm/stdlib/packages.js +0 -2400
- package/src/backend/wasm/stdlib/pure.js +0 -720
- package/src/backend/wasm/stdlib/time.js +0 -1200
- package/src/typechecker/stdlib/core.js +0 -801
- package/src/typechecker/stdlib/extended.js +0 -914
- package/src/typechecker/stdlib.js +0 -22
- /package/src/{asset-manager.js → cli/asset-manager.js} +0 -0
- /package/src/{colors.js → cli/colors.js} +0 -0
- /package/src/{dev-server.js → cli/dev-server.js} +0 -0
- /package/src/{minifier.js → cli/minifier.js} +0 -0
- /package/src/{project-config.js → cli/project-config.js} +0 -0
- /package/src/{pwa.js → cli/pwa.js} +0 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
//go:build gofront
|
|
2
|
+
|
|
3
|
+
//gofront:target both
|
|
4
|
+
|
|
5
|
+
// Copyright 2010 The Go Authors. All rights reserved.
|
|
6
|
+
// Use of this source code is governed by a BSD-style
|
|
7
|
+
// license that can be found in the LICENSE file.
|
|
8
|
+
|
|
9
|
+
package time
|
|
10
|
+
|
|
11
|
+
// A Duration represents the elapsed time between two instants as an int64
|
|
12
|
+
// nanosecond count. The representation limits the largest representable
|
|
13
|
+
// duration to approximately 290 years.
|
|
14
|
+
type Duration int64
|
|
15
|
+
|
|
16
|
+
const (
|
|
17
|
+
minDuration Duration = -1 << 63
|
|
18
|
+
maxDuration Duration = 1<<63 - 1
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
// Common durations. There is no definition for units of Day or larger to
|
|
22
|
+
// avoid confusion across daylight savings time zone transitions.
|
|
23
|
+
const (
|
|
24
|
+
Nanosecond Duration = 1
|
|
25
|
+
Microsecond = 1000 * Nanosecond
|
|
26
|
+
Millisecond = 1000 * Microsecond
|
|
27
|
+
Second = 1000 * Millisecond
|
|
28
|
+
Minute = 60 * Second
|
|
29
|
+
Hour = 60 * Minute
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
// String returns a string representing the duration in the form "72h3m0.5s".
|
|
33
|
+
// Leading zero units are omitted. As a special case, durations less than one
|
|
34
|
+
// second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure
|
|
35
|
+
// that the leading digit is non-zero. The zero duration formats as 0s.
|
|
36
|
+
func (d Duration) String() string {
|
|
37
|
+
buf := make([]byte, 32)
|
|
38
|
+
w := len(buf)
|
|
39
|
+
|
|
40
|
+
u := uint64(d)
|
|
41
|
+
neg := d < 0
|
|
42
|
+
if neg {
|
|
43
|
+
u = -u
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if u < uint64(Second) {
|
|
47
|
+
// Special case: if duration is smaller than a second,
|
|
48
|
+
// use smaller units, like 1.2ms
|
|
49
|
+
var prec int
|
|
50
|
+
w--
|
|
51
|
+
buf[w] = 's'
|
|
52
|
+
w--
|
|
53
|
+
switch {
|
|
54
|
+
case u == 0:
|
|
55
|
+
return "0s"
|
|
56
|
+
case u < uint64(Microsecond):
|
|
57
|
+
// print nanoseconds
|
|
58
|
+
prec = 0
|
|
59
|
+
buf[w] = 'n'
|
|
60
|
+
case u < uint64(Millisecond):
|
|
61
|
+
// print microseconds: U+00B5 'µ' micro sign == 0xC2 0xB5
|
|
62
|
+
prec = 3
|
|
63
|
+
w--
|
|
64
|
+
buf[w] = 0xC2
|
|
65
|
+
buf[w+1] = 0xB5
|
|
66
|
+
default:
|
|
67
|
+
// print milliseconds
|
|
68
|
+
prec = 6
|
|
69
|
+
buf[w] = 'm'
|
|
70
|
+
}
|
|
71
|
+
w, u = fmtFrac(buf, w, u, prec)
|
|
72
|
+
w = fmtInt(buf, w, u)
|
|
73
|
+
} else {
|
|
74
|
+
w--
|
|
75
|
+
buf[w] = 's'
|
|
76
|
+
|
|
77
|
+
w, u = fmtFrac(buf, w, u, 9)
|
|
78
|
+
|
|
79
|
+
// u is now integer seconds
|
|
80
|
+
w = fmtInt(buf, w, u%60)
|
|
81
|
+
u /= 60
|
|
82
|
+
|
|
83
|
+
// u is now integer minutes
|
|
84
|
+
if u > 0 {
|
|
85
|
+
w--
|
|
86
|
+
buf[w] = 'm'
|
|
87
|
+
w = fmtInt(buf, w, u%60)
|
|
88
|
+
u /= 60
|
|
89
|
+
|
|
90
|
+
// u is now integer hours
|
|
91
|
+
// Stop at hours because days can be different lengths.
|
|
92
|
+
if u > 0 {
|
|
93
|
+
w--
|
|
94
|
+
buf[w] = 'h'
|
|
95
|
+
w = fmtInt(buf, w, u)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if neg {
|
|
101
|
+
w--
|
|
102
|
+
buf[w] = '-'
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return string(buf[w:])
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// fmtFrac formats the fraction of v/10**prec (e.g., ".12345") into the tail
|
|
109
|
+
// of buf at w, omitting trailing zeros. It omits the decimal point too when
|
|
110
|
+
// the fraction is 0. It returns the index where the output bytes begin and
|
|
111
|
+
// the value v/10**prec.
|
|
112
|
+
func fmtFrac(buf []byte, w int, v uint64, prec int) (nw int, nv uint64) {
|
|
113
|
+
// Omit trailing zeros up to and including decimal point.
|
|
114
|
+
print := false
|
|
115
|
+
for i := 0; i < prec; i++ {
|
|
116
|
+
digit := v % 10
|
|
117
|
+
print = print || digit != 0
|
|
118
|
+
if print {
|
|
119
|
+
w--
|
|
120
|
+
buf[w] = byte(digit) + '0'
|
|
121
|
+
}
|
|
122
|
+
v /= 10
|
|
123
|
+
}
|
|
124
|
+
if print {
|
|
125
|
+
w--
|
|
126
|
+
buf[w] = '.'
|
|
127
|
+
}
|
|
128
|
+
return w, v
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// fmtInt formats v into the tail of buf at w. It returns the index where the
|
|
132
|
+
// output begins.
|
|
133
|
+
func fmtInt(buf []byte, w int, v uint64) int {
|
|
134
|
+
if v == 0 {
|
|
135
|
+
w--
|
|
136
|
+
buf[w] = '0'
|
|
137
|
+
} else {
|
|
138
|
+
for v > 0 {
|
|
139
|
+
w--
|
|
140
|
+
buf[w] = byte(v%10) + '0'
|
|
141
|
+
v /= 10
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return w
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Nanoseconds returns the duration as an integer nanosecond count.
|
|
148
|
+
func (d Duration) Nanoseconds() int64 { return int64(d) }
|
|
149
|
+
|
|
150
|
+
// Microseconds returns the duration as an integer microsecond count.
|
|
151
|
+
func (d Duration) Microseconds() int64 { return int64(d) / 1000 }
|
|
152
|
+
|
|
153
|
+
// Milliseconds returns the duration as an integer millisecond count.
|
|
154
|
+
func (d Duration) Milliseconds() int64 { return int64(d) / 1000000 }
|
|
155
|
+
|
|
156
|
+
// Seconds returns the duration as a floating point number of seconds.
|
|
157
|
+
func (d Duration) Seconds() float64 {
|
|
158
|
+
sec := d / Second
|
|
159
|
+
nsec := d % Second
|
|
160
|
+
return float64(sec) + float64(nsec)/1e9
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Minutes returns the duration as a floating point number of minutes.
|
|
164
|
+
func (d Duration) Minutes() float64 {
|
|
165
|
+
min := d / Minute
|
|
166
|
+
nsec := d % Minute
|
|
167
|
+
return float64(min) + float64(nsec)/(60*1e9)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Hours returns the duration as a floating point number of hours.
|
|
171
|
+
func (d Duration) Hours() float64 {
|
|
172
|
+
h := d / Hour
|
|
173
|
+
nsec := d % Hour
|
|
174
|
+
return float64(h) + float64(nsec)/(60*60*1e9)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Truncate returns the result of rounding d toward zero to a multiple of m.
|
|
178
|
+
// If m <= 0, Truncate returns d unchanged.
|
|
179
|
+
func (d Duration) Truncate(m Duration) Duration {
|
|
180
|
+
if m <= 0 {
|
|
181
|
+
return d
|
|
182
|
+
}
|
|
183
|
+
return d - d%m
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// lessThanHalf reports whether x+x < y but avoids overflow, assuming x and y
|
|
187
|
+
// are both positive.
|
|
188
|
+
func lessThanHalf(x, y Duration) bool {
|
|
189
|
+
return uint64(x)+uint64(x) < uint64(y)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Round returns the result of rounding d to the nearest multiple of m. The
|
|
193
|
+
// rounding behavior for halfway values is to round away from zero. If the
|
|
194
|
+
// result exceeds the maximum (or minimum) value that can be stored in a
|
|
195
|
+
// Duration, Round returns the maximum (or minimum) duration. If m <= 0, Round
|
|
196
|
+
// returns d unchanged.
|
|
197
|
+
func (d Duration) Round(m Duration) Duration {
|
|
198
|
+
if m <= 0 {
|
|
199
|
+
return d
|
|
200
|
+
}
|
|
201
|
+
r := d % m
|
|
202
|
+
if d < 0 {
|
|
203
|
+
r = -r
|
|
204
|
+
if lessThanHalf(r, m) {
|
|
205
|
+
return d + r
|
|
206
|
+
}
|
|
207
|
+
if d1 := d - m + r; d1 < d {
|
|
208
|
+
return d1
|
|
209
|
+
}
|
|
210
|
+
return minDuration // overflow
|
|
211
|
+
}
|
|
212
|
+
if lessThanHalf(r, m) {
|
|
213
|
+
return d - r
|
|
214
|
+
}
|
|
215
|
+
if d1 := d + m - r; d1 > d {
|
|
216
|
+
return d1
|
|
217
|
+
}
|
|
218
|
+
return maxDuration // overflow
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Abs returns the absolute value of d. As a special case, Duration(math.MinInt64)
|
|
222
|
+
// is converted to Duration(math.MaxInt64), reducing its magnitude by 1
|
|
223
|
+
// nanosecond.
|
|
224
|
+
func (d Duration) Abs() Duration {
|
|
225
|
+
switch {
|
|
226
|
+
case d >= 0:
|
|
227
|
+
return d
|
|
228
|
+
case d == minDuration:
|
|
229
|
+
return maxDuration
|
|
230
|
+
default:
|
|
231
|
+
return -d
|
|
232
|
+
}
|
|
233
|
+
}
|