goscript 0.0.84 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/cmd/goscript/cmd_compile.go +70 -69
- package/cmd/goscript/cmd_compile_test.go +79 -0
- package/cmd/goscript/main.go +10 -5
- package/compiler/compile-request.go +218 -0
- package/compiler/compiler.go +16 -1336
- package/compiler/compliance_test.go +196 -0
- package/compiler/config.go +6 -13
- package/compiler/diagnostic.go +70 -0
- package/compiler/index.test.ts +28 -28
- package/compiler/index.ts +40 -72
- package/compiler/lowered-program.go +132 -0
- package/compiler/lowering.go +3576 -0
- package/compiler/override-registry.go +422 -0
- package/compiler/override-registry_test.go +207 -0
- package/compiler/package-graph.go +231 -0
- package/compiler/package-graph_test.go +281 -0
- package/compiler/result.go +13 -0
- package/compiler/runtime-contract.go +279 -0
- package/compiler/runtime-contract_test.go +90 -0
- package/compiler/semantic-model-types.go +110 -0
- package/compiler/semantic-model.go +922 -0
- package/compiler/semantic-model_test.go +416 -0
- package/compiler/service.go +133 -0
- package/compiler/skeleton_test.go +1145 -0
- package/compiler/typescript-emitter.go +663 -0
- package/compiler/wasm/compile.go +2 -3
- package/compiler/wasm/compile_test.go +29 -0
- package/compiler/wasm_api.go +10 -159
- package/dist/compiler/index.d.ts +1 -3
- package/dist/compiler/index.js +31 -55
- package/dist/compiler/index.js.map +1 -1
- package/dist/gs/builtin/builtin.d.ts +13 -0
- package/dist/gs/builtin/builtin.js +23 -0
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +3 -3
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +15 -1
- package/dist/gs/builtin/hostio.js +134 -49
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/index.d.ts +1 -0
- package/dist/gs/builtin/index.js +1 -0
- package/dist/gs/builtin/index.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +1 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +11 -0
- package/dist/gs/builtin/type.js +55 -1
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/bytes.gs.js.map +1 -1
- package/dist/gs/bytes/reader.gs.js.map +1 -1
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/crypto/rand/index.d.ts +5 -0
- package/dist/gs/crypto/rand/index.js +77 -0
- package/dist/gs/crypto/rand/index.js.map +1 -0
- package/dist/gs/encoding/json/index.d.ts +3 -0
- package/dist/gs/encoding/json/index.js +160 -0
- package/dist/gs/encoding/json/index.js.map +1 -0
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
- package/dist/gs/go/scanner/index.d.ts +29 -0
- package/dist/gs/go/scanner/index.js +120 -0
- package/dist/gs/go/scanner/index.js.map +1 -0
- package/dist/gs/go/token/index.d.ts +31 -0
- package/dist/gs/go/token/index.js +82 -0
- package/dist/gs/go/token/index.js.map +1 -0
- package/dist/gs/internal/abi/index.js.map +1 -1
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/io/fs/readdir.js.map +1 -1
- package/dist/gs/io/fs/readfile.js.map +1 -1
- package/dist/gs/io/fs/stat.js.map +1 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/os/dir_unix.gs.js.map +1 -1
- package/dist/gs/os/error.gs.js +2 -4
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/exec.gs.js.map +1 -1
- package/dist/gs/os/exec_posix.gs.js.map +1 -1
- package/dist/gs/os/rawconn_js.gs.js.map +1 -1
- package/dist/gs/os/root_js.gs.js.map +1 -1
- package/dist/gs/os/tempfile.gs.js +66 -9
- package/dist/gs/os/tempfile.gs.js.map +1 -1
- package/dist/gs/os/types.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +9 -9
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/match.js.map +1 -1
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +2 -2
- package/dist/gs/reflect/index.js +1 -1
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +2 -1
- package/dist/gs/reflect/type.js +85 -14
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/runtime.js.map +1 -1
- package/dist/gs/sort/sort.gs.js.map +1 -1
- package/dist/gs/strconv/atoi.gs.js.map +1 -1
- package/dist/gs/strconv/quote.gs.js.map +1 -1
- package/dist/gs/strings/builder.js.map +1 -1
- package/dist/gs/strings/reader.js.map +1 -1
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/sync/atomic/type.gs.js.map +1 -1
- package/dist/gs/sync/atomic/value.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +1 -0
- package/dist/gs/sync/sync.js +12 -0
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/go.mod +2 -2
- package/gs/builtin/builtin.ts +27 -0
- package/gs/builtin/hostio.test.ts +177 -0
- package/gs/builtin/hostio.ts +171 -56
- package/gs/builtin/index.ts +1 -0
- package/gs/builtin/runtime-contract.test.ts +230 -0
- package/gs/builtin/type.ts +84 -1
- package/gs/crypto/rand/index.test.ts +32 -0
- package/gs/crypto/rand/index.ts +90 -0
- package/gs/crypto/rand/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +65 -0
- package/gs/encoding/json/index.ts +186 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +23 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +3 -1
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
- package/gs/go/scanner/index.test.ts +50 -0
- package/gs/go/scanner/index.ts +157 -0
- package/gs/go/token/index.test.ts +21 -0
- package/gs/go/token/index.ts +120 -0
- package/gs/os/file_unix_js.test.ts +50 -0
- package/gs/os/meta.json +1 -2
- package/gs/os/tempfile.gs.test.ts +85 -0
- package/gs/os/tempfile.gs.ts +71 -11
- package/gs/os/types_js.gs.ts +9 -9
- package/gs/reflect/index.ts +1 -1
- package/gs/reflect/type.ts +106 -17
- package/gs/reflect/typefor.test.ts +75 -0
- package/gs/sync/sync.test.ts +24 -0
- package/gs/sync/sync.ts +12 -0
- package/package.json +13 -13
- package/compiler/analysis.go +0 -3475
- package/compiler/analysis_test.go +0 -338
- package/compiler/assignment.go +0 -580
- package/compiler/builtin_test.go +0 -92
- package/compiler/code-writer.go +0 -115
- package/compiler/compiler_test.go +0 -149
- package/compiler/composite-lit.go +0 -779
- package/compiler/config_test.go +0 -62
- package/compiler/constraint.go +0 -86
- package/compiler/decl.go +0 -801
- package/compiler/expr-call-async.go +0 -188
- package/compiler/expr-call-builtins.go +0 -208
- package/compiler/expr-call-helpers.go +0 -382
- package/compiler/expr-call-make.go +0 -318
- package/compiler/expr-call-type-conversion.go +0 -520
- package/compiler/expr-call.go +0 -413
- package/compiler/expr-selector.go +0 -343
- package/compiler/expr-star.go +0 -82
- package/compiler/expr-type.go +0 -442
- package/compiler/expr-value.go +0 -89
- package/compiler/expr.go +0 -773
- package/compiler/field.go +0 -183
- package/compiler/gs_dependencies_test.go +0 -298
- package/compiler/lit.go +0 -322
- package/compiler/output.go +0 -72
- package/compiler/primitive.go +0 -149
- package/compiler/protobuf.go +0 -697
- package/compiler/sanitize.go +0 -100
- package/compiler/spec-struct.go +0 -995
- package/compiler/spec-value.go +0 -540
- package/compiler/spec.go +0 -725
- package/compiler/stmt-assign.go +0 -664
- package/compiler/stmt-for.go +0 -266
- package/compiler/stmt-range.go +0 -475
- package/compiler/stmt-select.go +0 -262
- package/compiler/stmt-type-switch.go +0 -147
- package/compiler/stmt.go +0 -1308
- package/compiler/type-assert.go +0 -386
- package/compiler/type-info.go +0 -156
- package/compiler/type-utils.go +0 -207
- package/compiler/type.go +0 -892
package/compiler/config_test.go
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"testing"
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
func TestConfigValidate(t *testing.T) {
|
|
8
|
-
tests := []struct {
|
|
9
|
-
name string
|
|
10
|
-
config *Config
|
|
11
|
-
wantErr bool
|
|
12
|
-
errMsg string
|
|
13
|
-
}{
|
|
14
|
-
{
|
|
15
|
-
name: "valid config",
|
|
16
|
-
config: &Config{
|
|
17
|
-
Dir: "/some/dir",
|
|
18
|
-
OutputPath: "/output/path",
|
|
19
|
-
BuildFlags: []string{"-tags", "sometag"},
|
|
20
|
-
},
|
|
21
|
-
wantErr: false,
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "empty output path root",
|
|
25
|
-
config: &Config{
|
|
26
|
-
Dir: "/some/dir",
|
|
27
|
-
BuildFlags: []string{"-tags", "sometag"},
|
|
28
|
-
},
|
|
29
|
-
wantErr: true,
|
|
30
|
-
errMsg: "output path root must be specified",
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
name: "nil fset gets initialized",
|
|
34
|
-
config: &Config{
|
|
35
|
-
fset: nil,
|
|
36
|
-
Dir: "/some/dir",
|
|
37
|
-
OutputPath: "/output/path",
|
|
38
|
-
},
|
|
39
|
-
wantErr: false,
|
|
40
|
-
},
|
|
41
|
-
// Note: There's a potential issue in the Validate method where it checks if c == nil
|
|
42
|
-
// after already using c to set fset, which could cause a panic
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
for _, tt := range tests {
|
|
46
|
-
t.Run(tt.name, func(t *testing.T) {
|
|
47
|
-
err := tt.config.Validate()
|
|
48
|
-
if (err != nil) != tt.wantErr {
|
|
49
|
-
t.Errorf("Config.Validate() error = %v, wantErr %v", err, tt.wantErr)
|
|
50
|
-
return
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if err != nil && tt.errMsg != "" && err.Error() != tt.errMsg {
|
|
54
|
-
t.Errorf("Config.Validate() error message = %v, want %v", err.Error(), tt.errMsg)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if tt.name == "nil fset gets initialized" && tt.config.fset == nil {
|
|
58
|
-
t.Errorf("Config.Validate() did not initialize nil fset")
|
|
59
|
-
}
|
|
60
|
-
})
|
|
61
|
-
}
|
|
62
|
-
}
|
package/compiler/constraint.go
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import "go/types"
|
|
4
|
-
|
|
5
|
-
// ConstraintInfo holds information about types found in an interface constraint
|
|
6
|
-
type ConstraintInfo struct {
|
|
7
|
-
HasMap bool
|
|
8
|
-
HasSlice bool
|
|
9
|
-
HasString bool
|
|
10
|
-
HasByteSlice bool
|
|
11
|
-
MapValueType types.Type
|
|
12
|
-
SliceElemType types.Type
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// analyzeConstraint analyzes an interface constraint and returns information about the types it contains
|
|
16
|
-
func analyzeConstraint(iface *types.Interface) ConstraintInfo {
|
|
17
|
-
info := ConstraintInfo{}
|
|
18
|
-
|
|
19
|
-
for embedded := range iface.EmbeddedTypes() {
|
|
20
|
-
if union, ok := embedded.(*types.Union); ok {
|
|
21
|
-
for term := range union.Terms() {
|
|
22
|
-
checkType(term.Type(), &info)
|
|
23
|
-
}
|
|
24
|
-
} else {
|
|
25
|
-
checkType(embedded, &info)
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return info
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
func checkType(t types.Type, info *ConstraintInfo) {
|
|
33
|
-
underlying := t.Underlying()
|
|
34
|
-
|
|
35
|
-
if mapType, isMap := underlying.(*types.Map); isMap {
|
|
36
|
-
info.HasMap = true
|
|
37
|
-
if info.MapValueType == nil {
|
|
38
|
-
info.MapValueType = mapType.Elem()
|
|
39
|
-
}
|
|
40
|
-
return
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if sliceType, isSlice := underlying.(*types.Slice); isSlice {
|
|
44
|
-
info.HasSlice = true
|
|
45
|
-
if info.SliceElemType == nil {
|
|
46
|
-
info.SliceElemType = sliceType.Elem()
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if elemType, isBasic := sliceType.Elem().(*types.Basic); isBasic && elemType.Kind() == types.Uint8 {
|
|
50
|
-
info.HasByteSlice = true
|
|
51
|
-
}
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if basicType, isBasic := underlying.(*types.Basic); isBasic {
|
|
56
|
-
if (basicType.Info() & types.IsString) != 0 {
|
|
57
|
-
info.HasString = true
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// hasMapConstraint checks if an interface constraint includes map types
|
|
63
|
-
func hasMapConstraint(iface *types.Interface) bool {
|
|
64
|
-
return analyzeConstraint(iface).HasMap
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// hasSliceConstraint checks if an interface constraint includes slice types
|
|
68
|
-
func hasSliceConstraint(iface *types.Interface) bool {
|
|
69
|
-
return analyzeConstraint(iface).HasSlice
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// hasMixedStringByteConstraint checks if an interface constraint includes both string and []byte types
|
|
73
|
-
func hasMixedStringByteConstraint(iface *types.Interface) bool {
|
|
74
|
-
info := analyzeConstraint(iface)
|
|
75
|
-
return info.HasString && info.HasByteSlice
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// getMapValueTypeFromConstraint extracts the value type from a map constraint
|
|
79
|
-
func getMapValueTypeFromConstraint(iface *types.Interface) types.Type {
|
|
80
|
-
return analyzeConstraint(iface).MapValueType
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// getSliceElementTypeFromConstraint extracts the element type from a slice constraint
|
|
84
|
-
func getSliceElementTypeFromConstraint(iface *types.Interface) types.Type {
|
|
85
|
-
return analyzeConstraint(iface).SliceElemType
|
|
86
|
-
}
|