goscript 0.1.0 → 0.1.1

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 (327) hide show
  1. package/README.md +267 -255
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/main.go +1 -0
  5. package/compiler/build-flags.go +38 -0
  6. package/compiler/compile-request.go +2 -0
  7. package/compiler/compliance_test.go +0 -8
  8. package/compiler/gotest/owner.go +24 -0
  9. package/compiler/gotest/package-result.go +67 -0
  10. package/compiler/gotest/request.go +145 -0
  11. package/compiler/gotest/result.go +28 -0
  12. package/compiler/gotest/runner.go +588 -0
  13. package/compiler/gotest/runner_test.go +627 -0
  14. package/compiler/gotest/test.go +9 -0
  15. package/compiler/index.test.ts +1 -1
  16. package/compiler/lowered-program.go +71 -19
  17. package/compiler/lowering.go +5065 -569
  18. package/compiler/override-facts.go +307 -0
  19. package/compiler/override-registry.go +50 -189
  20. package/compiler/override-registry_test.go +47 -0
  21. package/compiler/package-graph.go +50 -27
  22. package/compiler/package-graph_test.go +37 -2
  23. package/compiler/package-test-function.go +9 -0
  24. package/compiler/package-test-graph-package.go +40 -0
  25. package/compiler/package-test-graph-variant.go +105 -0
  26. package/compiler/package-test-graph.go +117 -0
  27. package/compiler/package-test-graph_test.go +144 -0
  28. package/compiler/runtime-contract.go +189 -29
  29. package/compiler/runtime-contract_test.go +44 -30
  30. package/compiler/semantic-model-types.go +9 -6
  31. package/compiler/semantic-model.go +538 -38
  32. package/compiler/semantic-model_test.go +55 -0
  33. package/compiler/service.go +1 -1
  34. package/compiler/skeleton_test.go +679 -49
  35. package/compiler/tsworkspace/owner.go +334 -0
  36. package/compiler/tsworkspace/owner_test.go +93 -0
  37. package/compiler/tsworkspace/result.go +17 -0
  38. package/compiler/typescript-emitter.go +459 -82
  39. package/compiler/wasm/compile.go +1 -1
  40. package/compiler/wasm/compile_test.go +61 -11
  41. package/compiler/wasm_api.go +172 -7
  42. package/dist/gs/builtin/builtin.d.ts +20 -2
  43. package/dist/gs/builtin/builtin.js +194 -6
  44. package/dist/gs/builtin/builtin.js.map +1 -1
  45. package/dist/gs/builtin/channel.d.ts +8 -0
  46. package/dist/gs/builtin/channel.js +12 -0
  47. package/dist/gs/builtin/channel.js.map +1 -1
  48. package/dist/gs/builtin/slice.d.ts +22 -2
  49. package/dist/gs/builtin/slice.js +216 -44
  50. package/dist/gs/builtin/slice.js.map +1 -1
  51. package/dist/gs/builtin/type.d.ts +5 -2
  52. package/dist/gs/builtin/type.js +83 -24
  53. package/dist/gs/builtin/type.js.map +1 -1
  54. package/dist/gs/builtin/varRef.d.ts +5 -0
  55. package/dist/gs/builtin/varRef.js +23 -0
  56. package/dist/gs/builtin/varRef.js.map +1 -1
  57. package/dist/gs/bytes/buffer.gs.js +48 -44
  58. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  59. package/dist/gs/bytes/reader.gs.js +20 -18
  60. package/dist/gs/bytes/reader.gs.js.map +1 -1
  61. package/dist/gs/context/context.d.ts +5 -4
  62. package/dist/gs/context/context.js +10 -10
  63. package/dist/gs/context/context.js.map +1 -1
  64. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  65. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  66. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  67. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  68. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  69. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  70. package/dist/gs/embed/index.d.ts +7 -0
  71. package/dist/gs/embed/index.js +16 -0
  72. package/dist/gs/embed/index.js.map +1 -0
  73. package/dist/gs/encoding/json/index.d.ts +1 -0
  74. package/dist/gs/encoding/json/index.js +18 -0
  75. package/dist/gs/encoding/json/index.js.map +1 -1
  76. package/dist/gs/errors/errors.d.ts +4 -0
  77. package/dist/gs/errors/errors.js +81 -0
  78. package/dist/gs/errors/errors.js.map +1 -1
  79. package/dist/gs/fmt/fmt.d.ts +4 -4
  80. package/dist/gs/fmt/fmt.js +42 -11
  81. package/dist/gs/fmt/fmt.js.map +1 -1
  82. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +35 -0
  83. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +211 -1
  84. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  85. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  86. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  87. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  88. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  89. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  90. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  91. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  92. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  93. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  94. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  95. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  96. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  97. package/dist/gs/go/scanner/index.d.ts +13 -0
  98. package/dist/gs/go/scanner/index.js +35 -0
  99. package/dist/gs/go/scanner/index.js.map +1 -1
  100. package/dist/gs/go/token/index.d.ts +156 -0
  101. package/dist/gs/go/token/index.js +500 -4
  102. package/dist/gs/go/token/index.js.map +1 -1
  103. package/dist/gs/internal/abi/index.d.ts +4 -0
  104. package/dist/gs/internal/abi/index.js +10 -0
  105. package/dist/gs/internal/abi/index.js.map +1 -1
  106. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  107. package/dist/gs/internal/bytealg/index.js +14 -0
  108. package/dist/gs/internal/bytealg/index.js.map +1 -1
  109. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  110. package/dist/gs/internal/byteorder/index.js +56 -25
  111. package/dist/gs/internal/byteorder/index.js.map +1 -1
  112. package/dist/gs/internal/godebug/index.d.ts +12 -0
  113. package/dist/gs/internal/godebug/index.js +30 -0
  114. package/dist/gs/internal/godebug/index.js.map +1 -0
  115. package/dist/gs/io/fs/index.d.ts +1 -0
  116. package/dist/gs/io/fs/index.js +1 -0
  117. package/dist/gs/io/fs/index.js.map +1 -1
  118. package/dist/gs/io/fs/readlink.d.ts +8 -0
  119. package/dist/gs/io/fs/readlink.js +64 -0
  120. package/dist/gs/io/fs/readlink.js.map +1 -0
  121. package/dist/gs/io/fs/walk.d.ts +3 -3
  122. package/dist/gs/io/fs/walk.js +7 -7
  123. package/dist/gs/io/fs/walk.js.map +1 -1
  124. package/dist/gs/io/io.d.ts +40 -6
  125. package/dist/gs/io/io.js +151 -26
  126. package/dist/gs/io/io.js.map +1 -1
  127. package/dist/gs/maps/iter.d.ts +3 -3
  128. package/dist/gs/maps/iter.js +3 -3
  129. package/dist/gs/maps/iter.js.map +1 -1
  130. package/dist/gs/maps/maps.d.ts +2 -2
  131. package/dist/gs/maps/maps.js +1 -1
  132. package/dist/gs/maps/maps.js.map +1 -1
  133. package/dist/gs/math/bits/index.d.ts +13 -4
  134. package/dist/gs/math/bits/index.js +66 -34
  135. package/dist/gs/math/bits/index.js.map +1 -1
  136. package/dist/gs/math/const.gs.d.ts +5 -5
  137. package/dist/gs/math/const.gs.js +4 -4
  138. package/dist/gs/math/const.gs.js.map +1 -1
  139. package/dist/gs/mime/index.d.ts +1 -0
  140. package/dist/gs/mime/index.js +50 -0
  141. package/dist/gs/mime/index.js.map +1 -0
  142. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  143. package/dist/gs/net/http/httptest/index.js +21 -0
  144. package/dist/gs/net/http/httptest/index.js.map +1 -0
  145. package/dist/gs/net/http/index.d.ts +27 -0
  146. package/dist/gs/net/http/index.js +61 -0
  147. package/dist/gs/net/http/index.js.map +1 -0
  148. package/dist/gs/os/dir_unix.gs.js +2 -2
  149. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  150. package/dist/gs/os/types_js.gs.js.map +1 -1
  151. package/dist/gs/path/filepath/match.js +165 -3
  152. package/dist/gs/path/filepath/match.js.map +1 -1
  153. package/dist/gs/path/filepath/path.d.ts +3 -1
  154. package/dist/gs/path/filepath/path.js +133 -4
  155. package/dist/gs/path/filepath/path.js.map +1 -1
  156. package/dist/gs/path/path.d.ts +4 -1
  157. package/dist/gs/path/path.js +16 -4
  158. package/dist/gs/path/path.js.map +1 -1
  159. package/dist/gs/reflect/index.d.ts +1 -1
  160. package/dist/gs/reflect/index.js +1 -1
  161. package/dist/gs/reflect/index.js.map +1 -1
  162. package/dist/gs/reflect/map.js +3 -0
  163. package/dist/gs/reflect/map.js.map +1 -1
  164. package/dist/gs/reflect/type.d.ts +7 -4
  165. package/dist/gs/reflect/type.js +148 -7
  166. package/dist/gs/reflect/type.js.map +1 -1
  167. package/dist/gs/runtime/debug/index.d.ts +2 -0
  168. package/dist/gs/runtime/debug/index.js +8 -0
  169. package/dist/gs/runtime/debug/index.js.map +1 -0
  170. package/dist/gs/runtime/runtime.d.ts +35 -3
  171. package/dist/gs/runtime/runtime.js +72 -0
  172. package/dist/gs/runtime/runtime.js.map +1 -1
  173. package/dist/gs/slices/slices.d.ts +24 -5
  174. package/dist/gs/slices/slices.js +214 -5
  175. package/dist/gs/slices/slices.js.map +1 -1
  176. package/dist/gs/sort/slice.gs.d.ts +3 -3
  177. package/dist/gs/sort/slice.gs.js +6 -6
  178. package/dist/gs/sort/slice.gs.js.map +1 -1
  179. package/dist/gs/sort/sort.gs.d.ts +4 -4
  180. package/dist/gs/sort/sort.gs.js +11 -8
  181. package/dist/gs/sort/sort.gs.js.map +1 -1
  182. package/dist/gs/strings/builder.d.ts +1 -1
  183. package/dist/gs/strings/builder.js +3 -2
  184. package/dist/gs/strings/builder.js.map +1 -1
  185. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  186. package/dist/gs/sync/atomic/type.gs.js +0 -2
  187. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  188. package/dist/gs/sync/sync.d.ts +2 -0
  189. package/dist/gs/sync/sync.js +27 -0
  190. package/dist/gs/sync/sync.js.map +1 -1
  191. package/dist/gs/syscall/constants.d.ts +36 -24
  192. package/dist/gs/syscall/constants.js +12 -0
  193. package/dist/gs/syscall/constants.js.map +1 -1
  194. package/dist/gs/syscall/errors.d.ts +2 -0
  195. package/dist/gs/syscall/errors.js +8 -0
  196. package/dist/gs/syscall/errors.js.map +1 -1
  197. package/dist/gs/syscall/fs.d.ts +43 -0
  198. package/dist/gs/syscall/fs.js +102 -0
  199. package/dist/gs/syscall/fs.js.map +1 -1
  200. package/dist/gs/syscall/js/index.d.ts +90 -0
  201. package/dist/gs/syscall/js/index.js +375 -0
  202. package/dist/gs/syscall/js/index.js.map +1 -0
  203. package/dist/gs/syscall/types.d.ts +22 -0
  204. package/dist/gs/syscall/types.js +45 -1
  205. package/dist/gs/syscall/types.js.map +1 -1
  206. package/dist/gs/testing/index.d.ts +1 -0
  207. package/dist/gs/testing/index.js +2 -0
  208. package/dist/gs/testing/index.js.map +1 -0
  209. package/dist/gs/testing/testing.d.ts +77 -0
  210. package/dist/gs/testing/testing.js +301 -0
  211. package/dist/gs/testing/testing.js.map +1 -0
  212. package/dist/gs/time/time.d.ts +41 -4
  213. package/dist/gs/time/time.js +205 -36
  214. package/dist/gs/time/time.js.map +1 -1
  215. package/dist/gs/unicode/unicode.d.ts +23 -1
  216. package/dist/gs/unicode/unicode.js +79 -10
  217. package/dist/gs/unicode/unicode.js.map +1 -1
  218. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  219. package/dist/gs/unicode/utf8/utf8.js +24 -11
  220. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  221. package/dist/gs/unique/index.d.ts +11 -0
  222. package/dist/gs/unique/index.js +71 -0
  223. package/dist/gs/unique/index.js.map +1 -0
  224. package/go.sum +9 -0
  225. package/gs/builtin/builtin.ts +239 -8
  226. package/gs/builtin/channel.ts +22 -0
  227. package/gs/builtin/runtime-contract.test.ts +126 -0
  228. package/gs/builtin/slice.ts +259 -50
  229. package/gs/builtin/type.ts +109 -34
  230. package/gs/builtin/varRef.ts +38 -1
  231. package/gs/bytes/buffer.gs.ts +48 -44
  232. package/gs/bytes/meta.json +8 -3
  233. package/gs/bytes/reader.gs.ts +20 -19
  234. package/gs/context/context.test.ts +41 -0
  235. package/gs/context/context.ts +22 -26
  236. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  237. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  238. package/gs/embed/index.ts +20 -0
  239. package/gs/embed/meta.json +5 -0
  240. package/gs/encoding/json/index.test.ts +15 -1
  241. package/gs/encoding/json/index.ts +24 -0
  242. package/gs/errors/errors.test.ts +82 -0
  243. package/gs/errors/errors.ts +104 -0
  244. package/gs/fmt/fmt.ts +56 -16
  245. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +73 -1
  246. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +297 -1
  247. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  248. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  249. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  250. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  251. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  252. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  253. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  254. package/gs/go/internal/scannerhooks/index.ts +9 -0
  255. package/gs/go/scanner/index.test.ts +22 -0
  256. package/gs/go/scanner/index.ts +47 -0
  257. package/gs/go/token/index.test.ts +47 -1
  258. package/gs/go/token/index.ts +570 -4
  259. package/gs/internal/abi/index.test.ts +18 -0
  260. package/gs/internal/abi/index.ts +14 -0
  261. package/gs/internal/bytealg/index.test.ts +18 -0
  262. package/gs/internal/bytealg/index.ts +16 -0
  263. package/gs/internal/byteorder/index.test.ts +39 -0
  264. package/gs/internal/byteorder/index.ts +100 -27
  265. package/gs/internal/godebug/index.test.ts +16 -0
  266. package/gs/internal/godebug/index.ts +35 -0
  267. package/gs/io/fs/index.ts +1 -0
  268. package/gs/io/fs/meta.json +5 -0
  269. package/gs/io/fs/readlink.test.ts +43 -0
  270. package/gs/io/fs/readlink.ts +77 -0
  271. package/gs/io/fs/walk.test.ts +61 -0
  272. package/gs/io/fs/walk.ts +9 -9
  273. package/gs/io/io.ts +174 -31
  274. package/gs/io/meta.json +10 -2
  275. package/gs/maps/iter.ts +12 -6
  276. package/gs/maps/maps.ts +8 -6
  277. package/gs/math/bits/index.ts +103 -47
  278. package/gs/math/const.gs.test.ts +11 -5
  279. package/gs/math/const.gs.ts +5 -6
  280. package/gs/mime/index.ts +54 -0
  281. package/gs/net/http/httptest/index.ts +25 -0
  282. package/gs/net/http/index.test.ts +20 -0
  283. package/gs/net/http/index.ts +81 -0
  284. package/gs/os/dir_unix.gs.ts +2 -3
  285. package/gs/os/types_js.gs.ts +2 -2
  286. package/gs/path/filepath/match.test.ts +31 -12
  287. package/gs/path/filepath/match.ts +178 -3
  288. package/gs/path/filepath/path.test.ts +25 -0
  289. package/gs/path/filepath/path.ts +159 -5
  290. package/gs/path/path.ts +20 -5
  291. package/gs/reflect/index.ts +1 -0
  292. package/gs/reflect/map.test.ts +19 -0
  293. package/gs/reflect/map.ts +4 -0
  294. package/gs/reflect/type.ts +197 -17
  295. package/gs/runtime/debug/index.test.ts +24 -0
  296. package/gs/runtime/debug/index.ts +8 -0
  297. package/gs/runtime/runtime.test.ts +19 -0
  298. package/gs/runtime/runtime.ts +98 -3
  299. package/gs/slices/slices.test.ts +94 -0
  300. package/gs/slices/slices.ts +245 -5
  301. package/gs/sort/meta.json +7 -0
  302. package/gs/sort/slice.gs.ts +16 -7
  303. package/gs/sort/sort.gs.ts +16 -13
  304. package/gs/strings/builder.ts +4 -3
  305. package/gs/sync/atomic/type.gs.ts +13 -14
  306. package/gs/sync/meta.json +3 -1
  307. package/gs/sync/sync.test.ts +13 -1
  308. package/gs/sync/sync.ts +27 -0
  309. package/gs/syscall/constants.ts +39 -24
  310. package/gs/syscall/errors.ts +10 -0
  311. package/gs/syscall/fs.ts +195 -0
  312. package/gs/syscall/js/index.ts +458 -0
  313. package/gs/syscall/js/meta.json +4 -0
  314. package/gs/syscall/net.test.ts +85 -0
  315. package/gs/syscall/types.ts +56 -0
  316. package/gs/testing/index.ts +1 -0
  317. package/gs/testing/meta.json +5 -0
  318. package/gs/testing/testing.test.ts +90 -0
  319. package/gs/testing/testing.ts +382 -0
  320. package/gs/time/time.test.ts +106 -0
  321. package/gs/time/time.ts +278 -57
  322. package/gs/unicode/unicode.test.ts +25 -0
  323. package/gs/unicode/unicode.ts +119 -9
  324. package/gs/unicode/utf8/utf8.test.ts +13 -0
  325. package/gs/unicode/utf8/utf8.ts +28 -16
  326. package/gs/unique/index.ts +91 -0
  327. package/package.json +2 -1
@@ -3,6 +3,10 @@ package compiler
3
3
  import (
4
4
  "cmp"
5
5
  "slices"
6
+ "strings"
7
+
8
+ gs "github.com/aperturerobotics/goscript"
9
+ "github.com/pkg/errors"
6
10
  )
7
11
 
8
12
  // RuntimeHelperCategory names a runtime helper family owned by the contract.
@@ -25,33 +29,53 @@ const (
25
29
  type RuntimeHelper string
26
30
 
27
31
  const (
28
- RuntimeHelperPrintln RuntimeHelper = "builtin.println"
29
- RuntimeHelperPrint RuntimeHelper = "builtin.print"
30
- RuntimeHelperInt RuntimeHelper = "builtin.int"
31
- RuntimeHelperByte RuntimeHelper = "builtin.byte"
32
- RuntimeHelperLen RuntimeHelper = "builtin.len"
33
- RuntimeHelperCap RuntimeHelper = "builtin.cap"
34
- RuntimeHelperClear RuntimeHelper = "builtin.clear"
35
- RuntimeHelperPanic RuntimeHelper = "builtin.panic"
36
- RuntimeHelperRecover RuntimeHelper = "builtin.recover"
37
- RuntimeHelperMin RuntimeHelper = "builtin.min"
38
- RuntimeHelperMax RuntimeHelper = "builtin.max"
32
+ RuntimeHelperPrintln RuntimeHelper = "builtin.println"
33
+ RuntimeHelperPrint RuntimeHelper = "builtin.print"
34
+ RuntimeHelperInt RuntimeHelper = "builtin.int"
35
+ RuntimeHelperUint RuntimeHelper = "builtin.uint"
36
+ RuntimeHelperByte RuntimeHelper = "builtin.byte"
37
+ RuntimeHelperLen RuntimeHelper = "builtin.len"
38
+ RuntimeHelperCap RuntimeHelper = "builtin.cap"
39
+ RuntimeHelperClear RuntimeHelper = "builtin.clear"
40
+ RuntimeHelperPanic RuntimeHelper = "builtin.panic"
41
+ RuntimeHelperRecover RuntimeHelper = "builtin.recover"
42
+ RuntimeHelperMin RuntimeHelper = "builtin.min"
43
+ RuntimeHelperMax RuntimeHelper = "builtin.max"
44
+ RuntimeHelperComplex RuntimeHelper = "builtin.complex"
45
+ RuntimeHelperReal RuntimeHelper = "builtin.real"
46
+ RuntimeHelperImag RuntimeHelper = "builtin.imag"
47
+ RuntimeHelperUint64Shl RuntimeHelper = "builtin.uint64Shl"
48
+ RuntimeHelperUint64Shr RuntimeHelper = "builtin.uint64Shr"
49
+ RuntimeHelperUintShr RuntimeHelper = "builtin.uintShr"
50
+ RuntimeHelperUint64Mul RuntimeHelper = "builtin.uint64Mul"
51
+ RuntimeHelperUint64Add RuntimeHelper = "builtin.uint64Add"
52
+ RuntimeHelperUint64Sub RuntimeHelper = "builtin.uint64Sub"
53
+ RuntimeHelperUint64And RuntimeHelper = "builtin.uint64And"
54
+ RuntimeHelperUint64Or RuntimeHelper = "builtin.uint64Or"
55
+ RuntimeHelperUint64Xor RuntimeHelper = "builtin.uint64Xor"
39
56
 
40
57
  RuntimeHelperAssignStruct RuntimeHelper = "value.assignStruct"
41
58
  RuntimeHelperMarkAsStructValue RuntimeHelper = "value.markAsStructValue"
59
+ RuntimeHelperCloneStructValue RuntimeHelper = "value.cloneStructValue"
42
60
  RuntimeHelperPointerValue RuntimeHelper = "value.pointerValue"
61
+ RuntimeHelperArrayEqual RuntimeHelper = "value.arrayEqual"
43
62
 
44
- RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
45
- RuntimeHelperUnref RuntimeHelper = "varref.unref"
46
- RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
63
+ RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
64
+ RuntimeHelperFieldRef RuntimeHelper = "varref.fieldRef"
65
+ RuntimeHelperUnref RuntimeHelper = "varref.unref"
66
+ RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
67
+ RuntimeHelperUnsupportedPointerRef RuntimeHelper = "varref.unsupportedPointerRef"
47
68
 
48
69
  RuntimeHelperMakeSlice RuntimeHelper = "slice.makeSlice"
49
70
  RuntimeHelperGoSlice RuntimeHelper = "slice.goSlice"
50
71
  RuntimeHelperArrayToSlice RuntimeHelper = "slice.arrayToSlice"
72
+ RuntimeHelperSliceToArray RuntimeHelper = "slice.sliceToArray"
73
+ RuntimeHelperSliceToArrayPointer RuntimeHelper = "slice.sliceToArrayPointer"
51
74
  RuntimeHelperAppend RuntimeHelper = "slice.append"
52
75
  RuntimeHelperCopy RuntimeHelper = "slice.copy"
53
76
  RuntimeHelperAsArray RuntimeHelper = "slice.asArray"
54
77
  RuntimeHelperStringToRunes RuntimeHelper = "slice.stringToRunes"
78
+ RuntimeHelperRangeString RuntimeHelper = "slice.rangeString"
55
79
  RuntimeHelperStringToRune RuntimeHelper = "slice.stringToRune"
56
80
  RuntimeHelperRunesToString RuntimeHelper = "slice.runesToString"
57
81
  RuntimeHelperStringToBytes RuntimeHelper = "slice.stringToBytes"
@@ -59,6 +83,8 @@ const (
59
83
  RuntimeHelperGenericBytesOrStringToString RuntimeHelper = "slice.genericBytesOrStringToString"
60
84
  RuntimeHelperIndexStringOrBytes RuntimeHelper = "slice.indexStringOrBytes"
61
85
  RuntimeHelperSliceStringOrBytes RuntimeHelper = "slice.sliceStringOrBytes"
86
+ RuntimeHelperIndexRef RuntimeHelper = "slice.indexRef"
87
+ RuntimeHelperIndexAddress RuntimeHelper = "slice.indexAddress"
62
88
 
63
89
  RuntimeHelperMakeMap RuntimeHelper = "map.makeMap"
64
90
  RuntimeHelperMapGet RuntimeHelper = "map.mapGet"
@@ -70,21 +96,22 @@ const (
70
96
  RuntimeHelperToGoError RuntimeHelper = "error.toGoError"
71
97
  RuntimeHelperWrapPrimitiveError RuntimeHelper = "error.wrapPrimitiveError"
72
98
 
73
- RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
74
- RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
75
- RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
76
- RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
77
- RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
78
- RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
79
- RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
80
- RuntimeHelperIs RuntimeHelper = "type.is"
81
- RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
82
- RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
83
- RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
84
- RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
85
- RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
86
- RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
87
- RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
99
+ RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
100
+ RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
101
+ RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
102
+ RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
103
+ RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
104
+ RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
105
+ RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
106
+ RuntimeHelperIs RuntimeHelper = "type.is"
107
+ RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
108
+ RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
109
+ RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
110
+ RuntimeHelperNamedValueInterfaceValue RuntimeHelper = "type.namedValueInterfaceValue"
111
+ RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
112
+ RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
113
+ RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
114
+ RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
88
115
 
89
116
  RuntimeHelperMakeChannel RuntimeHelper = "channel.makeChannel"
90
117
  RuntimeHelperMakeChannelRef RuntimeHelper = "channel.makeChannelRef"
@@ -185,6 +212,22 @@ func (o *RuntimeContractOwner) QualifiedHelper(helper RuntimeHelper) string {
185
212
  return o.BuiltinImport().Alias + "." + name
186
213
  }
187
214
 
215
+ // MissingRuntimeExports returns helper exports absent from the real runtime source.
216
+ func (o *RuntimeContractOwner) MissingRuntimeExports() ([]string, error) {
217
+ exports, err := scanBuiltinRuntimeExports()
218
+ if err != nil {
219
+ return nil, err
220
+ }
221
+ var missing []string
222
+ for _, helper := range o.Helpers() {
223
+ if !exports[helper.Export] {
224
+ missing = append(missing, helper.Export)
225
+ }
226
+ }
227
+ slices.Sort(missing)
228
+ return missing, nil
229
+ }
230
+
188
231
  func compareRuntimeHelperContract(a RuntimeHelperContract, b RuntimeHelperContract) int {
189
232
  if c := cmp.Compare(a.Category, b.Category); c != 0 {
190
233
  return c
@@ -200,6 +243,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
200
243
  runtimeHelper(RuntimeHelperPrintln, "println", RuntimeHelperCategoryBuiltin),
201
244
  runtimeHelper(RuntimeHelperPrint, "print", RuntimeHelperCategoryBuiltin),
202
245
  runtimeHelper(RuntimeHelperInt, "int", RuntimeHelperCategoryBuiltin),
246
+ runtimeHelper(RuntimeHelperUint, "uint", RuntimeHelperCategoryBuiltin),
203
247
  runtimeHelper(RuntimeHelperByte, "byte", RuntimeHelperCategoryBuiltin),
204
248
  runtimeHelper(RuntimeHelperLen, "len", RuntimeHelperCategoryBuiltin),
205
249
  runtimeHelper(RuntimeHelperCap, "cap", RuntimeHelperCategoryBuiltin),
@@ -208,19 +252,38 @@ func runtimeHelperContracts() []RuntimeHelperContract {
208
252
  runtimeHelper(RuntimeHelperRecover, "recover", RuntimeHelperCategoryBuiltin),
209
253
  runtimeHelper(RuntimeHelperMin, "min", RuntimeHelperCategoryBuiltin),
210
254
  runtimeHelper(RuntimeHelperMax, "max", RuntimeHelperCategoryBuiltin),
255
+ runtimeHelper(RuntimeHelperComplex, "complex", RuntimeHelperCategoryBuiltin),
256
+ runtimeHelper(RuntimeHelperReal, "real", RuntimeHelperCategoryBuiltin),
257
+ runtimeHelper(RuntimeHelperImag, "imag", RuntimeHelperCategoryBuiltin),
258
+ runtimeHelper(RuntimeHelperUint64Shl, "uint64Shl", RuntimeHelperCategoryBuiltin),
259
+ runtimeHelper(RuntimeHelperUint64Shr, "uint64Shr", RuntimeHelperCategoryBuiltin),
260
+ runtimeHelper(RuntimeHelperUintShr, "uintShr", RuntimeHelperCategoryBuiltin),
261
+ runtimeHelper(RuntimeHelperUint64Mul, "uint64Mul", RuntimeHelperCategoryBuiltin),
262
+ runtimeHelper(RuntimeHelperUint64Add, "uint64Add", RuntimeHelperCategoryBuiltin),
263
+ runtimeHelper(RuntimeHelperUint64Sub, "uint64Sub", RuntimeHelperCategoryBuiltin),
264
+ runtimeHelper(RuntimeHelperUint64And, "uint64And", RuntimeHelperCategoryBuiltin),
265
+ runtimeHelper(RuntimeHelperUint64Or, "uint64Or", RuntimeHelperCategoryBuiltin),
266
+ runtimeHelper(RuntimeHelperUint64Xor, "uint64Xor", RuntimeHelperCategoryBuiltin),
211
267
  runtimeHelper(RuntimeHelperAssignStruct, "assignStruct", RuntimeHelperCategoryValue),
212
268
  runtimeHelper(RuntimeHelperMarkAsStructValue, "markAsStructValue", RuntimeHelperCategoryValue),
269
+ runtimeHelper(RuntimeHelperCloneStructValue, "cloneStructValue", RuntimeHelperCategoryValue),
213
270
  runtimeHelper(RuntimeHelperPointerValue, "pointerValue", RuntimeHelperCategoryValue),
271
+ runtimeHelper(RuntimeHelperArrayEqual, "arrayEqual", RuntimeHelperCategoryValue),
214
272
  runtimeHelper(RuntimeHelperVarRef, "varRef", RuntimeHelperCategoryVarRef),
273
+ runtimeHelper(RuntimeHelperFieldRef, "fieldRef", RuntimeHelperCategoryVarRef),
215
274
  runtimeHelper(RuntimeHelperUnref, "unref", RuntimeHelperCategoryVarRef),
216
275
  runtimeHelper(RuntimeHelperIsVarRef, "isVarRef", RuntimeHelperCategoryVarRef),
276
+ runtimeHelper(RuntimeHelperUnsupportedPointerRef, "unsupportedPointerRef", RuntimeHelperCategoryVarRef),
217
277
  runtimeHelper(RuntimeHelperMakeSlice, "makeSlice", RuntimeHelperCategorySlice),
218
278
  runtimeHelper(RuntimeHelperGoSlice, "goSlice", RuntimeHelperCategorySlice),
219
279
  runtimeHelper(RuntimeHelperArrayToSlice, "arrayToSlice", RuntimeHelperCategorySlice),
280
+ runtimeHelper(RuntimeHelperSliceToArray, "sliceToArray", RuntimeHelperCategorySlice),
281
+ runtimeHelper(RuntimeHelperSliceToArrayPointer, "sliceToArrayPointer", RuntimeHelperCategorySlice),
220
282
  runtimeHelper(RuntimeHelperAppend, "append", RuntimeHelperCategorySlice),
221
283
  runtimeHelper(RuntimeHelperCopy, "copy", RuntimeHelperCategorySlice),
222
284
  runtimeHelper(RuntimeHelperAsArray, "asArray", RuntimeHelperCategorySlice),
223
285
  runtimeHelper(RuntimeHelperStringToRunes, "stringToRunes", RuntimeHelperCategorySlice),
286
+ runtimeHelper(RuntimeHelperRangeString, "rangeString", RuntimeHelperCategorySlice),
224
287
  runtimeHelper(RuntimeHelperStringToRune, "stringToRune", RuntimeHelperCategorySlice),
225
288
  runtimeHelper(RuntimeHelperRunesToString, "runesToString", RuntimeHelperCategorySlice),
226
289
  runtimeHelper(RuntimeHelperStringToBytes, "stringToBytes", RuntimeHelperCategorySlice),
@@ -228,6 +291,8 @@ func runtimeHelperContracts() []RuntimeHelperContract {
228
291
  runtimeHelper(RuntimeHelperGenericBytesOrStringToString, "genericBytesOrStringToString", RuntimeHelperCategorySlice),
229
292
  runtimeHelper(RuntimeHelperIndexStringOrBytes, "indexStringOrBytes", RuntimeHelperCategorySlice),
230
293
  runtimeHelper(RuntimeHelperSliceStringOrBytes, "sliceStringOrBytes", RuntimeHelperCategorySlice),
294
+ runtimeHelper(RuntimeHelperIndexRef, "indexRef", RuntimeHelperCategorySlice),
295
+ runtimeHelper(RuntimeHelperIndexAddress, "indexAddress", RuntimeHelperCategorySlice),
231
296
  runtimeHelper(RuntimeHelperMakeMap, "makeMap", RuntimeHelperCategoryMap),
232
297
  runtimeHelper(RuntimeHelperMapGet, "mapGet", RuntimeHelperCategoryMap),
233
298
  runtimeHelper(RuntimeHelperMapSet, "mapSet", RuntimeHelperCategoryMap),
@@ -247,6 +312,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
247
312
  runtimeHelper(RuntimeHelperTypeSwitch, "typeSwitch", RuntimeHelperCategoryType),
248
313
  runtimeHelper(RuntimeHelperTypedNil, "typedNil", RuntimeHelperCategoryType),
249
314
  runtimeHelper(RuntimeHelperInterfaceValue, "interfaceValue", RuntimeHelperCategoryType),
315
+ runtimeHelper(RuntimeHelperNamedValueInterfaceValue, "namedValueInterfaceValue", RuntimeHelperCategoryType),
250
316
  runtimeHelper(RuntimeHelperFunctionValue, "functionValue", RuntimeHelperCategoryType),
251
317
  runtimeHelper(RuntimeHelperNamedFunction, "namedFunction", RuntimeHelperCategoryType),
252
318
  runtimeHelper(RuntimeHelperGenericZero, "genericZero", RuntimeHelperCategoryType),
@@ -277,3 +343,97 @@ func runtimeHelper(
277
343
  Category: category,
278
344
  }
279
345
  }
346
+
347
+ func scanBuiltinRuntimeExports() (map[string]bool, error) {
348
+ index, err := gs.GsOverrides.ReadFile("gs/builtin/index.ts")
349
+ if err != nil {
350
+ return nil, err
351
+ }
352
+ exports := make(map[string]bool)
353
+ for _, module := range builtinReexportModules(string(index)) {
354
+ data, err := gs.GsOverrides.ReadFile("gs/builtin/" + module + ".ts")
355
+ if err != nil {
356
+ return nil, errors.Wrapf(err, "read builtin export module %s", module)
357
+ }
358
+ for _, name := range sourceExportNames(string(data)) {
359
+ exports[name] = true
360
+ }
361
+ }
362
+ return exports, nil
363
+ }
364
+
365
+ func builtinReexportModules(index string) []string {
366
+ var modules []string
367
+ for line := range strings.SplitSeq(index, "\n") {
368
+ line = strings.TrimSpace(line)
369
+ if !strings.HasPrefix(line, "export * from ") {
370
+ continue
371
+ }
372
+ module := quotedModulePath(line)
373
+ module = strings.TrimPrefix(module, "./")
374
+ module = strings.TrimSuffix(module, ".js")
375
+ if module != "" {
376
+ modules = append(modules, module)
377
+ }
378
+ }
379
+ slices.Sort(modules)
380
+ return modules
381
+ }
382
+
383
+ func quotedModulePath(line string) string {
384
+ for _, quote := range []string{"'", "\""} {
385
+ _, remaining, ok := strings.Cut(line, quote)
386
+ if !ok {
387
+ continue
388
+ }
389
+ module, _, ok := strings.Cut(remaining, quote)
390
+ if ok {
391
+ return module
392
+ }
393
+ }
394
+ return ""
395
+ }
396
+
397
+ func sourceExportNames(data string) []string {
398
+ names := make(map[string]bool)
399
+ for line := range strings.SplitSeq(data, "\n") {
400
+ line = strings.TrimSpace(line)
401
+ for _, prefix := range []string{
402
+ "export async function ",
403
+ "export function ",
404
+ "export const ",
405
+ "export class ",
406
+ "export enum ",
407
+ "export type ",
408
+ "export interface ",
409
+ } {
410
+ if !strings.HasPrefix(line, prefix) {
411
+ continue
412
+ }
413
+ name := exportNameAfterPrefix(line, prefix)
414
+ if name != "" {
415
+ names[name] = true
416
+ }
417
+ }
418
+ }
419
+ result := make([]string, 0, len(names))
420
+ for name := range names {
421
+ result = append(result, name)
422
+ }
423
+ slices.Sort(result)
424
+ return result
425
+ }
426
+
427
+ func exportNameAfterPrefix(line, prefix string) string {
428
+ remaining := strings.TrimSpace(strings.TrimPrefix(line, prefix))
429
+ for idx, char := range remaining {
430
+ if char == '_' || char == '$' ||
431
+ (char >= 'a' && char <= 'z') ||
432
+ (char >= 'A' && char <= 'Z') ||
433
+ (idx > 0 && char >= '0' && char <= '9') {
434
+ continue
435
+ }
436
+ return remaining[:idx]
437
+ }
438
+ return remaining
439
+ }
@@ -11,36 +11,40 @@ func TestRuntimeContractOwnsBuiltinImportAndHelpers(t *testing.T) {
11
11
  }
12
12
 
13
13
  wantHelpers := map[RuntimeHelper]RuntimeHelperCategory{
14
- RuntimeHelperPrintln: RuntimeHelperCategoryBuiltin,
15
- RuntimeHelperPrint: RuntimeHelperCategoryBuiltin,
16
- RuntimeHelperInt: RuntimeHelperCategoryBuiltin,
17
- RuntimeHelperByte: RuntimeHelperCategoryBuiltin,
18
- RuntimeHelperVarRef: RuntimeHelperCategoryVarRef,
19
- RuntimeHelperUnref: RuntimeHelperCategoryVarRef,
20
- RuntimeHelperAssignStruct: RuntimeHelperCategoryValue,
21
- RuntimeHelperMarkAsStructValue: RuntimeHelperCategoryValue,
22
- RuntimeHelperPointerValue: RuntimeHelperCategoryValue,
23
- RuntimeHelperMakeSlice: RuntimeHelperCategorySlice,
24
- RuntimeHelperAppend: RuntimeHelperCategorySlice,
25
- RuntimeHelperMakeMap: RuntimeHelperCategoryMap,
26
- RuntimeHelperMapGet: RuntimeHelperCategoryMap,
27
- RuntimeHelperNewError: RuntimeHelperCategoryError,
28
- RuntimeHelperRegisterStructType: RuntimeHelperCategoryType,
29
- RuntimeHelperTypeAssert: RuntimeHelperCategoryType,
30
- RuntimeHelperTypedNil: RuntimeHelperCategoryType,
31
- RuntimeHelperInterfaceValue: RuntimeHelperCategoryType,
32
- RuntimeHelperFunctionValue: RuntimeHelperCategoryType,
33
- RuntimeHelperNamedFunction: RuntimeHelperCategoryType,
34
- RuntimeHelperGenericZero: RuntimeHelperCategoryType,
35
- RuntimeHelperCallGenericMethod: RuntimeHelperCategoryType,
36
- RuntimeHelperMakeChannel: RuntimeHelperCategoryChannel,
37
- RuntimeHelperSelectStatement: RuntimeHelperCategoryChannel,
38
- RuntimeHelperDisposableStack: RuntimeHelperCategoryDefer,
39
- RuntimeHelperAsyncDisposableStack: RuntimeHelperCategoryDefer,
40
- RuntimeHelperGetHostRuntime: RuntimeHelperCategoryHost,
41
- RuntimeHelperWriteHostStdoutText: RuntimeHelperCategoryHost,
42
- RuntimeHelperWriteHostStderrText: RuntimeHelperCategoryHost,
43
- RuntimeHelperIsMainScript: RuntimeHelperCategoryHost,
14
+ RuntimeHelperPrintln: RuntimeHelperCategoryBuiltin,
15
+ RuntimeHelperPrint: RuntimeHelperCategoryBuiltin,
16
+ RuntimeHelperInt: RuntimeHelperCategoryBuiltin,
17
+ RuntimeHelperUint: RuntimeHelperCategoryBuiltin,
18
+ RuntimeHelperByte: RuntimeHelperCategoryBuiltin,
19
+ RuntimeHelperVarRef: RuntimeHelperCategoryVarRef,
20
+ RuntimeHelperUnref: RuntimeHelperCategoryVarRef,
21
+ RuntimeHelperUnsupportedPointerRef: RuntimeHelperCategoryVarRef,
22
+ RuntimeHelperAssignStruct: RuntimeHelperCategoryValue,
23
+ RuntimeHelperMarkAsStructValue: RuntimeHelperCategoryValue,
24
+ RuntimeHelperPointerValue: RuntimeHelperCategoryValue,
25
+ RuntimeHelperMakeSlice: RuntimeHelperCategorySlice,
26
+ RuntimeHelperAppend: RuntimeHelperCategorySlice,
27
+ RuntimeHelperIndexAddress: RuntimeHelperCategorySlice,
28
+ RuntimeHelperMakeMap: RuntimeHelperCategoryMap,
29
+ RuntimeHelperMapGet: RuntimeHelperCategoryMap,
30
+ RuntimeHelperNewError: RuntimeHelperCategoryError,
31
+ RuntimeHelperRegisterStructType: RuntimeHelperCategoryType,
32
+ RuntimeHelperTypeAssert: RuntimeHelperCategoryType,
33
+ RuntimeHelperTypedNil: RuntimeHelperCategoryType,
34
+ RuntimeHelperInterfaceValue: RuntimeHelperCategoryType,
35
+ RuntimeHelperNamedValueInterfaceValue: RuntimeHelperCategoryType,
36
+ RuntimeHelperFunctionValue: RuntimeHelperCategoryType,
37
+ RuntimeHelperNamedFunction: RuntimeHelperCategoryType,
38
+ RuntimeHelperGenericZero: RuntimeHelperCategoryType,
39
+ RuntimeHelperCallGenericMethod: RuntimeHelperCategoryType,
40
+ RuntimeHelperMakeChannel: RuntimeHelperCategoryChannel,
41
+ RuntimeHelperSelectStatement: RuntimeHelperCategoryChannel,
42
+ RuntimeHelperDisposableStack: RuntimeHelperCategoryDefer,
43
+ RuntimeHelperAsyncDisposableStack: RuntimeHelperCategoryDefer,
44
+ RuntimeHelperGetHostRuntime: RuntimeHelperCategoryHost,
45
+ RuntimeHelperWriteHostStdoutText: RuntimeHelperCategoryHost,
46
+ RuntimeHelperWriteHostStderrText: RuntimeHelperCategoryHost,
47
+ RuntimeHelperIsMainScript: RuntimeHelperCategoryHost,
44
48
  }
45
49
  for helper, category := range wantHelpers {
46
50
  contract, ok := owner.Helper(helper)
@@ -88,3 +92,13 @@ func TestCompileServiceSharesRuntimeContractOwner(t *testing.T) {
88
92
  t.Fatalf("qualified println helper = %q, want $.println", got)
89
93
  }
90
94
  }
95
+
96
+ func TestRuntimeContractHelpersAreExportedByBuiltinRuntime(t *testing.T) {
97
+ missing, err := NewRuntimeContractOwner().MissingRuntimeExports()
98
+ if err != nil {
99
+ t.Fatal(err.Error())
100
+ }
101
+ if len(missing) != 0 {
102
+ t.Fatalf("runtime helper exports missing from gs/builtin: %v", missing)
103
+ }
104
+ }
@@ -12,6 +12,7 @@ type SemanticModel struct {
12
12
  addressTaken map[types.Object]bool
13
13
  needsVarRef map[types.Object]bool
14
14
  functions map[*types.Func]*semanticFunction
15
+ functionsByFullName map[string]*semanticFunction
15
16
  types map[*types.Named]*semanticType
16
17
  values map[types.Object]*semanticValue
17
18
  generatedImports map[string]map[string]bool
@@ -64,12 +65,13 @@ type semanticField struct {
64
65
  }
65
66
 
66
67
  type semanticValue struct {
67
- name string
68
- object types.Object
69
- typ types.Type
70
- zeroValueKind string
71
- position sourcePosition
72
- topLevel bool
68
+ name string
69
+ object types.Object
70
+ typ types.Type
71
+ zeroValueKind string
72
+ position sourcePosition
73
+ topLevel bool
74
+ asyncCompatibleFunction bool
73
75
  }
74
76
 
75
77
  type semanticFunction struct {
@@ -79,6 +81,7 @@ type semanticFunction struct {
79
81
  receiver *types.Named
80
82
  receiverPointer bool
81
83
  position sourcePosition
84
+ hasBody bool
82
85
  async bool
83
86
  asyncReasons []string
84
87
  calls map[*types.Func]bool