goscript 0.2.0 → 0.2.2
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/cmd/goscript-wasm/main.go +38 -6
- package/compiler/diagnostic.go +104 -12
- package/compiler/diagnostic_test.go +106 -0
- package/compiler/gotest/runner.go +99 -17
- package/compiler/gotest/runner_test.go +65 -0
- package/compiler/index.test.ts +23 -0
- package/compiler/lowered-program.go +9 -7
- package/compiler/lowering.go +361 -72
- package/compiler/lowering_bench_test.go +1 -0
- package/compiler/lowering_internal_test.go +18 -0
- package/compiler/protobuf-ts-binding.go +65 -12
- package/compiler/protobuf-ts-binding_test.go +339 -0
- package/compiler/runtime-contract.go +4 -0
- package/compiler/runtime-contract_test.go +2 -0
- package/compiler/service.go +1 -0
- package/compiler/skeleton_test.go +60 -3
- package/compiler/wasm/compile_test.go +37 -4
- package/compiler/wasm-api.go +57 -7
- package/dist/gs/builtin/hostio.js +6 -1
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +11 -1
- package/dist/gs/builtin/slice.js +158 -2
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/crypto/aes/index.d.ts +15 -0
- package/dist/gs/crypto/aes/index.js +57 -0
- package/dist/gs/crypto/aes/index.js.map +1 -0
- package/dist/gs/crypto/cipher/index.d.ts +41 -0
- package/dist/gs/crypto/cipher/index.js +255 -0
- package/dist/gs/crypto/cipher/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +1 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +30 -5
- 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/golang.org/x/crypto/chacha20poly1305/index.d.ts +31 -0
- package/dist/gs/golang.org/x/crypto/chacha20poly1305/index.js +117 -0
- package/dist/gs/golang.org/x/crypto/chacha20poly1305/index.js.map +1 -0
- package/dist/gs/internal/byteorder/index.js +2 -2
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/io/io.js +18 -2
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/reflect/type.js +57 -0
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/runtime/debug/index.js +2 -1
- package/dist/gs/runtime/debug/index.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/go.mod +2 -2
- package/go.sum +2 -0
- package/gs/builtin/hostio.test.ts +22 -1
- package/gs/builtin/hostio.ts +6 -1
- package/gs/builtin/runtime-contract.test.ts +28 -0
- package/gs/builtin/slice.ts +225 -20
- package/gs/crypto/aes/index.test.ts +120 -0
- package/gs/crypto/aes/index.ts +76 -0
- package/gs/crypto/cipher/index.ts +345 -0
- package/gs/crypto/cipher/meta.json +6 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +162 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +41 -5
- 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/golang.org/x/crypto/chacha20poly1305/index.test.ts +91 -0
- package/gs/golang.org/x/crypto/chacha20poly1305/index.ts +245 -0
- package/gs/internal/byteorder/index.test.ts +2 -2
- package/gs/internal/byteorder/index.ts +2 -2
- package/gs/io/io.test.ts +56 -1
- package/gs/io/io.ts +19 -2
- package/gs/reflect/type.ts +64 -0
- package/gs/reflect/typefor.test.ts +21 -1
- package/gs/runtime/debug/index.test.ts +32 -4
- package/gs/runtime/debug/index.ts +5 -2
- package/gs/sync/atomic/doc_64.gs.ts +6 -7
- package/gs/sync/atomic/doc_64.test.ts +43 -0
- package/package.json +10 -3
|
@@ -49,7 +49,8 @@ func TestCompileSourceReportsParseErrors(t *testing.T) {
|
|
|
49
49
|
if err == nil {
|
|
50
50
|
t.Fatal("expected compile error")
|
|
51
51
|
}
|
|
52
|
-
requireCompileDiagnostic(t, err, "goscript/wasm:parse")
|
|
52
|
+
diag := requireCompileDiagnostic(t, err, "goscript/wasm:parse")
|
|
53
|
+
requireDiagnosticPosition(t, diag, "main.go", 2, 12)
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
func TestCompileSourceReportsUnsupportedImports(t *testing.T) {
|
|
@@ -57,10 +58,27 @@ func TestCompileSourceReportsUnsupportedImports(t *testing.T) {
|
|
|
57
58
|
if err == nil {
|
|
58
59
|
t.Fatal("expected compile error")
|
|
59
60
|
}
|
|
60
|
-
requireCompileDiagnostic(t, err, "goscript/wasm:imports-unsupported")
|
|
61
|
+
diag := requireCompileDiagnostic(t, err, "goscript/wasm:imports-unsupported")
|
|
62
|
+
requireDiagnosticPosition(t, diag, "main.go", 3, 8)
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
func
|
|
65
|
+
func TestCompileSourceReportsTypecheckPositions(t *testing.T) {
|
|
66
|
+
_, err := CompileSource(strings.Join([]string{
|
|
67
|
+
"package main",
|
|
68
|
+
"",
|
|
69
|
+
"func main() {",
|
|
70
|
+
" missing()",
|
|
71
|
+
"}",
|
|
72
|
+
"",
|
|
73
|
+
}, "\n"), "main")
|
|
74
|
+
if err == nil {
|
|
75
|
+
t.Fatal("expected compile error")
|
|
76
|
+
}
|
|
77
|
+
diag := requireCompileDiagnostic(t, err, "goscript/wasm:typecheck")
|
|
78
|
+
requireDiagnosticPosition(t, diag, "main.go", 4, 5)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
func requireCompileDiagnostic(t *testing.T, err error, code string) compiler.Diagnostic {
|
|
64
82
|
t.Helper()
|
|
65
83
|
|
|
66
84
|
var compileErr *compiler.CompileError
|
|
@@ -72,8 +90,23 @@ func requireCompileDiagnostic(t *testing.T, err error, code string) {
|
|
|
72
90
|
if diag.Severity != compiler.DiagnosticSeverityError {
|
|
73
91
|
t.Fatalf("expected error severity, got %s", diag.Severity)
|
|
74
92
|
}
|
|
75
|
-
return
|
|
93
|
+
return diag
|
|
76
94
|
}
|
|
77
95
|
}
|
|
78
96
|
t.Fatalf("missing diagnostic %q in %#v", code, compileErr.Diagnostics)
|
|
97
|
+
return compiler.Diagnostic{}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
func requireDiagnosticPosition(t *testing.T, diag compiler.Diagnostic, displayFile string, line int, column int) {
|
|
101
|
+
t.Helper()
|
|
102
|
+
|
|
103
|
+
if diag.Position == nil {
|
|
104
|
+
t.Fatalf("expected position in %#v", diag)
|
|
105
|
+
}
|
|
106
|
+
if diag.Position.DisplayFile != displayFile {
|
|
107
|
+
t.Fatalf("DisplayFile = %q, want %q", diag.Position.DisplayFile, displayFile)
|
|
108
|
+
}
|
|
109
|
+
if diag.Position.Line != line || diag.Position.Column != column {
|
|
110
|
+
t.Fatalf("position = %d:%d, want %d:%d", diag.Position.Line, diag.Position.Column, line, column)
|
|
111
|
+
}
|
|
79
112
|
}
|
package/compiler/wasm-api.go
CHANGED
|
@@ -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('log')(decoder.decode(buffer));
|
|
208
|
+
return buffer.length;
|
|
209
|
+
}
|
|
205
210
|
throw new HostUnsupportedError();
|
|
206
211
|
};
|
|
207
212
|
const writeStdoutText = (data) => {
|
|
@@ -226,7 +231,7 @@ function detectHostRuntime() {
|
|
|
226
231
|
writeAllText((chunk) => nodeFS.writeSync(2, chunk, 0, chunk.length, null), data);
|
|
227
232
|
return;
|
|
228
233
|
}
|
|
229
|
-
fallbackConsoleWriter('
|
|
234
|
+
fallbackConsoleWriter('log')(data);
|
|
230
235
|
};
|
|
231
236
|
return {
|
|
232
237
|
deno,
|
|
@@ -1 +1 @@
|
|
|
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;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,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,
|
|
1
|
+
{"version":3,"file":"hostio.js","sourceRoot":"","sources":["../../../gs/builtin/hostio.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,12 +125,22 @@ export declare function sliceFromOwnedPointer<T>(pointer: OwnedPointerHandle<T>,
|
|
|
125
125
|
* view. This models unsafe conversions such as (*[64]byte)(unsafe.Pointer(&b[0]))
|
|
126
126
|
* for packages that immediately slice or index the resulting array pointer.
|
|
127
127
|
*/
|
|
128
|
-
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>;
|
|
129
129
|
/**
|
|
130
130
|
* indexAddress returns a stable synthetic address for an addressable slice or
|
|
131
131
|
* array element.
|
|
132
132
|
*/
|
|
133
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>;
|
|
134
144
|
/**
|
|
135
145
|
* Converts a string to an array of Unicode code points (runes).
|
|
136
146
|
* @param str The input string.
|
package/dist/gs/builtin/slice.js
CHANGED
|
@@ -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;
|
|
@@ -1006,13 +1008,24 @@ export function sliceFromOwnedPointer(pointer, length) {
|
|
|
1006
1008
|
* view. This models unsafe conversions such as (*[64]byte)(unsafe.Pointer(&b[0]))
|
|
1007
1009
|
* for packages that immediately slice or index the resulting array pointer.
|
|
1008
1010
|
*/
|
|
1009
|
-
export function arrayPointerFromIndexRef(ref, length) {
|
|
1011
|
+
export function arrayPointerFromIndexRef(ref, length, sourceElementByteSize = 1, targetElementByteSize = sourceElementByteSize) {
|
|
1010
1012
|
const collection = ref.__goCollection;
|
|
1011
1013
|
if (collection === undefined) {
|
|
1012
1014
|
throw new Error('unsafe array pointer requires an indexed collection reference');
|
|
1013
1015
|
}
|
|
1014
1016
|
const index = ref.__goIndex ?? 0;
|
|
1015
|
-
|
|
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
|
+
};
|
|
1016
1029
|
}
|
|
1017
1030
|
/**
|
|
1018
1031
|
* indexAddress returns a stable synthetic address for an addressable slice or
|
|
@@ -1054,6 +1067,149 @@ export function indexAddress(collection, index) {
|
|
|
1054
1067
|
}
|
|
1055
1068
|
return base + backingIndex;
|
|
1056
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
|
+
}
|
|
1057
1213
|
/**
|
|
1058
1214
|
* Converts a string to an array of Unicode code points (runes).
|
|
1059
1215
|
* @param str The input string.
|