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.
- package/README.md +5 -2
- package/cmd/go_js_wasm_exec/main.go +201 -0
- package/cmd/go_js_wasm_exec/main_test.go +83 -0
- package/cmd/goscript/{cmd_compile.go → cmd-compile.go} +7 -0
- package/cmd/goscript/cmd-test.go +14 -0
- package/cmd/goscript/cmd-test_test.go +1 -1
- package/cmd/goscript-wasm/main.go +38 -6
- package/compiler/compile-request.go +12 -9
- package/compiler/compliance_test.go +0 -1
- package/compiler/config.go +2 -0
- package/compiler/diagnostic.go +104 -12
- package/compiler/diagnostic_test.go +106 -0
- package/compiler/gotest/request.go +28 -0
- package/compiler/gotest/runner.go +354 -44
- package/compiler/gotest/runner_test.go +293 -1
- package/compiler/gotest/testdata/browserapi/browserapi_test.go +20 -0
- package/compiler/gotest/testdata/browserapi/go.mod +3 -0
- package/compiler/index.test.ts +23 -0
- package/compiler/lowered-program.go +33 -24
- package/compiler/lowering.go +746 -194
- package/compiler/lowering_bench_test.go +42 -27
- package/compiler/lowering_internal_test.go +18 -0
- package/compiler/override-facts.go +15 -0
- package/compiler/override-parity-verifier.go +450 -0
- package/compiler/override-parity.go +122 -0
- package/compiler/override-registry_test.go +559 -0
- package/compiler/protobuf-ts-binding.go +567 -0
- package/compiler/protobuf-ts-binding_test.go +402 -0
- package/compiler/runtime-contract.go +4 -0
- package/compiler/runtime-contract_test.go +2 -0
- package/compiler/semantic-model-types.go +9 -4
- package/compiler/semantic-model.go +282 -70
- package/compiler/semantic-model_test.go +82 -1
- package/compiler/service.go +21 -1
- package/compiler/skeleton_test.go +118 -10
- package/compiler/typescript-emitter.go +128 -13
- package/compiler/wasm/compile_test.go +37 -4
- package/compiler/{wasm_api.go → wasm-api.go} +57 -7
- package/dist/gs/builtin/hostio.js +5 -0
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +13 -2
- package/dist/gs/builtin/slice.js +187 -6
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +13 -5
- package/dist/gs/builtin/type.js +153 -60
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +11 -0
- package/dist/gs/builtin/varRef.js +57 -2
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +1 -1
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/reader.gs.js +1 -1
- package/dist/gs/bytes/reader.gs.js.map +1 -1
- package/dist/gs/compress/zlib/index.d.ts +10 -3
- package/dist/gs/compress/zlib/index.js +50 -16
- package/dist/gs/compress/zlib/index.js.map +1 -1
- package/dist/gs/encoding/json/index.d.ts +114 -0
- package/dist/gs/encoding/json/index.js +544 -36
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +101 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +589 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +1 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +17 -11
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/errors.js +54 -30
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/go/scanner/index.d.ts +2 -0
- package/dist/gs/go/scanner/index.js +29 -5
- package/dist/gs/go/scanner/index.js.map +1 -1
- package/dist/gs/go/token/index.js +22 -6
- package/dist/gs/go/token/index.js.map +1 -1
- package/dist/gs/hash/index.d.ts +6 -0
- package/dist/gs/hash/index.js +20 -0
- package/dist/gs/hash/index.js.map +1 -1
- package/dist/gs/internal/byteorder/index.js +2 -2
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/internal/goarch/index.d.ts +43 -3
- package/dist/gs/internal/goarch/index.js +42 -10
- package/dist/gs/internal/goarch/index.js.map +1 -1
- package/dist/gs/io/fs/fs.js +26 -14
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/io/fs/readdir.js +4 -2
- package/dist/gs/io/fs/readdir.js.map +1 -1
- package/dist/gs/io/fs/sub.js +8 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/io.d.ts +2 -0
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/math/bits/index.d.ts +5 -0
- package/dist/gs/math/bits/index.js +16 -4
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/mime/index.d.ts +16 -0
- package/dist/gs/mime/index.js +315 -6
- package/dist/gs/mime/index.js.map +1 -1
- package/dist/gs/net/http/httptest/index.d.ts +12 -0
- package/dist/gs/net/http/httptest/index.js +85 -6
- package/dist/gs/net/http/httptest/index.js.map +1 -1
- package/dist/gs/net/http/index.d.ts +300 -5
- package/dist/gs/net/http/index.js +1598 -58
- package/dist/gs/net/http/index.js.map +1 -1
- package/dist/gs/os/dir_unix.gs.js +1 -1
- package/dist/gs/os/dir_unix.gs.js.map +1 -1
- package/dist/gs/os/error.gs.js +1 -1
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/exec.gs.d.ts +1 -0
- package/dist/gs/os/exec.gs.js +4 -8
- package/dist/gs/os/exec.gs.js.map +1 -1
- package/dist/gs/os/exec_posix.gs.js +1 -1
- package/dist/gs/os/exec_posix.gs.js.map +1 -1
- package/dist/gs/os/index.d.ts +1 -1
- package/dist/gs/os/index.js +1 -1
- package/dist/gs/os/index.js.map +1 -1
- package/dist/gs/os/proc.gs.d.ts +4 -0
- package/dist/gs/os/proc.gs.js +12 -6
- package/dist/gs/os/proc.gs.js.map +1 -1
- package/dist/gs/os/root_js.gs.js +1 -1
- package/dist/gs/os/root_js.gs.js.map +1 -1
- package/dist/gs/os/types.gs.js +1 -1
- package/dist/gs/os/types.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +1 -1
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js +1 -1
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/path/path.js +11 -7
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +5 -4
- package/dist/gs/reflect/index.js +4 -3
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +15 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +25 -6
- package/dist/gs/reflect/type.js +1475 -228
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +14 -6
- package/dist/gs/reflect/types.js +35 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.d.ts +1 -0
- package/dist/gs/reflect/value.js +83 -41
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +4 -140
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/pprof/index.d.ts +8 -2
- package/dist/gs/runtime/pprof/index.js +50 -30
- package/dist/gs/runtime/pprof/index.js.map +1 -1
- package/dist/gs/runtime/runtime.js +5 -4
- package/dist/gs/runtime/runtime.js.map +1 -1
- package/dist/gs/runtime/trace/index.js +5 -19
- package/dist/gs/runtime/trace/index.js.map +1 -1
- package/dist/gs/strconv/atoi.gs.js +1 -1
- package/dist/gs/strconv/atoi.gs.js.map +1 -1
- package/dist/gs/strconv/complex.gs.d.ts +3 -0
- package/dist/gs/strconv/complex.gs.js +148 -0
- package/dist/gs/strconv/complex.gs.js.map +1 -0
- package/dist/gs/strconv/index.d.ts +1 -0
- package/dist/gs/strconv/index.js +1 -0
- package/dist/gs/strconv/index.js.map +1 -1
- package/dist/gs/strings/builder.js +1 -1
- package/dist/gs/strings/reader.js +9 -5
- package/dist/gs/strings/reader.js.map +1 -1
- package/dist/gs/strings/replace.js +15 -7
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/strings/strings.d.ts +5 -0
- package/dist/gs/strings/strings.js +57 -5
- package/dist/gs/strings/strings.js.map +1 -1
- package/dist/gs/sync/atomic/doc_64.gs.js +7 -6
- package/dist/gs/sync/atomic/doc_64.gs.js.map +1 -1
- package/dist/gs/sync/atomic/type.gs.js +9 -9
- package/dist/gs/sync/atomic/type.gs.js.map +1 -1
- package/dist/gs/sync/atomic/value.gs.js +2 -2
- package/dist/gs/sync/atomic/value.gs.js.map +1 -1
- package/dist/gs/syscall/env.js +22 -14
- package/dist/gs/syscall/env.js.map +1 -1
- package/dist/gs/testing/testing.js +55 -13
- package/dist/gs/testing/testing.js.map +1 -1
- package/dist/gs/time/time.d.ts +24 -1
- package/dist/gs/time/time.js +43 -3
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unique/index.js +7 -1
- package/dist/gs/unique/index.js.map +1 -1
- package/go.mod +3 -3
- package/go.sum +16 -0
- package/gs/builtin/hostio.test.ts +16 -0
- package/gs/builtin/hostio.ts +7 -0
- package/gs/builtin/runtime-contract.test.ts +246 -21
- package/gs/builtin/slice.ts +269 -24
- package/gs/builtin/type.ts +226 -59
- package/gs/builtin/varRef.ts +85 -2
- package/gs/bytes/buffer.gs.ts +1 -1
- package/gs/bytes/reader.gs.ts +1 -1
- package/gs/compress/zlib/index.test.ts +62 -1
- package/gs/compress/zlib/index.ts +53 -16
- package/gs/compress/zlib/parity.json +51 -0
- package/gs/encoding/json/index.test.ts +360 -6
- package/gs/encoding/json/index.ts +679 -38
- package/gs/encoding/json/parity.json +81 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +373 -3
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +893 -1
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +18 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +17 -11
- package/gs/github.com/pkg/errors/errors.ts +54 -30
- package/gs/go/scanner/index.test.ts +39 -56
- package/gs/go/scanner/index.ts +33 -5
- package/gs/go/scanner/parity.json +27 -0
- package/gs/go/token/index.ts +22 -6
- package/gs/hash/index.test.ts +20 -33
- package/gs/hash/index.ts +28 -0
- package/gs/hash/parity.json +21 -0
- package/gs/internal/byteorder/index.test.ts +2 -2
- package/gs/internal/byteorder/index.ts +2 -2
- package/gs/internal/goarch/index.test.ts +32 -0
- package/gs/internal/goarch/index.ts +45 -13
- package/gs/internal/goarch/parity.json +144 -0
- package/gs/io/fs/fs.ts +26 -14
- package/gs/io/fs/readdir.ts +4 -4
- package/gs/io/fs/sub.ts +8 -1
- package/gs/io/io.ts +1 -0
- package/gs/io/parity.json +162 -0
- package/gs/math/bits/index.test.ts +14 -1
- package/gs/math/bits/index.ts +23 -4
- package/gs/math/bits/parity.json +156 -0
- package/gs/mime/index.test.ts +90 -0
- package/gs/mime/index.ts +369 -6
- package/gs/mime/parity.json +36 -0
- package/gs/net/http/httptest/index.test.ts +98 -2
- package/gs/net/http/httptest/index.ts +101 -6
- package/gs/net/http/httptest/parity.json +15 -0
- package/gs/net/http/index.test.ts +781 -12
- package/gs/net/http/index.ts +1860 -139
- package/gs/net/http/meta.json +16 -1
- package/gs/net/http/parity.json +193 -0
- package/gs/os/dir_unix.gs.ts +1 -1
- package/gs/os/error.gs.ts +1 -1
- package/gs/os/exec.gs.ts +4 -8
- package/gs/os/exec_posix.gs.ts +1 -1
- package/gs/os/index.test.ts +9 -0
- package/gs/os/index.ts +1 -0
- package/gs/os/parity.json +9 -0
- package/gs/os/proc.gs.ts +18 -5
- package/gs/os/proc.test.ts +26 -0
- package/gs/os/root_js.gs.ts +1 -1
- package/gs/os/types.gs.ts +1 -1
- package/gs/os/types_js.gs.ts +1 -1
- package/gs/os/types_unix.gs.ts +1 -1
- package/gs/path/path.ts +11 -7
- package/gs/reflect/field.test.ts +37 -15
- package/gs/reflect/function-types.test.ts +518 -22
- package/gs/reflect/index.ts +8 -6
- package/gs/reflect/map.ts +20 -0
- package/gs/reflect/meta.json +6 -4
- package/gs/reflect/parity.json +234 -0
- package/gs/reflect/sliceat.test.ts +156 -0
- package/gs/reflect/structof.test.ts +401 -0
- package/gs/reflect/type.ts +1961 -317
- package/gs/reflect/typefor.test.ts +530 -10
- package/gs/reflect/types.ts +43 -18
- package/gs/reflect/value.ts +105 -45
- package/gs/reflect/visiblefields.ts +5 -168
- package/gs/runtime/parity.json +24 -0
- package/gs/runtime/pprof/index.test.ts +29 -7
- package/gs/runtime/pprof/index.ts +56 -30
- package/gs/runtime/pprof/parity.json +27 -0
- package/gs/runtime/runtime.test.ts +3 -1
- package/gs/runtime/runtime.ts +4 -3
- package/gs/runtime/trace/index.test.ts +5 -3
- package/gs/runtime/trace/index.ts +8 -20
- package/gs/runtime/trace/parity.json +36 -0
- package/gs/strconv/atoi.gs.ts +1 -1
- package/gs/strconv/complex.gs.ts +174 -0
- package/gs/strconv/complex.test.ts +65 -0
- package/gs/strconv/index.ts +1 -0
- package/gs/strconv/parity.json +120 -0
- package/gs/strings/builder.ts +1 -1
- package/gs/strings/parity.json +186 -0
- package/gs/strings/reader.ts +9 -5
- package/gs/strings/replace.ts +15 -7
- package/gs/strings/strings.test.ts +22 -2
- package/gs/strings/strings.ts +64 -6
- package/gs/sync/atomic/doc_64.gs.ts +6 -7
- package/gs/sync/atomic/doc_64.test.ts +43 -0
- package/gs/sync/atomic/type.gs.ts +9 -9
- package/gs/sync/atomic/value.gs.ts +2 -2
- package/gs/syscall/env.ts +29 -14
- package/gs/testing/testing.test.ts +67 -0
- package/gs/testing/testing.ts +87 -19
- package/gs/time/parity.json +225 -0
- package/gs/time/time.test.ts +20 -2
- package/gs/time/time.ts +49 -7
- package/gs/unique/index.ts +7 -1
- package/package.json +4 -2
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +0 -217
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +0 -926
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +0 -1
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +0 -38
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +0 -1361
- 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
|
-
|
|
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
|
-
|
|
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":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CAAC,qDAAqD,CAAC,CAAA;IAC9D,CAAC;CACF;AAqGD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AACjC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAEjC,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,OAAO,QAAQ,CACb,wDAAwD,CACzD,EAA6C,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,UAAyC,EACzC,MAAkB;IAElB,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;QACD,MAAM,IAAI,CAAC,CAAA;IACb,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,SAAS,YAAY,CACnB,UAAyC,EACzC,IAAY;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAM;IACR,CAAC;IACD,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,UAAsB;IAC1C,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAChD,IACE,MAAM;YACN,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU;YACrC,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EACtC,CAAC;YACD,OAAO,MAAsB,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAA;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAwB,CAAA;gBAC1D,IACE,MAAM;oBACN,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU;oBACrC,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EACtC,CAAC;oBACD,OAAO,MAAM,CAAA;gBACf,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB;IAC9C,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACtD,OAAO,MAA0B,CAAA;QACnC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAA;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAA4B,CAAA;gBAC9D,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBACtD,OAAO,MAAM,CAAA;gBACf,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,WAAoB;IAC/D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAClE,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,GAAG,CAAC,WAAW,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAA;IACvD,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,UAAU,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAA;AACtD,CAAC;AAED,SAAS,0BAA0B;IACjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAChC,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;QACjC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;QAC3B,CAAC;QAED,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,GAAG,GAAG,0BAA0B,EAAE,CAAA;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAuB;IACpD,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,aAAa,GAAI,UAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;QAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAE,UAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,OAAM;QACR,CAAC;QACD,aAAa,CAAC,IAAI,CAAE,UAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,UAAiB,CAAA;IACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAA;IACnC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,IAAI,IAAI,CAAA;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAE/C,MAAM,cAAc,GAAG,CAAC,EAAU,EAAuB,EAAE;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACb,CAAC;QACD,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,CAAC;gBACJ,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAA;YAC3B,KAAK,CAAC;gBACJ,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;YAC5B,KAAK,CAAC;gBACJ,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;YAC5B;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,UAAU,EAAE,QAAQ,IAAI,SAAS,CAAA;IAErE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE;QACtC,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QACD,OAAO,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,MAAM,GAAe,CACzB,EAAU,EACV,MAAkB,EACH,EAAE;QACjB,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,IAAI,oBAAoB,EAAE,CAAA;IAClC,CAAC,CAAA;IACD,MAAM,OAAO,GAAgB,CAAC,EAAU,EAAE,MAAkB,EAAU,EAAE;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACrD,OAAO,YAAY,CACjB,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,CAAC,EAC/C,MAAM,CACP,CAAA;QACH,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,YAAY,CACjB,CAAC,KAAiB,EAAE,EAAE,CACpB,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EACpD,MAAM,CACP,CAAA;QACH,CAAC;QACD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACzB,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CACvB,CAAA;YACD,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,CAAC;QACD,MAAM,IAAI,oBAAoB,EAAE,CAAA;IAClC,CAAC,CAAA;IACD,MAAM,eAAe,GAAkB,CAAC,IAAY,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAChC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACrD,YAAY,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,CACV,CAAC,KAAiB,EAAE,EAAE,CACpB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EACnD,IAAI,CACL,CAAA;YACD,OAAM;QACR,CAAC;QACD,qBAAqB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC,CAAA;IACD,MAAM,eAAe,GAAkB,CAAC,IAAY,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAChC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACrD,YAAY,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,CACV,CAAC,KAAiB,EAAE,EAAE,CACpB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EACnD,IAAI,CACL,CAAA;YACD,OAAM;QACR,CAAC;QACD,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,cAAc;QACd,UAAU;QACV,MAAM;QACN,QAAQ;QACR,UAAU;QACV,MAAM;QACN,OAAO;QACP,eAAe;QACf,eAAe;KAChB,CAAA;AACH,CAAC;AAED,MAAM,OAAO,gBAAgB;IAIR,QAAQ;IAHnB,OAAO,CAAa;IAE5B,YACmB,QAAQ,GAAwB,iBAAiB;wBAAjD,QAAQ;QAEzB,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,cAAc;IAC5B,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,gBAAgB,CAAC,KAAK,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,cAAc,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,cAAc,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAA;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -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.
|
package/dist/gs/builtin/slice.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|