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,1210 +0,0 @@
1
- // Extended standard library type definitions — gom, maps, regexp, rand, utf8,
2
- // path, strings.Builder / bytes.Buffer types, and built-in functions.
3
-
4
- import {
5
- ANY,
6
- BOOL,
7
- ERROR,
8
- FLOAT32,
9
- FLOAT64,
10
- INT,
11
- INT32,
12
- INT64,
13
- STRING,
14
- UINT8,
15
- UINT16,
16
- UINT32,
17
- UINT64,
18
- VOID,
19
- } from "../types.js";
20
-
21
- export function setupExtendedGlobals(globals, types) {
22
- const GOM_NODE_T = {
23
- kind: "interface",
24
- methods: new Map([
25
- ["Mount", { kind: "func", params: [ANY], returns: [VOID] }],
26
- ]),
27
- };
28
- const GOM_NODE_FUNC_T = {
29
- kind: "named",
30
- name: "gom.NodeFunc",
31
- underlying: { kind: "func", params: [ANY], returns: [VOID] },
32
- };
33
- const GOM_GROUP_T = {
34
- kind: "named",
35
- name: "gom.Group",
36
- underlying: { kind: "slice", elem: GOM_NODE_T },
37
- };
38
- const gomEl = {
39
- kind: "func",
40
- params: [GOM_NODE_T],
41
- returns: [GOM_NODE_T],
42
- variadic: true,
43
- };
44
- const gomAttr1 = { kind: "func", params: [STRING], returns: [GOM_NODE_T] };
45
- const gomBoolAttr = { kind: "func", params: [], returns: [GOM_NODE_T] };
46
- const gomMembers = {
47
- Node: GOM_NODE_T,
48
- NodeFunc: GOM_NODE_FUNC_T,
49
- Group: GOM_GROUP_T,
50
- El: {
51
- kind: "func",
52
- params: [STRING, GOM_NODE_T],
53
- returns: [GOM_NODE_T],
54
- variadic: true,
55
- },
56
- Text: { kind: "func", params: [STRING], returns: [GOM_NODE_T] },
57
- Attr: { kind: "func", params: [STRING, STRING], returns: [GOM_NODE_T] },
58
- DataAttr: { kind: "func", params: [STRING, STRING], returns: [GOM_NODE_T] },
59
- If: { kind: "func", params: [BOOL, GOM_NODE_T], returns: [GOM_NODE_T] },
60
- Map: { kind: "func", params: [ANY, ANY], returns: [GOM_NODE_T] },
61
- Mount: {
62
- kind: "func",
63
- params: [STRING, GOM_NODE_T, ANY],
64
- variadic: true,
65
- returns: [VOID],
66
- },
67
- MountTo: {
68
- kind: "func",
69
- params: [STRING, GOM_NODE_T, ANY],
70
- variadic: true,
71
- returns: [VOID],
72
- },
73
- };
74
- for (const name of [
75
- "Div",
76
- "Section",
77
- "Article",
78
- "Aside",
79
- "Header",
80
- "Footer",
81
- "Main",
82
- "Nav",
83
- "Figure",
84
- "H1",
85
- "H2",
86
- "H3",
87
- "H4",
88
- "H5",
89
- "H6",
90
- "Span",
91
- "A",
92
- "Strong",
93
- "Em",
94
- "Code",
95
- "Pre",
96
- "Small",
97
- "Mark",
98
- "P",
99
- "Br",
100
- "Hr",
101
- "Ul",
102
- "Ol",
103
- "Li",
104
- "Dl",
105
- "Dt",
106
- "Dd",
107
- "Form",
108
- "Input",
109
- "Button",
110
- "Textarea",
111
- "Select",
112
- "Option",
113
- "Label",
114
- "Fieldset",
115
- "Legend",
116
- "Img",
117
- "Video",
118
- "Audio",
119
- "Canvas",
120
- "Table",
121
- "Thead",
122
- "Tbody",
123
- "Tfoot",
124
- "Tr",
125
- "Th",
126
- "Td",
127
- ])
128
- gomMembers[name] = gomEl;
129
- for (const name of [
130
- "Class",
131
- "Type",
132
- "Href",
133
- "Src",
134
- "Placeholder",
135
- "Style",
136
- "For",
137
- "Name",
138
- "Value",
139
- "Target",
140
- "Rel",
141
- "Alt",
142
- "Title",
143
- "Lang",
144
- "Action",
145
- "Method",
146
- "AutoComplete",
147
- "Draggable",
148
- "Role",
149
- "AriaLabel",
150
- "StyleAttr",
151
- ])
152
- gomMembers[name] = gomAttr1;
153
- for (const name of ["Disabled", "Checked", "Selected", "Readonly"])
154
- gomMembers[name] = gomBoolAttr;
155
- globals.define("gom", {
156
- kind: "namespace",
157
- name: "gom",
158
- members: gomMembers,
159
- });
160
- types.set("gom.Node", GOM_NODE_T);
161
- types.set("gom.NodeFunc", GOM_NODE_FUNC_T);
162
- types.set("gom.Group", GOM_GROUP_T);
163
-
164
- globals.define("maps", {
165
- kind: "namespace",
166
- name: "maps",
167
- members: {
168
- Clone: {
169
- kind: "func",
170
- params: [ANY],
171
- returns: [ANY],
172
- _derivedReturn: "arg0",
173
- },
174
- Copy: { kind: "func", params: [ANY, ANY], returns: [VOID] },
175
- Equal: { kind: "func", params: [ANY, ANY], returns: [BOOL] },
176
- EqualFunc: { kind: "func", params: [ANY, ANY, ANY], returns: [BOOL] },
177
- Delete: { kind: "func", params: [ANY, ANY], returns: [VOID] },
178
- DeleteFunc: { kind: "func", params: [ANY, ANY], returns: [VOID] },
179
- },
180
- });
181
-
182
- const REGEXP_T = {
183
- kind: "named",
184
- name: "regexp.Regexp",
185
- underlying: { kind: "struct", fields: new Map(), methods: new Map() },
186
- };
187
- const REGEXP_PTR = { kind: "pointer", base: REGEXP_T };
188
- const STR_SLICE = { kind: "slice", elem: STRING };
189
- const INT_SLICE = { kind: "slice", elem: INT };
190
- REGEXP_T.underlying.methods = new Map([
191
- ["MatchString", { kind: "func", params: [STRING], returns: [BOOL] }],
192
- ["FindString", { kind: "func", params: [STRING], returns: [STRING] }],
193
- [
194
- "FindStringIndex",
195
- { kind: "func", params: [STRING], returns: [INT_SLICE] },
196
- ],
197
- [
198
- "FindAllString",
199
- { kind: "func", params: [STRING, INT], returns: [STR_SLICE] },
200
- ],
201
- [
202
- "FindStringSubmatch",
203
- { kind: "func", params: [STRING], returns: [STR_SLICE] },
204
- ],
205
- [
206
- "FindAllStringSubmatch",
207
- {
208
- kind: "func",
209
- params: [STRING, INT],
210
- returns: [{ kind: "slice", elem: STR_SLICE }],
211
- },
212
- ],
213
- [
214
- "ReplaceAllString",
215
- { kind: "func", params: [STRING, STRING], returns: [STRING] },
216
- ],
217
- [
218
- "ReplaceAllLiteralString",
219
- { kind: "func", params: [STRING, STRING], returns: [STRING] },
220
- ],
221
- ["Split", { kind: "func", params: [STRING, INT], returns: [STR_SLICE] }],
222
- ["String", { kind: "func", params: [], returns: [STRING] }],
223
- ]);
224
- types.set("regexp.Regexp", REGEXP_T);
225
- globals.define("regexp", {
226
- kind: "namespace",
227
- name: "regexp",
228
- members: {
229
- MustCompile: { kind: "func", params: [STRING], returns: [REGEXP_PTR] },
230
- Compile: { kind: "func", params: [STRING], returns: [REGEXP_PTR, ERROR] },
231
- MatchString: {
232
- kind: "func",
233
- params: [STRING, STRING],
234
- returns: [BOOL, ERROR],
235
- },
236
- QuoteMeta: { kind: "func", params: [STRING], returns: [STRING] },
237
- },
238
- });
239
-
240
- const BYTE_SLICE_T = { kind: "slice", elem: UINT8 };
241
- const _builderBase = [
242
- ["WriteString", { kind: "func", params: [STRING], returns: [INT, ERROR] }],
243
- ["WriteByte", { kind: "func", params: [INT], returns: [ERROR] }],
244
- ["Write", { kind: "func", params: [BYTE_SLICE_T], returns: [INT, ERROR] }],
245
- ["String", { kind: "func", params: [], returns: [STRING] }],
246
- ["Len", { kind: "func", params: [], returns: [INT] }],
247
- ["Cap", { kind: "func", params: [], returns: [INT] }],
248
- ["Reset", { kind: "func", params: [], returns: [VOID] }],
249
- ["Grow", { kind: "func", params: [INT], returns: [VOID] }],
250
- ];
251
- const STR_SLICE_T = { kind: "slice", elem: STRING };
252
- const _makeBuilderType = (name, extra = []) => ({
253
- kind: "named",
254
- name,
255
- underlying: {
256
- kind: "struct",
257
- fields: new Map(
258
- name === "strings.Builder"
259
- ? [
260
- ["_buf", STR_SLICE_T],
261
- ["_len", INT],
262
- ["_self", ANY],
263
- ]
264
- : name === "bytes.Buffer"
265
- ? [
266
- ["_buf", BYTE_SLICE_T],
267
- ["_lastOp", INT],
268
- ["_lastRuneLen", INT],
269
- ]
270
- : [],
271
- ),
272
- methods: new Map([..._builderBase, ...extra]),
273
- },
274
- });
275
- const ioPkg = globals.lookup("io");
276
- const IO_READER = ioPkg?.members?.Reader ?? {
277
- kind: "interface",
278
- name: "io.Reader",
279
- };
280
- const IO_WRITER = ioPkg?.members?.Writer ?? {
281
- kind: "interface",
282
- name: "io.Writer",
283
- };
284
-
285
- types.set(
286
- "strings.Builder",
287
- _makeBuilderType("strings.Builder", [
288
- ["WriteRune", { kind: "func", params: [INT], returns: [INT, ERROR] }],
289
- ]),
290
- );
291
- types.set(
292
- "bytes.Buffer",
293
- _makeBuilderType("bytes.Buffer", [
294
- ["WriteRune", { kind: "func", params: [INT], returns: [INT, ERROR] }],
295
- ["Bytes", { kind: "func", params: [], returns: [BYTE_SLICE_T] }],
296
- ["Read", { kind: "func", params: [BYTE_SLICE_T], returns: [INT, ERROR] }],
297
- ["ReadRune", { kind: "func", params: [], returns: [INT32, INT, ERROR] }],
298
- ["UnreadRune", { kind: "func", params: [], returns: [ERROR] }],
299
- ["ReadByte", { kind: "func", params: [], returns: [UINT8, ERROR] }],
300
- ["UnreadByte", { kind: "func", params: [], returns: [ERROR] }],
301
- [
302
- "ReadBytes",
303
- { kind: "func", params: [UINT8], returns: [BYTE_SLICE_T, ERROR] },
304
- ],
305
- [
306
- "ReadString",
307
- { kind: "func", params: [UINT8], returns: [STRING, ERROR] },
308
- ],
309
- [
310
- "ReadFrom",
311
- { kind: "func", params: [IO_READER], returns: [INT64, ERROR] },
312
- ],
313
- [
314
- "WriteTo",
315
- { kind: "func", params: [IO_WRITER], returns: [INT64, ERROR] },
316
- ],
317
- ["Next", { kind: "func", params: [INT], returns: [BYTE_SLICE_T] }],
318
- ["Truncate", { kind: "func", params: [INT], returns: [VOID] }],
319
- ["Available", { kind: "func", params: [], returns: [INT] }],
320
- [
321
- "AvailableBuffer",
322
- { kind: "func", params: [], returns: [BYTE_SLICE_T] },
323
- ],
324
- ["Peek", { kind: "func", params: [INT], returns: [BYTE_SLICE_T, ERROR] }],
325
- ]),
326
- );
327
- types.set("strings.Replacer", {
328
- kind: "named",
329
- name: "strings.Replacer",
330
- underlying: {
331
- kind: "struct",
332
- fields: new Map([["_pairs", STR_SLICE_T]]),
333
- methods: new Map([
334
- ["Replace", { kind: "func", params: [STRING], returns: [STRING] }],
335
- [
336
- "WriteString",
337
- {
338
- kind: "func",
339
- params: [IO_WRITER, STRING],
340
- returns: [INT, ERROR],
341
- },
342
- ],
343
- ]),
344
- },
345
- });
346
- const _makeReaderType = (name, srcType, resetArgType = srcType) => ({
347
- kind: "named",
348
- name,
349
- underlying: {
350
- kind: "struct",
351
- fields: new Map([
352
- ["_src", srcType],
353
- ["_pos", INT],
354
- ["_prev", INT],
355
- ]),
356
- methods: new Map([
357
- [
358
- "Read",
359
- { kind: "func", params: [BYTE_SLICE_T], returns: [INT, ERROR] },
360
- ],
361
- [
362
- "ReadAt",
363
- {
364
- kind: "func",
365
- params: [BYTE_SLICE_T, INT64],
366
- returns: [INT, ERROR],
367
- },
368
- ],
369
- ["ReadByte", { kind: "func", params: [], returns: [UINT8, ERROR] }],
370
- ["UnreadByte", { kind: "func", params: [], returns: [ERROR] }],
371
- [
372
- "ReadRune",
373
- { kind: "func", params: [], returns: [INT32, INT, ERROR] },
374
- ],
375
- ["UnreadRune", { kind: "func", params: [], returns: [ERROR] }],
376
- [
377
- "Seek",
378
- { kind: "func", params: [INT64, INT], returns: [INT64, ERROR] },
379
- ],
380
- ["Size", { kind: "func", params: [], returns: [INT64] }],
381
- [
382
- "WriteTo",
383
- { kind: "func", params: [IO_WRITER], returns: [INT64, ERROR] },
384
- ],
385
- ["Len", { kind: "func", params: [], returns: [INT] }],
386
- ["Reset", { kind: "func", params: [resetArgType], returns: [VOID] }],
387
- ]),
388
- },
389
- });
390
- types.set(
391
- "strings.Reader",
392
- _makeReaderType("strings.Reader", BYTE_SLICE_T, STRING),
393
- );
394
- types.set("bytes.Reader", _makeReaderType("bytes.Reader", BYTE_SLICE_T));
395
- types.set("io.discard", {
396
- kind: "named",
397
- name: "io.discard",
398
- underlying: {
399
- kind: "struct",
400
- fields: new Map(),
401
- methods: new Map([
402
- [
403
- "Write",
404
- { kind: "func", params: [BYTE_SLICE_T], returns: [INT, ERROR] },
405
- ],
406
- [
407
- "WriteString",
408
- { kind: "func", params: [STRING], returns: [INT, ERROR] },
409
- ],
410
- ]),
411
- },
412
- });
413
- types.set("io.LimitedReader", {
414
- kind: "named",
415
- name: "io.LimitedReader",
416
- underlying: {
417
- kind: "struct",
418
- fields: new Map([
419
- ["R", IO_READER],
420
- ["N", INT64],
421
- ]),
422
- methods: new Map([
423
- [
424
- "Read",
425
- { kind: "func", params: [BYTE_SLICE_T], returns: [INT, ERROR] },
426
- ],
427
- ]),
428
- },
429
- });
430
- if (ioPkg?.members) {
431
- ioPkg.members.LimitedReader = types.get("io.LimitedReader");
432
- }
433
- const stringsPkg = globals.lookup("strings");
434
- if (stringsPkg?.members) {
435
- stringsPkg.members.NewReader = {
436
- kind: "func",
437
- params: [STRING],
438
- returns: [{ kind: "pointer", base: types.get("strings.Reader") }],
439
- };
440
- stringsPkg.members.Reader = types.get("strings.Reader");
441
- }
442
- const bytesPkg = globals.lookup("bytes");
443
- if (bytesPkg?.members) {
444
- bytesPkg.members.NewReader = {
445
- kind: "func",
446
- params: [BYTE_SLICE_T],
447
- returns: [{ kind: "pointer", base: types.get("bytes.Reader") }],
448
- };
449
- bytesPkg.members.Reader = types.get("bytes.Reader");
450
- bytesPkg.members.Buffer = types.get("bytes.Buffer");
451
- }
452
-
453
- globals.define("rand", {
454
- kind: "namespace",
455
- name: "rand",
456
- members: {
457
- Intn: { kind: "func", params: [INT], returns: [INT] },
458
- Float64: { kind: "func", params: [], returns: [FLOAT64] },
459
- Float32: { kind: "func", params: [], returns: [FLOAT32] },
460
- Int: { kind: "func", params: [], returns: [INT] },
461
- Int63: { kind: "func", params: [], returns: [INT] },
462
- Int63n: { kind: "func", params: [INT], returns: [INT] },
463
- Int31: { kind: "func", params: [], returns: [INT] },
464
- Int31n: { kind: "func", params: [INT], returns: [INT] },
465
- Seed: { kind: "func", params: [INT], returns: [VOID] },
466
- Shuffle: { kind: "func", params: [INT, ANY], returns: [VOID] },
467
- Perm: {
468
- kind: "func",
469
- params: [INT],
470
- returns: [{ kind: "slice", elem: INT }],
471
- },
472
- Read: {
473
- kind: "func",
474
- params: [{ kind: "slice", elem: UINT8 }],
475
- returns: [INT, ERROR],
476
- },
477
- Reader: {
478
- kind: "interface",
479
- name: "io.Reader",
480
- methods: new Map([
481
- [
482
- "Read",
483
- {
484
- kind: "func",
485
- params: [{ kind: "slice", elem: UINT8 }],
486
- returns: [INT, ERROR],
487
- },
488
- ],
489
- ]),
490
- },
491
- },
492
- });
493
-
494
- globals.define("utf8", {
495
- kind: "namespace",
496
- name: "utf8",
497
- members: {
498
- RuneCountInString: { kind: "func", params: [STRING], returns: [INT] },
499
- RuneLen: { kind: "func", params: [INT], returns: [INT] },
500
- ValidString: { kind: "func", params: [STRING], returns: [BOOL] },
501
- ValidRune: { kind: "func", params: [INT], returns: [BOOL] },
502
- DecodeRuneInString: {
503
- kind: "func",
504
- params: [STRING],
505
- returns: [INT, INT],
506
- },
507
- DecodeLastRuneInString: {
508
- kind: "func",
509
- params: [STRING],
510
- returns: [INT, INT],
511
- },
512
- FullRuneInString: { kind: "func", params: [STRING], returns: [BOOL] },
513
- RuneError: INT,
514
- MaxRune: INT,
515
- UTFMax: INT,
516
- },
517
- });
518
-
519
- globals.define("path", {
520
- kind: "namespace",
521
- name: "path",
522
- members: {
523
- Base: { kind: "func", params: [STRING], returns: [STRING] },
524
- Dir: { kind: "func", params: [STRING], returns: [STRING] },
525
- Ext: { kind: "func", params: [STRING], returns: [STRING] },
526
- Join: {
527
- kind: "func",
528
- params: [STRING],
529
- returns: [STRING],
530
- variadic: true,
531
- },
532
- Clean: { kind: "func", params: [STRING], returns: [STRING] },
533
- IsAbs: { kind: "func", params: [STRING], returns: [BOOL] },
534
- Split: { kind: "func", params: [STRING], returns: [STRING, STRING] },
535
- Match: { kind: "func", params: [STRING, STRING], returns: [BOOL, ERROR] },
536
- ErrBadPattern: ERROR,
537
- },
538
- });
539
-
540
- globals.define("filepath", {
541
- kind: "namespace",
542
- name: "filepath",
543
- members: globals.lookup("path").members,
544
- });
545
-
546
- const TIME_TIME = types.get("time.Time");
547
- const TIME_DURATION = types.get("time.Duration");
548
-
549
- const CONTEXT_T = {
550
- kind: "named",
551
- name: "context.Context",
552
- underlying: {
553
- kind: "interface",
554
- methods: new Map([
555
- ["Deadline", { kind: "func", params: [], returns: [TIME_TIME, BOOL] }],
556
- ["Err", { kind: "func", params: [], returns: [ERROR] }],
557
- ["Value", { kind: "func", params: [ANY], returns: [ANY] }],
558
- ]),
559
- },
560
- };
561
- types.set("context.Context", CONTEXT_T);
562
-
563
- const TESTING_T = {
564
- kind: "named",
565
- name: "testing.T",
566
- underlying: { kind: "struct", fields: new Map(), methods: new Map() },
567
- };
568
- const TESTING_PTR = { kind: "pointer", base: TESTING_T };
569
-
570
- TESTING_T.underlying.methods = new Map([
571
- ["Error", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
572
- [
573
- "Errorf",
574
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
575
- ],
576
- ["Fatal", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
577
- [
578
- "Fatalf",
579
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
580
- ],
581
- ["Fail", { kind: "func", params: [], returns: [VOID] }],
582
- ["Failed", { kind: "func", params: [], returns: [BOOL] }],
583
- ["FailNow", { kind: "func", params: [], returns: [VOID] }],
584
- ["Log", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
585
- [
586
- "Logf",
587
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
588
- ],
589
- ["Skip", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
590
- [
591
- "Skipf",
592
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
593
- ],
594
- ["Skipped", { kind: "func", params: [], returns: [BOOL] }],
595
- ["Helper", { kind: "func", params: [], returns: [VOID] }],
596
- [
597
- "Run",
598
- {
599
- kind: "func",
600
- params: [
601
- STRING,
602
- { kind: "func", params: [TESTING_PTR], returns: [VOID] },
603
- ],
604
- returns: [BOOL],
605
- },
606
- ],
607
- ["Name", { kind: "func", params: [], returns: [STRING] }],
608
- [
609
- "Cleanup",
610
- {
611
- kind: "func",
612
- params: [{ kind: "func", params: [], returns: [VOID] }],
613
- returns: [VOID],
614
- },
615
- ],
616
- ["Setenv", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
617
- ["Deadline", { kind: "func", params: [], returns: [TIME_TIME, BOOL] }],
618
- ["Context", { kind: "func", params: [], returns: [CONTEXT_T] }],
619
- ["Parallel", { kind: "func", params: [], returns: [VOID] }],
620
- ["SkipNow", { kind: "func", params: [], returns: [VOID] }],
621
- ["Attr", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
622
- ["Output", { kind: "func", params: [], returns: [IO_WRITER] }],
623
- ]);
624
-
625
- const TESTING_B = {
626
- kind: "named",
627
- name: "testing.B",
628
- underlying: {
629
- kind: "struct",
630
- fields: new Map([["N", INT]]),
631
- methods: new Map(),
632
- },
633
- };
634
- const TESTING_B_PTR = { kind: "pointer", base: TESTING_B };
635
-
636
- TESTING_B.underlying.methods = new Map([
637
- [
638
- "Cleanup",
639
- {
640
- kind: "func",
641
- params: [{ kind: "func", params: [], returns: [VOID] }],
642
- returns: [VOID],
643
- },
644
- ],
645
- ["Error", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
646
- [
647
- "Errorf",
648
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
649
- ],
650
- ["Fatal", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
651
- [
652
- "Fatalf",
653
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
654
- ],
655
- ["Fail", { kind: "func", params: [], returns: [VOID] }],
656
- ["Failed", { kind: "func", params: [], returns: [BOOL] }],
657
- ["FailNow", { kind: "func", params: [], returns: [VOID] }],
658
- ["Log", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
659
- [
660
- "Logf",
661
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
662
- ],
663
- ["Skip", { kind: "func", params: [ANY], returns: [VOID], variadic: true }],
664
- [
665
- "Skipf",
666
- { kind: "func", params: [STRING, ANY], returns: [VOID], variadic: true },
667
- ],
668
- ["Skipped", { kind: "func", params: [], returns: [BOOL] }],
669
- ["SkipNow", { kind: "func", params: [], returns: [VOID] }],
670
- ["Helper", { kind: "func", params: [], returns: [VOID] }],
671
- ["Name", { kind: "func", params: [], returns: [STRING] }],
672
- ["Attr", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
673
- ["Context", { kind: "func", params: [], returns: [CONTEXT_T] }],
674
- ["Elapsed", { kind: "func", params: [], returns: [TIME_DURATION] }],
675
- ["Loop", { kind: "func", params: [], returns: [BOOL] }],
676
- ["Output", { kind: "func", params: [], returns: [IO_WRITER] }],
677
- ["ReportAllocs", { kind: "func", params: [], returns: [VOID] }],
678
- [
679
- "ReportMetric",
680
- { kind: "func", params: [FLOAT64, STRING], returns: [VOID] },
681
- ],
682
- ["ResetTimer", { kind: "func", params: [], returns: [VOID] }],
683
- [
684
- "Run",
685
- {
686
- kind: "func",
687
- params: [
688
- STRING,
689
- { kind: "func", params: [TESTING_B_PTR], returns: [VOID] },
690
- ],
691
- returns: [BOOL],
692
- },
693
- ],
694
- ["SetBytes", { kind: "func", params: [INT64], returns: [VOID] }],
695
- ["Setenv", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
696
- ["StartTimer", { kind: "func", params: [], returns: [VOID] }],
697
- ["StopTimer", { kind: "func", params: [], returns: [VOID] }],
698
- ]);
699
-
700
- const TESTING_M = {
701
- kind: "named",
702
- name: "testing.M",
703
- underlying: {
704
- kind: "struct",
705
- fields: new Map(),
706
- methods: new Map([["Run", { kind: "func", params: [], returns: [INT] }]]),
707
- },
708
- };
709
-
710
- const TESTING_TB = {
711
- kind: "named",
712
- name: "testing.TB",
713
- underlying: {
714
- kind: "interface",
715
- methods: new Map([
716
- ["Attr", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
717
- [
718
- "Cleanup",
719
- {
720
- kind: "func",
721
- params: [{ kind: "func", params: [], returns: [VOID] }],
722
- returns: [VOID],
723
- },
724
- ],
725
- ["Context", { kind: "func", params: [], returns: [CONTEXT_T] }],
726
- [
727
- "Error",
728
- { kind: "func", params: [ANY], returns: [VOID], variadic: true },
729
- ],
730
- [
731
- "Errorf",
732
- {
733
- kind: "func",
734
- params: [STRING, ANY],
735
- returns: [VOID],
736
- variadic: true,
737
- },
738
- ],
739
- ["Fail", { kind: "func", params: [], returns: [VOID] }],
740
- ["Failed", { kind: "func", params: [], returns: [BOOL] }],
741
- ["FailNow", { kind: "func", params: [], returns: [VOID] }],
742
- [
743
- "Fatal",
744
- { kind: "func", params: [ANY], returns: [VOID], variadic: true },
745
- ],
746
- [
747
- "Fatalf",
748
- {
749
- kind: "func",
750
- params: [STRING, ANY],
751
- returns: [VOID],
752
- variadic: true,
753
- },
754
- ],
755
- ["Helper", { kind: "func", params: [], returns: [VOID] }],
756
- [
757
- "Log",
758
- { kind: "func", params: [ANY], returns: [VOID], variadic: true },
759
- ],
760
- [
761
- "Logf",
762
- {
763
- kind: "func",
764
- params: [STRING, ANY],
765
- returns: [VOID],
766
- variadic: true,
767
- },
768
- ],
769
- ["Name", { kind: "func", params: [], returns: [STRING] }],
770
- ["Output", { kind: "func", params: [], returns: [IO_WRITER] }],
771
- ["Setenv", { kind: "func", params: [STRING, STRING], returns: [VOID] }],
772
- [
773
- "Skip",
774
- { kind: "func", params: [ANY], returns: [VOID], variadic: true },
775
- ],
776
- [
777
- "Skipf",
778
- {
779
- kind: "func",
780
- params: [STRING, ANY],
781
- returns: [VOID],
782
- variadic: true,
783
- },
784
- ],
785
- ["SkipNow", { kind: "func", params: [], returns: [VOID] }],
786
- ["Skipped", { kind: "func", params: [], returns: [BOOL] }],
787
- ]),
788
- },
789
- };
790
-
791
- const BENCHMARK_RESULT_T = {
792
- kind: "named",
793
- name: "testing.BenchmarkResult",
794
- underlying: {
795
- kind: "struct",
796
- fields: new Map([
797
- ["N", INT],
798
- ["T", TIME_DURATION],
799
- ["Bytes", INT64],
800
- ["MemAllocs", UINT64],
801
- ["MemBytes", UINT64],
802
- ["Extra", { kind: "map", key: STRING, value: FLOAT64 }],
803
- ]),
804
- methods: new Map([
805
- ["AllocedBytesPerOp", { kind: "func", params: [], returns: [INT64] }],
806
- ["AllocsPerOp", { kind: "func", params: [], returns: [INT64] }],
807
- ["MemString", { kind: "func", params: [], returns: [STRING] }],
808
- ["NsPerOp", { kind: "func", params: [], returns: [INT64] }],
809
- ["String", { kind: "func", params: [], returns: [STRING] }],
810
- ]),
811
- },
812
- };
813
-
814
- globals.define("testing", {
815
- kind: "namespace",
816
- name: "testing",
817
- members: {
818
- T: TESTING_T,
819
- B: TESTING_B,
820
- M: TESTING_M,
821
- TB: TESTING_TB,
822
- BenchmarkResult: BENCHMARK_RESULT_T,
823
- Benchmark: {
824
- kind: "func",
825
- params: [{ kind: "func", params: [TESTING_B_PTR], returns: [VOID] }],
826
- returns: [BENCHMARK_RESULT_T],
827
- },
828
- Init: { kind: "func", params: [], returns: [VOID] },
829
- Short: { kind: "func", params: [], returns: [BOOL] },
830
- Testing: { kind: "func", params: [], returns: [BOOL] },
831
- Verbose: { kind: "func", params: [], returns: [BOOL] },
832
- },
833
- });
834
- types.set("testing.T", TESTING_T);
835
- types.set("testing.B", TESTING_B);
836
- types.set("testing.M", TESTING_M);
837
- types.set("testing.TB", TESTING_TB);
838
- types.set("testing.BenchmarkResult", BENCHMARK_RESULT_T);
839
-
840
- // ── sync ──────────────────────────────────────────────────────
841
- const MUTEX_T = {
842
- kind: "named",
843
- name: "sync.Mutex",
844
- underlying: { kind: "struct", fields: new Map([["state", INT32]]) },
845
- methods: new Map([
846
- ["Lock", { kind: "func", params: [], returns: [VOID] }],
847
- ["Unlock", { kind: "func", params: [], returns: [VOID] }],
848
- ["TryLock", { kind: "func", params: [], returns: [BOOL] }],
849
- ]),
850
- };
851
- const LOCKER_T = {
852
- kind: "interface",
853
- name: "sync.Locker",
854
- methods: new Map([
855
- ["Lock", { kind: "func", params: [], returns: [VOID] }],
856
- ["Unlock", { kind: "func", params: [], returns: [VOID] }],
857
- ]),
858
- };
859
- const RWMUTEX_T = {
860
- kind: "named",
861
- name: "sync.RWMutex",
862
- underlying: { kind: "struct", fields: new Map([["state", INT32]]) },
863
- methods: new Map([
864
- ["Lock", { kind: "func", params: [], returns: [VOID] }],
865
- ["Unlock", { kind: "func", params: [], returns: [VOID] }],
866
- ["RLock", { kind: "func", params: [], returns: [VOID] }],
867
- ["RUnlock", { kind: "func", params: [], returns: [VOID] }],
868
- ["RLocker", { kind: "func", params: [], returns: [LOCKER_T] }],
869
- ["TryLock", { kind: "func", params: [], returns: [BOOL] }],
870
- ["TryRLock", { kind: "func", params: [], returns: [BOOL] }],
871
- ]),
872
- };
873
- const ONCE_T = {
874
- kind: "named",
875
- name: "sync.Once",
876
- underlying: { kind: "struct", fields: new Map([["done", UINT32]]) },
877
- methods: new Map([
878
- [
879
- "Do",
880
- {
881
- kind: "func",
882
- params: [{ kind: "func", params: [], returns: [VOID] }],
883
- returns: [VOID],
884
- },
885
- ],
886
- ]),
887
- };
888
- const WAITGROUP_T = {
889
- kind: "named",
890
- name: "sync.WaitGroup",
891
- underlying: { kind: "struct", fields: new Map([["counter", INT]]) },
892
- methods: new Map([
893
- ["Add", { kind: "func", params: [INT], returns: [VOID] }],
894
- ["Done", { kind: "func", params: [], returns: [VOID] }],
895
- ["Wait", { kind: "func", params: [], returns: [VOID] }],
896
- ]),
897
- };
898
- globals.define("sync", {
899
- kind: "namespace",
900
- name: "sync",
901
- members: {
902
- Mutex: MUTEX_T,
903
- RWMutex: RWMUTEX_T,
904
- Once: ONCE_T,
905
- WaitGroup: WAITGROUP_T,
906
- Locker: LOCKER_T,
907
- },
908
- });
909
- types.set("sync.Mutex", MUTEX_T);
910
- types.set("sync.RWMutex", RWMUTEX_T);
911
- types.set("sync.Once", ONCE_T);
912
- types.set("sync.WaitGroup", WAITGROUP_T);
913
- types.set("sync.Locker", LOCKER_T);
914
-
915
- // ── crypto/sha256 ─────────────────────────────────────────────
916
- const BYTE_SLICE = { kind: "slice", elem: UINT8 };
917
- const HASH_T = {
918
- kind: "interface",
919
- methods: new Map([
920
- ["Write", { kind: "func", params: [BYTE_SLICE], returns: [INT, ERROR] }],
921
- ["Sum", { kind: "func", params: [BYTE_SLICE], returns: [BYTE_SLICE] }],
922
- ["Reset", { kind: "func", params: [], returns: [VOID] }],
923
- ["Size", { kind: "func", params: [], returns: [INT] }],
924
- ["BlockSize", { kind: "func", params: [], returns: [INT] }],
925
- ]),
926
- };
927
- const SHA256_DIGEST_T = {
928
- kind: "named",
929
- name: "sha256.digest",
930
- underlying: { kind: "struct", fields: new Map([["buf", BYTE_SLICE]]) },
931
- methods: new Map([
932
- ["Write", { kind: "func", params: [BYTE_SLICE], returns: [INT, ERROR] }],
933
- ["Sum", { kind: "func", params: [BYTE_SLICE], returns: [BYTE_SLICE] }],
934
- ["Reset", { kind: "func", params: [], returns: [VOID] }],
935
- ["Size", { kind: "func", params: [], returns: [INT] }],
936
- ["BlockSize", { kind: "func", params: [], returns: [INT] }],
937
- ]),
938
- };
939
- globals.define("sha256", {
940
- kind: "namespace",
941
- name: "sha256",
942
- members: {
943
- Size: INT,
944
- BlockSize: INT,
945
- Sum256: {
946
- kind: "func",
947
- params: [BYTE_SLICE],
948
- returns: [{ kind: "array", size: 32, elem: UINT8 }],
949
- },
950
- New: { kind: "func", params: [], returns: [HASH_T] },
951
- },
952
- });
953
- types.set("hash.Hash", HASH_T);
954
- types.set("sha256.digest", SHA256_DIGEST_T);
955
- types.set("crypto/sha256.digest", SHA256_DIGEST_T);
956
-
957
- // ── encoding/binary ───────────────────────────────────────────
958
- const BYTE_ORDER_METHODS = [
959
- ["Uint16", { kind: "func", params: [BYTE_SLICE], returns: [UINT16] }],
960
- ["Uint32", { kind: "func", params: [BYTE_SLICE], returns: [UINT32] }],
961
- ["Uint64", { kind: "func", params: [BYTE_SLICE], returns: [UINT64] }],
962
- [
963
- "PutUint16",
964
- { kind: "func", params: [BYTE_SLICE, UINT16], returns: [VOID] },
965
- ],
966
- [
967
- "PutUint32",
968
- { kind: "func", params: [BYTE_SLICE, UINT32], returns: [VOID] },
969
- ],
970
- [
971
- "PutUint64",
972
- { kind: "func", params: [BYTE_SLICE, UINT64], returns: [VOID] },
973
- ],
974
- ["String", { kind: "func", params: [], returns: [STRING] }],
975
- ];
976
- const BYTE_ORDER_T = {
977
- kind: "interface",
978
- methods: new Map(BYTE_ORDER_METHODS),
979
- };
980
- const LITTLE_ENDIAN_METHODS = new Map([
981
- ...BYTE_ORDER_METHODS,
982
- [
983
- "AppendUint16",
984
- { kind: "func", params: [BYTE_SLICE, UINT16], returns: [BYTE_SLICE] },
985
- ],
986
- [
987
- "AppendUint32",
988
- { kind: "func", params: [BYTE_SLICE, UINT32], returns: [BYTE_SLICE] },
989
- ],
990
- [
991
- "AppendUint64",
992
- { kind: "func", params: [BYTE_SLICE, UINT64], returns: [BYTE_SLICE] },
993
- ],
994
- ]);
995
- const LITTLE_ENDIAN_T = {
996
- kind: "named",
997
- name: "binary.LittleEndian",
998
- underlying: {
999
- kind: "struct",
1000
- fields: new Map([["order", INT32]]),
1001
- methods: LITTLE_ENDIAN_METHODS,
1002
- },
1003
- methods: LITTLE_ENDIAN_METHODS,
1004
- };
1005
- const BIG_ENDIAN_METHODS = new Map([
1006
- ...BYTE_ORDER_METHODS,
1007
- [
1008
- "AppendUint16",
1009
- { kind: "func", params: [BYTE_SLICE, UINT16], returns: [BYTE_SLICE] },
1010
- ],
1011
- [
1012
- "AppendUint32",
1013
- { kind: "func", params: [BYTE_SLICE, UINT32], returns: [BYTE_SLICE] },
1014
- ],
1015
- [
1016
- "AppendUint64",
1017
- { kind: "func", params: [BYTE_SLICE, UINT64], returns: [BYTE_SLICE] },
1018
- ],
1019
- ]);
1020
- const BIG_ENDIAN_T = {
1021
- kind: "named",
1022
- name: "binary.BigEndian",
1023
- underlying: {
1024
- kind: "struct",
1025
- fields: new Map([["order", INT32]]),
1026
- methods: BIG_ENDIAN_METHODS,
1027
- },
1028
- methods: BIG_ENDIAN_METHODS,
1029
- };
1030
- globals.define("binary", {
1031
- kind: "namespace",
1032
- name: "binary",
1033
- members: {
1034
- ByteOrder: BYTE_ORDER_T,
1035
- LittleEndian: LITTLE_ENDIAN_T,
1036
- BigEndian: BIG_ENDIAN_T,
1037
- Read: {
1038
- kind: "func",
1039
- params: [ANY, BYTE_ORDER_T, ANY],
1040
- returns: [ERROR],
1041
- },
1042
- Write: {
1043
- kind: "func",
1044
- params: [ANY, BYTE_ORDER_T, ANY],
1045
- returns: [ERROR],
1046
- },
1047
- Size: { kind: "func", params: [ANY], returns: [INT] },
1048
- AppendUint16: {
1049
- kind: "func",
1050
- params: [BYTE_SLICE, UINT16],
1051
- returns: [BYTE_SLICE],
1052
- },
1053
- AppendUint32: {
1054
- kind: "func",
1055
- params: [BYTE_SLICE, UINT32],
1056
- returns: [BYTE_SLICE],
1057
- },
1058
- AppendUint64: {
1059
- kind: "func",
1060
- params: [BYTE_SLICE, UINT64],
1061
- returns: [BYTE_SLICE],
1062
- },
1063
- },
1064
- });
1065
- types.set("encoding/binary.ByteOrder", BYTE_ORDER_T);
1066
- types.set("binary.ByteOrder", BYTE_ORDER_T);
1067
- types.set("encoding/binary.LittleEndian", LITTLE_ENDIAN_T);
1068
- types.set("binary.LittleEndian", LITTLE_ENDIAN_T);
1069
- types.set("encoding/binary.BigEndian", BIG_ENDIAN_T);
1070
- types.set("binary.BigEndian", BIG_ENDIAN_T);
1071
-
1072
- // ── encoding/hex ──────────────────────────────────────────────
1073
- globals.define("hex", {
1074
- kind: "namespace",
1075
- name: "hex",
1076
- members: {
1077
- EncodeToString: { kind: "func", params: [BYTE_SLICE], returns: [STRING] },
1078
- DecodeString: {
1079
- kind: "func",
1080
- params: [STRING],
1081
- returns: [BYTE_SLICE, ERROR],
1082
- },
1083
- Encode: {
1084
- kind: "func",
1085
- params: [BYTE_SLICE, BYTE_SLICE],
1086
- returns: [INT],
1087
- },
1088
- Decode: {
1089
- kind: "func",
1090
- params: [BYTE_SLICE, BYTE_SLICE],
1091
- returns: [INT, ERROR],
1092
- },
1093
- EncodedLen: { kind: "func", params: [INT], returns: [INT] },
1094
- DecodedLen: { kind: "func", params: [INT], returns: [INT] },
1095
- ErrLength: ERROR,
1096
- },
1097
- });
1098
-
1099
- // ── encoding/base64 ───────────────────────────────────────────
1100
- const BASE64_ENCODING_METHODS = new Map([
1101
- [
1102
- "EncodeToString",
1103
- { kind: "func", params: [BYTE_SLICE], returns: [STRING] },
1104
- ],
1105
- [
1106
- "DecodeString",
1107
- { kind: "func", params: [STRING], returns: [BYTE_SLICE, ERROR] },
1108
- ],
1109
- [
1110
- "Encode",
1111
- { kind: "func", params: [BYTE_SLICE, BYTE_SLICE], returns: [VOID] },
1112
- ],
1113
- [
1114
- "Decode",
1115
- { kind: "func", params: [BYTE_SLICE, BYTE_SLICE], returns: [INT, ERROR] },
1116
- ],
1117
- ["EncodedLen", { kind: "func", params: [INT], returns: [INT] }],
1118
- ["DecodedLen", { kind: "func", params: [INT], returns: [INT] }],
1119
- ["WithPadding", { kind: "func", params: [INT], returns: [ANY] }],
1120
- ]);
1121
- const BASE64_ENCODING_T = {
1122
- kind: "named",
1123
- name: "base64.Encoding",
1124
- underlying: {
1125
- kind: "struct",
1126
- fields: new Map([["mode", INT32]]),
1127
- methods: BASE64_ENCODING_METHODS,
1128
- },
1129
- methods: BASE64_ENCODING_METHODS,
1130
- };
1131
- globals.define("base64", {
1132
- kind: "namespace",
1133
- name: "base64",
1134
- members: {
1135
- Encoding: BASE64_ENCODING_T,
1136
- StdEncoding: BASE64_ENCODING_T,
1137
- URLEncoding: BASE64_ENCODING_T,
1138
- RawStdEncoding: BASE64_ENCODING_T,
1139
- RawURLEncoding: BASE64_ENCODING_T,
1140
- NewEncoding: {
1141
- kind: "func",
1142
- params: [STRING],
1143
- returns: [BASE64_ENCODING_T],
1144
- },
1145
- StdPadding: INT,
1146
- NoPadding: INT,
1147
- },
1148
- });
1149
- types.set("encoding/base64.Encoding", BASE64_ENCODING_T);
1150
- types.set("base64.Encoding", BASE64_ENCODING_T);
1151
-
1152
- // ── encoding/json ─────────────────────────────────────────────
1153
- const RAW_MESSAGE_T = {
1154
- kind: "named",
1155
- name: "json.RawMessage",
1156
- underlying: BYTE_SLICE,
1157
- methods: new Map(),
1158
- };
1159
- globals.define("json", {
1160
- kind: "namespace",
1161
- name: "json",
1162
- members: {
1163
- Marshal: {
1164
- kind: "func",
1165
- params: [ANY],
1166
- returns: [BYTE_SLICE, ERROR],
1167
- },
1168
- MarshalIndent: {
1169
- kind: "func",
1170
- params: [ANY, STRING, STRING],
1171
- returns: [BYTE_SLICE, ERROR],
1172
- },
1173
- Unmarshal: {
1174
- kind: "func",
1175
- params: [BYTE_SLICE, ANY],
1176
- returns: [ERROR],
1177
- },
1178
- Valid: {
1179
- kind: "func",
1180
- params: [BYTE_SLICE],
1181
- returns: [BOOL],
1182
- },
1183
- RawMessage: RAW_MESSAGE_T,
1184
- },
1185
- });
1186
- types.set("encoding/json.RawMessage", RAW_MESSAGE_T);
1187
- types.set("json.RawMessage", RAW_MESSAGE_T);
1188
-
1189
- for (const name of [
1190
- "append",
1191
- "len",
1192
- "cap",
1193
- "make",
1194
- "delete",
1195
- "print",
1196
- "println",
1197
- "panic",
1198
- "recover",
1199
- "new",
1200
- "copy",
1201
- "error",
1202
- "min",
1203
- "max",
1204
- "clear",
1205
- "complex",
1206
- "real",
1207
- "imag",
1208
- ])
1209
- globals.define(name, { kind: "builtin", name });
1210
- }