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,38 @@
|
|
|
1
|
+
// stdlib.js — built-in namespace and browser-global registration for the GoFront type
|
|
2
|
+
// checker. Called once from TypeChecker._setupGlobals() during construction.
|
|
3
|
+
//
|
|
4
|
+
// Registers browser globals and built-in functions, then delegates to the
|
|
5
|
+
// shared, simd and web sub-modules.
|
|
6
|
+
|
|
7
|
+
import { ANY, BROWSER_GLOBALS } from "../types.js";
|
|
8
|
+
import { setupSharedGlobals } from "./shared.js";
|
|
9
|
+
import { setupSimdGlobals } from "./simd.js";
|
|
10
|
+
import { setupWebGlobals } from "./web.js";
|
|
11
|
+
|
|
12
|
+
export function setupGlobals(globals, types) {
|
|
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 });
|
|
35
|
+
setupSharedGlobals(globals, types);
|
|
36
|
+
setupSimdGlobals(globals, types);
|
|
37
|
+
setupWebGlobals(globals, types);
|
|
38
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// - Lowered to WASM v128 in wasm packages.
|
|
6
6
|
// - Lowered to a frozen 4-number array with Math.fround in js packages.
|
|
7
7
|
|
|
8
|
-
import { FLOAT32, INT } from "../types.js";
|
|
8
|
+
import { BOOL, FLOAT32, INT } from "../types.js";
|
|
9
9
|
|
|
10
10
|
export function setupSimdGlobals(globals, types) {
|
|
11
11
|
const f32x4Type = {
|
|
@@ -19,25 +19,69 @@ export function setupSimdGlobals(globals, types) {
|
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
+
const mask32x4Type = {
|
|
23
|
+
kind: "named",
|
|
24
|
+
name: "simd.Mask32x4",
|
|
25
|
+
underlying: {
|
|
26
|
+
kind: "simd",
|
|
27
|
+
simd: "Mask32x4",
|
|
28
|
+
elem: BOOL,
|
|
29
|
+
lanes: 4,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const fn = (params, returns) => ({ kind: "func", params, returns });
|
|
34
|
+
const unary = fn([], [f32x4Type]);
|
|
35
|
+
const binary = fn([f32x4Type], [f32x4Type]);
|
|
36
|
+
const compare = fn([f32x4Type], [mask32x4Type]);
|
|
37
|
+
|
|
22
38
|
f32x4Type.underlying.methods = new Map([
|
|
23
|
-
["Add",
|
|
24
|
-
["Sub",
|
|
25
|
-
["Mul",
|
|
26
|
-
["Div",
|
|
27
|
-
["Min",
|
|
28
|
-
["Max",
|
|
29
|
-
["
|
|
30
|
-
["
|
|
31
|
-
["
|
|
32
|
-
[
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
],
|
|
36
|
-
["
|
|
39
|
+
["Add", binary],
|
|
40
|
+
["Sub", binary],
|
|
41
|
+
["Mul", binary],
|
|
42
|
+
["Div", binary],
|
|
43
|
+
["Min", binary],
|
|
44
|
+
["Max", binary],
|
|
45
|
+
["MulAdd", fn([f32x4Type, f32x4Type], [f32x4Type])],
|
|
46
|
+
["Neg", unary],
|
|
47
|
+
["Abs", unary],
|
|
48
|
+
["Sqrt", unary],
|
|
49
|
+
["Floor", unary],
|
|
50
|
+
["Ceil", unary],
|
|
51
|
+
["Trunc", unary],
|
|
52
|
+
["RoundToEven", unary],
|
|
53
|
+
["Dot3", fn([f32x4Type], [FLOAT32])],
|
|
54
|
+
["Dot4", fn([f32x4Type], [FLOAT32])],
|
|
55
|
+
["Sum", fn([], [FLOAT32])],
|
|
56
|
+
["Lane", fn([INT], [FLOAT32])],
|
|
57
|
+
["WithLane", fn([INT, FLOAT32], [f32x4Type])],
|
|
58
|
+
["Splat", fn([FLOAT32], [f32x4Type])],
|
|
59
|
+
["Swizzle", fn([INT, INT, INT, INT], [f32x4Type])],
|
|
60
|
+
["Equal", compare],
|
|
61
|
+
["NotEqual", compare],
|
|
62
|
+
["Less", compare],
|
|
63
|
+
["LessEqual", compare],
|
|
64
|
+
["Greater", compare],
|
|
65
|
+
["GreaterEqual", compare],
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
const maskBinary = fn([mask32x4Type], [mask32x4Type]);
|
|
69
|
+
mask32x4Type.underlying.methods = new Map([
|
|
70
|
+
["And", maskBinary],
|
|
71
|
+
["Or", maskBinary],
|
|
72
|
+
["Xor", maskBinary],
|
|
73
|
+
["AndNot", maskBinary],
|
|
74
|
+
["Not", fn([], [mask32x4Type])],
|
|
75
|
+
["Any", fn([], [BOOL])],
|
|
76
|
+
["All", fn([], [BOOL])],
|
|
77
|
+
["Bits", fn([], [INT])],
|
|
78
|
+
["Lane", fn([INT], [BOOL])],
|
|
37
79
|
]);
|
|
38
80
|
|
|
39
81
|
types.set("simd.F32x4", f32x4Type);
|
|
40
82
|
types.set("F32x4", f32x4Type);
|
|
83
|
+
types.set("simd.Mask32x4", mask32x4Type);
|
|
84
|
+
types.set("Mask32x4", mask32x4Type);
|
|
41
85
|
|
|
42
86
|
const sharedFloat32 = types.get("shared.Float32") ?? {
|
|
43
87
|
kind: "named",
|
|
@@ -47,6 +91,9 @@ export function setupSimdGlobals(globals, types) {
|
|
|
47
91
|
|
|
48
92
|
const members = {
|
|
49
93
|
F32x4: f32x4Type,
|
|
94
|
+
Mask32x4: mask32x4Type,
|
|
95
|
+
Select: fn([mask32x4Type, f32x4Type, f32x4Type], [f32x4Type]),
|
|
96
|
+
Shuffle: fn([f32x4Type, f32x4Type, INT, INT, INT, INT], [f32x4Type]),
|
|
50
97
|
NewF32x4: {
|
|
51
98
|
kind: "func",
|
|
52
99
|
params: [FLOAT32, FLOAT32, FLOAT32, FLOAT32],
|
|
@@ -62,6 +109,9 @@ export function setupSimdGlobals(globals, types) {
|
|
|
62
109
|
params: [sharedFloat32, INT],
|
|
63
110
|
returns: [f32x4Type],
|
|
64
111
|
},
|
|
112
|
+
LoadF32x4Slice: fn([{ kind: "slice", elem: FLOAT32 }, INT], [f32x4Type]),
|
|
113
|
+
StoreF32x4Slice: fn([{ kind: "slice", elem: FLOAT32 }, INT, f32x4Type], []),
|
|
114
|
+
Pad4: fn([INT], [INT]),
|
|
65
115
|
StoreF32x4: {
|
|
66
116
|
kind: "func",
|
|
67
117
|
params: [sharedFloat32, INT, f32x4Type],
|
|
@@ -19,7 +19,7 @@ export const terminationMethods = {
|
|
|
19
19
|
case "ReturnStmt":
|
|
20
20
|
return true;
|
|
21
21
|
case "BranchStmt":
|
|
22
|
-
return
|
|
22
|
+
return stmt.keyword === "goto";
|
|
23
23
|
case "ExprStmt":
|
|
24
24
|
return this._isPanicCall(stmt.expr);
|
|
25
25
|
case "LabeledStmt":
|
|
@@ -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 ?? []) {
|