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.
Files changed (194) hide show
  1. package/README.md +14 -14
  2. package/package.json +10 -38
  3. package/src/backend/js/expressions.js +2060 -389
  4. package/src/backend/js/index.js +586 -174
  5. package/src/backend/js/natives.js +383 -0
  6. package/src/backend/js/runtime.js +936 -1644
  7. package/src/backend/js/statements.js +1349 -132
  8. package/src/backend/js/stdlib/index.js +51 -94
  9. package/src/backend/js/templ.js +67 -118
  10. package/src/backend/js/type-info.js +436 -0
  11. package/src/backend/shared/fixed-float.js +20 -0
  12. package/src/backend/shared/fmt-types.js +80 -0
  13. package/src/backend/shared/host-unicode.js +36 -0
  14. package/src/backend/wasm/boundary.js +753 -872
  15. package/src/backend/wasm/emit-builtins.js +914 -237
  16. package/src/backend/wasm/emit-exprs.js +1456 -195
  17. package/src/backend/wasm/emit-maps.js +78 -380
  18. package/src/backend/wasm/emit-stmts.js +1659 -214
  19. package/src/backend/wasm/emit.js +614 -88
  20. package/src/backend/wasm/encode.js +43 -13
  21. package/src/backend/wasm/globals.js +491 -0
  22. package/src/backend/wasm/glue.js +2 -4
  23. package/src/backend/wasm/index.js +406 -3195
  24. package/src/backend/wasm/method-expr.js +392 -0
  25. package/src/backend/wasm/module-emitter.js +1615 -0
  26. package/src/backend/wasm/monomorph.js +164 -9
  27. package/src/backend/wasm/natives.js +596 -0
  28. package/src/backend/wasm/prescan.js +249 -0
  29. package/src/backend/wasm/prune-funcs.js +89 -0
  30. package/src/backend/wasm/stdlib/index.js +2 -37
  31. package/src/backend/wasm/stdlib/simd.js +293 -28
  32. package/src/backend/wasm/types.js +260 -27
  33. package/src/backend/wasm/variadic.js +93 -0
  34. package/src/backend/wasm/wat.js +47 -20
  35. package/src/{cli-core.js → cli/cli-core.js} +241 -11
  36. package/src/{test-runner.js → cli/test-runner.js} +188 -122
  37. package/src/{vendor.js → cli/vendor.js} +3 -4
  38. package/src/compiler.js +202 -386
  39. package/src/index.js +15 -169
  40. package/src/{lexer.js → lexer/lexer.js} +203 -62
  41. package/src/{templ-lexer.js → lexer/templ-lexer.js} +61 -18
  42. package/src/{tokens.js → lexer/tokens.js} +2 -0
  43. package/src/link/sourcemap.js +97 -0
  44. package/src/link/stdlib.js +737 -0
  45. package/src/link/type-names.js +148 -0
  46. package/src/link/wasm.js +318 -0
  47. package/src/lower/bounds.js +547 -0
  48. package/src/lower/boxing.js +1 -1
  49. package/src/lower/captures.js +267 -64
  50. package/src/lower/embedding.js +32 -3
  51. package/src/lower/errors-as.js +196 -0
  52. package/src/lower/fmt-formatters.js +905 -0
  53. package/src/lower/functions.js +2 -0
  54. package/src/lower/gen-types.js +274 -0
  55. package/src/lower/index.js +33 -19
  56. package/src/lower/json-codecs.js +1379 -0
  57. package/src/lower/ownership.js +47 -8
  58. package/src/lower/range.js +86 -1
  59. package/src/lower/reachability.js +150 -0
  60. package/src/lower/walk.js +12 -0
  61. package/src/parser/declarations.js +83 -15
  62. package/src/parser/expressions.js +110 -18
  63. package/src/parser/index.js +2 -1
  64. package/src/parser/statements.js +38 -22
  65. package/src/{templ-parser.js → parser/templ.js} +179 -17
  66. package/src/parser/types.js +70 -9
  67. package/src/resolver.js +21 -1
  68. package/src/typechecker/assignability.js +291 -19
  69. package/src/typechecker/const-fold.js +399 -0
  70. package/src/typechecker/constants.js +282 -0
  71. package/src/typechecker/expressions.js +1220 -183
  72. package/src/typechecker/index.js +659 -92
  73. package/src/typechecker/init-order.js +426 -0
  74. package/src/typechecker/operand-text.js +40 -0
  75. package/src/typechecker/resolve.js +613 -62
  76. package/src/typechecker/statements.js +212 -20
  77. package/src/typechecker/stdlib/excluded.js +902 -0
  78. package/src/typechecker/stdlib/index.js +38 -0
  79. package/src/typechecker/stdlib/simd.js +65 -15
  80. package/src/typechecker/termination.js +11 -2
  81. package/src/typechecker/types.js +268 -514
  82. package/stdlib/bytes/buffer.go +479 -0
  83. package/stdlib/bytes/bytes.go +1010 -0
  84. package/stdlib/bytes/reader.go +161 -0
  85. package/stdlib/cmp/cmp.go +65 -0
  86. package/stdlib/context/context.go +115 -0
  87. package/stdlib/crypto/rand/rand.go +34 -0
  88. package/stdlib/crypto/sha256/sha256.go +249 -0
  89. package/stdlib/encoding/base64/base64.go +331 -0
  90. package/stdlib/encoding/binary/binary.go +332 -0
  91. package/stdlib/encoding/hex/hex.go +140 -0
  92. package/stdlib/encoding/json/errors.go +31 -0
  93. package/stdlib/encoding/json/indent.go +71 -0
  94. package/stdlib/encoding/json/json.go +62 -0
  95. package/stdlib/encoding/json/number.go +12 -0
  96. package/stdlib/encoding/json/stream.go +173 -0
  97. package/stdlib/errors/errors.go +174 -0
  98. package/stdlib/fmt/errors.go +110 -0
  99. package/stdlib/fmt/format.go +732 -0
  100. package/stdlib/fmt/print.go +1232 -0
  101. package/stdlib/gom/gom.go +293 -0
  102. package/stdlib/hash/hash.go +53 -0
  103. package/stdlib/html/html.go +251 -0
  104. package/stdlib/internal/fmtrt/fmtrt.go +163 -0
  105. package/stdlib/internal/jsonrt/dec.go +871 -0
  106. package/stdlib/internal/jsonrt/enc.go +516 -0
  107. package/stdlib/internal/jsonrt/indent.go +135 -0
  108. package/stdlib/internal/jsonrt/number.go +27 -0
  109. package/stdlib/internal/jsonrt/reader.go +73 -0
  110. package/stdlib/internal/jsonrt/scanner.go +658 -0
  111. package/stdlib/io/io.go +502 -0
  112. package/stdlib/iter/iter.go +18 -0
  113. package/stdlib/maps/maps.go +131 -0
  114. package/stdlib/math/bits/bits.go +507 -0
  115. package/stdlib/math/extra.go +272 -0
  116. package/stdlib/math/math.go +439 -0
  117. package/stdlib/math/rand/rand.go +297 -0
  118. package/stdlib/os/os.go +93 -0
  119. package/stdlib/path/filepath/filepath.go +47 -0
  120. package/stdlib/path/path.go +394 -0
  121. package/stdlib/regexp/regexp.go +231 -0
  122. package/stdlib/slices/slices.go +526 -0
  123. package/stdlib/slices/sort.go +209 -0
  124. package/stdlib/slices/zsort_cmp.go +480 -0
  125. package/stdlib/slices/zsort_ordered.go +482 -0
  126. package/stdlib/sort/sort.go +500 -0
  127. package/stdlib/sort/zsort_func.go +480 -0
  128. package/stdlib/sort/zsort_iface.go +480 -0
  129. package/stdlib/strconv/float.go +1699 -0
  130. package/stdlib/strconv/isprint.go +752 -0
  131. package/stdlib/strconv/quote.go +526 -0
  132. package/stdlib/strconv/strconv.go +616 -0
  133. package/stdlib/strings/builder.go +95 -0
  134. package/stdlib/strings/reader.go +163 -0
  135. package/stdlib/strings/replacer.go +102 -0
  136. package/stdlib/strings/strings.go +807 -0
  137. package/stdlib/sync/sync.go +268 -0
  138. package/stdlib/testing/async_js.go +61 -0
  139. package/stdlib/testing/benchmark.go +297 -0
  140. package/stdlib/testing/testing.go +523 -0
  141. package/stdlib/time/duration.go +233 -0
  142. package/stdlib/time/format.go +745 -0
  143. package/stdlib/time/parse.go +790 -0
  144. package/stdlib/time/sleep_js.go +63 -0
  145. package/stdlib/time/time.go +834 -0
  146. package/stdlib/unicode/unicode.go +250 -0
  147. package/stdlib/unicode/utf8/utf8.go +464 -0
  148. package/src/backend/js/stdlib/base64.js +0 -12
  149. package/src/backend/js/stdlib/binary.js +0 -102
  150. package/src/backend/js/stdlib/bits.js +0 -46
  151. package/src/backend/js/stdlib/builder.js +0 -63
  152. package/src/backend/js/stdlib/bytes.js +0 -122
  153. package/src/backend/js/stdlib/errors.js +0 -44
  154. package/src/backend/js/stdlib/fmt.js +0 -178
  155. package/src/backend/js/stdlib/gom.js +0 -155
  156. package/src/backend/js/stdlib/hex.js +0 -17
  157. package/src/backend/js/stdlib/html.js +0 -20
  158. package/src/backend/js/stdlib/io.js +0 -137
  159. package/src/backend/js/stdlib/json.js +0 -972
  160. package/src/backend/js/stdlib/maps.js +0 -45
  161. package/src/backend/js/stdlib/math.js +0 -69
  162. package/src/backend/js/stdlib/os.js +0 -13
  163. package/src/backend/js/stdlib/path.js +0 -48
  164. package/src/backend/js/stdlib/rand.js +0 -32
  165. package/src/backend/js/stdlib/regexp.js +0 -54
  166. package/src/backend/js/stdlib/sha256.js +0 -12
  167. package/src/backend/js/stdlib/shared.js +0 -17
  168. package/src/backend/js/stdlib/simd.js +0 -24
  169. package/src/backend/js/stdlib/slices.js +0 -77
  170. package/src/backend/js/stdlib/sort.js +0 -30
  171. package/src/backend/js/stdlib/strconv.js +0 -74
  172. package/src/backend/js/stdlib/strings.js +0 -222
  173. package/src/backend/js/stdlib/sync.js +0 -13
  174. package/src/backend/js/stdlib/testing.js +0 -34
  175. package/src/backend/js/stdlib/time.js +0 -128
  176. package/src/backend/js/stdlib/unicode.js +0 -25
  177. package/src/backend/js/stdlib/utf8.js +0 -26
  178. package/src/backend/wasm/const-fold.js +0 -205
  179. package/src/backend/wasm/emit-stdlib.js +0 -13
  180. package/src/backend/wasm/stdlib/bytes.js +0 -5039
  181. package/src/backend/wasm/stdlib/core.js +0 -8903
  182. package/src/backend/wasm/stdlib/io.js +0 -2161
  183. package/src/backend/wasm/stdlib/packages.js +0 -2400
  184. package/src/backend/wasm/stdlib/pure.js +0 -720
  185. package/src/backend/wasm/stdlib/time.js +0 -1200
  186. package/src/typechecker/stdlib/core.js +0 -801
  187. package/src/typechecker/stdlib/extended.js +0 -914
  188. package/src/typechecker/stdlib.js +0 -22
  189. /package/src/{asset-manager.js → cli/asset-manager.js} +0 -0
  190. /package/src/{colors.js → cli/colors.js} +0 -0
  191. /package/src/{dev-server.js → cli/dev-server.js} +0 -0
  192. /package/src/{minifier.js → cli/minifier.js} +0 -0
  193. /package/src/{project-config.js → cli/project-config.js} +0 -0
  194. /package/src/{pwa.js → cli/pwa.js} +0 -0
@@ -1,801 +0,0 @@
1
- // Core standard library type definitions — browser globals, fmt, strings, bytes,
2
- // strconv, sort, math, errors, time, unicode, os, slices, html, io.
3
-
4
- import {
5
- ANY,
6
- BOOL,
7
- BROWSER_GLOBALS,
8
- ERROR,
9
- FLOAT32,
10
- FLOAT64,
11
- INT,
12
- INT8,
13
- INT16,
14
- INT32,
15
- INT64,
16
- STRING,
17
- UINT,
18
- UINT8,
19
- UINT16,
20
- UINT32,
21
- UINT64,
22
- VOID,
23
- } from "../types.js";
24
-
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
- };
89
-
90
- export function setupCoreGlobals(globals, types) {
91
- for (const g of BROWSER_GLOBALS) globals.define(g, ANY);
92
-
93
- const fmtVariadic = (ret) => ({
94
- kind: "func",
95
- params: [STRING, ANY],
96
- returns: [ret],
97
- variadic: true,
98
- });
99
- const fmtPrintVariadic = (ret) => ({
100
- kind: "func",
101
- params: [ANY],
102
- returns: [ret],
103
- variadic: true,
104
- });
105
- globals.define("fmt", {
106
- kind: "namespace",
107
- name: "fmt",
108
- members: {
109
- Sprintf: fmtVariadic(STRING),
110
- Errorf: fmtVariadic(ERROR),
111
- Printf: fmtVariadic(VOID),
112
- Println: fmtPrintVariadic(VOID),
113
- Print: fmtPrintVariadic(VOID),
114
- Fprintf: {
115
- kind: "func",
116
- params: [ANY, STRING, ANY],
117
- returns: [INT, ERROR],
118
- variadic: true,
119
- },
120
- Fprintln: {
121
- kind: "func",
122
- params: [ANY, ANY],
123
- returns: [INT, ERROR],
124
- variadic: true,
125
- },
126
- Fprint: {
127
- kind: "func",
128
- params: [ANY, ANY],
129
- returns: [INT, ERROR],
130
- variadic: true,
131
- },
132
- Sscan: {
133
- kind: "func",
134
- params: [STRING, ANY],
135
- returns: [INT, ERROR],
136
- variadic: true,
137
- },
138
- Sscanln: {
139
- kind: "func",
140
- params: [STRING, ANY],
141
- returns: [INT, ERROR],
142
- variadic: true,
143
- },
144
- Sscanf: {
145
- kind: "func",
146
- params: [STRING, STRING, ANY],
147
- returns: [INT, ERROR],
148
- variadic: true,
149
- },
150
- },
151
- });
152
-
153
- const strFn1 = (ret) => ({ kind: "func", params: [STRING], returns: [ret] });
154
- const strFn2 = (p2, ret) => ({
155
- kind: "func",
156
- params: [STRING, p2],
157
- returns: [ret],
158
- });
159
- const strFn3 = (p2, p3, ret) => ({
160
- kind: "func",
161
- params: [STRING, p2, p3],
162
- returns: [ret],
163
- });
164
- globals.define("strings", {
165
- kind: "namespace",
166
- name: "strings",
167
- members: {
168
- Contains: strFn2(STRING, BOOL),
169
- HasPrefix: strFn2(STRING, BOOL),
170
- HasSuffix: strFn2(STRING, BOOL),
171
- Index: strFn2(STRING, INT),
172
- LastIndex: strFn2(STRING, INT),
173
- Count: strFn2(STRING, INT),
174
- Repeat: strFn2(INT, STRING),
175
- Replace: {
176
- kind: "func",
177
- params: [STRING, STRING, STRING, INT],
178
- returns: [STRING],
179
- },
180
- ReplaceAll: strFn3(STRING, STRING, STRING),
181
- ToUpper: strFn1(STRING),
182
- ToLower: strFn1(STRING),
183
- TrimSpace: strFn1(STRING),
184
- Trim: strFn2(STRING, STRING),
185
- TrimPrefix: strFn2(STRING, STRING),
186
- TrimSuffix: strFn2(STRING, STRING),
187
- TrimLeft: strFn2(STRING, STRING),
188
- TrimRight: strFn2(STRING, STRING),
189
- Split: strFn2(STRING, { kind: "slice", elem: STRING }),
190
- Join: {
191
- kind: "func",
192
- params: [{ kind: "slice", elem: STRING }, STRING],
193
- returns: [STRING],
194
- },
195
- EqualFold: strFn2(STRING, BOOL),
196
- Fields: strFn1({ kind: "slice", elem: STRING }),
197
- FieldsFunc: strFn2(ANY, { kind: "slice", elem: STRING }),
198
- Cut: {
199
- kind: "func",
200
- params: [STRING, STRING],
201
- returns: [STRING, STRING, BOOL],
202
- },
203
- CutPrefix: {
204
- kind: "func",
205
- params: [STRING, STRING],
206
- returns: [STRING, BOOL],
207
- },
208
- CutSuffix: {
209
- kind: "func",
210
- params: [STRING, STRING],
211
- returns: [STRING, BOOL],
212
- },
213
- SplitN: strFn3(STRING, INT, { kind: "slice", elem: STRING }),
214
- SplitAfter: strFn2(STRING, { kind: "slice", elem: STRING }),
215
- SplitAfterN: strFn3(STRING, INT, { kind: "slice", elem: STRING }),
216
- IndexAny: strFn2(STRING, INT),
217
- LastIndexAny: strFn2(STRING, INT),
218
- ContainsAny: strFn2(STRING, BOOL),
219
- ContainsRune: strFn2(INT, BOOL),
220
- IndexRune: strFn2(INT, INT),
221
- IndexByte: strFn2(INT, INT),
222
- LastIndexByte: strFn2(INT, INT),
223
- Map: {
224
- kind: "func",
225
- params: [ANY, STRING],
226
- returns: [STRING],
227
- },
228
- Title: strFn1(STRING),
229
- ToTitle: strFn1(STRING),
230
- TrimFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
231
- TrimLeftFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
232
- TrimRightFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
233
- IndexFunc: { kind: "func", params: [STRING, ANY], returns: [INT] },
234
- LastIndexFunc: { kind: "func", params: [STRING, ANY], returns: [INT] },
235
- NewReplacer: {
236
- kind: "func",
237
- params: [STRING],
238
- returns: [REPLACER_T],
239
- variadic: true,
240
- },
241
- NewReader: { kind: "func", params: [STRING], returns: [ANY] },
242
- Builder: ANY,
243
- },
244
- });
245
-
246
- const BYTE_SLICE = { kind: "slice", elem: UINT8 };
247
- const byFn1 = (ret) => ({
248
- kind: "func",
249
- params: [BYTE_SLICE],
250
- returns: [ret],
251
- });
252
- const byFn2 = (p2, ret) => ({
253
- kind: "func",
254
- params: [BYTE_SLICE, p2],
255
- returns: [ret],
256
- });
257
- globals.define("bytes", {
258
- kind: "namespace",
259
- name: "bytes",
260
- members: {
261
- Contains: byFn2(BYTE_SLICE, BOOL),
262
- HasPrefix: byFn2(BYTE_SLICE, BOOL),
263
- HasSuffix: byFn2(BYTE_SLICE, BOOL),
264
- Index: byFn2(BYTE_SLICE, INT),
265
- Count: byFn2(BYTE_SLICE, INT),
266
- Repeat: byFn2(INT, BYTE_SLICE),
267
- Replace: {
268
- kind: "func",
269
- params: [BYTE_SLICE, BYTE_SLICE, BYTE_SLICE, INT],
270
- returns: [BYTE_SLICE],
271
- },
272
- ToUpper: byFn1(BYTE_SLICE),
273
- ToLower: byFn1(BYTE_SLICE),
274
- ToTitle: byFn1(BYTE_SLICE),
275
- TrimSpace: byFn1(BYTE_SLICE),
276
- Trim: byFn2(STRING, BYTE_SLICE),
277
- Equal: byFn2(BYTE_SLICE, BOOL),
278
- Split: byFn2(BYTE_SLICE, { kind: "slice", elem: BYTE_SLICE }),
279
- Join: {
280
- kind: "func",
281
- params: [{ kind: "slice", elem: BYTE_SLICE }, BYTE_SLICE],
282
- returns: [BYTE_SLICE],
283
- },
284
- ReplaceAll: {
285
- kind: "func",
286
- params: [BYTE_SLICE, BYTE_SLICE, BYTE_SLICE],
287
- returns: [BYTE_SLICE],
288
- },
289
- TrimPrefix: byFn2(BYTE_SLICE, BYTE_SLICE),
290
- TrimSuffix: byFn2(BYTE_SLICE, BYTE_SLICE),
291
- TrimLeft: byFn2(STRING, BYTE_SLICE),
292
- TrimRight: byFn2(STRING, BYTE_SLICE),
293
- TrimFunc: {
294
- kind: "func",
295
- params: [BYTE_SLICE, ANY],
296
- returns: [BYTE_SLICE],
297
- },
298
- IndexByte: byFn2(INT, INT),
299
- LastIndex: byFn2(BYTE_SLICE, INT),
300
- LastIndexByte: byFn2(INT, INT),
301
- Fields: byFn1({ kind: "slice", elem: BYTE_SLICE }),
302
- FieldsFunc: byFn2(ANY, { kind: "slice", elem: BYTE_SLICE }),
303
- Clone: byFn1(BYTE_SLICE),
304
- Cut: {
305
- kind: "func",
306
- params: [BYTE_SLICE, BYTE_SLICE],
307
- returns: [BYTE_SLICE, BYTE_SLICE, BOOL],
308
- },
309
- ContainsAny: byFn2(STRING, BOOL),
310
- ContainsRune: byFn2(INT, BOOL),
311
- Map: { kind: "func", params: [ANY, BYTE_SLICE], returns: [BYTE_SLICE] },
312
- SplitN: {
313
- kind: "func",
314
- params: [BYTE_SLICE, BYTE_SLICE, INT],
315
- returns: [{ kind: "slice", elem: BYTE_SLICE }],
316
- },
317
- NewReader: { kind: "func", params: [BYTE_SLICE], returns: [ANY] },
318
- Buffer: ANY,
319
- },
320
- });
321
-
322
- globals.define("strconv", {
323
- kind: "namespace",
324
- name: "strconv",
325
- members: {
326
- Itoa: { kind: "func", params: [INT], returns: [STRING] },
327
- Atoi: { kind: "func", params: [STRING], returns: [INT, ERROR] },
328
- FormatFloat: {
329
- kind: "func",
330
- params: [FLOAT64, INT, INT, INT],
331
- returns: [STRING],
332
- },
333
- FormatBool: { kind: "func", params: [BOOL], returns: [STRING] },
334
- FormatInt: { kind: "func", params: [INT64, INT], returns: [STRING] },
335
- FormatUint: { kind: "func", params: [UINT64, INT], returns: [STRING] },
336
- ParseFloat: {
337
- kind: "func",
338
- params: [STRING, INT],
339
- returns: [FLOAT64, ERROR],
340
- },
341
- ParseInt: {
342
- kind: "func",
343
- params: [STRING, INT, INT],
344
- returns: [INT, ERROR],
345
- },
346
- ParseUint: {
347
- kind: "func",
348
- params: [STRING, INT, INT],
349
- returns: [UINT64, ERROR],
350
- },
351
- ParseBool: { kind: "func", params: [STRING], returns: [BOOL, ERROR] },
352
- Quote: { kind: "func", params: [STRING], returns: [STRING] },
353
- Unquote: { kind: "func", params: [STRING], returns: [STRING, ERROR] },
354
- AppendInt: {
355
- kind: "func",
356
- params: [BYTE_SLICE, INT64, INT],
357
- returns: [BYTE_SLICE],
358
- },
359
- AppendUint: {
360
- kind: "func",
361
- params: [BYTE_SLICE, UINT64, INT],
362
- returns: [BYTE_SLICE],
363
- },
364
- AppendFloat: {
365
- kind: "func",
366
- params: [BYTE_SLICE, FLOAT64, INT, INT, INT],
367
- returns: [BYTE_SLICE],
368
- },
369
- AppendBool: {
370
- kind: "func",
371
- params: [BYTE_SLICE, BOOL],
372
- returns: [BYTE_SLICE],
373
- },
374
- ErrSyntax: ERROR,
375
- ErrRange: ERROR,
376
- },
377
- });
378
-
379
- globals.define("sort", {
380
- kind: "namespace",
381
- name: "sort",
382
- members: {
383
- Ints: {
384
- kind: "func",
385
- params: [{ kind: "slice", elem: INT }],
386
- returns: [VOID],
387
- },
388
- Float64s: {
389
- kind: "func",
390
- params: [{ kind: "slice", elem: FLOAT64 }],
391
- returns: [VOID],
392
- },
393
- Strings: {
394
- kind: "func",
395
- params: [{ kind: "slice", elem: STRING }],
396
- returns: [VOID],
397
- },
398
- Slice: { kind: "func", params: [ANY, ANY], returns: [VOID] },
399
- SliceStable: { kind: "func", params: [ANY, ANY], returns: [VOID] },
400
- SliceIsSorted: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
401
- Search: { kind: "func", params: [INT, ANY], returns: [INT] },
402
- IntsAreSorted: {
403
- kind: "func",
404
- params: [{ kind: "slice", elem: INT }],
405
- returns: [BOOL],
406
- },
407
- Float64sAreSorted: {
408
- kind: "func",
409
- params: [{ kind: "slice", elem: FLOAT64 }],
410
- returns: [BOOL],
411
- },
412
- StringsAreSorted: {
413
- kind: "func",
414
- params: [{ kind: "slice", elem: STRING }],
415
- returns: [BOOL],
416
- },
417
- },
418
- });
419
-
420
- globals.define("math", {
421
- kind: "namespace",
422
- name: "math",
423
- members: {
424
- Abs: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
425
- Floor: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
426
- Ceil: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
427
- Round: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
428
- Sqrt: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
429
- Cbrt: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
430
- Pow: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
431
- Log: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
432
- Log2: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
433
- Log10: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
434
- Sin: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
435
- Cos: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
436
- Tan: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
437
- Min: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
438
- Max: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
439
- Mod: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
440
- Inf: { kind: "func", params: [INT], returns: [FLOAT64] },
441
- IsNaN: { kind: "func", params: [FLOAT64], returns: [BOOL] },
442
- IsInf: { kind: "func", params: [FLOAT64, INT], returns: [BOOL] },
443
- NaN: { kind: "func", params: [], returns: [FLOAT64] },
444
- Atan: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
445
- Atan2: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
446
- Asin: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
447
- Acos: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
448
- Exp: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
449
- Exp2: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
450
- Trunc: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
451
- Hypot: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
452
- Signbit: { kind: "func", params: [FLOAT64], returns: [BOOL] },
453
- Copysign: {
454
- kind: "func",
455
- params: [FLOAT64, FLOAT64],
456
- returns: [FLOAT64],
457
- },
458
- Dim: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
459
- Remainder: {
460
- kind: "func",
461
- params: [FLOAT64, FLOAT64],
462
- returns: [FLOAT64],
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] },
471
- Pi: FLOAT64,
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,
484
- MaxFloat64: FLOAT64,
485
- SmallestNonzeroFloat64: FLOAT64,
486
- MaxInt: INT,
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,
501
- },
502
- });
503
-
504
- globals.define("bits", {
505
- kind: "namespace",
506
- name: "bits",
507
- members: {
508
- LeadingZeros32: { kind: "func", params: [UINT32], returns: [INT] },
509
- TrailingZeros32: { kind: "func", params: [UINT32], returns: [INT] },
510
- OnesCount32: { kind: "func", params: [UINT32], returns: [INT] },
511
- RotateLeft32: { kind: "func", params: [UINT32, INT], returns: [UINT32] },
512
- LeadingZeros64: { kind: "func", params: [UINT64], returns: [INT] },
513
- TrailingZeros64: { kind: "func", params: [UINT64], returns: [INT] },
514
- OnesCount64: { kind: "func", params: [UINT64], returns: [INT] },
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] },
523
- },
524
- });
525
-
526
- globals.define("errors", {
527
- kind: "namespace",
528
- name: "errors",
529
- members: {
530
- New: { kind: "func", params: [STRING], returns: [ERROR] },
531
- Is: { kind: "func", params: [ERROR, ERROR], returns: [BOOL] },
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
- },
540
- },
541
- });
542
-
543
- globals.define("time", {
544
- kind: "namespace",
545
- name: "time",
546
- members: {
547
- Now: { kind: "func", params: [], returns: [TIME_T] },
548
- Since: { kind: "func", params: [TIME_T], returns: [DURATION_T] },
549
- Sleep: { kind: "func", params: [ANY], returns: [VOID], async: true },
550
- Parse: {
551
- kind: "func",
552
- params: [STRING, STRING],
553
- returns: [TIME_T, ERROR],
554
- },
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] },
558
- Date: {
559
- kind: "func",
560
- params: [INT, INT, INT, INT, INT, INT, INT, ANY],
561
- returns: [TIME_T],
562
- },
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,
571
- RFC3339: STRING,
572
- RFC3339Nano: STRING,
573
- DateOnly: STRING,
574
- TimeOnly: STRING,
575
- DateTime: STRING,
576
- UTC: ANY,
577
- Local: ANY,
578
- January: INT,
579
- February: INT,
580
- March: INT,
581
- April: INT,
582
- May: INT,
583
- June: INT,
584
- July: INT,
585
- August: INT,
586
- September: INT,
587
- October: INT,
588
- November: INT,
589
- December: INT,
590
- Sunday: INT,
591
- Monday: INT,
592
- Tuesday: INT,
593
- Wednesday: INT,
594
- Thursday: INT,
595
- Friday: INT,
596
- Saturday: INT,
597
- },
598
- });
599
- types.set("time.Duration", DURATION_T);
600
- types.set("time.Time", TIME_T);
601
-
602
- const runeToStr = { kind: "func", params: [INT], returns: [BOOL] };
603
- const runeTrans = { kind: "func", params: [INT], returns: [INT] };
604
- globals.define("unicode", {
605
- kind: "namespace",
606
- name: "unicode",
607
- members: {
608
- IsLetter: runeToStr,
609
- IsDigit: runeToStr,
610
- IsSpace: runeToStr,
611
- IsUpper: runeToStr,
612
- IsLower: runeToStr,
613
- IsPunct: runeToStr,
614
- IsControl: runeToStr,
615
- IsPrint: runeToStr,
616
- IsGraphic: runeToStr,
617
- ToUpper: runeTrans,
618
- ToLower: runeTrans,
619
- },
620
- });
621
-
622
- globals.define("os", {
623
- kind: "namespace",
624
- name: "os",
625
- members: {
626
- Exit: { kind: "func", params: [INT], returns: [VOID] },
627
- Args: { kind: "slice", elem: STRING },
628
- Getenv: { kind: "func", params: [STRING], returns: [STRING] },
629
- Stdout: ANY,
630
- Stderr: ANY,
631
- Stdin: ANY,
632
- },
633
- });
634
-
635
- // Slice helpers that return a slice of the same type as their first argument.
636
- const sameSlice = (params, extra = {}) => ({
637
- kind: "func",
638
- params,
639
- returns: [ANY],
640
- _derivedReturn: "arg0",
641
- ...extra,
642
- });
643
- globals.define("slices", {
644
- kind: "namespace",
645
- name: "slices",
646
- members: {
647
- Contains: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
648
- ContainsFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
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
- },
657
- Equal: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
658
- Compare: { kind: "func", params: [ANY, ANY], returns: [INT] },
659
- Sort: { kind: "func", params: [ANY], returns: [VOID] },
660
- SortFunc: { kind: "func", params: [ANY, ANY], returns: [VOID] },
661
- SortStableFunc: { kind: "func", params: [ANY, ANY], returns: [VOID] },
662
- IsSorted: { kind: "func", params: [ANY], returns: [BOOL] },
663
- IsSortedFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
664
- Reverse: { kind: "func", params: [ANY], returns: [VOID] },
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
- },
689
- Clone: sameSlice([ANY]),
690
- Compact: sameSlice([ANY]),
691
- CompactFunc: sameSlice([ANY, ANY]),
692
- Concat: sameSlice([ANY], { variadic: true }),
693
- Delete: sameSlice([ANY, INT, INT]),
694
- DeleteFunc: sameSlice([ANY, ANY]),
695
- Insert: sameSlice([ANY, INT, ANY], { variadic: true }),
696
- Replace: sameSlice([ANY, INT, INT, ANY], { variadic: true }),
697
- Grow: sameSlice([ANY, INT]),
698
- Clip: sameSlice([ANY]),
699
- },
700
- });
701
-
702
- globals.define("html", {
703
- kind: "namespace",
704
- name: "html",
705
- members: {
706
- EscapeString: { kind: "func", params: [STRING], returns: [STRING] },
707
- UnescapeString: { kind: "func", params: [STRING], returns: [STRING] },
708
- },
709
- });
710
-
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
- };
753
- globals.define("io", {
754
- kind: "namespace",
755
- name: "io",
756
- members: {
757
- Writer: IO_WRITER,
758
- Reader: IO_READER,
759
- Closer: IO_CLOSER,
760
- ReadWriter: IO_READWRITER,
761
- EOF: ERROR,
762
- ErrUnexpectedEOF: ERROR,
763
- ErrShortWrite: ERROR,
764
- WriteString: {
765
- kind: "func",
766
- params: [IO_WRITER, STRING],
767
- returns: [INT, ERROR],
768
- },
769
- ReadFull: {
770
- kind: "func",
771
- params: [IO_READER, BYTE_SLICE_IO],
772
- returns: [INT, ERROR],
773
- },
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,
795
- },
796
- });
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);
801
- }