gofront 1.7.0 → 1.8.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 +13 -13
- package/package.json +8 -37
- package/src/backend/js/expressions.js +1341 -148
- package/src/backend/js/fmt-runtime.js +573 -0
- package/src/backend/js/index.js +375 -57
- package/src/backend/js/runtime.js +1460 -133
- package/src/backend/js/statements.js +900 -86
- package/src/backend/js/stdlib/bits.js +87 -14
- package/src/backend/js/stdlib/builder.js +41 -6
- package/src/backend/js/stdlib/bytes.js +253 -7
- package/src/backend/js/stdlib/errors.js +2 -1
- package/src/backend/js/stdlib/fmt.js +349 -10
- package/src/backend/js/stdlib/index.js +8 -3
- package/src/backend/js/stdlib/json.js +247 -52
- package/src/backend/js/stdlib/maps.js +0 -8
- package/src/backend/js/stdlib/math.js +17 -1
- package/src/backend/js/stdlib/simd.js +10 -0
- package/src/backend/js/stdlib/slices.js +36 -6
- package/src/backend/js/stdlib/strconv.js +10 -5
- package/src/backend/js/stdlib/strings.js +83 -4
- package/src/backend/js/stdlib/testing.js +7 -0
- package/src/backend/js/stdlib/time.js +79 -55
- package/src/backend/js/stdlib/unicode.js +1 -1
- package/src/backend/js/stdlib/utf8.js +1 -1
- package/src/backend/js/templ.js +38 -76
- package/src/backend/js/type-info.js +272 -0
- package/src/backend/shared/fmt-types.js +188 -0
- package/src/backend/wasm/boundary.js +436 -80
- package/src/backend/wasm/emit-builtins.js +303 -13
- package/src/backend/wasm/emit-exprs.js +1397 -203
- package/src/backend/wasm/emit-maps.js +61 -13
- package/src/backend/wasm/emit-stmts.js +1359 -164
- package/src/backend/wasm/emit.js +512 -77
- package/src/backend/wasm/encode.js +43 -13
- package/src/backend/wasm/globals.js +452 -0
- package/src/backend/wasm/index.js +194 -2489
- package/src/backend/wasm/method-expr.js +381 -0
- package/src/backend/wasm/module-emitter.js +2240 -0
- package/src/backend/wasm/monomorph.js +62 -4
- package/src/backend/wasm/prescan.js +397 -0
- package/src/backend/wasm/stdlib/bytes.js +1804 -127
- package/src/backend/wasm/stdlib/core.js +1574 -199
- package/src/backend/wasm/stdlib/index.js +0 -5
- package/src/backend/wasm/stdlib/io.js +1567 -150
- package/src/backend/wasm/stdlib/packages.js +2 -0
- package/src/backend/wasm/stdlib/simd.js +293 -28
- package/src/backend/wasm/stdlib/time.js +1041 -12
- package/src/backend/wasm/types.js +200 -15
- 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} +236 -10
- package/src/{test-runner.js → cli/test-runner.js} +332 -39
- package/src/{vendor.js → cli/vendor.js} +3 -4
- package/src/compiler.js +107 -269
- package/src/index.js +15 -169
- package/src/{lexer.js → lexer/lexer.js} +102 -55
- package/src/{tokens.js → lexer/tokens.js} +1 -0
- package/src/link/sourcemap.js +97 -0
- package/src/link/stdlib.js +515 -0
- package/src/link/wasm.js +294 -0
- package/src/lower/bounds.js +394 -0
- package/src/lower/boxing.js +1 -1
- package/src/lower/captures.js +176 -32
- package/src/lower/index.js +26 -18
- package/src/lower/json-codecs.js +1398 -0
- package/src/lower/ownership.js +22 -1
- package/src/lower/range.js +86 -1
- package/src/lower/reachability.js +132 -0
- package/src/parser/declarations.js +58 -13
- package/src/parser/expressions.js +29 -7
- package/src/parser/index.js +2 -1
- package/src/parser/statements.js +37 -22
- package/src/{templ-parser.js → parser/templ.js} +138 -15
- package/src/parser/types.js +69 -9
- package/src/resolver.js +22 -1
- package/src/typechecker/assignability.js +176 -17
- package/src/typechecker/const-fold.js +356 -0
- package/src/typechecker/constants.js +256 -0
- package/src/typechecker/expressions.js +931 -122
- package/src/typechecker/index.js +459 -67
- package/src/typechecker/init-order.js +330 -0
- package/src/typechecker/resolve.js +451 -56
- package/src/typechecker/statements.js +90 -9
- package/src/typechecker/stdlib/core.js +333 -55
- package/src/typechecker/stdlib/excluded.js +898 -0
- package/src/typechecker/stdlib/extended.js +322 -26
- package/src/typechecker/{stdlib.js → stdlib/index.js} +5 -5
- package/src/typechecker/stdlib/simd.js +65 -15
- package/src/typechecker/termination.js +1 -1
- package/src/typechecker/types.js +149 -25
- package/stdlib/bytes/iter.go +192 -0
- package/stdlib/bytes/search.go +240 -0
- package/stdlib/bytes/split.go +218 -0
- package/stdlib/cmp/cmp.go +65 -0
- package/stdlib/encoding/json/errors.go +31 -0
- package/stdlib/encoding/json/indent.go +71 -0
- package/stdlib/encoding/json/number.go +12 -0
- package/stdlib/encoding/json/stream.go +173 -0
- package/stdlib/errors/overlay.go +12 -0
- package/stdlib/hash/hash.go +53 -0
- package/stdlib/internal/jsonrt/dec.go +738 -0
- package/stdlib/internal/jsonrt/enc.go +366 -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 +649 -0
- package/stdlib/io/io.go +346 -0
- package/stdlib/iter/iter.go +18 -0
- package/stdlib/maps/iter.go +65 -0
- package/stdlib/math/extra.go +270 -0
- package/stdlib/slices/extra.go +73 -0
- package/stdlib/slices/iter.go +113 -0
- package/stdlib/sort/sort.go +561 -0
- package/stdlib/strconv/quote.go +341 -0
- package/stdlib/strings/extra.go +35 -0
- package/stdlib/strings/iter.go +122 -0
- package/stdlib/sync/extra.go +105 -0
- package/stdlib/unicode/unicode.go +112 -0
- package/stdlib/unicode/utf8/bytes.go +239 -0
- package/src/backend/wasm/const-fold.js +0 -205
- package/src/backend/wasm/emit-stdlib.js +0 -13
- /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
- /package/src/{templ-lexer.js → lexer/templ-lexer.js} +0 -0
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
isArrayType,
|
|
7
|
+
isComplex,
|
|
8
|
+
isComplex64,
|
|
7
9
|
isInterfaceType,
|
|
8
10
|
isPointerToStruct,
|
|
9
11
|
isSigned,
|
|
@@ -11,6 +13,27 @@ import {
|
|
|
11
13
|
toWasmType,
|
|
12
14
|
} from "./types.js";
|
|
13
15
|
|
|
16
|
+
function _complexTypeFor(mod, t) {
|
|
17
|
+
if (!isComplex(t)) return null;
|
|
18
|
+
const is64 = isComplex64(t);
|
|
19
|
+
return mod.getComplexType(is64 ? "complex64" : "complex128");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function _resolveStructType(mod, goType) {
|
|
23
|
+
let t = goType;
|
|
24
|
+
while (t && (t.kind === "TypeName" || t.kind === "Ident")) {
|
|
25
|
+
const info = mod.getStructType(t.name);
|
|
26
|
+
if (info) return info;
|
|
27
|
+
const resolved = mod.checker?.types?.get(t.name);
|
|
28
|
+
if (!resolved || resolved === t) break;
|
|
29
|
+
t = resolved;
|
|
30
|
+
}
|
|
31
|
+
if (t?.kind === "named") return mod.getStructType(t.name) ?? null;
|
|
32
|
+
if ((t?.kind === "struct" || t?.kind === "StructType") && t.name)
|
|
33
|
+
return mod.getStructType(t.name) ?? null;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
14
37
|
export class MapsEmitter {
|
|
15
38
|
emitMapHelper(fn) {
|
|
16
39
|
const kind = fn._mapHelperKind;
|
|
@@ -49,20 +72,11 @@ export class MapsEmitter {
|
|
|
49
72
|
}
|
|
50
73
|
}
|
|
51
74
|
|
|
52
|
-
// Struct info for a Go type used as a map key (named struct or
|
|
75
|
+
// Struct info for a Go type used as a map key (named struct, alias, or complex).
|
|
53
76
|
_structInfoForGoType(goType) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (info) return info;
|
|
58
|
-
const resolved = this.mod.checker?.types?.get(t.name);
|
|
59
|
-
if (!resolved || resolved === t) break;
|
|
60
|
-
t = resolved;
|
|
61
|
-
}
|
|
62
|
-
if (t?.kind === "named") return this.mod.getStructType(t.name) ?? null;
|
|
63
|
-
if ((t?.kind === "struct" || t?.kind === "StructType") && t.name)
|
|
64
|
-
return this.mod.getStructType(t.name) ?? null;
|
|
65
|
-
return null;
|
|
77
|
+
return (
|
|
78
|
+
_complexTypeFor(this.mod, goType) ?? _resolveStructType(this.mod, goType)
|
|
79
|
+
);
|
|
66
80
|
}
|
|
67
81
|
|
|
68
82
|
_unsupportedMapKey(_keyGoType) {
|
|
@@ -166,6 +180,34 @@ export class MapsEmitter {
|
|
|
166
180
|
this.pushInstruction("i32.mul");
|
|
167
181
|
return;
|
|
168
182
|
}
|
|
183
|
+
if (wType === "v128") {
|
|
184
|
+
// Lane-wise like a [4]float32 key: h = 17; h = h*31 + hash(lane).
|
|
185
|
+
const isMask = this._isSimdMaskType(keyGoType);
|
|
186
|
+
const laneType = {
|
|
187
|
+
kind: "basic",
|
|
188
|
+
name: isMask ? "int32" : "float32",
|
|
189
|
+
};
|
|
190
|
+
const h = this.allocLocal(null, "i32");
|
|
191
|
+
this.pushInstruction({ op: "i32.const", value: 17 });
|
|
192
|
+
this.pushInstruction({ op: "local.set", index: h });
|
|
193
|
+
for (let lane = 0; lane < 4; lane++) {
|
|
194
|
+
const lt = this.allocLocal(null, isMask ? "i32" : "f32");
|
|
195
|
+
this.pushInstruction({ op: "local.get", index: keyLocal });
|
|
196
|
+
this.pushInstruction({
|
|
197
|
+
op: isMask ? "i32x4.extract_lane" : "f32x4.extract_lane",
|
|
198
|
+
lane,
|
|
199
|
+
});
|
|
200
|
+
this.pushInstruction({ op: "local.set", index: lt });
|
|
201
|
+
this.pushInstruction({ op: "local.get", index: h });
|
|
202
|
+
this.pushInstruction({ op: "i32.const", value: 31 });
|
|
203
|
+
this.pushInstruction("i32.mul");
|
|
204
|
+
this.emitKeyHash(lt, laneType);
|
|
205
|
+
this.pushInstruction("i32.add");
|
|
206
|
+
this.pushInstruction({ op: "local.set", index: h });
|
|
207
|
+
}
|
|
208
|
+
this.pushInstruction({ op: "local.get", index: h });
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
169
211
|
// Floats: `x + 0.0` folds -0 onto +0 (they are equal keys in Go) and
|
|
170
212
|
// NaN elements never match (f32.eq/f64.eq returns false in key comparison).
|
|
171
213
|
if (wType === "f32") {
|
|
@@ -336,6 +378,12 @@ export class MapsEmitter {
|
|
|
336
378
|
this.pushInstruction("f64.eq");
|
|
337
379
|
return;
|
|
338
380
|
}
|
|
381
|
+
if (wType === "v128") {
|
|
382
|
+
this.pushInstruction({ op: "local.get", index: k1Local });
|
|
383
|
+
this.pushInstruction({ op: "local.get", index: k2Local });
|
|
384
|
+
this._emitSimdEq(keyGoType);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
339
387
|
const structInfo = this._structInfoForGoType(keyGoType);
|
|
340
388
|
if (
|
|
341
389
|
structInfo &&
|