goscript 0.1.4 → 0.2.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 (295) hide show
  1. package/README.md +5 -2
  2. package/cmd/go_js_wasm_exec/main.go +201 -0
  3. package/cmd/go_js_wasm_exec/main_test.go +83 -0
  4. package/cmd/goscript/{cmd_compile.go → cmd-compile.go} +7 -0
  5. package/cmd/goscript/cmd-test.go +14 -0
  6. package/cmd/goscript/cmd-test_test.go +1 -1
  7. package/cmd/goscript-wasm/main.go +38 -6
  8. package/compiler/compile-request.go +12 -9
  9. package/compiler/compliance_test.go +0 -1
  10. package/compiler/config.go +2 -0
  11. package/compiler/diagnostic.go +104 -12
  12. package/compiler/diagnostic_test.go +106 -0
  13. package/compiler/gotest/request.go +28 -0
  14. package/compiler/gotest/runner.go +354 -44
  15. package/compiler/gotest/runner_test.go +293 -1
  16. package/compiler/gotest/testdata/browserapi/browserapi_test.go +20 -0
  17. package/compiler/gotest/testdata/browserapi/go.mod +3 -0
  18. package/compiler/index.test.ts +23 -0
  19. package/compiler/lowered-program.go +33 -24
  20. package/compiler/lowering.go +746 -194
  21. package/compiler/lowering_bench_test.go +42 -27
  22. package/compiler/lowering_internal_test.go +18 -0
  23. package/compiler/override-facts.go +15 -0
  24. package/compiler/override-parity-verifier.go +450 -0
  25. package/compiler/override-parity.go +122 -0
  26. package/compiler/override-registry_test.go +559 -0
  27. package/compiler/protobuf-ts-binding.go +567 -0
  28. package/compiler/protobuf-ts-binding_test.go +402 -0
  29. package/compiler/runtime-contract.go +4 -0
  30. package/compiler/runtime-contract_test.go +2 -0
  31. package/compiler/semantic-model-types.go +9 -4
  32. package/compiler/semantic-model.go +282 -70
  33. package/compiler/semantic-model_test.go +82 -1
  34. package/compiler/service.go +21 -1
  35. package/compiler/skeleton_test.go +118 -10
  36. package/compiler/typescript-emitter.go +128 -13
  37. package/compiler/wasm/compile_test.go +37 -4
  38. package/compiler/{wasm_api.go → wasm-api.go} +57 -7
  39. package/dist/gs/builtin/hostio.js +5 -0
  40. package/dist/gs/builtin/hostio.js.map +1 -1
  41. package/dist/gs/builtin/slice.d.ts +13 -2
  42. package/dist/gs/builtin/slice.js +187 -6
  43. package/dist/gs/builtin/slice.js.map +1 -1
  44. package/dist/gs/builtin/type.d.ts +13 -5
  45. package/dist/gs/builtin/type.js +153 -60
  46. package/dist/gs/builtin/type.js.map +1 -1
  47. package/dist/gs/builtin/varRef.d.ts +11 -0
  48. package/dist/gs/builtin/varRef.js +57 -2
  49. package/dist/gs/builtin/varRef.js.map +1 -1
  50. package/dist/gs/bytes/buffer.gs.js +1 -1
  51. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  52. package/dist/gs/bytes/reader.gs.js +1 -1
  53. package/dist/gs/bytes/reader.gs.js.map +1 -1
  54. package/dist/gs/compress/zlib/index.d.ts +10 -3
  55. package/dist/gs/compress/zlib/index.js +50 -16
  56. package/dist/gs/compress/zlib/index.js.map +1 -1
  57. package/dist/gs/encoding/json/index.d.ts +114 -0
  58. package/dist/gs/encoding/json/index.js +544 -36
  59. package/dist/gs/encoding/json/index.js.map +1 -1
  60. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +101 -0
  61. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +589 -0
  62. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  63. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +1 -0
  64. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +17 -11
  65. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
  66. package/dist/gs/github.com/pkg/errors/errors.js +54 -30
  67. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  68. package/dist/gs/go/scanner/index.d.ts +2 -0
  69. package/dist/gs/go/scanner/index.js +29 -5
  70. package/dist/gs/go/scanner/index.js.map +1 -1
  71. package/dist/gs/go/token/index.js +22 -6
  72. package/dist/gs/go/token/index.js.map +1 -1
  73. package/dist/gs/hash/index.d.ts +6 -0
  74. package/dist/gs/hash/index.js +20 -0
  75. package/dist/gs/hash/index.js.map +1 -1
  76. package/dist/gs/internal/byteorder/index.js +2 -2
  77. package/dist/gs/internal/byteorder/index.js.map +1 -1
  78. package/dist/gs/internal/goarch/index.d.ts +43 -3
  79. package/dist/gs/internal/goarch/index.js +42 -10
  80. package/dist/gs/internal/goarch/index.js.map +1 -1
  81. package/dist/gs/io/fs/fs.js +26 -14
  82. package/dist/gs/io/fs/fs.js.map +1 -1
  83. package/dist/gs/io/fs/readdir.js +4 -2
  84. package/dist/gs/io/fs/readdir.js.map +1 -1
  85. package/dist/gs/io/fs/sub.js +8 -1
  86. package/dist/gs/io/fs/sub.js.map +1 -1
  87. package/dist/gs/io/io.d.ts +2 -0
  88. package/dist/gs/io/io.js.map +1 -1
  89. package/dist/gs/math/bits/index.d.ts +5 -0
  90. package/dist/gs/math/bits/index.js +16 -4
  91. package/dist/gs/math/bits/index.js.map +1 -1
  92. package/dist/gs/mime/index.d.ts +16 -0
  93. package/dist/gs/mime/index.js +315 -6
  94. package/dist/gs/mime/index.js.map +1 -1
  95. package/dist/gs/net/http/httptest/index.d.ts +12 -0
  96. package/dist/gs/net/http/httptest/index.js +85 -6
  97. package/dist/gs/net/http/httptest/index.js.map +1 -1
  98. package/dist/gs/net/http/index.d.ts +300 -5
  99. package/dist/gs/net/http/index.js +1598 -58
  100. package/dist/gs/net/http/index.js.map +1 -1
  101. package/dist/gs/os/dir_unix.gs.js +1 -1
  102. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  103. package/dist/gs/os/error.gs.js +1 -1
  104. package/dist/gs/os/error.gs.js.map +1 -1
  105. package/dist/gs/os/exec.gs.d.ts +1 -0
  106. package/dist/gs/os/exec.gs.js +4 -8
  107. package/dist/gs/os/exec.gs.js.map +1 -1
  108. package/dist/gs/os/exec_posix.gs.js +1 -1
  109. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  110. package/dist/gs/os/index.d.ts +1 -1
  111. package/dist/gs/os/index.js +1 -1
  112. package/dist/gs/os/index.js.map +1 -1
  113. package/dist/gs/os/proc.gs.d.ts +4 -0
  114. package/dist/gs/os/proc.gs.js +12 -6
  115. package/dist/gs/os/proc.gs.js.map +1 -1
  116. package/dist/gs/os/root_js.gs.js +1 -1
  117. package/dist/gs/os/root_js.gs.js.map +1 -1
  118. package/dist/gs/os/types.gs.js +1 -1
  119. package/dist/gs/os/types.gs.js.map +1 -1
  120. package/dist/gs/os/types_js.gs.js +1 -1
  121. package/dist/gs/os/types_js.gs.js.map +1 -1
  122. package/dist/gs/os/types_unix.gs.js +1 -1
  123. package/dist/gs/os/types_unix.gs.js.map +1 -1
  124. package/dist/gs/path/path.js +11 -7
  125. package/dist/gs/path/path.js.map +1 -1
  126. package/dist/gs/reflect/index.d.ts +5 -4
  127. package/dist/gs/reflect/index.js +4 -3
  128. package/dist/gs/reflect/index.js.map +1 -1
  129. package/dist/gs/reflect/map.js +15 -0
  130. package/dist/gs/reflect/map.js.map +1 -1
  131. package/dist/gs/reflect/type.d.ts +25 -6
  132. package/dist/gs/reflect/type.js +1475 -228
  133. package/dist/gs/reflect/type.js.map +1 -1
  134. package/dist/gs/reflect/types.d.ts +14 -6
  135. package/dist/gs/reflect/types.js +35 -1
  136. package/dist/gs/reflect/types.js.map +1 -1
  137. package/dist/gs/reflect/value.d.ts +1 -0
  138. package/dist/gs/reflect/value.js +83 -41
  139. package/dist/gs/reflect/value.js.map +1 -1
  140. package/dist/gs/reflect/visiblefields.js +4 -140
  141. package/dist/gs/reflect/visiblefields.js.map +1 -1
  142. package/dist/gs/runtime/pprof/index.d.ts +8 -2
  143. package/dist/gs/runtime/pprof/index.js +50 -30
  144. package/dist/gs/runtime/pprof/index.js.map +1 -1
  145. package/dist/gs/runtime/runtime.js +5 -4
  146. package/dist/gs/runtime/runtime.js.map +1 -1
  147. package/dist/gs/runtime/trace/index.js +5 -19
  148. package/dist/gs/runtime/trace/index.js.map +1 -1
  149. package/dist/gs/strconv/atoi.gs.js +1 -1
  150. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  151. package/dist/gs/strconv/complex.gs.d.ts +3 -0
  152. package/dist/gs/strconv/complex.gs.js +148 -0
  153. package/dist/gs/strconv/complex.gs.js.map +1 -0
  154. package/dist/gs/strconv/index.d.ts +1 -0
  155. package/dist/gs/strconv/index.js +1 -0
  156. package/dist/gs/strconv/index.js.map +1 -1
  157. package/dist/gs/strings/builder.js +1 -1
  158. package/dist/gs/strings/reader.js +9 -5
  159. package/dist/gs/strings/reader.js.map +1 -1
  160. package/dist/gs/strings/replace.js +15 -7
  161. package/dist/gs/strings/replace.js.map +1 -1
  162. package/dist/gs/strings/strings.d.ts +5 -0
  163. package/dist/gs/strings/strings.js +57 -5
  164. package/dist/gs/strings/strings.js.map +1 -1
  165. package/dist/gs/sync/atomic/doc_64.gs.js +7 -6
  166. package/dist/gs/sync/atomic/doc_64.gs.js.map +1 -1
  167. package/dist/gs/sync/atomic/type.gs.js +9 -9
  168. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  169. package/dist/gs/sync/atomic/value.gs.js +2 -2
  170. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  171. package/dist/gs/syscall/env.js +22 -14
  172. package/dist/gs/syscall/env.js.map +1 -1
  173. package/dist/gs/testing/testing.js +55 -13
  174. package/dist/gs/testing/testing.js.map +1 -1
  175. package/dist/gs/time/time.d.ts +24 -1
  176. package/dist/gs/time/time.js +43 -3
  177. package/dist/gs/time/time.js.map +1 -1
  178. package/dist/gs/unique/index.js +7 -1
  179. package/dist/gs/unique/index.js.map +1 -1
  180. package/go.mod +3 -3
  181. package/go.sum +16 -0
  182. package/gs/builtin/hostio.test.ts +16 -0
  183. package/gs/builtin/hostio.ts +7 -0
  184. package/gs/builtin/runtime-contract.test.ts +246 -21
  185. package/gs/builtin/slice.ts +269 -24
  186. package/gs/builtin/type.ts +226 -59
  187. package/gs/builtin/varRef.ts +85 -2
  188. package/gs/bytes/buffer.gs.ts +1 -1
  189. package/gs/bytes/reader.gs.ts +1 -1
  190. package/gs/compress/zlib/index.test.ts +62 -1
  191. package/gs/compress/zlib/index.ts +53 -16
  192. package/gs/compress/zlib/parity.json +51 -0
  193. package/gs/encoding/json/index.test.ts +360 -6
  194. package/gs/encoding/json/index.ts +679 -38
  195. package/gs/encoding/json/parity.json +81 -0
  196. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +373 -3
  197. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +893 -1
  198. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +18 -0
  199. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +17 -11
  200. package/gs/github.com/pkg/errors/errors.ts +54 -30
  201. package/gs/go/scanner/index.test.ts +39 -56
  202. package/gs/go/scanner/index.ts +33 -5
  203. package/gs/go/scanner/parity.json +27 -0
  204. package/gs/go/token/index.ts +22 -6
  205. package/gs/hash/index.test.ts +20 -33
  206. package/gs/hash/index.ts +28 -0
  207. package/gs/hash/parity.json +21 -0
  208. package/gs/internal/byteorder/index.test.ts +2 -2
  209. package/gs/internal/byteorder/index.ts +2 -2
  210. package/gs/internal/goarch/index.test.ts +32 -0
  211. package/gs/internal/goarch/index.ts +45 -13
  212. package/gs/internal/goarch/parity.json +144 -0
  213. package/gs/io/fs/fs.ts +26 -14
  214. package/gs/io/fs/readdir.ts +4 -4
  215. package/gs/io/fs/sub.ts +8 -1
  216. package/gs/io/io.ts +1 -0
  217. package/gs/io/parity.json +162 -0
  218. package/gs/math/bits/index.test.ts +14 -1
  219. package/gs/math/bits/index.ts +23 -4
  220. package/gs/math/bits/parity.json +156 -0
  221. package/gs/mime/index.test.ts +90 -0
  222. package/gs/mime/index.ts +369 -6
  223. package/gs/mime/parity.json +36 -0
  224. package/gs/net/http/httptest/index.test.ts +98 -2
  225. package/gs/net/http/httptest/index.ts +101 -6
  226. package/gs/net/http/httptest/parity.json +15 -0
  227. package/gs/net/http/index.test.ts +781 -12
  228. package/gs/net/http/index.ts +1860 -139
  229. package/gs/net/http/meta.json +16 -1
  230. package/gs/net/http/parity.json +193 -0
  231. package/gs/os/dir_unix.gs.ts +1 -1
  232. package/gs/os/error.gs.ts +1 -1
  233. package/gs/os/exec.gs.ts +4 -8
  234. package/gs/os/exec_posix.gs.ts +1 -1
  235. package/gs/os/index.test.ts +9 -0
  236. package/gs/os/index.ts +1 -0
  237. package/gs/os/parity.json +9 -0
  238. package/gs/os/proc.gs.ts +18 -5
  239. package/gs/os/proc.test.ts +26 -0
  240. package/gs/os/root_js.gs.ts +1 -1
  241. package/gs/os/types.gs.ts +1 -1
  242. package/gs/os/types_js.gs.ts +1 -1
  243. package/gs/os/types_unix.gs.ts +1 -1
  244. package/gs/path/path.ts +11 -7
  245. package/gs/reflect/field.test.ts +37 -15
  246. package/gs/reflect/function-types.test.ts +518 -22
  247. package/gs/reflect/index.ts +8 -6
  248. package/gs/reflect/map.ts +20 -0
  249. package/gs/reflect/meta.json +6 -4
  250. package/gs/reflect/parity.json +234 -0
  251. package/gs/reflect/sliceat.test.ts +156 -0
  252. package/gs/reflect/structof.test.ts +401 -0
  253. package/gs/reflect/type.ts +1961 -317
  254. package/gs/reflect/typefor.test.ts +530 -10
  255. package/gs/reflect/types.ts +43 -18
  256. package/gs/reflect/value.ts +105 -45
  257. package/gs/reflect/visiblefields.ts +5 -168
  258. package/gs/runtime/parity.json +24 -0
  259. package/gs/runtime/pprof/index.test.ts +29 -7
  260. package/gs/runtime/pprof/index.ts +56 -30
  261. package/gs/runtime/pprof/parity.json +27 -0
  262. package/gs/runtime/runtime.test.ts +3 -1
  263. package/gs/runtime/runtime.ts +4 -3
  264. package/gs/runtime/trace/index.test.ts +5 -3
  265. package/gs/runtime/trace/index.ts +8 -20
  266. package/gs/runtime/trace/parity.json +36 -0
  267. package/gs/strconv/atoi.gs.ts +1 -1
  268. package/gs/strconv/complex.gs.ts +174 -0
  269. package/gs/strconv/complex.test.ts +65 -0
  270. package/gs/strconv/index.ts +1 -0
  271. package/gs/strconv/parity.json +120 -0
  272. package/gs/strings/builder.ts +1 -1
  273. package/gs/strings/parity.json +186 -0
  274. package/gs/strings/reader.ts +9 -5
  275. package/gs/strings/replace.ts +15 -7
  276. package/gs/strings/strings.test.ts +22 -2
  277. package/gs/strings/strings.ts +64 -6
  278. package/gs/sync/atomic/doc_64.gs.ts +6 -7
  279. package/gs/sync/atomic/doc_64.test.ts +43 -0
  280. package/gs/sync/atomic/type.gs.ts +9 -9
  281. package/gs/sync/atomic/value.gs.ts +2 -2
  282. package/gs/syscall/env.ts +29 -14
  283. package/gs/testing/testing.test.ts +67 -0
  284. package/gs/testing/testing.ts +87 -19
  285. package/gs/time/parity.json +225 -0
  286. package/gs/time/time.test.ts +20 -2
  287. package/gs/time/time.ts +49 -7
  288. package/gs/unique/index.ts +7 -1
  289. package/package.json +4 -2
  290. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +0 -217
  291. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +0 -926
  292. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +0 -1
  293. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +0 -38
  294. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +0 -1361
  295. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +0 -46
@@ -4,6 +4,7 @@ import (
4
4
  "context"
5
5
  "go/ast"
6
6
  "go/parser"
7
+ "go/scanner"
7
8
  "go/token"
8
9
  "go/types"
9
10
  "strconv"
@@ -29,7 +30,9 @@ func CompileSourceToTypeScript(source string, packageName string) (string, error
29
30
  return "", NewCompileError(diagnostics)
30
31
  }
31
32
 
32
- program, loweringDiagnostics := service.loweringOwner.Build(ctx, model)
33
+ program, loweringDiagnostics := service.loweringOwner.Build(ctx, model, LoweringOptions{
34
+ DisplayRoot: ".",
35
+ })
33
36
  diagnostics = append(diagnostics, loweringDiagnostics...)
34
37
  if diagnosticsHaveErrors(diagnostics) {
35
38
  return "", NewCompileError(diagnostics)
@@ -79,10 +82,11 @@ func browserSourceGraph(source string, packageName string) (*PackageGraph, []Dia
79
82
  Code: "goscript/wasm:parse",
80
83
  Message: "browser source compilation failed to parse Go source",
81
84
  Detail: err.Error(),
85
+ Position: browserParseDiagnosticPosition(fset, err),
82
86
  }}
83
87
  }
84
88
  if len(file.Imports) != 0 {
85
- return nil, []Diagnostic{browserImportsUnsupportedDiagnostic(file)}
89
+ return nil, []Diagnostic{browserImportsUnsupportedDiagnostic(fset, file)}
86
90
  }
87
91
 
88
92
  pkgPath := strings.TrimSpace(packageName)
@@ -106,23 +110,27 @@ func browserSourceGraph(source string, packageName string) (*PackageGraph, []Dia
106
110
  config := types.Config{
107
111
  Sizes: sizes,
108
112
  Error: func(err error) {
109
- typeDiagnostics = append(typeDiagnostics, Diagnostic{
113
+ diag := Diagnostic{
110
114
  Severity: DiagnosticSeverityError,
111
115
  Code: "goscript/wasm:typecheck",
112
116
  Message: "browser source compilation failed to type-check Go source",
113
117
  Detail: err.Error(),
114
- })
118
+ }
119
+ diag.Position = browserTypeCheckDiagnosticPosition(fset, err)
120
+ typeDiagnostics = append(typeDiagnostics, diag)
115
121
  },
116
122
  }
117
123
  typedPkg, err := config.Check(pkgPath, fset, []*ast.File{file}, info)
118
124
  if err != nil {
119
125
  if len(typeDiagnostics) == 0 {
120
- typeDiagnostics = append(typeDiagnostics, Diagnostic{
126
+ diag := Diagnostic{
121
127
  Severity: DiagnosticSeverityError,
122
128
  Code: "goscript/wasm:typecheck",
123
129
  Message: "browser source compilation failed to type-check Go source",
124
130
  Detail: err.Error(),
125
- })
131
+ }
132
+ diag.Position = browserTypeCheckDiagnosticPosition(fset, err)
133
+ typeDiagnostics = append(typeDiagnostics, diag)
126
134
  }
127
135
  return nil, typeDiagnostics
128
136
  }
@@ -161,9 +169,13 @@ func browserSourceGraph(source string, packageName string) (*PackageGraph, []Dia
161
169
  }, nil
162
170
  }
163
171
 
164
- func browserImportsUnsupportedDiagnostic(file *ast.File) Diagnostic {
172
+ func browserImportsUnsupportedDiagnostic(fset *token.FileSet, file *ast.File) Diagnostic {
165
173
  imports := make([]string, 0, len(file.Imports))
174
+ var importPos token.Pos
166
175
  for _, spec := range file.Imports {
176
+ if !importPos.IsValid() {
177
+ importPos = spec.Pos()
178
+ }
167
179
  importPath := spec.Path.Value
168
180
  if unquoted, err := strconv.Unquote(importPath); err == nil {
169
181
  importPath = unquoted
@@ -175,5 +187,43 @@ func browserImportsUnsupportedDiagnostic(file *ast.File) Diagnostic {
175
187
  Code: "goscript/wasm:imports-unsupported",
176
188
  Message: "browser source compilation does not support imports yet",
177
189
  Detail: "Use goscript compile --package . from inside a Go module for imported packages. Imports: " + strings.Join(imports, ", "),
190
+ Position: browserTokenDiagnosticPosition(fset, importPos),
191
+ }
192
+ }
193
+
194
+ func browserParseDiagnosticPosition(fset *token.FileSet, err error) *DiagnosticPosition {
195
+ switch typed := err.(type) {
196
+ case scanner.ErrorList:
197
+ if len(typed) != 0 {
198
+ return diagnosticPositionFromSource(sourcePosFromTokenPosition(typed[0].Pos), "")
199
+ }
200
+ case *scanner.ErrorList:
201
+ if typed != nil && len(*typed) != 0 {
202
+ return diagnosticPositionFromSource(sourcePosFromTokenPosition((*typed)[0].Pos), "")
203
+ }
204
+ case *scanner.Error:
205
+ if typed != nil {
206
+ return diagnosticPositionFromSource(sourcePosFromTokenPosition(typed.Pos), "")
207
+ }
208
+ }
209
+ return browserTokenDiagnosticPosition(fset, token.NoPos)
210
+ }
211
+
212
+ func browserTypeCheckDiagnosticPosition(fset *token.FileSet, err error) *DiagnosticPosition {
213
+ switch typed := err.(type) {
214
+ case types.Error:
215
+ return browserTokenDiagnosticPosition(fset, typed.Pos)
216
+ case *types.Error:
217
+ if typed != nil {
218
+ return browserTokenDiagnosticPosition(fset, typed.Pos)
219
+ }
220
+ }
221
+ return nil
222
+ }
223
+
224
+ func browserTokenDiagnosticPosition(fset *token.FileSet, pos token.Pos) *DiagnosticPosition {
225
+ if fset == nil || !pos.IsValid() {
226
+ return nil
178
227
  }
228
+ return diagnosticPositionFromSource(sourcePosFromTokenPosition(fset.Position(pos)), "")
179
229
  }
@@ -4,6 +4,7 @@ export class HostUnsupportedError extends Error {
4
4
  }
5
5
  }
6
6
  const encoder = new TextEncoder();
7
+ const decoder = new TextDecoder();
7
8
  function getDynamicRequire() {
8
9
  try {
9
10
  return Function("return typeof require !== 'undefined' ? require : null")();
@@ -202,6 +203,10 @@ function detectHostRuntime() {
202
203
  if (nodeFS) {
203
204
  return writeAllSync((chunk) => nodeFS.writeSync(fd, chunk, 0, chunk.length, null), buffer);
204
205
  }
206
+ if (fd === 1 || fd === 2) {
207
+ fallbackConsoleWriter(fd === 2 ? 'error' : 'log')(decoder.decode(buffer));
208
+ return buffer.length;
209
+ }
205
210
  throw new HostUnsupportedError();
206
211
  };
207
212
  const writeStdoutText = (data) => {
@@ -1 +1 @@
1
- {"version":3,"file":"hostio.js","sourceRoot":"","sources":["../../../gs/builtin/hostio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostio.js","sourceRoot":"","sources":["../../../gs/builtin/hostio.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type VarRef } from './varRef.js';
1
+ import { type OwnedPointerHandle, type VarRef } from './varRef.js';
2
2
  export declare class GoBinaryString extends String {
3
3
  readonly bytes: Uint8Array;
4
4
  constructor(bytes: Uint8Array);
@@ -119,17 +119,28 @@ export declare function index<T>(collection: GoStringValue | Slice<T> | T[], ind
119
119
  * indexRef returns an addressable reference to a slice or array element.
120
120
  */
121
121
  export declare function indexRef<T>(collection: Slice<T> | T[] | Uint8Array, index: number): VarRef<T>;
122
+ export declare function sliceFromOwnedPointer<T>(pointer: OwnedPointerHandle<T>, length: number): Slice<T> | Uint8Array;
122
123
  /**
123
124
  * arrayPointerFromIndexRef turns &slice[i] into a pointer to an N-element array
124
125
  * view. This models unsafe conversions such as (*[64]byte)(unsafe.Pointer(&b[0]))
125
126
  * for packages that immediately slice or index the resulting array pointer.
126
127
  */
127
- export declare function arrayPointerFromIndexRef<T>(ref: VarRef<T>, length: number): VarRef<Slice<T> | T[] | Uint8Array>;
128
+ export declare function arrayPointerFromIndexRef<T>(ref: VarRef<T>, length: number, sourceElementByteSize?: number, targetElementByteSize?: number): VarRef<Slice<T> | T[] | Uint8Array>;
128
129
  /**
129
130
  * indexAddress returns a stable synthetic address for an addressable slice or
130
131
  * array element.
131
132
  */
132
133
  export declare function indexAddress<T>(collection: Slice<T> | T[] | Uint8Array, index: number): number;
134
+ /**
135
+ * indexByteAddress returns a byte-addressed synthetic address for unsafe
136
+ * uintptr arithmetic rooted at a slice or array element.
137
+ */
138
+ export declare function indexByteAddress<T>(collection: Slice<T> | T[] | Uint8Array, index: number, elementByteSize: number): number;
139
+ /**
140
+ * unsafePointerRef resolves a byte-addressed synthetic unsafe pointer created
141
+ * by indexByteAddress back to an addressable byte reference.
142
+ */
143
+ export declare function unsafePointerRef<T>(address: number | bigint): VarRef<T>;
133
144
  /**
134
145
  * Converts a string to an array of Unicode code points (runes).
135
146
  * @param str The input string.
@@ -1,4 +1,4 @@
1
- import { isVarRef, varRef } from './varRef.js';
1
+ import { isOwnedPointerHandle, isVarRef, varRef, } from './varRef.js';
2
2
  export class GoBinaryString extends String {
3
3
  bytes;
4
4
  constructor(bytes) {
@@ -47,6 +47,8 @@ function goStringFromBytes(bytes) {
47
47
  const addressStride = 0x100000000;
48
48
  let nextAddressBase = 1;
49
49
  const addressBases = new WeakMap();
50
+ const byteAddressBases = new WeakMap();
51
+ const byteAddressSources = new globalThis.Map();
50
52
  function sliceIndexProperty(prop) {
51
53
  if (typeof prop !== 'string' || prop.length === 0) {
52
54
  return -1;
@@ -926,7 +928,7 @@ export function indexRef(collection, index) {
926
928
  if (index < 0 || index >= collection.length) {
927
929
  throw new Error(`runtime error: index out of range [${index}] with length ${collection.length}`);
928
930
  }
929
- return {
931
+ const ref = {
930
932
  get value() {
931
933
  return collection[index];
932
934
  },
@@ -938,13 +940,15 @@ export function indexRef(collection, index) {
938
940
  __goCollection: collection,
939
941
  __goIndex: index,
940
942
  };
943
+ ref.__goPointer = collectionPointer(ref, collection, index);
944
+ return ref;
941
945
  }
942
946
  if (isComplexSlice(collection)) {
943
947
  if (index < 0 || index >= collection.__meta__.length) {
944
948
  throw new Error(`runtime error: index out of range [${index}] with length ${collection.__meta__.length}`);
945
949
  }
946
950
  const backingIndex = collection.__meta__.offset + index;
947
- return {
951
+ const ref = {
948
952
  get value() {
949
953
  return collection.__meta__.backing[backingIndex];
950
954
  },
@@ -956,12 +960,14 @@ export function indexRef(collection, index) {
956
960
  __goCollection: collection,
957
961
  __goIndex: index,
958
962
  };
963
+ ref.__goPointer = collectionPointer(ref, collection, index);
964
+ return ref;
959
965
  }
960
966
  if (Array.isArray(collection)) {
961
967
  if (index < 0 || index >= collection.length) {
962
968
  throw new Error(`runtime error: index out of range [${index}] with length ${collection.length}`);
963
969
  }
964
- return {
970
+ const ref = {
965
971
  get value() {
966
972
  return collection[index];
967
973
  },
@@ -973,21 +979,53 @@ export function indexRef(collection, index) {
973
979
  __goCollection: collection,
974
980
  __goIndex: index,
975
981
  };
982
+ ref.__goPointer = collectionPointer(ref, collection, index);
983
+ return ref;
976
984
  }
977
985
  throw new Error('runtime error: index on unsupported type');
978
986
  }
987
+ function collectionPointer(ref, collection, index) {
988
+ return {
989
+ __goOwnedPointer: true,
990
+ __goAddress: () => indexAddress(collection, index),
991
+ __goRef: () => ref,
992
+ __goSlice: (length) => {
993
+ if (length < 0) {
994
+ throw new Error('runtime error: unsafe slice length out of range');
995
+ }
996
+ return goSlice(collection, index, index + length, index + length);
997
+ },
998
+ };
999
+ }
1000
+ export function sliceFromOwnedPointer(pointer, length) {
1001
+ if (!isOwnedPointerHandle(pointer) || pointer.__goSlice === undefined) {
1002
+ throw new Error('reflect.SliceAt requires a GoScript-owned pointer');
1003
+ }
1004
+ return pointer.__goSlice(length);
1005
+ }
979
1006
  /**
980
1007
  * arrayPointerFromIndexRef turns &slice[i] into a pointer to an N-element array
981
1008
  * view. This models unsafe conversions such as (*[64]byte)(unsafe.Pointer(&b[0]))
982
1009
  * for packages that immediately slice or index the resulting array pointer.
983
1010
  */
984
- export function arrayPointerFromIndexRef(ref, length) {
1011
+ export function arrayPointerFromIndexRef(ref, length, sourceElementByteSize = 1, targetElementByteSize = sourceElementByteSize) {
985
1012
  const collection = ref.__goCollection;
986
1013
  if (collection === undefined) {
987
1014
  throw new Error('unsafe array pointer requires an indexed collection reference');
988
1015
  }
989
1016
  const index = ref.__goIndex ?? 0;
990
- return varRef(goSlice(collection, index, index + length));
1017
+ const view = targetElementByteSize === 1 && sourceElementByteSize > 1 ?
1018
+ byteArrayFromAddress(indexByteAddress(collection, index, sourceElementByteSize), length)
1019
+ : goSlice(collection, index, index + length);
1020
+ return {
1021
+ get value() {
1022
+ return view;
1023
+ },
1024
+ set value(value) {
1025
+ copy(view, value);
1026
+ },
1027
+ __isVarRef: true,
1028
+ };
991
1029
  }
992
1030
  /**
993
1031
  * indexAddress returns a stable synthetic address for an addressable slice or
@@ -1029,6 +1067,149 @@ export function indexAddress(collection, index) {
1029
1067
  }
1030
1068
  return base + backingIndex;
1031
1069
  }
1070
+ function uintElementValue(value, byteSize) {
1071
+ const bits = BigInt(byteSize * 8);
1072
+ if (typeof value === 'bigint') {
1073
+ return BigInt.asUintN(Number(bits), value);
1074
+ }
1075
+ if (typeof value === 'number' && Number.isFinite(value)) {
1076
+ return BigInt.asUintN(Number(bits), BigInt(Math.trunc(value)));
1077
+ }
1078
+ return 0n;
1079
+ }
1080
+ function uintElementResult(value, byteSize) {
1081
+ const normalized = BigInt.asUintN(byteSize * 8, value);
1082
+ if (normalized <= BigInt(Number.MAX_SAFE_INTEGER)) {
1083
+ return Number(normalized);
1084
+ }
1085
+ return normalized;
1086
+ }
1087
+ function byteAddressBase(backing, source) {
1088
+ let base = byteAddressBases.get(backing);
1089
+ if (base === undefined) {
1090
+ base = nextAddressBase * addressStride;
1091
+ nextAddressBase++;
1092
+ byteAddressBases.set(backing, base);
1093
+ }
1094
+ byteAddressSources.set(base, source);
1095
+ return base;
1096
+ }
1097
+ function numericByteSource(backing, elementByteSize) {
1098
+ const byteSize = Math.max(1, Math.trunc(elementByteSize));
1099
+ return {
1100
+ byteLength: backing.length * byteSize,
1101
+ getByte(offset) {
1102
+ const elementIndex = Math.trunc(offset / byteSize);
1103
+ const byteOffset = offset % byteSize;
1104
+ const value = uintElementValue(backing[elementIndex], byteSize);
1105
+ return Number((value >> BigInt(byteOffset * 8)) & 0xffn);
1106
+ },
1107
+ setByte(offset, value) {
1108
+ const elementIndex = Math.trunc(offset / byteSize);
1109
+ const byteOffset = offset % byteSize;
1110
+ const shift = BigInt(byteOffset * 8);
1111
+ const mask = 0xffn << shift;
1112
+ const current = uintElementValue(backing[elementIndex], byteSize);
1113
+ const next = (current & ~mask) | ((BigInt(value) & 0xffn) << shift);
1114
+ backing[elementIndex] = uintElementResult(next, byteSize);
1115
+ },
1116
+ };
1117
+ }
1118
+ /**
1119
+ * indexByteAddress returns a byte-addressed synthetic address for unsafe
1120
+ * uintptr arithmetic rooted at a slice or array element.
1121
+ */
1122
+ export function indexByteAddress(collection, index, elementByteSize) {
1123
+ if (collection === null || collection === undefined) {
1124
+ throw new Error('runtime error: index on nil or undefined collection');
1125
+ }
1126
+ if (collection instanceof Uint8Array) {
1127
+ if (index < 0 || index >= collection.length) {
1128
+ throw new Error(`runtime error: index out of range [${index}] with length ${collection.length}`);
1129
+ }
1130
+ const view = new Uint8Array(collection.buffer);
1131
+ const base = byteAddressBase(collection.buffer, {
1132
+ byteLength: view.length,
1133
+ getByte(offset) {
1134
+ return view[offset];
1135
+ },
1136
+ setByte(offset, value) {
1137
+ view[offset] = value;
1138
+ },
1139
+ });
1140
+ return base + collection.byteOffset + index;
1141
+ }
1142
+ if (isComplexSlice(collection)) {
1143
+ if (index < 0 || index >= collection.__meta__.length) {
1144
+ throw new Error(`runtime error: index out of range [${index}] with length ${collection.__meta__.length}`);
1145
+ }
1146
+ const backing = collection.__meta__.backing;
1147
+ const byteSize = Math.max(1, Math.trunc(elementByteSize));
1148
+ const base = byteAddressBase(backing, numericByteSource(backing, byteSize));
1149
+ return base + (collection.__meta__.offset + index) * byteSize;
1150
+ }
1151
+ if (Array.isArray(collection)) {
1152
+ if (index < 0 || index >= collection.length) {
1153
+ throw new Error(`runtime error: index out of range [${index}] with length ${collection.length}`);
1154
+ }
1155
+ const byteSize = Math.max(1, Math.trunc(elementByteSize));
1156
+ const base = byteAddressBase(collection, numericByteSource(collection, byteSize));
1157
+ return base + index * byteSize;
1158
+ }
1159
+ throw new Error('runtime error: index on unsupported type');
1160
+ }
1161
+ /**
1162
+ * unsafePointerRef resolves a byte-addressed synthetic unsafe pointer created
1163
+ * by indexByteAddress back to an addressable byte reference.
1164
+ */
1165
+ export function unsafePointerRef(address) {
1166
+ const numericAddress = Number(address);
1167
+ const base = Math.floor(numericAddress / addressStride) * addressStride;
1168
+ const source = byteAddressSources.get(base);
1169
+ if (source === undefined) {
1170
+ throw new Error('unsafe pointer dereference is not supported in JavaScript/TypeScript');
1171
+ }
1172
+ const offset = numericAddress - base;
1173
+ if (offset < 0 || offset >= source.byteLength) {
1174
+ throw new Error('runtime error: unsafe pointer address out of range');
1175
+ }
1176
+ return {
1177
+ get value() {
1178
+ return source.getByte(offset);
1179
+ },
1180
+ set value(value) {
1181
+ source.setByte(offset, value);
1182
+ },
1183
+ __isVarRef: true,
1184
+ };
1185
+ }
1186
+ function byteArrayFromAddress(address, length) {
1187
+ const start = Number(address);
1188
+ const target = new Array(length);
1189
+ return new Proxy(target, {
1190
+ get(arrayTarget, prop, receiver) {
1191
+ const index = sliceIndexProperty(prop);
1192
+ if (index >= 0) {
1193
+ if (index >= length) {
1194
+ throw new Error(`Slice index out of range: ${index} >= ${length}`);
1195
+ }
1196
+ return unsafePointerRef(start + index).value;
1197
+ }
1198
+ return Reflect.get(arrayTarget, prop, receiver);
1199
+ },
1200
+ set(arrayTarget, prop, value, receiver) {
1201
+ const index = sliceIndexProperty(prop);
1202
+ if (index >= 0) {
1203
+ if (index >= length) {
1204
+ throw new Error(`Slice index out of range: ${index} >= ${length}`);
1205
+ }
1206
+ unsafePointerRef(start + index).value = value;
1207
+ return true;
1208
+ }
1209
+ return Reflect.set(arrayTarget, prop, value, receiver);
1210
+ },
1211
+ });
1212
+ }
1032
1213
  /**
1033
1214
  * Converts a string to an array of Unicode code points (runes).
1034
1215
  * @param str The input string.