gofront 1.8.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 +3 -3
- package/package.json +5 -4
- package/src/backend/js/expressions.js +849 -371
- package/src/backend/js/index.js +241 -147
- package/src/backend/js/natives.js +383 -0
- package/src/backend/js/runtime.js +512 -2547
- package/src/backend/js/statements.js +506 -103
- package/src/backend/js/stdlib/index.js +45 -93
- package/src/backend/js/templ.js +32 -45
- package/src/backend/js/type-info.js +177 -13
- package/src/backend/shared/fixed-float.js +20 -0
- package/src/backend/shared/fmt-types.js +63 -171
- package/src/backend/shared/host-unicode.js +36 -0
- package/src/backend/wasm/boundary.js +490 -965
- package/src/backend/wasm/emit-builtins.js +643 -256
- package/src/backend/wasm/emit-exprs.js +124 -57
- package/src/backend/wasm/emit-maps.js +17 -367
- package/src/backend/wasm/emit-stmts.js +325 -75
- package/src/backend/wasm/emit.js +104 -13
- package/src/backend/wasm/globals.js +47 -8
- package/src/backend/wasm/glue.js +2 -4
- package/src/backend/wasm/index.js +36 -530
- package/src/backend/wasm/method-expr.js +12 -1
- package/src/backend/wasm/module-emitter.js +92 -717
- package/src/backend/wasm/monomorph.js +103 -6
- package/src/backend/wasm/natives.js +596 -0
- package/src/backend/wasm/prescan.js +5 -153
- package/src/backend/wasm/prune-funcs.js +89 -0
- package/src/backend/wasm/stdlib/index.js +2 -32
- package/src/backend/wasm/types.js +68 -20
- package/src/backend/wasm/variadic.js +3 -3
- package/src/cli/cli-core.js +5 -1
- package/src/cli/test-runner.js +115 -342
- package/src/compiler.js +108 -130
- package/src/lexer/lexer.js +105 -11
- package/src/lexer/templ-lexer.js +61 -18
- package/src/lexer/tokens.js +1 -0
- package/src/link/stdlib.js +354 -132
- package/src/link/type-names.js +148 -0
- package/src/link/wasm.js +30 -6
- package/src/lower/bounds.js +153 -0
- package/src/lower/captures.js +92 -33
- 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 +7 -1
- package/src/lower/json-codecs.js +228 -247
- package/src/lower/ownership.js +25 -7
- package/src/lower/reachability.js +69 -51
- package/src/lower/walk.js +12 -0
- package/src/parser/declarations.js +28 -5
- package/src/parser/expressions.js +86 -16
- package/src/parser/statements.js +1 -0
- package/src/parser/templ.js +44 -5
- package/src/parser/types.js +1 -0
- package/src/resolver.js +1 -2
- package/src/typechecker/assignability.js +124 -11
- package/src/typechecker/const-fold.js +70 -27
- package/src/typechecker/constants.js +32 -6
- package/src/typechecker/expressions.js +326 -98
- package/src/typechecker/index.js +208 -33
- package/src/typechecker/init-order.js +136 -40
- package/src/typechecker/operand-text.js +40 -0
- package/src/typechecker/resolve.js +192 -36
- package/src/typechecker/statements.js +122 -11
- package/src/typechecker/stdlib/excluded.js +9 -5
- package/src/typechecker/stdlib/index.js +25 -9
- package/src/typechecker/termination.js +10 -1
- package/src/typechecker/types.js +203 -573
- package/stdlib/bytes/buffer.go +479 -0
- package/stdlib/bytes/bytes.go +1010 -0
- package/stdlib/bytes/reader.go +161 -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/json.go +62 -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/html/html.go +251 -0
- package/stdlib/internal/fmtrt/fmtrt.go +163 -0
- package/stdlib/internal/jsonrt/dec.go +171 -38
- package/stdlib/internal/jsonrt/enc.go +186 -36
- package/stdlib/internal/jsonrt/scanner.go +17 -8
- package/stdlib/io/io.go +157 -1
- package/stdlib/maps/maps.go +131 -0
- package/stdlib/math/bits/bits.go +507 -0
- package/stdlib/math/extra.go +16 -14
- 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 +391 -452
- 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 +235 -50
- 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 +141 -3
- package/stdlib/unicode/utf8/utf8.go +464 -0
- package/src/backend/js/fmt-runtime.js +0 -573
- 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 -119
- package/src/backend/js/stdlib/builder.js +0 -98
- package/src/backend/js/stdlib/bytes.js +0 -368
- package/src/backend/js/stdlib/errors.js +0 -45
- package/src/backend/js/stdlib/fmt.js +0 -517
- 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 -1167
- package/src/backend/js/stdlib/maps.js +0 -37
- package/src/backend/js/stdlib/math.js +0 -85
- 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 -34
- package/src/backend/js/stdlib/slices.js +0 -107
- package/src/backend/js/stdlib/sort.js +0 -30
- package/src/backend/js/stdlib/strconv.js +0 -79
- package/src/backend/js/stdlib/strings.js +0 -301
- package/src/backend/js/stdlib/sync.js +0 -13
- package/src/backend/js/stdlib/testing.js +0 -41
- package/src/backend/js/stdlib/time.js +0 -152
- package/src/backend/js/stdlib/unicode.js +0 -25
- package/src/backend/js/stdlib/utf8.js +0 -26
- package/src/backend/wasm/stdlib/bytes.js +0 -6716
- package/src/backend/wasm/stdlib/core.js +0 -10278
- package/src/backend/wasm/stdlib/io.js +0 -3578
- package/src/backend/wasm/stdlib/packages.js +0 -2402
- package/src/backend/wasm/stdlib/pure.js +0 -720
- package/src/backend/wasm/stdlib/time.js +0 -2229
- package/src/typechecker/stdlib/core.js +0 -1079
- package/src/typechecker/stdlib/extended.js +0 -1210
- package/stdlib/bytes/iter.go +0 -192
- package/stdlib/bytes/search.go +0 -240
- package/stdlib/bytes/split.go +0 -218
- package/stdlib/errors/overlay.go +0 -12
- package/stdlib/maps/iter.go +0 -65
- package/stdlib/slices/extra.go +0 -73
- package/stdlib/slices/iter.go +0 -113
- package/stdlib/strings/extra.go +0 -35
- package/stdlib/strings/iter.go +0 -122
- package/stdlib/sync/extra.go +0 -105
- package/stdlib/unicode/utf8/bytes.go +0 -239
|
@@ -155,7 +155,7 @@ const TRIMMED_UNICODE_TABLES =
|
|
|
155
155
|
const TRIMMED_UNICODE_CASE =
|
|
156
156
|
"removed in v1.8.0; case ranges are not supported, use ToUpper, ToLower or ToTitle";
|
|
157
157
|
const TRIMMED_FSCAN =
|
|
158
|
-
"removed in v1.8.0; scanning from an io.Reader is not supported,
|
|
158
|
+
"removed in v1.8.0; scanning from an io.Reader is not supported, parse the text with strings and strconv";
|
|
159
159
|
|
|
160
160
|
// reason -> package path -> excluded member names
|
|
161
161
|
const EXCLUDED_MEMBER_GROUPS = {
|
|
@@ -188,6 +188,14 @@ const EXCLUDED_MEMBER_GROUPS = {
|
|
|
188
188
|
[TRIMMED_FSCAN]: {
|
|
189
189
|
fmt: ["Fscan", "Fscanf", "Fscanln"],
|
|
190
190
|
},
|
|
191
|
+
"removed in v1.9.0; reflection-based binary encoding is not supported, use binary.LittleEndian or binary.BigEndian methods (Uint32, PutUint32, AppendUint32, ...)":
|
|
192
|
+
{
|
|
193
|
+
"encoding/binary": ["Read", "Write", "Size"],
|
|
194
|
+
},
|
|
195
|
+
"removed in v1.9.0; format-string scanning is not supported, use strings.Fields with strconv.Atoi, ParseFloat or ParseBool":
|
|
196
|
+
{
|
|
197
|
+
fmt: ["Sscan", "Sscanf", "Sscanln"],
|
|
198
|
+
},
|
|
191
199
|
"removed in v1.8.0; this function is not supported": {
|
|
192
200
|
math: ["Gamma", "Erf"],
|
|
193
201
|
},
|
|
@@ -252,7 +260,6 @@ const EXCLUDED_MEMBER_GROUPS = {
|
|
|
252
260
|
"File.Chdir",
|
|
253
261
|
"File.Chmod",
|
|
254
262
|
"File.Chown",
|
|
255
|
-
"File.Close",
|
|
256
263
|
"File.Fd",
|
|
257
264
|
"File.Name",
|
|
258
265
|
"File.ReadAt",
|
|
@@ -393,7 +400,6 @@ const EXCLUDED_MEMBER_GROUPS = {
|
|
|
393
400
|
"SEEK_CUR",
|
|
394
401
|
"SEEK_END",
|
|
395
402
|
"SEEK_SET",
|
|
396
|
-
"Setenv",
|
|
397
403
|
"Signal",
|
|
398
404
|
"Signal.Signal",
|
|
399
405
|
"Signal.String",
|
|
@@ -809,8 +815,6 @@ const EXCLUDED_MEMBER_GROUPS = {
|
|
|
809
815
|
const REMOVED_PACKAGES = {
|
|
810
816
|
bufio: "removed in v1.8.0; use strings and bytes readers",
|
|
811
817
|
"net/url": "removed in v1.8.0; use the URL class from a js package",
|
|
812
|
-
context:
|
|
813
|
-
"removed in v1.8.0; use a cancel flag, or AbortController from a js package",
|
|
814
818
|
"encoding/csv":
|
|
815
819
|
"removed in v1.8.0; split lines and fields with strings.Split",
|
|
816
820
|
"container/heap":
|
|
@@ -1,21 +1,37 @@
|
|
|
1
1
|
// stdlib.js — built-in namespace and browser-global registration for the GoFront type
|
|
2
2
|
// checker. Called once from TypeChecker._setupGlobals() during construction.
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// math, errors, time, unicode, os, slices, html, io
|
|
7
|
-
// stdlib/extended.js — gom, maps, regexp, rand, utf8, path, builder types,
|
|
8
|
-
// built-in functions
|
|
4
|
+
// Registers browser globals and built-in functions, then delegates to the
|
|
5
|
+
// shared, simd and web sub-modules.
|
|
9
6
|
|
|
10
|
-
import {
|
|
11
|
-
import { setupExtendedGlobals } from "./extended.js";
|
|
7
|
+
import { ANY, BROWSER_GLOBALS } from "../types.js";
|
|
12
8
|
import { setupSharedGlobals } from "./shared.js";
|
|
13
9
|
import { setupSimdGlobals } from "./simd.js";
|
|
14
10
|
import { setupWebGlobals } from "./web.js";
|
|
15
11
|
|
|
16
12
|
export function setupGlobals(globals, types) {
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
for (const g of BROWSER_GLOBALS) globals.define(g, ANY);
|
|
14
|
+
for (const name of [
|
|
15
|
+
"append",
|
|
16
|
+
"len",
|
|
17
|
+
"cap",
|
|
18
|
+
"make",
|
|
19
|
+
"delete",
|
|
20
|
+
"print",
|
|
21
|
+
"println",
|
|
22
|
+
"panic",
|
|
23
|
+
"recover",
|
|
24
|
+
"new",
|
|
25
|
+
"copy",
|
|
26
|
+
"error",
|
|
27
|
+
"min",
|
|
28
|
+
"max",
|
|
29
|
+
"clear",
|
|
30
|
+
"complex",
|
|
31
|
+
"real",
|
|
32
|
+
"imag",
|
|
33
|
+
])
|
|
34
|
+
globals.define(name, { kind: "builtin", name });
|
|
19
35
|
setupSharedGlobals(globals, types);
|
|
20
36
|
setupSimdGlobals(globals, types);
|
|
21
37
|
setupWebGlobals(globals, types);
|
|
@@ -64,15 +64,24 @@ export const terminationMethods = {
|
|
|
64
64
|
|
|
65
65
|
_isTerminatingSwitch(stmt) {
|
|
66
66
|
let hasDefault = false;
|
|
67
|
-
|
|
67
|
+
const cases = stmt.cases ?? [];
|
|
68
|
+
for (let i = 0; i < cases.length; i++) {
|
|
69
|
+
const c = cases[i];
|
|
68
70
|
if (!c.list) hasDefault = true;
|
|
69
71
|
if (!c.stmts?.length) return false;
|
|
70
72
|
const last = c.stmts[c.stmts.length - 1];
|
|
73
|
+
// `fallthrough` hands control to the next clause, which is checked
|
|
74
|
+
// on its own; the final clause has none to fall into.
|
|
75
|
+
if (this._isFallthrough(last) && i < cases.length - 1) continue;
|
|
71
76
|
if (!this._isTerminating(last)) return false;
|
|
72
77
|
}
|
|
73
78
|
return hasDefault;
|
|
74
79
|
},
|
|
75
80
|
|
|
81
|
+
_isFallthrough(stmt) {
|
|
82
|
+
return stmt?.kind === "BranchStmt" && stmt.keyword === "fallthrough";
|
|
83
|
+
},
|
|
84
|
+
|
|
76
85
|
_isTerminatingTypeSwitch(stmt) {
|
|
77
86
|
let hasDefault = false;
|
|
78
87
|
for (const c of stmt.cases ?? []) {
|