gofront 1.6.0 → 1.7.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 +35 -39
- package/package.json +37 -4
- package/src/backend/js/expressions.js +559 -144
- package/src/backend/js/index.js +174 -49
- package/src/backend/js/runtime.js +1518 -54
- package/src/backend/js/statements.js +91 -73
- package/src/backend/js/stdlib/base64.js +12 -0
- package/src/backend/js/stdlib/binary.js +102 -0
- package/src/backend/js/stdlib/bits.js +15 -1
- package/src/backend/js/stdlib/builder.js +28 -9
- package/src/backend/js/stdlib/bytes.js +75 -18
- package/src/backend/js/stdlib/errors.js +25 -1
- package/src/backend/js/stdlib/fmt.js +70 -13
- package/src/backend/js/stdlib/hex.js +17 -0
- package/src/backend/js/stdlib/html.js +1 -1
- package/src/backend/js/stdlib/index.js +28 -0
- package/src/backend/js/stdlib/io.js +105 -3
- package/src/backend/js/stdlib/json.js +972 -0
- package/src/backend/js/stdlib/math.js +13 -1
- package/src/backend/js/stdlib/path.js +18 -4
- package/src/backend/js/stdlib/rand.js +10 -5
- package/src/backend/js/stdlib/sha256.js +12 -0
- package/src/backend/js/stdlib/simd.js +24 -0
- package/src/backend/js/stdlib/slices.js +52 -26
- package/src/backend/js/stdlib/strconv.js +21 -5
- package/src/backend/js/stdlib/strings.js +148 -15
- package/src/backend/js/stdlib/sync.js +13 -0
- package/src/backend/js/stdlib/time.js +90 -19
- package/src/backend/js/stdlib/unicode.js +2 -2
- package/src/backend/wasm/boundary.js +1225 -41
- package/src/backend/wasm/const-fold.js +205 -0
- package/src/backend/wasm/emit-builtins.js +220 -76
- package/src/backend/wasm/emit-exprs.js +475 -276
- package/src/backend/wasm/emit-maps.js +144 -8
- package/src/backend/wasm/emit-stdlib.js +12 -3005
- package/src/backend/wasm/emit-stmts.js +264 -270
- package/src/backend/wasm/emit.js +124 -87
- package/src/backend/wasm/encode.js +140 -29
- package/src/backend/wasm/index.js +1001 -32
- package/src/backend/wasm/optimize.js +17 -6
- package/src/backend/wasm/stdlib/bytes.js +5039 -0
- package/src/backend/wasm/stdlib/core.js +8903 -0
- package/src/backend/wasm/stdlib/index.js +43 -0
- package/src/backend/wasm/stdlib/io.js +2161 -0
- package/src/backend/wasm/stdlib/packages.js +2400 -0
- package/src/backend/wasm/stdlib/pure.js +720 -0
- package/src/backend/wasm/stdlib/simd.js +234 -0
- package/src/backend/wasm/stdlib/time.js +1200 -0
- package/src/backend/wasm/types.js +174 -1
- package/src/backend/wasm/wat.js +37 -0
- package/src/cli-core.js +1 -1
- package/src/compiler.js +18 -4
- package/src/dts-parser.js +150 -140
- package/src/index.js +2 -6
- package/src/lexer.js +80 -29
- package/src/lower/boxing.js +1 -7
- package/src/lower/captures.js +2 -6
- package/src/lower/embedding.js +2 -1
- package/src/lower/ownership.js +30 -9
- package/src/minifier.js +20 -68
- package/src/parser/declarations.js +3 -6
- package/src/parser/expressions.js +3 -8
- package/src/parser/index.js +18 -3
- package/src/parser/statements.js +25 -38
- package/src/parser/struct-tag.js +144 -0
- package/src/parser/types.js +64 -8
- package/src/resolver.js +2 -27
- package/src/templ-lexer.js +29 -63
- package/src/templ-parser.js +22 -45
- package/src/typechecker/assignability.js +126 -13
- package/src/typechecker/expressions.js +168 -16
- package/src/typechecker/index.js +35 -8
- package/src/typechecker/resolve.js +187 -8
- package/src/typechecker/statements.js +68 -9
- package/src/typechecker/stdlib/core.js +280 -89
- package/src/typechecker/stdlib/extended.js +490 -1
- package/src/typechecker/stdlib/simd.js +73 -0
- package/src/typechecker/stdlib.js +2 -0
- package/src/typechecker/types.js +362 -9
- package/src/vendor.js +86 -11
|
@@ -83,6 +83,29 @@ export const statementCheckMethods = {
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
|
|
86
|
+
_checkDefineCommaOkMap(stmt, scope) {
|
|
87
|
+
if (
|
|
88
|
+
stmt.lhs.length !== 2 ||
|
|
89
|
+
stmt.rhs.length !== 1 ||
|
|
90
|
+
stmt.rhs[0].kind !== "IndexExpr"
|
|
91
|
+
)
|
|
92
|
+
return false;
|
|
93
|
+
const mapBaseType = this.checkExpr(stmt.rhs[0].expr, scope);
|
|
94
|
+
const resolvedBase =
|
|
95
|
+
mapBaseType?.kind === "named" ? mapBaseType.underlying : mapBaseType;
|
|
96
|
+
if (resolvedBase?.kind !== "map") return false;
|
|
97
|
+
this.checkExpr(stmt.rhs[0].index, scope);
|
|
98
|
+
stmt._commaOkMap = true;
|
|
99
|
+
stmt.rhs[0]._mapValueType = resolvedBase.value;
|
|
100
|
+
this._declareDefineVars(stmt, [resolvedBase.value, BOOL], scope);
|
|
101
|
+
const allRedecl = stmt.lhs.every((e) => e._redecl || (e.name ?? e) === "_");
|
|
102
|
+
if (allRedecl && stmt.lhs.length > 0) {
|
|
103
|
+
this.err("no new variables on left side of :=", stmt.lhs[0]);
|
|
104
|
+
}
|
|
105
|
+
stmt._rhsTypes = [resolvedBase.value, BOOL];
|
|
106
|
+
return true;
|
|
107
|
+
},
|
|
108
|
+
|
|
86
109
|
_checkDefineStmt(stmt, scope) {
|
|
87
110
|
// comma-ok type assertion: n, ok := x.(T)
|
|
88
111
|
if (
|
|
@@ -92,10 +115,24 @@ export const statementCheckMethods = {
|
|
|
92
115
|
) {
|
|
93
116
|
stmt.rhs[0]._commaOk = true;
|
|
94
117
|
}
|
|
118
|
+
if (this._checkDefineCommaOkMap(stmt, scope)) return;
|
|
95
119
|
const rhs = stmt.rhs.map((e) => this.checkExpr(e, scope));
|
|
96
|
-
const
|
|
97
|
-
|
|
120
|
+
const isTuple = rhs.length === 1 && rhs[0]?.kind === "tuple";
|
|
121
|
+
const rhsFlat = isTuple ? rhs[0].types : rhs;
|
|
98
122
|
if (this._checkDefineCommaOkAssert(stmt, rhs, scope)) return;
|
|
123
|
+
if (
|
|
124
|
+
stmt.rhs[0]?.kind !== "RangeExpr" &&
|
|
125
|
+
stmt.lhs.length !== rhsFlat.length
|
|
126
|
+
) {
|
|
127
|
+
const vars =
|
|
128
|
+
stmt.lhs.length === 1 ? "1 variable" : `${stmt.lhs.length} variables`;
|
|
129
|
+
const vals = isTuple
|
|
130
|
+
? `returns ${rhsFlat.length} values`
|
|
131
|
+
: rhsFlat.length === 1
|
|
132
|
+
? "1 value"
|
|
133
|
+
: `${rhsFlat.length} values`;
|
|
134
|
+
this.err(`assignment mismatch: ${vars} but ${vals}`, stmt);
|
|
135
|
+
}
|
|
99
136
|
this._declareDefineVars(stmt, rhsFlat, scope);
|
|
100
137
|
const allRedecl = stmt.lhs.every((e) => e._redecl || (e.name ?? e) === "_");
|
|
101
138
|
if (allRedecl && stmt.lhs.length > 0) {
|
|
@@ -110,15 +147,15 @@ export const statementCheckMethods = {
|
|
|
110
147
|
stmt.rhs.length !== 1 ||
|
|
111
148
|
stmt.rhs[0].kind !== "IndexExpr"
|
|
112
149
|
)
|
|
113
|
-
return
|
|
150
|
+
return null;
|
|
114
151
|
const mapBaseType = this.checkExpr(stmt.rhs[0].expr, scope);
|
|
115
152
|
const resolvedBase =
|
|
116
153
|
mapBaseType?.kind === "named" ? mapBaseType.underlying : mapBaseType;
|
|
117
|
-
if (resolvedBase?.kind !== "map") return
|
|
154
|
+
if (resolvedBase?.kind !== "map") return null;
|
|
118
155
|
this.checkExpr(stmt.rhs[0].index, scope);
|
|
119
156
|
stmt._commaOkMap = true;
|
|
120
157
|
stmt.rhs[0]._mapValueType = resolvedBase.value;
|
|
121
|
-
return
|
|
158
|
+
return [resolvedBase.value, BOOL];
|
|
122
159
|
},
|
|
123
160
|
|
|
124
161
|
_checkConstAssignment(stmt, scope) {
|
|
@@ -163,12 +200,34 @@ export const statementCheckMethods = {
|
|
|
163
200
|
},
|
|
164
201
|
|
|
165
202
|
_checkAssignStmt(stmt, scope) {
|
|
166
|
-
|
|
203
|
+
const commaOkMapTypes = this._checkAssignCommaOkMap(stmt, scope);
|
|
167
204
|
if (this._isCommaOkTypeAssertAssign(stmt)) stmt.rhs[0]._commaOk = true;
|
|
168
205
|
this._checkConstAssignment(stmt, scope);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
206
|
+
let rhsFlat;
|
|
207
|
+
if (commaOkMapTypes) {
|
|
208
|
+
rhsFlat = commaOkMapTypes;
|
|
209
|
+
} else {
|
|
210
|
+
const rhs = stmt.rhs.map((e) => this.checkExpr(e, scope));
|
|
211
|
+
const isTuple = rhs.length === 1 && rhs[0]?.kind === "tuple";
|
|
212
|
+
rhsFlat = isTuple ? rhs[0].types : rhs;
|
|
213
|
+
if (
|
|
214
|
+
!stmt.rhs[0]?._commaOk &&
|
|
215
|
+
stmt.rhs[0]?.kind !== "RangeExpr" &&
|
|
216
|
+
stmt.lhs.length !== rhsFlat.length
|
|
217
|
+
) {
|
|
218
|
+
const vars =
|
|
219
|
+
stmt.lhs.length === 1 ? "1 variable" : `${stmt.lhs.length} variables`;
|
|
220
|
+
const vals = isTuple
|
|
221
|
+
? `returns ${rhsFlat.length} values`
|
|
222
|
+
: rhsFlat.length === 1
|
|
223
|
+
? "1 value"
|
|
224
|
+
: `${rhsFlat.length} values`;
|
|
225
|
+
this.err(`assignment mismatch: ${vars} but ${vals}`, stmt);
|
|
226
|
+
}
|
|
227
|
+
if (stmt.rhs[0]?._commaOk) {
|
|
228
|
+
rhsFlat = [rhs[0], BOOL];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
172
231
|
const lhsTypes = stmt.lhs.map((e) => this._checkAssignLhsType(e, scope));
|
|
173
232
|
this._checkAssignTypes(stmt, rhsFlat, lhsTypes);
|
|
174
233
|
},
|
|
@@ -4,81 +4,91 @@
|
|
|
4
4
|
import {
|
|
5
5
|
ANY,
|
|
6
6
|
BOOL,
|
|
7
|
+
BROWSER_GLOBALS,
|
|
7
8
|
ERROR,
|
|
9
|
+
FLOAT32,
|
|
8
10
|
FLOAT64,
|
|
9
11
|
INT,
|
|
12
|
+
INT8,
|
|
13
|
+
INT16,
|
|
14
|
+
INT32,
|
|
15
|
+
INT64,
|
|
10
16
|
STRING,
|
|
17
|
+
UINT,
|
|
11
18
|
UINT8,
|
|
19
|
+
UINT16,
|
|
12
20
|
UINT32,
|
|
13
21
|
UINT64,
|
|
14
22
|
VOID,
|
|
15
23
|
} from "../types.js";
|
|
16
24
|
|
|
17
|
-
const
|
|
25
|
+
const DURATION_T = {
|
|
26
|
+
kind: "named",
|
|
27
|
+
name: "time.Duration",
|
|
28
|
+
underlying: INT64,
|
|
29
|
+
methods: new Map([
|
|
30
|
+
["Nanoseconds", { kind: "func", params: [], returns: [INT64] }],
|
|
31
|
+
["Microseconds", { kind: "func", params: [], returns: [INT64] }],
|
|
32
|
+
["Milliseconds", { kind: "func", params: [], returns: [INT64] }],
|
|
33
|
+
["Seconds", { kind: "func", params: [], returns: [FLOAT64] }],
|
|
34
|
+
["Minutes", { kind: "func", params: [], returns: [FLOAT64] }],
|
|
35
|
+
["Hours", { kind: "func", params: [], returns: [FLOAT64] }],
|
|
36
|
+
["String", { kind: "func", params: [], returns: [STRING] }],
|
|
37
|
+
]),
|
|
38
|
+
};
|
|
39
|
+
const TIME_T = {
|
|
40
|
+
kind: "named",
|
|
41
|
+
name: "time.Time",
|
|
42
|
+
underlying: {
|
|
43
|
+
kind: "struct",
|
|
44
|
+
fields: new Map(),
|
|
45
|
+
methods: new Map(),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
TIME_T.underlying.fields.set("_unixNano", INT64);
|
|
49
|
+
TIME_T.underlying.fields.set("_offset", INT32);
|
|
50
|
+
TIME_T.underlying.methods = new Map([
|
|
51
|
+
["Format", { kind: "func", params: [STRING], returns: [STRING] }],
|
|
52
|
+
["String", { kind: "func", params: [], returns: [STRING] }],
|
|
53
|
+
["Year", { kind: "func", params: [], returns: [INT] }],
|
|
54
|
+
["Month", { kind: "func", params: [], returns: [INT] }],
|
|
55
|
+
["Day", { kind: "func", params: [], returns: [INT] }],
|
|
56
|
+
["Hour", { kind: "func", params: [], returns: [INT] }],
|
|
57
|
+
["Minute", { kind: "func", params: [], returns: [INT] }],
|
|
58
|
+
["Second", { kind: "func", params: [], returns: [INT] }],
|
|
59
|
+
["Weekday", { kind: "func", params: [], returns: [INT] }],
|
|
60
|
+
["Unix", { kind: "func", params: [], returns: [INT64] }],
|
|
61
|
+
["UnixMilli", { kind: "func", params: [], returns: [INT64] }],
|
|
62
|
+
["UnixNano", { kind: "func", params: [], returns: [INT64] }],
|
|
63
|
+
["Nanosecond", { kind: "func", params: [], returns: [INT] }],
|
|
64
|
+
["IsZero", { kind: "func", params: [], returns: [BOOL] }],
|
|
65
|
+
["UTC", { kind: "func", params: [], returns: [TIME_T] }],
|
|
66
|
+
["Local", { kind: "func", params: [], returns: [TIME_T] }],
|
|
67
|
+
["Add", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
|
|
68
|
+
["Sub", { kind: "func", params: [TIME_T], returns: [DURATION_T] }],
|
|
69
|
+
["Before", { kind: "func", params: [TIME_T], returns: [BOOL] }],
|
|
70
|
+
["After", { kind: "func", params: [TIME_T], returns: [BOOL] }],
|
|
71
|
+
["Equal", { kind: "func", params: [TIME_T], returns: [BOOL] }],
|
|
72
|
+
["AddDate", { kind: "func", params: [INT, INT, INT], returns: [TIME_T] }],
|
|
73
|
+
["Truncate", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
|
|
74
|
+
["Round", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
|
|
75
|
+
["Date", { kind: "func", params: [], returns: [INT, INT, INT] }],
|
|
76
|
+
["Clock", { kind: "func", params: [], returns: [INT, INT, INT] }],
|
|
77
|
+
["YearDay", { kind: "func", params: [], returns: [INT] }],
|
|
78
|
+
["ISOWeek", { kind: "func", params: [], returns: [INT, INT] }],
|
|
79
|
+
["Compare", { kind: "func", params: [TIME_T], returns: [INT] }],
|
|
80
|
+
["In", { kind: "func", params: [ANY], returns: [TIME_T] }],
|
|
81
|
+
["Location", { kind: "func", params: [], returns: [ANY] }],
|
|
82
|
+
["Zone", { kind: "func", params: [], returns: [STRING, INT] }],
|
|
83
|
+
]);
|
|
84
|
+
TIME_T.methods = TIME_T.underlying.methods;
|
|
85
|
+
const REPLACER_T = {
|
|
86
|
+
kind: "pointer",
|
|
87
|
+
base: { kind: "named", name: "strings.Replacer" },
|
|
88
|
+
};
|
|
18
89
|
|
|
19
90
|
export function setupCoreGlobals(globals, types) {
|
|
20
|
-
const
|
|
21
|
-
"console",
|
|
22
|
-
"document",
|
|
23
|
-
"window",
|
|
24
|
-
"navigator",
|
|
25
|
-
"location",
|
|
26
|
-
"history",
|
|
27
|
-
"screen",
|
|
28
|
-
"performance",
|
|
29
|
-
"crypto",
|
|
30
|
-
"indexedDB",
|
|
31
|
-
"fetch",
|
|
32
|
-
"setTimeout",
|
|
33
|
-
"setInterval",
|
|
34
|
-
"clearTimeout",
|
|
35
|
-
"clearInterval",
|
|
36
|
-
"requestAnimationFrame",
|
|
37
|
-
"cancelAnimationFrame",
|
|
38
|
-
"Math",
|
|
39
|
-
"JSON",
|
|
40
|
-
"Date",
|
|
41
|
-
"RegExp",
|
|
42
|
-
"Promise",
|
|
43
|
-
"Error",
|
|
44
|
-
"Symbol",
|
|
45
|
-
"String",
|
|
46
|
-
"Number",
|
|
47
|
-
"Boolean",
|
|
48
|
-
"Array",
|
|
49
|
-
"Object",
|
|
50
|
-
"parseInt",
|
|
51
|
-
"parseFloat",
|
|
52
|
-
"isNaN",
|
|
53
|
-
"isFinite",
|
|
54
|
-
"encodeURIComponent",
|
|
55
|
-
"decodeURIComponent",
|
|
56
|
-
"atob",
|
|
57
|
-
"btoa",
|
|
58
|
-
"alert",
|
|
59
|
-
"confirm",
|
|
60
|
-
"prompt",
|
|
61
|
-
"localStorage",
|
|
62
|
-
"sessionStorage",
|
|
63
|
-
"WebSocket",
|
|
64
|
-
"Worker",
|
|
65
|
-
"HTMLElement",
|
|
66
|
-
"Element",
|
|
67
|
-
"Event",
|
|
68
|
-
"CustomEvent",
|
|
69
|
-
"URL",
|
|
70
|
-
"URLSearchParams",
|
|
71
|
-
"FormData",
|
|
72
|
-
"Headers",
|
|
73
|
-
"Request",
|
|
74
|
-
"Response",
|
|
75
|
-
"Blob",
|
|
76
|
-
"File",
|
|
77
|
-
"FileReader",
|
|
78
|
-
"TextEncoder",
|
|
79
|
-
"TextDecoder",
|
|
80
|
-
];
|
|
81
|
-
for (const g of browserGlobals) globals.define(g, ANY);
|
|
91
|
+
for (const g of BROWSER_GLOBALS) globals.define(g, ANY);
|
|
82
92
|
|
|
83
93
|
const fmtVariadic = (ret) => ({
|
|
84
94
|
kind: "func",
|
|
@@ -86,6 +96,12 @@ export function setupCoreGlobals(globals, types) {
|
|
|
86
96
|
returns: [ret],
|
|
87
97
|
variadic: true,
|
|
88
98
|
});
|
|
99
|
+
const fmtPrintVariadic = (ret) => ({
|
|
100
|
+
kind: "func",
|
|
101
|
+
params: [ANY],
|
|
102
|
+
returns: [ret],
|
|
103
|
+
variadic: true,
|
|
104
|
+
});
|
|
89
105
|
globals.define("fmt", {
|
|
90
106
|
kind: "namespace",
|
|
91
107
|
name: "fmt",
|
|
@@ -93,23 +109,23 @@ export function setupCoreGlobals(globals, types) {
|
|
|
93
109
|
Sprintf: fmtVariadic(STRING),
|
|
94
110
|
Errorf: fmtVariadic(ERROR),
|
|
95
111
|
Printf: fmtVariadic(VOID),
|
|
96
|
-
Println:
|
|
97
|
-
Print:
|
|
112
|
+
Println: fmtPrintVariadic(VOID),
|
|
113
|
+
Print: fmtPrintVariadic(VOID),
|
|
98
114
|
Fprintf: {
|
|
99
115
|
kind: "func",
|
|
100
|
-
params: [ANY, STRING],
|
|
116
|
+
params: [ANY, STRING, ANY],
|
|
101
117
|
returns: [INT, ERROR],
|
|
102
118
|
variadic: true,
|
|
103
119
|
},
|
|
104
120
|
Fprintln: {
|
|
105
121
|
kind: "func",
|
|
106
|
-
params: [ANY],
|
|
122
|
+
params: [ANY, ANY],
|
|
107
123
|
returns: [INT, ERROR],
|
|
108
124
|
variadic: true,
|
|
109
125
|
},
|
|
110
126
|
Fprint: {
|
|
111
127
|
kind: "func",
|
|
112
|
-
params: [ANY],
|
|
128
|
+
params: [ANY, ANY],
|
|
113
129
|
returns: [INT, ERROR],
|
|
114
130
|
variadic: true,
|
|
115
131
|
},
|
|
@@ -178,6 +194,7 @@ export function setupCoreGlobals(globals, types) {
|
|
|
178
194
|
},
|
|
179
195
|
EqualFold: strFn2(STRING, BOOL),
|
|
180
196
|
Fields: strFn1({ kind: "slice", elem: STRING }),
|
|
197
|
+
FieldsFunc: strFn2(ANY, { kind: "slice", elem: STRING }),
|
|
181
198
|
Cut: {
|
|
182
199
|
kind: "func",
|
|
183
200
|
params: [STRING, STRING],
|
|
@@ -218,10 +235,11 @@ export function setupCoreGlobals(globals, types) {
|
|
|
218
235
|
NewReplacer: {
|
|
219
236
|
kind: "func",
|
|
220
237
|
params: [STRING],
|
|
221
|
-
returns: [
|
|
238
|
+
returns: [REPLACER_T],
|
|
222
239
|
variadic: true,
|
|
223
240
|
},
|
|
224
241
|
NewReader: { kind: "func", params: [STRING], returns: [ANY] },
|
|
242
|
+
Builder: ANY,
|
|
225
243
|
},
|
|
226
244
|
});
|
|
227
245
|
|
|
@@ -253,6 +271,7 @@ export function setupCoreGlobals(globals, types) {
|
|
|
253
271
|
},
|
|
254
272
|
ToUpper: byFn1(BYTE_SLICE),
|
|
255
273
|
ToLower: byFn1(BYTE_SLICE),
|
|
274
|
+
ToTitle: byFn1(BYTE_SLICE),
|
|
256
275
|
TrimSpace: byFn1(BYTE_SLICE),
|
|
257
276
|
Trim: byFn2(STRING, BYTE_SLICE),
|
|
258
277
|
Equal: byFn2(BYTE_SLICE, BOOL),
|
|
@@ -280,6 +299,8 @@ export function setupCoreGlobals(globals, types) {
|
|
|
280
299
|
LastIndex: byFn2(BYTE_SLICE, INT),
|
|
281
300
|
LastIndexByte: byFn2(INT, INT),
|
|
282
301
|
Fields: byFn1({ kind: "slice", elem: BYTE_SLICE }),
|
|
302
|
+
FieldsFunc: byFn2(ANY, { kind: "slice", elem: BYTE_SLICE }),
|
|
303
|
+
Clone: byFn1(BYTE_SLICE),
|
|
283
304
|
Cut: {
|
|
284
305
|
kind: "func",
|
|
285
306
|
params: [BYTE_SLICE, BYTE_SLICE],
|
|
@@ -294,6 +315,7 @@ export function setupCoreGlobals(globals, types) {
|
|
|
294
315
|
returns: [{ kind: "slice", elem: BYTE_SLICE }],
|
|
295
316
|
},
|
|
296
317
|
NewReader: { kind: "func", params: [BYTE_SLICE], returns: [ANY] },
|
|
318
|
+
Buffer: ANY,
|
|
297
319
|
},
|
|
298
320
|
});
|
|
299
321
|
|
|
@@ -309,7 +331,8 @@ export function setupCoreGlobals(globals, types) {
|
|
|
309
331
|
returns: [STRING],
|
|
310
332
|
},
|
|
311
333
|
FormatBool: { kind: "func", params: [BOOL], returns: [STRING] },
|
|
312
|
-
FormatInt: { kind: "func", params: [
|
|
334
|
+
FormatInt: { kind: "func", params: [INT64, INT], returns: [STRING] },
|
|
335
|
+
FormatUint: { kind: "func", params: [UINT64, INT], returns: [STRING] },
|
|
313
336
|
ParseFloat: {
|
|
314
337
|
kind: "func",
|
|
315
338
|
params: [STRING, INT],
|
|
@@ -320,12 +343,22 @@ export function setupCoreGlobals(globals, types) {
|
|
|
320
343
|
params: [STRING, INT, INT],
|
|
321
344
|
returns: [INT, ERROR],
|
|
322
345
|
},
|
|
346
|
+
ParseUint: {
|
|
347
|
+
kind: "func",
|
|
348
|
+
params: [STRING, INT, INT],
|
|
349
|
+
returns: [UINT64, ERROR],
|
|
350
|
+
},
|
|
323
351
|
ParseBool: { kind: "func", params: [STRING], returns: [BOOL, ERROR] },
|
|
324
352
|
Quote: { kind: "func", params: [STRING], returns: [STRING] },
|
|
325
353
|
Unquote: { kind: "func", params: [STRING], returns: [STRING, ERROR] },
|
|
326
354
|
AppendInt: {
|
|
327
355
|
kind: "func",
|
|
328
|
-
params: [BYTE_SLICE,
|
|
356
|
+
params: [BYTE_SLICE, INT64, INT],
|
|
357
|
+
returns: [BYTE_SLICE],
|
|
358
|
+
},
|
|
359
|
+
AppendUint: {
|
|
360
|
+
kind: "func",
|
|
361
|
+
params: [BYTE_SLICE, UINT64, INT],
|
|
329
362
|
returns: [BYTE_SLICE],
|
|
330
363
|
},
|
|
331
364
|
AppendFloat: {
|
|
@@ -333,6 +366,13 @@ export function setupCoreGlobals(globals, types) {
|
|
|
333
366
|
params: [BYTE_SLICE, FLOAT64, INT, INT, INT],
|
|
334
367
|
returns: [BYTE_SLICE],
|
|
335
368
|
},
|
|
369
|
+
AppendBool: {
|
|
370
|
+
kind: "func",
|
|
371
|
+
params: [BYTE_SLICE, BOOL],
|
|
372
|
+
returns: [BYTE_SLICE],
|
|
373
|
+
},
|
|
374
|
+
ErrSyntax: ERROR,
|
|
375
|
+
ErrRange: ERROR,
|
|
336
376
|
},
|
|
337
377
|
});
|
|
338
378
|
|
|
@@ -421,12 +461,43 @@ export function setupCoreGlobals(globals, types) {
|
|
|
421
461
|
params: [FLOAT64, FLOAT64],
|
|
422
462
|
returns: [FLOAT64],
|
|
423
463
|
},
|
|
464
|
+
Float64bits: { kind: "func", params: [FLOAT64], returns: [UINT64] },
|
|
465
|
+
Float64frombits: { kind: "func", params: [UINT64], returns: [FLOAT64] },
|
|
466
|
+
Float32bits: { kind: "func", params: [FLOAT32], returns: [UINT32] },
|
|
467
|
+
Float32frombits: { kind: "func", params: [UINT32], returns: [FLOAT32] },
|
|
468
|
+
Sinh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
|
|
469
|
+
Cosh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
|
|
470
|
+
Tanh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
|
|
424
471
|
Pi: FLOAT64,
|
|
425
472
|
E: FLOAT64,
|
|
473
|
+
Phi: FLOAT64,
|
|
474
|
+
Sqrt2: FLOAT64,
|
|
475
|
+
SqrtE: FLOAT64,
|
|
476
|
+
SqrtPi: FLOAT64,
|
|
477
|
+
SqrtPhi: FLOAT64,
|
|
478
|
+
Ln2: FLOAT64,
|
|
479
|
+
Log2E: FLOAT64,
|
|
480
|
+
Ln10: FLOAT64,
|
|
481
|
+
Log10E: FLOAT64,
|
|
482
|
+
MaxFloat32: FLOAT32,
|
|
483
|
+
SmallestNonzeroFloat32: FLOAT32,
|
|
426
484
|
MaxFloat64: FLOAT64,
|
|
427
485
|
SmallestNonzeroFloat64: FLOAT64,
|
|
428
486
|
MaxInt: INT,
|
|
429
487
|
MinInt: INT,
|
|
488
|
+
MaxInt8: INT8,
|
|
489
|
+
MinInt8: INT8,
|
|
490
|
+
MaxInt16: INT16,
|
|
491
|
+
MinInt16: INT16,
|
|
492
|
+
MaxInt32: INT32,
|
|
493
|
+
MinInt32: INT32,
|
|
494
|
+
MaxInt64: INT64,
|
|
495
|
+
MinInt64: INT64,
|
|
496
|
+
MaxUint8: UINT8,
|
|
497
|
+
MaxUint16: UINT16,
|
|
498
|
+
MaxUint32: UINT32,
|
|
499
|
+
MaxUint: UINT,
|
|
500
|
+
MaxUint64: UINT64,
|
|
430
501
|
},
|
|
431
502
|
});
|
|
432
503
|
|
|
@@ -442,6 +513,13 @@ export function setupCoreGlobals(globals, types) {
|
|
|
442
513
|
TrailingZeros64: { kind: "func", params: [UINT64], returns: [INT] },
|
|
443
514
|
OnesCount64: { kind: "func", params: [UINT64], returns: [INT] },
|
|
444
515
|
RotateLeft64: { kind: "func", params: [UINT64, INT], returns: [UINT64] },
|
|
516
|
+
ReverseBytes16: { kind: "func", params: [UINT16], returns: [UINT16] },
|
|
517
|
+
ReverseBytes32: { kind: "func", params: [UINT32], returns: [UINT32] },
|
|
518
|
+
ReverseBytes64: { kind: "func", params: [UINT64], returns: [UINT64] },
|
|
519
|
+
Len32: { kind: "func", params: [UINT32], returns: [INT] },
|
|
520
|
+
Len64: { kind: "func", params: [UINT64], returns: [INT] },
|
|
521
|
+
Reverse32: { kind: "func", params: [UINT32], returns: [UINT32] },
|
|
522
|
+
Reverse64: { kind: "func", params: [UINT64], returns: [UINT64] },
|
|
445
523
|
},
|
|
446
524
|
});
|
|
447
525
|
|
|
@@ -452,6 +530,13 @@ export function setupCoreGlobals(globals, types) {
|
|
|
452
530
|
New: { kind: "func", params: [STRING], returns: [ERROR] },
|
|
453
531
|
Is: { kind: "func", params: [ERROR, ERROR], returns: [BOOL] },
|
|
454
532
|
Unwrap: { kind: "func", params: [ERROR], returns: [ERROR] },
|
|
533
|
+
As: { kind: "func", params: [ERROR, ANY], returns: [BOOL] },
|
|
534
|
+
Join: {
|
|
535
|
+
kind: "func",
|
|
536
|
+
params: [ERROR],
|
|
537
|
+
returns: [ERROR],
|
|
538
|
+
variadic: true,
|
|
539
|
+
},
|
|
455
540
|
},
|
|
456
541
|
});
|
|
457
542
|
|
|
@@ -460,23 +545,29 @@ export function setupCoreGlobals(globals, types) {
|
|
|
460
545
|
name: "time",
|
|
461
546
|
members: {
|
|
462
547
|
Now: { kind: "func", params: [], returns: [TIME_T] },
|
|
463
|
-
Since: { kind: "func", params: [TIME_T], returns: [
|
|
548
|
+
Since: { kind: "func", params: [TIME_T], returns: [DURATION_T] },
|
|
464
549
|
Sleep: { kind: "func", params: [ANY], returns: [VOID], async: true },
|
|
465
550
|
Parse: {
|
|
466
551
|
kind: "func",
|
|
467
552
|
params: [STRING, STRING],
|
|
468
553
|
returns: [TIME_T, ERROR],
|
|
469
554
|
},
|
|
470
|
-
Unix: { kind: "func", params: [
|
|
555
|
+
Unix: { kind: "func", params: [INT64, INT64], returns: [TIME_T] },
|
|
556
|
+
UnixMicro: { kind: "func", params: [INT64], returns: [TIME_T] },
|
|
557
|
+
UnixMilli: { kind: "func", params: [INT64], returns: [TIME_T] },
|
|
471
558
|
Date: {
|
|
472
559
|
kind: "func",
|
|
473
560
|
params: [INT, INT, INT, INT, INT, INT, INT, ANY],
|
|
474
561
|
returns: [TIME_T],
|
|
475
562
|
},
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
563
|
+
Duration: DURATION_T,
|
|
564
|
+
Nanosecond: DURATION_T,
|
|
565
|
+
Microsecond: DURATION_T,
|
|
566
|
+
Millisecond: DURATION_T,
|
|
567
|
+
Second: DURATION_T,
|
|
568
|
+
Minute: DURATION_T,
|
|
569
|
+
Hour: DURATION_T,
|
|
570
|
+
Time: TIME_T,
|
|
480
571
|
RFC3339: STRING,
|
|
481
572
|
RFC3339Nano: STRING,
|
|
482
573
|
DateOnly: STRING,
|
|
@@ -505,6 +596,7 @@ export function setupCoreGlobals(globals, types) {
|
|
|
505
596
|
Saturday: INT,
|
|
506
597
|
},
|
|
507
598
|
});
|
|
599
|
+
types.set("time.Duration", DURATION_T);
|
|
508
600
|
types.set("time.Time", TIME_T);
|
|
509
601
|
|
|
510
602
|
const runeToStr = { kind: "func", params: [INT], returns: [BOOL] };
|
|
@@ -553,7 +645,15 @@ export function setupCoreGlobals(globals, types) {
|
|
|
553
645
|
name: "slices",
|
|
554
646
|
members: {
|
|
555
647
|
Contains: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
|
|
648
|
+
ContainsFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
|
|
556
649
|
Index: { kind: "func", params: [ANY, ANY], returns: [INT] },
|
|
650
|
+
IndexFunc: { kind: "func", params: [ANY, ANY], returns: [INT] },
|
|
651
|
+
BinarySearch: { kind: "func", params: [ANY, ANY], returns: [INT, BOOL] },
|
|
652
|
+
BinarySearchFunc: {
|
|
653
|
+
kind: "func",
|
|
654
|
+
params: [ANY, ANY, ANY],
|
|
655
|
+
returns: [INT, BOOL],
|
|
656
|
+
},
|
|
557
657
|
Equal: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
|
|
558
658
|
Compare: { kind: "func", params: [ANY, ANY], returns: [INT] },
|
|
559
659
|
Sort: { kind: "func", params: [ANY], returns: [VOID] },
|
|
@@ -562,14 +662,34 @@ export function setupCoreGlobals(globals, types) {
|
|
|
562
662
|
IsSorted: { kind: "func", params: [ANY], returns: [BOOL] },
|
|
563
663
|
IsSortedFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
|
|
564
664
|
Reverse: { kind: "func", params: [ANY], returns: [VOID] },
|
|
565
|
-
Max: {
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
665
|
+
Max: {
|
|
666
|
+
kind: "func",
|
|
667
|
+
params: [ANY],
|
|
668
|
+
returns: [ANY],
|
|
669
|
+
_derivedReturn: "elemOfArg0",
|
|
670
|
+
},
|
|
671
|
+
Min: {
|
|
672
|
+
kind: "func",
|
|
673
|
+
params: [ANY],
|
|
674
|
+
returns: [ANY],
|
|
675
|
+
_derivedReturn: "elemOfArg0",
|
|
676
|
+
},
|
|
677
|
+
MaxFunc: {
|
|
678
|
+
kind: "func",
|
|
679
|
+
params: [ANY, ANY],
|
|
680
|
+
returns: [ANY],
|
|
681
|
+
_derivedReturn: "elemOfArg0",
|
|
682
|
+
},
|
|
683
|
+
MinFunc: {
|
|
684
|
+
kind: "func",
|
|
685
|
+
params: [ANY, ANY],
|
|
686
|
+
returns: [ANY],
|
|
687
|
+
_derivedReturn: "elemOfArg0",
|
|
688
|
+
},
|
|
569
689
|
Clone: sameSlice([ANY]),
|
|
570
690
|
Compact: sameSlice([ANY]),
|
|
571
691
|
CompactFunc: sameSlice([ANY, ANY]),
|
|
572
|
-
Concat:
|
|
692
|
+
Concat: sameSlice([ANY], { variadic: true }),
|
|
573
693
|
Delete: sameSlice([ANY, INT, INT]),
|
|
574
694
|
DeleteFunc: sameSlice([ANY, ANY]),
|
|
575
695
|
Insert: sameSlice([ANY, INT, ANY], { variadic: true }),
|
|
@@ -589,22 +709,93 @@ export function setupCoreGlobals(globals, types) {
|
|
|
589
709
|
});
|
|
590
710
|
|
|
591
711
|
const BYTE_SLICE_IO = { kind: "slice", elem: UINT8 };
|
|
712
|
+
const IO_WRITER = {
|
|
713
|
+
kind: "interface",
|
|
714
|
+
name: "io.Writer",
|
|
715
|
+
methods: new Map([
|
|
716
|
+
[
|
|
717
|
+
"Write",
|
|
718
|
+
{ kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
|
|
719
|
+
],
|
|
720
|
+
]),
|
|
721
|
+
};
|
|
722
|
+
const IO_READER = {
|
|
723
|
+
kind: "interface",
|
|
724
|
+
name: "io.Reader",
|
|
725
|
+
methods: new Map([
|
|
726
|
+
[
|
|
727
|
+
"Read",
|
|
728
|
+
{ kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
|
|
729
|
+
],
|
|
730
|
+
]),
|
|
731
|
+
};
|
|
732
|
+
const IO_CLOSER = {
|
|
733
|
+
kind: "interface",
|
|
734
|
+
name: "io.Closer",
|
|
735
|
+
methods: new Map([
|
|
736
|
+
["Close", { kind: "func", params: [], returns: [ERROR] }],
|
|
737
|
+
]),
|
|
738
|
+
};
|
|
739
|
+
const IO_READWRITER = {
|
|
740
|
+
kind: "interface",
|
|
741
|
+
name: "io.ReadWriter",
|
|
742
|
+
methods: new Map([
|
|
743
|
+
[
|
|
744
|
+
"Read",
|
|
745
|
+
{ kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
|
|
746
|
+
],
|
|
747
|
+
[
|
|
748
|
+
"Write",
|
|
749
|
+
{ kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
|
|
750
|
+
],
|
|
751
|
+
]),
|
|
752
|
+
};
|
|
592
753
|
globals.define("io", {
|
|
593
754
|
kind: "namespace",
|
|
594
755
|
name: "io",
|
|
595
756
|
members: {
|
|
596
|
-
Writer:
|
|
597
|
-
Reader:
|
|
757
|
+
Writer: IO_WRITER,
|
|
758
|
+
Reader: IO_READER,
|
|
759
|
+
Closer: IO_CLOSER,
|
|
760
|
+
ReadWriter: IO_READWRITER,
|
|
598
761
|
EOF: ERROR,
|
|
762
|
+
ErrUnexpectedEOF: ERROR,
|
|
763
|
+
ErrShortWrite: ERROR,
|
|
599
764
|
WriteString: {
|
|
600
765
|
kind: "func",
|
|
601
|
-
params: [
|
|
766
|
+
params: [IO_WRITER, STRING],
|
|
767
|
+
returns: [INT, ERROR],
|
|
768
|
+
},
|
|
769
|
+
ReadFull: {
|
|
770
|
+
kind: "func",
|
|
771
|
+
params: [IO_READER, BYTE_SLICE_IO],
|
|
602
772
|
returns: [INT, ERROR],
|
|
603
773
|
},
|
|
604
|
-
ReadAll: {
|
|
605
|
-
|
|
774
|
+
ReadAll: {
|
|
775
|
+
kind: "func",
|
|
776
|
+
params: [IO_READER],
|
|
777
|
+
returns: [BYTE_SLICE_IO, ERROR],
|
|
778
|
+
},
|
|
779
|
+
LimitReader: {
|
|
780
|
+
kind: "func",
|
|
781
|
+
params: [IO_READER, INT64],
|
|
782
|
+
returns: [IO_READER],
|
|
783
|
+
},
|
|
784
|
+
Copy: {
|
|
785
|
+
kind: "func",
|
|
786
|
+
params: [IO_WRITER, IO_READER],
|
|
787
|
+
returns: [INT64, ERROR],
|
|
788
|
+
},
|
|
789
|
+
CopyN: {
|
|
790
|
+
kind: "func",
|
|
791
|
+
params: [IO_WRITER, IO_READER, INT64],
|
|
792
|
+
returns: [INT64, ERROR],
|
|
793
|
+
},
|
|
794
|
+
Discard: IO_WRITER,
|
|
606
795
|
},
|
|
607
796
|
});
|
|
608
|
-
types.set("io.Writer",
|
|
609
|
-
types.set("io.Reader",
|
|
797
|
+
types.set("io.Writer", IO_WRITER);
|
|
798
|
+
types.set("io.Reader", IO_READER);
|
|
799
|
+
types.set("io.Closer", IO_CLOSER);
|
|
800
|
+
types.set("io.ReadWriter", IO_READWRITER);
|
|
610
801
|
}
|