gofront 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +3 -3
  2. package/package.json +5 -4
  3. package/src/backend/js/expressions.js +849 -371
  4. package/src/backend/js/index.js +241 -147
  5. package/src/backend/js/natives.js +383 -0
  6. package/src/backend/js/runtime.js +512 -2547
  7. package/src/backend/js/statements.js +506 -103
  8. package/src/backend/js/stdlib/index.js +45 -93
  9. package/src/backend/js/templ.js +32 -45
  10. package/src/backend/js/type-info.js +177 -13
  11. package/src/backend/shared/fixed-float.js +20 -0
  12. package/src/backend/shared/fmt-types.js +63 -171
  13. package/src/backend/shared/host-unicode.js +36 -0
  14. package/src/backend/wasm/boundary.js +490 -965
  15. package/src/backend/wasm/emit-builtins.js +643 -256
  16. package/src/backend/wasm/emit-exprs.js +124 -57
  17. package/src/backend/wasm/emit-maps.js +17 -367
  18. package/src/backend/wasm/emit-stmts.js +325 -75
  19. package/src/backend/wasm/emit.js +104 -13
  20. package/src/backend/wasm/globals.js +47 -8
  21. package/src/backend/wasm/glue.js +2 -4
  22. package/src/backend/wasm/index.js +36 -530
  23. package/src/backend/wasm/method-expr.js +12 -1
  24. package/src/backend/wasm/module-emitter.js +92 -717
  25. package/src/backend/wasm/monomorph.js +103 -6
  26. package/src/backend/wasm/natives.js +596 -0
  27. package/src/backend/wasm/prescan.js +5 -153
  28. package/src/backend/wasm/prune-funcs.js +89 -0
  29. package/src/backend/wasm/stdlib/index.js +2 -32
  30. package/src/backend/wasm/types.js +68 -20
  31. package/src/backend/wasm/variadic.js +3 -3
  32. package/src/cli/cli-core.js +5 -1
  33. package/src/cli/test-runner.js +115 -342
  34. package/src/compiler.js +108 -130
  35. package/src/lexer/lexer.js +105 -11
  36. package/src/lexer/templ-lexer.js +61 -18
  37. package/src/lexer/tokens.js +1 -0
  38. package/src/link/stdlib.js +354 -132
  39. package/src/link/type-names.js +148 -0
  40. package/src/link/wasm.js +30 -6
  41. package/src/lower/bounds.js +153 -0
  42. package/src/lower/captures.js +92 -33
  43. package/src/lower/embedding.js +32 -3
  44. package/src/lower/errors-as.js +196 -0
  45. package/src/lower/fmt-formatters.js +905 -0
  46. package/src/lower/functions.js +2 -0
  47. package/src/lower/gen-types.js +274 -0
  48. package/src/lower/index.js +7 -1
  49. package/src/lower/json-codecs.js +228 -247
  50. package/src/lower/ownership.js +25 -7
  51. package/src/lower/reachability.js +69 -51
  52. package/src/lower/walk.js +12 -0
  53. package/src/parser/declarations.js +28 -5
  54. package/src/parser/expressions.js +86 -16
  55. package/src/parser/statements.js +1 -0
  56. package/src/parser/templ.js +44 -5
  57. package/src/parser/types.js +1 -0
  58. package/src/resolver.js +1 -2
  59. package/src/typechecker/assignability.js +124 -11
  60. package/src/typechecker/const-fold.js +70 -27
  61. package/src/typechecker/constants.js +32 -6
  62. package/src/typechecker/expressions.js +326 -98
  63. package/src/typechecker/index.js +208 -33
  64. package/src/typechecker/init-order.js +136 -40
  65. package/src/typechecker/operand-text.js +40 -0
  66. package/src/typechecker/resolve.js +192 -36
  67. package/src/typechecker/statements.js +122 -11
  68. package/src/typechecker/stdlib/excluded.js +9 -5
  69. package/src/typechecker/stdlib/index.js +25 -9
  70. package/src/typechecker/termination.js +10 -1
  71. package/src/typechecker/types.js +203 -573
  72. package/stdlib/bytes/buffer.go +479 -0
  73. package/stdlib/bytes/bytes.go +1010 -0
  74. package/stdlib/bytes/reader.go +161 -0
  75. package/stdlib/context/context.go +115 -0
  76. package/stdlib/crypto/rand/rand.go +34 -0
  77. package/stdlib/crypto/sha256/sha256.go +249 -0
  78. package/stdlib/encoding/base64/base64.go +331 -0
  79. package/stdlib/encoding/binary/binary.go +332 -0
  80. package/stdlib/encoding/hex/hex.go +140 -0
  81. package/stdlib/encoding/json/json.go +62 -0
  82. package/stdlib/errors/errors.go +174 -0
  83. package/stdlib/fmt/errors.go +110 -0
  84. package/stdlib/fmt/format.go +732 -0
  85. package/stdlib/fmt/print.go +1232 -0
  86. package/stdlib/gom/gom.go +293 -0
  87. package/stdlib/html/html.go +251 -0
  88. package/stdlib/internal/fmtrt/fmtrt.go +163 -0
  89. package/stdlib/internal/jsonrt/dec.go +171 -38
  90. package/stdlib/internal/jsonrt/enc.go +186 -36
  91. package/stdlib/internal/jsonrt/scanner.go +17 -8
  92. package/stdlib/io/io.go +157 -1
  93. package/stdlib/maps/maps.go +131 -0
  94. package/stdlib/math/bits/bits.go +507 -0
  95. package/stdlib/math/extra.go +16 -14
  96. package/stdlib/math/math.go +439 -0
  97. package/stdlib/math/rand/rand.go +297 -0
  98. package/stdlib/os/os.go +93 -0
  99. package/stdlib/path/filepath/filepath.go +47 -0
  100. package/stdlib/path/path.go +394 -0
  101. package/stdlib/regexp/regexp.go +231 -0
  102. package/stdlib/slices/slices.go +526 -0
  103. package/stdlib/slices/sort.go +209 -0
  104. package/stdlib/slices/zsort_cmp.go +480 -0
  105. package/stdlib/slices/zsort_ordered.go +482 -0
  106. package/stdlib/sort/sort.go +391 -452
  107. package/stdlib/sort/zsort_func.go +480 -0
  108. package/stdlib/sort/zsort_iface.go +480 -0
  109. package/stdlib/strconv/float.go +1699 -0
  110. package/stdlib/strconv/isprint.go +752 -0
  111. package/stdlib/strconv/quote.go +235 -50
  112. package/stdlib/strconv/strconv.go +616 -0
  113. package/stdlib/strings/builder.go +95 -0
  114. package/stdlib/strings/reader.go +163 -0
  115. package/stdlib/strings/replacer.go +102 -0
  116. package/stdlib/strings/strings.go +807 -0
  117. package/stdlib/sync/sync.go +268 -0
  118. package/stdlib/testing/async_js.go +61 -0
  119. package/stdlib/testing/benchmark.go +297 -0
  120. package/stdlib/testing/testing.go +523 -0
  121. package/stdlib/time/duration.go +233 -0
  122. package/stdlib/time/format.go +745 -0
  123. package/stdlib/time/parse.go +790 -0
  124. package/stdlib/time/sleep_js.go +63 -0
  125. package/stdlib/time/time.go +834 -0
  126. package/stdlib/unicode/unicode.go +141 -3
  127. package/stdlib/unicode/utf8/utf8.go +464 -0
  128. package/src/backend/js/fmt-runtime.js +0 -573
  129. package/src/backend/js/stdlib/base64.js +0 -12
  130. package/src/backend/js/stdlib/binary.js +0 -102
  131. package/src/backend/js/stdlib/bits.js +0 -119
  132. package/src/backend/js/stdlib/builder.js +0 -98
  133. package/src/backend/js/stdlib/bytes.js +0 -368
  134. package/src/backend/js/stdlib/errors.js +0 -45
  135. package/src/backend/js/stdlib/fmt.js +0 -517
  136. package/src/backend/js/stdlib/gom.js +0 -155
  137. package/src/backend/js/stdlib/hex.js +0 -17
  138. package/src/backend/js/stdlib/html.js +0 -20
  139. package/src/backend/js/stdlib/io.js +0 -137
  140. package/src/backend/js/stdlib/json.js +0 -1167
  141. package/src/backend/js/stdlib/maps.js +0 -37
  142. package/src/backend/js/stdlib/math.js +0 -85
  143. package/src/backend/js/stdlib/os.js +0 -13
  144. package/src/backend/js/stdlib/path.js +0 -48
  145. package/src/backend/js/stdlib/rand.js +0 -32
  146. package/src/backend/js/stdlib/regexp.js +0 -54
  147. package/src/backend/js/stdlib/sha256.js +0 -12
  148. package/src/backend/js/stdlib/shared.js +0 -17
  149. package/src/backend/js/stdlib/simd.js +0 -34
  150. package/src/backend/js/stdlib/slices.js +0 -107
  151. package/src/backend/js/stdlib/sort.js +0 -30
  152. package/src/backend/js/stdlib/strconv.js +0 -79
  153. package/src/backend/js/stdlib/strings.js +0 -301
  154. package/src/backend/js/stdlib/sync.js +0 -13
  155. package/src/backend/js/stdlib/testing.js +0 -41
  156. package/src/backend/js/stdlib/time.js +0 -152
  157. package/src/backend/js/stdlib/unicode.js +0 -25
  158. package/src/backend/js/stdlib/utf8.js +0 -26
  159. package/src/backend/wasm/stdlib/bytes.js +0 -6716
  160. package/src/backend/wasm/stdlib/core.js +0 -10278
  161. package/src/backend/wasm/stdlib/io.js +0 -3578
  162. package/src/backend/wasm/stdlib/packages.js +0 -2402
  163. package/src/backend/wasm/stdlib/pure.js +0 -720
  164. package/src/backend/wasm/stdlib/time.js +0 -2229
  165. package/src/typechecker/stdlib/core.js +0 -1079
  166. package/src/typechecker/stdlib/extended.js +0 -1210
  167. package/stdlib/bytes/iter.go +0 -192
  168. package/stdlib/bytes/search.go +0 -240
  169. package/stdlib/bytes/split.go +0 -218
  170. package/stdlib/errors/overlay.go +0 -12
  171. package/stdlib/maps/iter.go +0 -65
  172. package/stdlib/slices/extra.go +0 -73
  173. package/stdlib/slices/iter.go +0 -113
  174. package/stdlib/strings/extra.go +0 -35
  175. package/stdlib/strings/iter.go +0 -122
  176. package/stdlib/sync/extra.go +0 -105
  177. package/stdlib/unicode/utf8/bytes.go +0 -239
@@ -1,1079 +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
- INT32,
13
- INT64,
14
- STRING,
15
- UINT,
16
- UINT8,
17
- UINT16,
18
- UINT32,
19
- UINT64,
20
- UNTYPED_INT,
21
- VOID,
22
- } from "../types.js";
23
-
24
- const MONTH_T = {
25
- kind: "named",
26
- name: "time.Month",
27
- underlying: INT,
28
- methods: new Map([
29
- ["String", { kind: "func", params: [], returns: [STRING] }],
30
- ]),
31
- };
32
-
33
- const WEEKDAY_T = {
34
- kind: "named",
35
- name: "time.Weekday",
36
- underlying: INT,
37
- methods: new Map([
38
- ["String", { kind: "func", params: [], returns: [STRING] }],
39
- ]),
40
- };
41
-
42
- const LOCATION_T = {
43
- kind: "named",
44
- name: "time.Location",
45
- underlying: {
46
- kind: "struct",
47
- fields: new Map([
48
- ["_name", STRING],
49
- ["_offset", INT],
50
- ]),
51
- methods: new Map([
52
- ["String", { kind: "func", params: [], returns: [STRING] }],
53
- ]),
54
- },
55
- };
56
- LOCATION_T.methods = LOCATION_T.underlying.methods;
57
- const LOCATION_PTR_T = {
58
- kind: "pointer",
59
- base: LOCATION_T,
60
- };
61
-
62
- const DURATION_T = {
63
- kind: "named",
64
- name: "time.Duration",
65
- underlying: INT64,
66
- methods: new Map([
67
- ["Nanoseconds", { kind: "func", params: [], returns: [INT64] }],
68
- ["Microseconds", { kind: "func", params: [], returns: [INT64] }],
69
- ["Milliseconds", { kind: "func", params: [], returns: [INT64] }],
70
- ["Seconds", { kind: "func", params: [], returns: [FLOAT64] }],
71
- ["Minutes", { kind: "func", params: [], returns: [FLOAT64] }],
72
- ["Hours", { kind: "func", params: [], returns: [FLOAT64] }],
73
- ["String", { kind: "func", params: [], returns: [STRING] }],
74
- ]),
75
- };
76
- DURATION_T.methods.set("Truncate", {
77
- kind: "func",
78
- params: [DURATION_T],
79
- returns: [DURATION_T],
80
- });
81
- DURATION_T.methods.set("Round", {
82
- kind: "func",
83
- params: [DURATION_T],
84
- returns: [DURATION_T],
85
- });
86
- DURATION_T.methods.set("Abs", {
87
- kind: "func",
88
- params: [],
89
- returns: [DURATION_T],
90
- });
91
-
92
- const TIMER_T = {
93
- kind: "named",
94
- name: "time.Timer",
95
- underlying: {
96
- kind: "struct",
97
- fields: new Map(),
98
- methods: new Map([
99
- ["Stop", { kind: "func", params: [], returns: [BOOL], _ptrRecv: true }],
100
- [
101
- "Reset",
102
- { kind: "func", params: [DURATION_T], returns: [BOOL], _ptrRecv: true },
103
- ],
104
- ]),
105
- },
106
- };
107
- TIMER_T.methods = TIMER_T.underlying.methods;
108
- const TIMER_PTR_T = {
109
- kind: "pointer",
110
- base: TIMER_T,
111
- };
112
-
113
- const TIME_BYTES = { kind: "slice", elem: UINT8 };
114
- const TIME_T = {
115
- kind: "named",
116
- name: "time.Time",
117
- underlying: {
118
- kind: "struct",
119
- fields: new Map(),
120
- methods: new Map(),
121
- },
122
- };
123
- TIME_T.underlying.fields.set("_unixNano", INT64);
124
- TIME_T.underlying.fields.set("_offset", INT32);
125
- TIME_T.underlying.fields.set("_loc", ANY);
126
- TIME_T.underlying.methods = new Map([
127
- ["Format", { kind: "func", params: [STRING], returns: [STRING] }],
128
- ["String", { kind: "func", params: [], returns: [STRING] }],
129
- ["Year", { kind: "func", params: [], returns: [INT] }],
130
- ["Month", { kind: "func", params: [], returns: [MONTH_T] }],
131
- ["Day", { kind: "func", params: [], returns: [INT] }],
132
- ["Hour", { kind: "func", params: [], returns: [INT] }],
133
- ["Minute", { kind: "func", params: [], returns: [INT] }],
134
- ["Second", { kind: "func", params: [], returns: [INT] }],
135
- ["Weekday", { kind: "func", params: [], returns: [WEEKDAY_T] }],
136
- ["Unix", { kind: "func", params: [], returns: [INT64] }],
137
- ["UnixMilli", { kind: "func", params: [], returns: [INT64] }],
138
- ["UnixNano", { kind: "func", params: [], returns: [INT64] }],
139
- ["Nanosecond", { kind: "func", params: [], returns: [INT] }],
140
- ["IsZero", { kind: "func", params: [], returns: [BOOL] }],
141
- ["UTC", { kind: "func", params: [], returns: [TIME_T] }],
142
- ["Local", { kind: "func", params: [], returns: [TIME_T] }],
143
- ["Add", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
144
- ["Sub", { kind: "func", params: [TIME_T], returns: [DURATION_T] }],
145
- ["Before", { kind: "func", params: [TIME_T], returns: [BOOL] }],
146
- ["After", { kind: "func", params: [TIME_T], returns: [BOOL] }],
147
- ["Equal", { kind: "func", params: [TIME_T], returns: [BOOL] }],
148
- ["AddDate", { kind: "func", params: [INT, INT, INT], returns: [TIME_T] }],
149
- ["Truncate", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
150
- ["Round", { kind: "func", params: [DURATION_T], returns: [TIME_T] }],
151
- ["Date", { kind: "func", params: [], returns: [INT, INT, INT] }],
152
- ["Clock", { kind: "func", params: [], returns: [INT, INT, INT] }],
153
- ["YearDay", { kind: "func", params: [], returns: [INT] }],
154
- ["ISOWeek", { kind: "func", params: [], returns: [INT, INT] }],
155
- ["Compare", { kind: "func", params: [TIME_T], returns: [INT] }],
156
- ["In", { kind: "func", params: [ANY], returns: [TIME_T] }],
157
- ["Location", { kind: "func", params: [], returns: [LOCATION_PTR_T] }],
158
- ["Zone", { kind: "func", params: [], returns: [STRING, INT] }],
159
- ["MarshalJSON", { kind: "func", params: [], returns: [TIME_BYTES, ERROR] }],
160
- [
161
- "UnmarshalJSON",
162
- { kind: "func", params: [TIME_BYTES], returns: [ERROR], _ptrRecv: true },
163
- ],
164
- ["MarshalText", { kind: "func", params: [], returns: [TIME_BYTES, ERROR] }],
165
- [
166
- "UnmarshalText",
167
- { kind: "func", params: [TIME_BYTES], returns: [ERROR], _ptrRecv: true },
168
- ],
169
- ]);
170
- TIME_T.methods = TIME_T.underlying.methods;
171
- const REPLACER_T = {
172
- kind: "pointer",
173
- base: { kind: "named", name: "strings.Replacer" },
174
- };
175
- const BUFFER_T = {
176
- kind: "named",
177
- name: "bytes.Buffer",
178
- underlying: { kind: "struct" },
179
- };
180
- const BUFFER_PTR_T = { kind: "pointer", base: BUFFER_T };
181
-
182
- export function setupCoreGlobals(globals, types) {
183
- for (const g of BROWSER_GLOBALS) globals.define(g, ANY);
184
-
185
- const fmtVariadic = (ret) => ({
186
- kind: "func",
187
- params: [STRING, ANY],
188
- returns: [ret],
189
- variadic: true,
190
- });
191
- const FMT_BYTES = { kind: "slice", elem: UINT8 };
192
- const fmtPrintVariadic = (ret) => ({
193
- kind: "func",
194
- params: [ANY],
195
- returns: [ret],
196
- variadic: true,
197
- });
198
- const FMT_STRINGER = {
199
- kind: "interface",
200
- name: "fmt.Stringer",
201
- methods: new Map([
202
- ["String", { kind: "func", params: [], returns: [STRING] }],
203
- ]),
204
- };
205
- globals.define("fmt", {
206
- kind: "namespace",
207
- name: "fmt",
208
- members: {
209
- Stringer: FMT_STRINGER,
210
- Sprintf: fmtVariadic(STRING),
211
- Sprint: fmtPrintVariadic(STRING),
212
- Sprintln: fmtPrintVariadic(STRING),
213
- Append: {
214
- kind: "func",
215
- params: [FMT_BYTES, ANY],
216
- returns: [FMT_BYTES],
217
- variadic: true,
218
- },
219
- Appendf: {
220
- kind: "func",
221
- params: [FMT_BYTES, STRING, ANY],
222
- returns: [FMT_BYTES],
223
- variadic: true,
224
- },
225
- Appendln: {
226
- kind: "func",
227
- params: [FMT_BYTES, ANY],
228
- returns: [FMT_BYTES],
229
- variadic: true,
230
- },
231
- Errorf: fmtVariadic(ERROR),
232
- Printf: fmtVariadic(VOID),
233
- Println: fmtPrintVariadic(VOID),
234
- Print: fmtPrintVariadic(VOID),
235
- Fprintf: {
236
- kind: "func",
237
- params: [ANY, STRING, ANY],
238
- returns: [INT, ERROR],
239
- variadic: true,
240
- },
241
- Fprintln: {
242
- kind: "func",
243
- params: [ANY, ANY],
244
- returns: [INT, ERROR],
245
- variadic: true,
246
- },
247
- Fprint: {
248
- kind: "func",
249
- params: [ANY, ANY],
250
- returns: [INT, ERROR],
251
- variadic: true,
252
- },
253
- Sscan: {
254
- kind: "func",
255
- params: [STRING, ANY],
256
- returns: [INT, ERROR],
257
- variadic: true,
258
- },
259
- Sscanln: {
260
- kind: "func",
261
- params: [STRING, ANY],
262
- returns: [INT, ERROR],
263
- variadic: true,
264
- },
265
- Sscanf: {
266
- kind: "func",
267
- params: [STRING, STRING, ANY],
268
- returns: [INT, ERROR],
269
- variadic: true,
270
- },
271
- },
272
- });
273
-
274
- const strFn1 = (ret) => ({ kind: "func", params: [STRING], returns: [ret] });
275
- const strFn2 = (p2, ret) => ({
276
- kind: "func",
277
- params: [STRING, p2],
278
- returns: [ret],
279
- });
280
- const strFn3 = (p2, p3, ret) => ({
281
- kind: "func",
282
- params: [STRING, p2, p3],
283
- returns: [ret],
284
- });
285
- globals.define("strings", {
286
- kind: "namespace",
287
- name: "strings",
288
- members: {
289
- Contains: strFn2(STRING, BOOL),
290
- HasPrefix: strFn2(STRING, BOOL),
291
- HasSuffix: strFn2(STRING, BOOL),
292
- Index: strFn2(STRING, INT),
293
- LastIndex: strFn2(STRING, INT),
294
- Count: strFn2(STRING, INT),
295
- Repeat: strFn2(INT, STRING),
296
- Replace: {
297
- kind: "func",
298
- params: [STRING, STRING, STRING, INT],
299
- returns: [STRING],
300
- },
301
- ReplaceAll: strFn3(STRING, STRING, STRING),
302
- ToUpper: strFn1(STRING),
303
- ToLower: strFn1(STRING),
304
- TrimSpace: strFn1(STRING),
305
- Trim: strFn2(STRING, STRING),
306
- TrimPrefix: strFn2(STRING, STRING),
307
- TrimSuffix: strFn2(STRING, STRING),
308
- TrimLeft: strFn2(STRING, STRING),
309
- TrimRight: strFn2(STRING, STRING),
310
- Split: strFn2(STRING, { kind: "slice", elem: STRING }),
311
- Join: {
312
- kind: "func",
313
- params: [{ kind: "slice", elem: STRING }, STRING],
314
- returns: [STRING],
315
- },
316
- EqualFold: strFn2(STRING, BOOL),
317
- Fields: strFn1({ kind: "slice", elem: STRING }),
318
- FieldsFunc: strFn2(ANY, { kind: "slice", elem: STRING }),
319
- Cut: {
320
- kind: "func",
321
- params: [STRING, STRING],
322
- returns: [STRING, STRING, BOOL],
323
- },
324
- CutPrefix: {
325
- kind: "func",
326
- params: [STRING, STRING],
327
- returns: [STRING, BOOL],
328
- },
329
- CutSuffix: {
330
- kind: "func",
331
- params: [STRING, STRING],
332
- returns: [STRING, BOOL],
333
- },
334
- SplitN: strFn3(STRING, INT, { kind: "slice", elem: STRING }),
335
- SplitAfter: strFn2(STRING, { kind: "slice", elem: STRING }),
336
- SplitAfterN: strFn3(STRING, INT, { kind: "slice", elem: STRING }),
337
- IndexAny: strFn2(STRING, INT),
338
- LastIndexAny: strFn2(STRING, INT),
339
- ContainsAny: strFn2(STRING, BOOL),
340
- ContainsRune: strFn2(INT, BOOL),
341
- IndexRune: strFn2(INT, INT),
342
- IndexByte: strFn2(INT, INT),
343
- LastIndexByte: strFn2(INT, INT),
344
- Map: {
345
- kind: "func",
346
- params: [ANY, STRING],
347
- returns: [STRING],
348
- },
349
- Title: strFn1(STRING),
350
- ToTitle: strFn1(STRING),
351
- TrimFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
352
- TrimLeftFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
353
- TrimRightFunc: { kind: "func", params: [STRING, ANY], returns: [STRING] },
354
- IndexFunc: { kind: "func", params: [STRING, ANY], returns: [INT] },
355
- LastIndexFunc: { kind: "func", params: [STRING, ANY], returns: [INT] },
356
- NewReplacer: {
357
- kind: "func",
358
- params: [STRING],
359
- returns: [REPLACER_T],
360
- variadic: true,
361
- },
362
- NewReader: { kind: "func", params: [STRING], returns: [ANY] },
363
- ToValidUTF8: strFn2(STRING, STRING),
364
- Builder: ANY,
365
- },
366
- });
367
-
368
- const BYTE_SLICE = { kind: "slice", elem: UINT8 };
369
- const byFn1 = (ret) => ({
370
- kind: "func",
371
- params: [BYTE_SLICE],
372
- returns: [ret],
373
- });
374
- const byFn2 = (p2, ret) => ({
375
- kind: "func",
376
- params: [BYTE_SLICE, p2],
377
- returns: [ret],
378
- });
379
- globals.define("bytes", {
380
- kind: "namespace",
381
- name: "bytes",
382
- members: {
383
- Contains: byFn2(BYTE_SLICE, BOOL),
384
- HasPrefix: byFn2(BYTE_SLICE, BOOL),
385
- HasSuffix: byFn2(BYTE_SLICE, BOOL),
386
- Index: byFn2(BYTE_SLICE, INT),
387
- Count: byFn2(BYTE_SLICE, INT),
388
- Repeat: byFn2(INT, BYTE_SLICE),
389
- Replace: {
390
- kind: "func",
391
- params: [BYTE_SLICE, BYTE_SLICE, BYTE_SLICE, INT],
392
- returns: [BYTE_SLICE],
393
- },
394
- ToUpper: byFn1(BYTE_SLICE),
395
- ToLower: byFn1(BYTE_SLICE),
396
- ToTitle: byFn1(BYTE_SLICE),
397
- TrimSpace: byFn1(BYTE_SLICE),
398
- Trim: byFn2(STRING, BYTE_SLICE),
399
- Equal: byFn2(BYTE_SLICE, BOOL),
400
- Split: byFn2(BYTE_SLICE, { kind: "slice", elem: BYTE_SLICE }),
401
- Join: {
402
- kind: "func",
403
- params: [{ kind: "slice", elem: BYTE_SLICE }, BYTE_SLICE],
404
- returns: [BYTE_SLICE],
405
- },
406
- ReplaceAll: {
407
- kind: "func",
408
- params: [BYTE_SLICE, BYTE_SLICE, BYTE_SLICE],
409
- returns: [BYTE_SLICE],
410
- },
411
- TrimPrefix: byFn2(BYTE_SLICE, BYTE_SLICE),
412
- TrimSuffix: byFn2(BYTE_SLICE, BYTE_SLICE),
413
- TrimLeft: byFn2(STRING, BYTE_SLICE),
414
- TrimRight: byFn2(STRING, BYTE_SLICE),
415
- TrimFunc: {
416
- kind: "func",
417
- params: [BYTE_SLICE, ANY],
418
- returns: [BYTE_SLICE],
419
- },
420
- IndexByte: byFn2(INT, INT),
421
- LastIndex: byFn2(BYTE_SLICE, INT),
422
- LastIndexByte: byFn2(INT, INT),
423
- Fields: byFn1({ kind: "slice", elem: BYTE_SLICE }),
424
- FieldsFunc: byFn2(ANY, { kind: "slice", elem: BYTE_SLICE }),
425
- Clone: byFn1(BYTE_SLICE),
426
- Cut: {
427
- kind: "func",
428
- params: [BYTE_SLICE, BYTE_SLICE],
429
- returns: [BYTE_SLICE, BYTE_SLICE, BOOL],
430
- },
431
- ContainsAny: byFn2(STRING, BOOL),
432
- ContainsRune: byFn2(INT, BOOL),
433
- Map: { kind: "func", params: [ANY, BYTE_SLICE], returns: [BYTE_SLICE] },
434
- SplitN: {
435
- kind: "func",
436
- params: [BYTE_SLICE, BYTE_SLICE, INT],
437
- returns: [{ kind: "slice", elem: BYTE_SLICE }],
438
- },
439
- NewReader: { kind: "func", params: [BYTE_SLICE], returns: [ANY] },
440
- NewBuffer: {
441
- kind: "func",
442
- params: [BYTE_SLICE],
443
- returns: [BUFFER_PTR_T],
444
- },
445
- NewBufferString: {
446
- kind: "func",
447
- params: [STRING],
448
- returns: [BUFFER_PTR_T],
449
- },
450
- ToValidUTF8: byFn2(BYTE_SLICE, BYTE_SLICE),
451
- Buffer: BUFFER_T,
452
- },
453
- });
454
-
455
- globals.define("strconv", {
456
- kind: "namespace",
457
- name: "strconv",
458
- members: {
459
- Itoa: { kind: "func", params: [INT], returns: [STRING] },
460
- Atoi: { kind: "func", params: [STRING], returns: [INT, ERROR] },
461
- FormatFloat: {
462
- kind: "func",
463
- params: [FLOAT64, INT, INT, INT],
464
- returns: [STRING],
465
- },
466
- FormatBool: { kind: "func", params: [BOOL], returns: [STRING] },
467
- FormatInt: { kind: "func", params: [INT64, INT], returns: [STRING] },
468
- FormatUint: { kind: "func", params: [UINT64, INT], returns: [STRING] },
469
- ParseFloat: {
470
- kind: "func",
471
- params: [STRING, INT],
472
- returns: [FLOAT64, ERROR],
473
- },
474
- ParseInt: {
475
- kind: "func",
476
- params: [STRING, INT, INT],
477
- returns: [INT64, ERROR],
478
- },
479
- ParseUint: {
480
- kind: "func",
481
- params: [STRING, INT, INT],
482
- returns: [UINT64, ERROR],
483
- },
484
- ParseBool: { kind: "func", params: [STRING], returns: [BOOL, ERROR] },
485
- Quote: { kind: "func", params: [STRING], returns: [STRING] },
486
- Unquote: { kind: "func", params: [STRING], returns: [STRING, ERROR] },
487
- AppendInt: {
488
- kind: "func",
489
- params: [BYTE_SLICE, INT64, INT],
490
- returns: [BYTE_SLICE],
491
- },
492
- AppendUint: {
493
- kind: "func",
494
- params: [BYTE_SLICE, UINT64, INT],
495
- returns: [BYTE_SLICE],
496
- },
497
- AppendFloat: {
498
- kind: "func",
499
- params: [BYTE_SLICE, FLOAT64, INT, INT, INT],
500
- returns: [BYTE_SLICE],
501
- },
502
- AppendBool: {
503
- kind: "func",
504
- params: [BYTE_SLICE, BOOL],
505
- returns: [BYTE_SLICE],
506
- },
507
- ErrSyntax: ERROR,
508
- ErrRange: ERROR,
509
- },
510
- });
511
-
512
- globals.define("sort", {
513
- kind: "namespace",
514
- name: "sort",
515
- members: {
516
- Ints: {
517
- kind: "func",
518
- params: [{ kind: "slice", elem: INT }],
519
- returns: [VOID],
520
- },
521
- Float64s: {
522
- kind: "func",
523
- params: [{ kind: "slice", elem: FLOAT64 }],
524
- returns: [VOID],
525
- },
526
- Strings: {
527
- kind: "func",
528
- params: [{ kind: "slice", elem: STRING }],
529
- returns: [VOID],
530
- },
531
- Slice: { kind: "func", params: [ANY, ANY], returns: [VOID] },
532
- SliceStable: { kind: "func", params: [ANY, ANY], returns: [VOID] },
533
- SliceIsSorted: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
534
- Search: { kind: "func", params: [INT, ANY], returns: [INT] },
535
- IntsAreSorted: {
536
- kind: "func",
537
- params: [{ kind: "slice", elem: INT }],
538
- returns: [BOOL],
539
- },
540
- Float64sAreSorted: {
541
- kind: "func",
542
- params: [{ kind: "slice", elem: FLOAT64 }],
543
- returns: [BOOL],
544
- },
545
- StringsAreSorted: {
546
- kind: "func",
547
- params: [{ kind: "slice", elem: STRING }],
548
- returns: [BOOL],
549
- },
550
- },
551
- });
552
-
553
- globals.define("math", {
554
- kind: "namespace",
555
- name: "math",
556
- members: {
557
- Abs: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
558
- Floor: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
559
- Ceil: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
560
- Round: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
561
- Sqrt: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
562
- Cbrt: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
563
- Pow: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
564
- Log: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
565
- Log1p: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
566
- Log2: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
567
- Log10: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
568
- Expm1: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
569
- Sin: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
570
- Cos: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
571
- Tan: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
572
- Min: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
573
- Max: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
574
- Mod: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
575
- Inf: { kind: "func", params: [INT], returns: [FLOAT64] },
576
- IsNaN: { kind: "func", params: [FLOAT64], returns: [BOOL] },
577
- IsInf: { kind: "func", params: [FLOAT64, INT], returns: [BOOL] },
578
- NaN: { kind: "func", params: [], returns: [FLOAT64] },
579
- Atan: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
580
- Atan2: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
581
- Asin: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
582
- Acos: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
583
- Exp: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
584
- Exp2: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
585
- Trunc: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
586
- Hypot: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
587
- Signbit: { kind: "func", params: [FLOAT64], returns: [BOOL] },
588
- Copysign: {
589
- kind: "func",
590
- params: [FLOAT64, FLOAT64],
591
- returns: [FLOAT64],
592
- },
593
- Dim: { kind: "func", params: [FLOAT64, FLOAT64], returns: [FLOAT64] },
594
- Remainder: {
595
- kind: "func",
596
- params: [FLOAT64, FLOAT64],
597
- returns: [FLOAT64],
598
- },
599
- Float64bits: { kind: "func", params: [FLOAT64], returns: [UINT64] },
600
- Float64frombits: { kind: "func", params: [UINT64], returns: [FLOAT64] },
601
- Float32bits: { kind: "func", params: [FLOAT32], returns: [UINT32] },
602
- Float32frombits: { kind: "func", params: [UINT32], returns: [FLOAT32] },
603
- Sinh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
604
- Cosh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
605
- Tanh: { kind: "func", params: [FLOAT64], returns: [FLOAT64] },
606
- Pi: FLOAT64,
607
- E: FLOAT64,
608
- Phi: FLOAT64,
609
- Sqrt2: FLOAT64,
610
- SqrtE: FLOAT64,
611
- SqrtPi: FLOAT64,
612
- SqrtPhi: FLOAT64,
613
- Ln2: FLOAT64,
614
- Log2E: FLOAT64,
615
- Ln10: FLOAT64,
616
- Log10E: FLOAT64,
617
- MaxFloat32: FLOAT32,
618
- SmallestNonzeroFloat32: FLOAT32,
619
- MaxFloat64: FLOAT64,
620
- SmallestNonzeroFloat64: FLOAT64,
621
- MaxInt: INT,
622
- MinInt: INT,
623
- // Untyped integer constants, as in Go (`var x int64 = math.MaxUint64 >> 1`).
624
- MaxInt8: UNTYPED_INT,
625
- MinInt8: UNTYPED_INT,
626
- MaxInt16: UNTYPED_INT,
627
- MinInt16: UNTYPED_INT,
628
- MaxInt32: UNTYPED_INT,
629
- MinInt32: UNTYPED_INT,
630
- MaxInt64: UNTYPED_INT,
631
- MinInt64: UNTYPED_INT,
632
- MaxUint8: UNTYPED_INT,
633
- MaxUint16: UNTYPED_INT,
634
- MaxUint32: UNTYPED_INT,
635
- MaxUint: UINT,
636
- MaxUint64: UNTYPED_INT,
637
- },
638
- });
639
-
640
- globals.define("bits", {
641
- kind: "namespace",
642
- name: "bits",
643
- members: {
644
- Add: { kind: "func", params: [UINT, UINT, UINT], returns: [UINT, UINT] },
645
- Add32: {
646
- kind: "func",
647
- params: [UINT32, UINT32, UINT32],
648
- returns: [UINT32, UINT32],
649
- },
650
- Add64: {
651
- kind: "func",
652
- params: [UINT64, UINT64, UINT64],
653
- returns: [UINT64, UINT64],
654
- },
655
- Sub: { kind: "func", params: [UINT, UINT, UINT], returns: [UINT, UINT] },
656
- Sub32: {
657
- kind: "func",
658
- params: [UINT32, UINT32, UINT32],
659
- returns: [UINT32, UINT32],
660
- },
661
- Sub64: {
662
- kind: "func",
663
- params: [UINT64, UINT64, UINT64],
664
- returns: [UINT64, UINT64],
665
- },
666
- Mul: { kind: "func", params: [UINT, UINT], returns: [UINT, UINT] },
667
- Mul32: {
668
- kind: "func",
669
- params: [UINT32, UINT32],
670
- returns: [UINT32, UINT32],
671
- },
672
- Mul64: {
673
- kind: "func",
674
- params: [UINT64, UINT64],
675
- returns: [UINT64, UINT64],
676
- },
677
- Div: { kind: "func", params: [UINT, UINT, UINT], returns: [UINT, UINT] },
678
- Div32: {
679
- kind: "func",
680
- params: [UINT32, UINT32, UINT32],
681
- returns: [UINT32, UINT32],
682
- },
683
- Div64: {
684
- kind: "func",
685
- params: [UINT64, UINT64, UINT64],
686
- returns: [UINT64, UINT64],
687
- },
688
- Rem: { kind: "func", params: [UINT, UINT, UINT], returns: [UINT] },
689
- Rem32: {
690
- kind: "func",
691
- params: [UINT32, UINT32, UINT32],
692
- returns: [UINT32],
693
- },
694
- Rem64: {
695
- kind: "func",
696
- params: [UINT64, UINT64, UINT64],
697
- returns: [UINT64],
698
- },
699
- LeadingZeros: { kind: "func", params: [UINT], returns: [INT] },
700
- LeadingZeros8: { kind: "func", params: [UINT8], returns: [INT] },
701
- LeadingZeros16: { kind: "func", params: [UINT16], returns: [INT] },
702
- LeadingZeros32: { kind: "func", params: [UINT32], returns: [INT] },
703
- LeadingZeros64: { kind: "func", params: [UINT64], returns: [INT] },
704
- TrailingZeros: { kind: "func", params: [UINT], returns: [INT] },
705
- TrailingZeros8: { kind: "func", params: [UINT8], returns: [INT] },
706
- TrailingZeros16: { kind: "func", params: [UINT16], returns: [INT] },
707
- TrailingZeros32: { kind: "func", params: [UINT32], returns: [INT] },
708
- TrailingZeros64: { kind: "func", params: [UINT64], returns: [INT] },
709
- OnesCount: { kind: "func", params: [UINT], returns: [INT] },
710
- OnesCount8: { kind: "func", params: [UINT8], returns: [INT] },
711
- OnesCount16: { kind: "func", params: [UINT16], returns: [INT] },
712
- OnesCount32: { kind: "func", params: [UINT32], returns: [INT] },
713
- OnesCount64: { kind: "func", params: [UINT64], returns: [INT] },
714
- RotateLeft: { kind: "func", params: [UINT, INT], returns: [UINT] },
715
- RotateLeft8: { kind: "func", params: [UINT8, INT], returns: [UINT8] },
716
- RotateLeft16: { kind: "func", params: [UINT16, INT], returns: [UINT16] },
717
- RotateLeft32: { kind: "func", params: [UINT32, INT], returns: [UINT32] },
718
- RotateLeft64: { kind: "func", params: [UINT64, INT], returns: [UINT64] },
719
- Reverse: { kind: "func", params: [UINT], returns: [UINT] },
720
- Reverse8: { kind: "func", params: [UINT8], returns: [UINT8] },
721
- Reverse16: { kind: "func", params: [UINT16], returns: [UINT16] },
722
- Reverse32: { kind: "func", params: [UINT32], returns: [UINT32] },
723
- Reverse64: { kind: "func", params: [UINT64], returns: [UINT64] },
724
- ReverseBytes: { kind: "func", params: [UINT], returns: [UINT] },
725
- ReverseBytes16: { kind: "func", params: [UINT16], returns: [UINT16] },
726
- ReverseBytes32: { kind: "func", params: [UINT32], returns: [UINT32] },
727
- ReverseBytes64: { kind: "func", params: [UINT64], returns: [UINT64] },
728
- Len: { kind: "func", params: [UINT], returns: [INT] },
729
- Len8: { kind: "func", params: [UINT8], returns: [INT] },
730
- Len16: { kind: "func", params: [UINT16], returns: [INT] },
731
- Len32: { kind: "func", params: [UINT32], returns: [INT] },
732
- Len64: { kind: "func", params: [UINT64], returns: [INT] },
733
- UintSize: UNTYPED_INT,
734
- },
735
- });
736
-
737
- globals.define("errors", {
738
- kind: "namespace",
739
- name: "errors",
740
- members: {
741
- New: { kind: "func", params: [STRING], returns: [ERROR] },
742
- Is: { kind: "func", params: [ERROR, ERROR], returns: [BOOL] },
743
- Unwrap: { kind: "func", params: [ERROR], returns: [ERROR] },
744
- As: { kind: "func", params: [ERROR, ANY], returns: [BOOL] },
745
- Join: {
746
- kind: "func",
747
- params: [ERROR],
748
- returns: [ERROR],
749
- variadic: true,
750
- },
751
- },
752
- });
753
-
754
- globals.define("time", {
755
- kind: "namespace",
756
- name: "time",
757
- members: {
758
- Now: { kind: "func", params: [], returns: [TIME_T] },
759
- Since: { kind: "func", params: [TIME_T], returns: [DURATION_T] },
760
- Sleep: { kind: "func", params: [ANY], returns: [VOID], async: true },
761
- Parse: {
762
- kind: "func",
763
- params: [STRING, STRING],
764
- returns: [TIME_T, ERROR],
765
- },
766
- ParseDuration: {
767
- kind: "func",
768
- params: [STRING],
769
- returns: [DURATION_T, ERROR],
770
- },
771
- Unix: { kind: "func", params: [INT64, INT64], returns: [TIME_T] },
772
- UnixMicro: { kind: "func", params: [INT64], returns: [TIME_T] },
773
- UnixMilli: { kind: "func", params: [INT64], returns: [TIME_T] },
774
- Date: {
775
- kind: "func",
776
- params: [INT, ANY, INT, INT, INT, INT, INT, ANY],
777
- returns: [TIME_T],
778
- },
779
- FixedZone: {
780
- kind: "func",
781
- params: [STRING, INT],
782
- returns: [LOCATION_PTR_T],
783
- },
784
- AfterFunc: {
785
- kind: "func",
786
- params: [DURATION_T, { kind: "func", params: [], returns: [VOID] }],
787
- returns: [TIMER_PTR_T],
788
- },
789
- Duration: DURATION_T,
790
- Nanosecond: DURATION_T,
791
- Microsecond: DURATION_T,
792
- Millisecond: DURATION_T,
793
- Second: DURATION_T,
794
- Minute: DURATION_T,
795
- Hour: DURATION_T,
796
- Time: TIME_T,
797
- Month: MONTH_T,
798
- Weekday: WEEKDAY_T,
799
- Location: LOCATION_T,
800
- Timer: TIMER_T,
801
- RFC3339: STRING,
802
- RFC3339Nano: STRING,
803
- DateOnly: STRING,
804
- TimeOnly: STRING,
805
- DateTime: STRING,
806
- UTC: ANY,
807
- Local: ANY,
808
- January: MONTH_T,
809
- February: MONTH_T,
810
- March: MONTH_T,
811
- April: MONTH_T,
812
- May: MONTH_T,
813
- June: MONTH_T,
814
- July: MONTH_T,
815
- August: MONTH_T,
816
- September: MONTH_T,
817
- October: MONTH_T,
818
- November: MONTH_T,
819
- December: MONTH_T,
820
- Sunday: WEEKDAY_T,
821
- Monday: WEEKDAY_T,
822
- Tuesday: WEEKDAY_T,
823
- Wednesday: WEEKDAY_T,
824
- Thursday: WEEKDAY_T,
825
- Friday: WEEKDAY_T,
826
- Saturday: WEEKDAY_T,
827
- },
828
- });
829
- types.set("time.Duration", DURATION_T);
830
- types.set("time.Time", TIME_T);
831
- types.set("time.Month", MONTH_T);
832
- types.set("time.Weekday", WEEKDAY_T);
833
- types.set("time.Location", LOCATION_T);
834
- types.set("time.Timer", TIMER_T);
835
-
836
- const runeToStr = { kind: "func", params: [INT], returns: [BOOL] };
837
- const runeTrans = { kind: "func", params: [INT], returns: [INT] };
838
- globals.define("unicode", {
839
- kind: "namespace",
840
- name: "unicode",
841
- members: {
842
- IsLetter: runeToStr,
843
- IsDigit: runeToStr,
844
- IsSpace: runeToStr,
845
- IsUpper: runeToStr,
846
- IsLower: runeToStr,
847
- IsPunct: runeToStr,
848
- IsControl: runeToStr,
849
- IsPrint: runeToStr,
850
- IsGraphic: runeToStr,
851
- ToUpper: runeTrans,
852
- ToLower: runeTrans,
853
- },
854
- });
855
-
856
- const BYTE_SLICE_IO = { kind: "slice", elem: UINT8 };
857
- const OS_FILE = {
858
- kind: "named",
859
- name: "os.File",
860
- underlying: {
861
- kind: "struct",
862
- fields: new Map([["fd", INT]]),
863
- methods: new Map([
864
- [
865
- "Write",
866
- {
867
- kind: "func",
868
- params: [BYTE_SLICE_IO],
869
- returns: [INT, ERROR],
870
- _ptrRecv: true,
871
- },
872
- ],
873
- [
874
- "WriteString",
875
- {
876
- kind: "func",
877
- params: [STRING],
878
- returns: [INT, ERROR],
879
- _ptrRecv: true,
880
- },
881
- ],
882
- [
883
- "Read",
884
- {
885
- kind: "func",
886
- params: [BYTE_SLICE_IO],
887
- returns: [INT, ERROR],
888
- _ptrRecv: true,
889
- },
890
- ],
891
- [
892
- "Close",
893
- {
894
- kind: "func",
895
- params: [],
896
- returns: [ERROR],
897
- _ptrRecv: true,
898
- },
899
- ],
900
- ]),
901
- },
902
- };
903
- const OS_FILE_PTR = { kind: "pointer", base: OS_FILE };
904
- types.set("os.File", OS_FILE);
905
-
906
- globals.define("os", {
907
- kind: "namespace",
908
- name: "os",
909
- members: {
910
- File: OS_FILE,
911
- Exit: { kind: "func", params: [INT], returns: [VOID] },
912
- Args: { kind: "slice", elem: STRING },
913
- Getenv: { kind: "func", params: [STRING], returns: [STRING] },
914
- Stdout: OS_FILE_PTR,
915
- Stderr: OS_FILE_PTR,
916
- Stdin: OS_FILE_PTR,
917
- },
918
- });
919
-
920
- // Slice helpers that return a slice of the same type as their first argument.
921
- const sameSlice = (params, extra = {}) => ({
922
- kind: "func",
923
- params,
924
- returns: [ANY],
925
- _derivedReturn: "arg0",
926
- ...extra,
927
- });
928
- globals.define("slices", {
929
- kind: "namespace",
930
- name: "slices",
931
- members: {
932
- Contains: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
933
- ContainsFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
934
- Index: { kind: "func", params: [ANY, ANY], returns: [INT] },
935
- IndexFunc: { kind: "func", params: [ANY, ANY], returns: [INT] },
936
- BinarySearch: { kind: "func", params: [ANY, ANY], returns: [INT, BOOL] },
937
- BinarySearchFunc: {
938
- kind: "func",
939
- params: [ANY, ANY, ANY],
940
- returns: [INT, BOOL],
941
- },
942
- Equal: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
943
- Compare: { kind: "func", params: [ANY, ANY], returns: [INT] },
944
- Sort: { kind: "func", params: [ANY], returns: [VOID] },
945
- SortFunc: { kind: "func", params: [ANY, ANY], returns: [VOID] },
946
- SortStableFunc: { kind: "func", params: [ANY, ANY], returns: [VOID] },
947
- IsSorted: { kind: "func", params: [ANY], returns: [BOOL] },
948
- IsSortedFunc: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
949
- Reverse: { kind: "func", params: [ANY], returns: [VOID] },
950
- Max: {
951
- kind: "func",
952
- params: [ANY],
953
- returns: [ANY],
954
- _derivedReturn: "elemOfArg0",
955
- },
956
- Min: {
957
- kind: "func",
958
- params: [ANY],
959
- returns: [ANY],
960
- _derivedReturn: "elemOfArg0",
961
- },
962
- MaxFunc: {
963
- kind: "func",
964
- params: [ANY, ANY],
965
- returns: [ANY],
966
- _derivedReturn: "elemOfArg0",
967
- },
968
- MinFunc: {
969
- kind: "func",
970
- params: [ANY, ANY],
971
- returns: [ANY],
972
- _derivedReturn: "elemOfArg0",
973
- },
974
- Clone: sameSlice([ANY]),
975
- Compact: sameSlice([ANY]),
976
- CompactFunc: sameSlice([ANY, ANY]),
977
- Concat: sameSlice([ANY], { variadic: true }),
978
- Delete: sameSlice([ANY, INT, INT]),
979
- DeleteFunc: sameSlice([ANY, ANY]),
980
- Insert: sameSlice([ANY, INT, ANY], { variadic: true }),
981
- Replace: sameSlice([ANY, INT, INT, ANY], { variadic: true }),
982
- Grow: sameSlice([ANY, INT]),
983
- Clip: sameSlice([ANY]),
984
- },
985
- });
986
-
987
- globals.define("html", {
988
- kind: "namespace",
989
- name: "html",
990
- members: {
991
- EscapeString: { kind: "func", params: [STRING], returns: [STRING] },
992
- UnescapeString: { kind: "func", params: [STRING], returns: [STRING] },
993
- },
994
- });
995
-
996
- const IO_WRITER = {
997
- kind: "interface",
998
- name: "io.Writer",
999
- methods: new Map([
1000
- [
1001
- "Write",
1002
- { kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
1003
- ],
1004
- ]),
1005
- };
1006
- const IO_READER = {
1007
- kind: "interface",
1008
- name: "io.Reader",
1009
- methods: new Map([
1010
- [
1011
- "Read",
1012
- { kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
1013
- ],
1014
- ]),
1015
- };
1016
- const IO_CLOSER = {
1017
- kind: "interface",
1018
- name: "io.Closer",
1019
- methods: new Map([
1020
- ["Close", { kind: "func", params: [], returns: [ERROR] }],
1021
- ]),
1022
- };
1023
- const IO_READWRITER = {
1024
- kind: "interface",
1025
- name: "io.ReadWriter",
1026
- methods: new Map([
1027
- [
1028
- "Read",
1029
- { kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
1030
- ],
1031
- [
1032
- "Write",
1033
- { kind: "func", params: [BYTE_SLICE_IO], returns: [INT, ERROR] },
1034
- ],
1035
- ]),
1036
- };
1037
- globals.define("io", {
1038
- kind: "namespace",
1039
- name: "io",
1040
- members: {
1041
- Writer: IO_WRITER,
1042
- Reader: IO_READER,
1043
- Closer: IO_CLOSER,
1044
- ReadWriter: IO_READWRITER,
1045
- EOF: ERROR,
1046
- WriteString: {
1047
- kind: "func",
1048
- params: [IO_WRITER, STRING],
1049
- returns: [INT, ERROR],
1050
- },
1051
- ReadAll: {
1052
- kind: "func",
1053
- params: [IO_READER],
1054
- returns: [BYTE_SLICE_IO, ERROR],
1055
- },
1056
- LimitReader: {
1057
- kind: "func",
1058
- params: [IO_READER, INT64],
1059
- returns: [IO_READER],
1060
- },
1061
- Copy: {
1062
- kind: "func",
1063
- params: [IO_WRITER, IO_READER],
1064
- returns: [INT64, ERROR],
1065
- },
1066
- CopyN: {
1067
- kind: "func",
1068
- params: [IO_WRITER, IO_READER, INT64],
1069
- returns: [INT64, ERROR],
1070
- },
1071
- Discard: IO_WRITER,
1072
- },
1073
- });
1074
- types.set("fmt.Stringer", FMT_STRINGER);
1075
- types.set("io.Writer", IO_WRITER);
1076
- types.set("io.Reader", IO_READER);
1077
- types.set("io.Closer", IO_CLOSER);
1078
- types.set("io.ReadWriter", IO_READWRITER);
1079
- }