goscript 0.0.84 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -243
- package/cmd/goscript/cmd-test.go +193 -0
- package/cmd/goscript/cmd-test_test.go +76 -0
- package/cmd/goscript/cmd_compile.go +70 -69
- package/cmd/goscript/cmd_compile_test.go +79 -0
- package/cmd/goscript/main.go +11 -5
- package/compiler/build-flags.go +38 -0
- package/compiler/compile-request.go +220 -0
- package/compiler/compiler.go +16 -1336
- package/compiler/compliance_test.go +188 -0
- package/compiler/config.go +6 -13
- package/compiler/diagnostic.go +70 -0
- package/compiler/gotest/owner.go +24 -0
- package/compiler/gotest/package-result.go +67 -0
- package/compiler/gotest/request.go +145 -0
- package/compiler/gotest/result.go +28 -0
- package/compiler/gotest/runner.go +588 -0
- package/compiler/gotest/runner_test.go +627 -0
- package/compiler/gotest/test.go +9 -0
- package/compiler/index.test.ts +28 -28
- package/compiler/index.ts +40 -72
- package/compiler/lowered-program.go +184 -0
- package/compiler/lowering.go +8072 -0
- package/compiler/override-facts.go +307 -0
- package/compiler/override-registry.go +283 -0
- package/compiler/override-registry_test.go +254 -0
- package/compiler/package-graph.go +254 -0
- package/compiler/package-graph_test.go +316 -0
- package/compiler/package-test-function.go +9 -0
- package/compiler/package-test-graph-package.go +40 -0
- package/compiler/package-test-graph-variant.go +105 -0
- package/compiler/package-test-graph.go +117 -0
- package/compiler/package-test-graph_test.go +144 -0
- package/compiler/result.go +13 -0
- package/compiler/runtime-contract.go +439 -0
- package/compiler/runtime-contract_test.go +104 -0
- package/compiler/semantic-model-types.go +113 -0
- package/compiler/semantic-model.go +1422 -0
- package/compiler/semantic-model_test.go +471 -0
- package/compiler/service.go +133 -0
- package/compiler/skeleton_test.go +1775 -0
- package/compiler/tsworkspace/owner.go +334 -0
- package/compiler/tsworkspace/owner_test.go +93 -0
- package/compiler/tsworkspace/result.go +17 -0
- package/compiler/typescript-emitter.go +1040 -0
- package/compiler/wasm/compile.go +2 -3
- package/compiler/wasm/compile_test.go +79 -0
- package/compiler/wasm_api.go +140 -124
- 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 +33 -2
- package/dist/gs/builtin/builtin.js +217 -6
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +11 -3
- package/dist/gs/builtin/channel.js +12 -0
- 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 +23 -3
- package/dist/gs/builtin/slice.js +216 -44
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +16 -2
- package/dist/gs/builtin/type.js +134 -21
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +5 -0
- package/dist/gs/builtin/varRef.js +23 -0
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +48 -44
- 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 +20 -18
- package/dist/gs/bytes/reader.gs.js.map +1 -1
- package/dist/gs/context/context.d.ts +5 -4
- package/dist/gs/context/context.js +10 -10
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
- 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/embed/index.d.ts +7 -0
- package/dist/gs/embed/index.js +16 -0
- package/dist/gs/embed/index.js.map +1 -0
- package/dist/gs/encoding/json/index.d.ts +4 -0
- package/dist/gs/encoding/json/index.js +178 -0
- package/dist/gs/encoding/json/index.js.map +1 -0
- package/dist/gs/errors/errors.d.ts +4 -0
- package/dist/gs/errors/errors.js +81 -0
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/fmt/fmt.d.ts +4 -4
- package/dist/gs/fmt/fmt.js +42 -11
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
- 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 +189 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
- package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
- 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/internal/scannerhooks/index.d.ts +3 -0
- package/dist/gs/go/internal/scannerhooks/index.js +5 -0
- package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
- package/dist/gs/go/scanner/index.d.ts +42 -0
- package/dist/gs/go/scanner/index.js +155 -0
- package/dist/gs/go/scanner/index.js.map +1 -0
- package/dist/gs/go/token/index.d.ts +187 -0
- package/dist/gs/go/token/index.js +578 -0
- package/dist/gs/go/token/index.js.map +1 -0
- package/dist/gs/internal/abi/index.d.ts +4 -0
- package/dist/gs/internal/abi/index.js +10 -0
- package/dist/gs/internal/abi/index.js.map +1 -1
- package/dist/gs/internal/bytealg/index.d.ts +2 -0
- package/dist/gs/internal/bytealg/index.js +14 -0
- package/dist/gs/internal/bytealg/index.js.map +1 -1
- package/dist/gs/internal/byteorder/index.d.ts +8 -2
- package/dist/gs/internal/byteorder/index.js +56 -25
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/internal/godebug/index.d.ts +12 -0
- package/dist/gs/internal/godebug/index.js +30 -0
- package/dist/gs/internal/godebug/index.js.map +1 -0
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/io/fs/index.d.ts +1 -0
- package/dist/gs/io/fs/index.js +1 -0
- package/dist/gs/io/fs/index.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/readlink.d.ts +8 -0
- package/dist/gs/io/fs/readlink.js +64 -0
- package/dist/gs/io/fs/readlink.js.map +1 -0
- package/dist/gs/io/fs/stat.js.map +1 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/fs/walk.d.ts +3 -3
- package/dist/gs/io/fs/walk.js +7 -7
- package/dist/gs/io/fs/walk.js.map +1 -1
- package/dist/gs/io/io.d.ts +40 -6
- package/dist/gs/io/io.js +151 -26
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/maps/iter.d.ts +3 -3
- package/dist/gs/maps/iter.js +3 -3
- package/dist/gs/maps/iter.js.map +1 -1
- package/dist/gs/maps/maps.d.ts +2 -2
- package/dist/gs/maps/maps.js +1 -1
- package/dist/gs/maps/maps.js.map +1 -1
- package/dist/gs/math/bits/index.d.ts +13 -4
- package/dist/gs/math/bits/index.js +66 -34
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/math/const.gs.d.ts +5 -5
- package/dist/gs/math/const.gs.js +4 -4
- package/dist/gs/math/const.gs.js.map +1 -1
- package/dist/gs/mime/index.d.ts +1 -0
- package/dist/gs/mime/index.js +50 -0
- package/dist/gs/mime/index.js.map +1 -0
- package/dist/gs/net/http/httptest/index.d.ts +11 -0
- package/dist/gs/net/http/httptest/index.js +21 -0
- package/dist/gs/net/http/httptest/index.js.map +1 -0
- package/dist/gs/net/http/index.d.ts +27 -0
- package/dist/gs/net/http/index.js +61 -0
- package/dist/gs/net/http/index.js.map +1 -0
- package/dist/gs/os/dir_unix.gs.js +2 -2
- 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 +165 -3
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/filepath/path.d.ts +3 -1
- package/dist/gs/path/filepath/path.js +133 -4
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/path/match.js.map +1 -1
- package/dist/gs/path/path.d.ts +4 -1
- package/dist/gs/path/path.js +16 -4
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -3
- package/dist/gs/reflect/index.js +2 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +3 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +9 -5
- package/dist/gs/reflect/type.js +233 -21
- 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/debug/index.d.ts +2 -0
- package/dist/gs/runtime/debug/index.js +8 -0
- package/dist/gs/runtime/debug/index.js.map +1 -0
- package/dist/gs/runtime/runtime.d.ts +35 -3
- package/dist/gs/runtime/runtime.js +72 -0
- package/dist/gs/runtime/runtime.js.map +1 -1
- package/dist/gs/slices/slices.d.ts +24 -5
- package/dist/gs/slices/slices.js +214 -5
- package/dist/gs/slices/slices.js.map +1 -1
- package/dist/gs/sort/slice.gs.d.ts +3 -3
- package/dist/gs/sort/slice.gs.js +6 -6
- package/dist/gs/sort/slice.gs.js.map +1 -1
- package/dist/gs/sort/sort.gs.d.ts +4 -4
- package/dist/gs/sort/sort.gs.js +11 -8
- 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.d.ts +1 -1
- package/dist/gs/strings/builder.js +3 -2
- 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.d.ts +9 -8
- package/dist/gs/sync/atomic/type.gs.js +0 -2
- 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 +3 -0
- package/dist/gs/sync/sync.js +39 -0
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/constants.d.ts +36 -24
- package/dist/gs/syscall/constants.js +12 -0
- package/dist/gs/syscall/constants.js.map +1 -1
- package/dist/gs/syscall/errors.d.ts +2 -0
- package/dist/gs/syscall/errors.js +8 -0
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +43 -0
- package/dist/gs/syscall/fs.js +102 -0
- package/dist/gs/syscall/fs.js.map +1 -1
- package/dist/gs/syscall/js/index.d.ts +90 -0
- package/dist/gs/syscall/js/index.js +375 -0
- package/dist/gs/syscall/js/index.js.map +1 -0
- package/dist/gs/syscall/types.d.ts +22 -0
- package/dist/gs/syscall/types.js +45 -1
- package/dist/gs/syscall/types.js.map +1 -1
- package/dist/gs/testing/index.d.ts +1 -0
- package/dist/gs/testing/index.js +2 -0
- package/dist/gs/testing/index.js.map +1 -0
- package/dist/gs/testing/testing.d.ts +77 -0
- package/dist/gs/testing/testing.js +301 -0
- package/dist/gs/testing/testing.js.map +1 -0
- package/dist/gs/time/time.d.ts +41 -4
- package/dist/gs/time/time.js +205 -36
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.d.ts +23 -1
- package/dist/gs/unicode/unicode.js +79 -10
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
- package/dist/gs/unicode/utf8/utf8.js +24 -11
- package/dist/gs/unicode/utf8/utf8.js.map +1 -1
- package/dist/gs/unique/index.d.ts +11 -0
- package/dist/gs/unique/index.js +71 -0
- package/dist/gs/unique/index.js.map +1 -0
- package/go.mod +2 -2
- package/go.sum +9 -0
- package/gs/builtin/builtin.ts +266 -8
- package/gs/builtin/channel.ts +22 -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 +356 -0
- package/gs/builtin/slice.ts +259 -50
- package/gs/builtin/type.ts +188 -30
- package/gs/builtin/varRef.ts +38 -1
- package/gs/bytes/buffer.gs.ts +48 -44
- package/gs/bytes/meta.json +8 -3
- package/gs/bytes/reader.gs.ts +20 -19
- package/gs/context/context.test.ts +41 -0
- package/gs/context/context.ts +22 -26
- package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
- package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
- 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/embed/index.ts +20 -0
- package/gs/embed/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +79 -0
- package/gs/encoding/json/index.ts +210 -0
- package/gs/errors/errors.test.ts +82 -0
- package/gs/errors/errors.ts +104 -0
- package/gs/fmt/fmt.ts +56 -16
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
- package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
- package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
- package/gs/go/internal/scannerhooks/index.test.ts +14 -0
- package/gs/go/internal/scannerhooks/index.ts +9 -0
- package/gs/go/scanner/index.test.ts +72 -0
- package/gs/go/scanner/index.ts +204 -0
- package/gs/go/token/index.test.ts +67 -0
- package/gs/go/token/index.ts +686 -0
- package/gs/internal/abi/index.test.ts +18 -0
- package/gs/internal/abi/index.ts +14 -0
- package/gs/internal/bytealg/index.test.ts +18 -0
- package/gs/internal/bytealg/index.ts +16 -0
- package/gs/internal/byteorder/index.test.ts +39 -0
- package/gs/internal/byteorder/index.ts +100 -27
- package/gs/internal/godebug/index.test.ts +16 -0
- package/gs/internal/godebug/index.ts +35 -0
- package/gs/io/fs/index.ts +1 -0
- package/gs/io/fs/meta.json +5 -0
- package/gs/io/fs/readlink.test.ts +43 -0
- package/gs/io/fs/readlink.ts +77 -0
- package/gs/io/fs/walk.test.ts +61 -0
- package/gs/io/fs/walk.ts +9 -9
- package/gs/io/io.ts +174 -31
- package/gs/io/meta.json +10 -2
- package/gs/maps/iter.ts +12 -6
- package/gs/maps/maps.ts +8 -6
- package/gs/math/bits/index.ts +103 -47
- package/gs/math/const.gs.test.ts +11 -5
- package/gs/math/const.gs.ts +5 -6
- package/gs/mime/index.ts +54 -0
- package/gs/net/http/httptest/index.ts +25 -0
- package/gs/net/http/index.test.ts +20 -0
- package/gs/net/http/index.ts +81 -0
- package/gs/os/dir_unix.gs.ts +2 -3
- 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 +11 -11
- package/gs/path/filepath/match.test.ts +31 -12
- package/gs/path/filepath/match.ts +178 -3
- package/gs/path/filepath/path.test.ts +25 -0
- package/gs/path/filepath/path.ts +159 -5
- package/gs/path/path.ts +20 -5
- package/gs/reflect/index.ts +2 -1
- package/gs/reflect/map.test.ts +19 -0
- package/gs/reflect/map.ts +4 -0
- package/gs/reflect/type.ts +298 -29
- package/gs/reflect/typefor.test.ts +75 -0
- package/gs/runtime/debug/index.test.ts +24 -0
- package/gs/runtime/debug/index.ts +8 -0
- package/gs/runtime/runtime.test.ts +19 -0
- package/gs/runtime/runtime.ts +98 -3
- package/gs/slices/slices.test.ts +94 -0
- package/gs/slices/slices.ts +245 -5
- package/gs/sort/meta.json +7 -0
- package/gs/sort/slice.gs.ts +16 -7
- package/gs/sort/sort.gs.ts +16 -13
- package/gs/strings/builder.ts +4 -3
- package/gs/sync/atomic/type.gs.ts +13 -14
- package/gs/sync/meta.json +3 -1
- package/gs/sync/sync.test.ts +36 -0
- package/gs/sync/sync.ts +39 -0
- package/gs/syscall/constants.ts +39 -24
- package/gs/syscall/errors.ts +10 -0
- package/gs/syscall/fs.ts +195 -0
- package/gs/syscall/js/index.ts +458 -0
- package/gs/syscall/js/meta.json +4 -0
- package/gs/syscall/net.test.ts +85 -0
- package/gs/syscall/types.ts +56 -0
- package/gs/testing/index.ts +1 -0
- package/gs/testing/meta.json +5 -0
- package/gs/testing/testing.test.ts +90 -0
- package/gs/testing/testing.ts +382 -0
- package/gs/time/time.test.ts +106 -0
- package/gs/time/time.ts +278 -57
- package/gs/unicode/unicode.test.ts +25 -0
- package/gs/unicode/unicode.ts +119 -9
- package/gs/unicode/utf8/utf8.test.ts +13 -0
- package/gs/unicode/utf8/utf8.ts +28 -16
- package/gs/unique/index.ts +91 -0
- package/package.json +14 -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
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
package compiler
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"path/filepath"
|
|
6
|
+
"strings"
|
|
7
|
+
"testing"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
func TestPackageGraphOwnerLoadTestGraphFacts(t *testing.T) {
|
|
11
|
+
moduleDir := writePackageGraphFixture(t, map[string]string{
|
|
12
|
+
"go.mod": "module example.test/testgraph\n\ngo 1.25.3\n",
|
|
13
|
+
"same/value.go": strings.Join([]string{
|
|
14
|
+
"package same",
|
|
15
|
+
"",
|
|
16
|
+
"func Add(a int, b int) int {",
|
|
17
|
+
"\treturn a + b",
|
|
18
|
+
"}",
|
|
19
|
+
"",
|
|
20
|
+
}, "\n"),
|
|
21
|
+
"same/value_test.go": strings.Join([]string{
|
|
22
|
+
"package same",
|
|
23
|
+
"",
|
|
24
|
+
"import \"testing\"",
|
|
25
|
+
"",
|
|
26
|
+
"func TestAdd(t *testing.T) {}",
|
|
27
|
+
"",
|
|
28
|
+
}, "\n"),
|
|
29
|
+
"external/value.go": strings.Join([]string{
|
|
30
|
+
"package external",
|
|
31
|
+
"",
|
|
32
|
+
"func Name() string {",
|
|
33
|
+
"\treturn \"external\"",
|
|
34
|
+
"}",
|
|
35
|
+
"",
|
|
36
|
+
}, "\n"),
|
|
37
|
+
"external/value_test.go": strings.Join([]string{
|
|
38
|
+
"package external_test",
|
|
39
|
+
"",
|
|
40
|
+
"import (",
|
|
41
|
+
"\t\"testing\"",
|
|
42
|
+
"",
|
|
43
|
+
"\texternal \"example.test/testgraph/external\"",
|
|
44
|
+
")",
|
|
45
|
+
"",
|
|
46
|
+
"func TestName(t *testing.T) {",
|
|
47
|
+
"\t_ = external.Name()",
|
|
48
|
+
"}",
|
|
49
|
+
"",
|
|
50
|
+
}, "\n"),
|
|
51
|
+
"notests/value.go": "package notests\nconst Value = 1\n",
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
graph, diagnostics := loadPackageTestGraph(t, &CompileRequest{
|
|
55
|
+
Patterns: []string{"./..."},
|
|
56
|
+
Dir: moduleDir,
|
|
57
|
+
OutputPath: filepath.Join(t.TempDir(), "out"),
|
|
58
|
+
DependencyMode: DependencyModeRequested,
|
|
59
|
+
RuntimeEmissionMode: RuntimeEmissionModeEmit,
|
|
60
|
+
})
|
|
61
|
+
if diagnosticsHaveErrors(diagnostics) {
|
|
62
|
+
t.Fatalf("test graph load failed: %#v", diagnostics)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if len(graph.Packages) != 3 {
|
|
66
|
+
t.Fatalf("expected three requested packages, got %#v", graph.Packages)
|
|
67
|
+
}
|
|
68
|
+
same := graph.PackageByPath("example.test/testgraph/same")
|
|
69
|
+
if same == nil || same.SamePackageTests == nil || same.ExternalPackageTests != nil || !same.HasTests() {
|
|
70
|
+
t.Fatalf("unexpected same-package facts: %#v", same)
|
|
71
|
+
}
|
|
72
|
+
external := graph.PackageByPath("example.test/testgraph/external")
|
|
73
|
+
if external == nil || external.ExternalPackageTests == nil || external.SamePackageTests != nil || !external.HasTests() {
|
|
74
|
+
t.Fatalf("unexpected external-package facts: %#v", external)
|
|
75
|
+
}
|
|
76
|
+
notests := graph.PackageByPath("example.test/testgraph/notests")
|
|
77
|
+
if notests == nil || notests.HasTests() {
|
|
78
|
+
t.Fatalf("unexpected no-test package facts: %#v", notests)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
func TestPackageGraphOwnerLoadTestGraphScopesDiagnostics(t *testing.T) {
|
|
83
|
+
moduleDir := writePackageGraphFixture(t, map[string]string{
|
|
84
|
+
"go.mod": "module example.test/testgraphdiag\n\ngo 1.25.3\n",
|
|
85
|
+
"clean/value.go": strings.Join([]string{
|
|
86
|
+
"package clean",
|
|
87
|
+
"",
|
|
88
|
+
"func Value() int {",
|
|
89
|
+
"\treturn 1",
|
|
90
|
+
"}",
|
|
91
|
+
"",
|
|
92
|
+
}, "\n"),
|
|
93
|
+
"clean/value_test.go": strings.Join([]string{
|
|
94
|
+
"package clean",
|
|
95
|
+
"",
|
|
96
|
+
"import \"testing\"",
|
|
97
|
+
"",
|
|
98
|
+
"func TestValue(t *testing.T) {}",
|
|
99
|
+
"",
|
|
100
|
+
}, "\n"),
|
|
101
|
+
"broken/value.go": "package broken\nconst Value = 1\n",
|
|
102
|
+
"broken/value_test.go": strings.Join([]string{
|
|
103
|
+
"package broken",
|
|
104
|
+
"",
|
|
105
|
+
"import \"testing\"",
|
|
106
|
+
"",
|
|
107
|
+
"func TestBroken(t *testing.T) {",
|
|
108
|
+
"\tMissing()",
|
|
109
|
+
"}",
|
|
110
|
+
"",
|
|
111
|
+
}, "\n"),
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
graph, diagnostics := loadPackageTestGraph(t, &CompileRequest{
|
|
115
|
+
Patterns: []string{"./..."},
|
|
116
|
+
Dir: moduleDir,
|
|
117
|
+
OutputPath: filepath.Join(t.TempDir(), "out"),
|
|
118
|
+
DependencyMode: DependencyModeRequested,
|
|
119
|
+
RuntimeEmissionMode: RuntimeEmissionModeEmit,
|
|
120
|
+
})
|
|
121
|
+
requireDiagnosticCode(t, diagnostics, "goscript/package-graph:load-error")
|
|
122
|
+
|
|
123
|
+
clean := graph.PackageByPath("example.test/testgraphdiag/clean")
|
|
124
|
+
if clean == nil || len(clean.Diagnostics) != 0 {
|
|
125
|
+
t.Fatalf("clean package should not inherit broken diagnostics: %#v", clean)
|
|
126
|
+
}
|
|
127
|
+
broken := graph.PackageByPath("example.test/testgraphdiag/broken")
|
|
128
|
+
if broken == nil || len(broken.Diagnostics) == 0 {
|
|
129
|
+
t.Fatalf("broken package should carry load diagnostics: %#v", broken)
|
|
130
|
+
}
|
|
131
|
+
if broken.SamePackageTests == nil || len(broken.SamePackageTests.Diagnostics) == 0 {
|
|
132
|
+
t.Fatalf("broken same-package test variant should carry diagnostics: %#v", broken)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func loadPackageTestGraph(t *testing.T, req *CompileRequest) (*PackageTestGraph, []Diagnostic) {
|
|
137
|
+
t.Helper()
|
|
138
|
+
|
|
139
|
+
diagnostics := NewCompileRequestOwner().Validate(req)
|
|
140
|
+
if diagnosticsHaveErrors(diagnostics) {
|
|
141
|
+
t.Fatalf("request validation failed: %#v", diagnostics)
|
|
142
|
+
}
|
|
143
|
+
return NewPackageGraphOwner().LoadTestGraph(context.Background(), req)
|
|
144
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package compiler
|
|
2
|
+
|
|
3
|
+
// CompilationResult describes a compiler run after adapter normalization.
|
|
4
|
+
type CompilationResult struct {
|
|
5
|
+
// CompiledPackages contains package paths compiled to TypeScript.
|
|
6
|
+
CompiledPackages []string
|
|
7
|
+
// CopiedPackages contains package paths copied from override packages.
|
|
8
|
+
CopiedPackages []string
|
|
9
|
+
// OriginalPackages contains the package patterns or package paths requested.
|
|
10
|
+
OriginalPackages []string
|
|
11
|
+
// Diagnostics contains all diagnostics produced by the compile request.
|
|
12
|
+
Diagnostics []Diagnostic
|
|
13
|
+
}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
package compiler
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"cmp"
|
|
5
|
+
"slices"
|
|
6
|
+
"strings"
|
|
7
|
+
|
|
8
|
+
gs "github.com/aperturerobotics/goscript"
|
|
9
|
+
"github.com/pkg/errors"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// RuntimeHelperCategory names a runtime helper family owned by the contract.
|
|
13
|
+
type RuntimeHelperCategory string
|
|
14
|
+
|
|
15
|
+
const (
|
|
16
|
+
RuntimeHelperCategoryBuiltin RuntimeHelperCategory = "builtin"
|
|
17
|
+
RuntimeHelperCategoryValue RuntimeHelperCategory = "value"
|
|
18
|
+
RuntimeHelperCategoryVarRef RuntimeHelperCategory = "varref"
|
|
19
|
+
RuntimeHelperCategorySlice RuntimeHelperCategory = "slice"
|
|
20
|
+
RuntimeHelperCategoryMap RuntimeHelperCategory = "map"
|
|
21
|
+
RuntimeHelperCategoryError RuntimeHelperCategory = "error"
|
|
22
|
+
RuntimeHelperCategoryType RuntimeHelperCategory = "type"
|
|
23
|
+
RuntimeHelperCategoryChannel RuntimeHelperCategory = "channel"
|
|
24
|
+
RuntimeHelperCategoryDefer RuntimeHelperCategory = "defer"
|
|
25
|
+
RuntimeHelperCategoryHost RuntimeHelperCategory = "host"
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
// RuntimeHelper identifies one compiler-visible helper exported by @goscript/builtin.
|
|
29
|
+
type RuntimeHelper string
|
|
30
|
+
|
|
31
|
+
const (
|
|
32
|
+
RuntimeHelperPrintln RuntimeHelper = "builtin.println"
|
|
33
|
+
RuntimeHelperPrint RuntimeHelper = "builtin.print"
|
|
34
|
+
RuntimeHelperInt RuntimeHelper = "builtin.int"
|
|
35
|
+
RuntimeHelperUint RuntimeHelper = "builtin.uint"
|
|
36
|
+
RuntimeHelperByte RuntimeHelper = "builtin.byte"
|
|
37
|
+
RuntimeHelperLen RuntimeHelper = "builtin.len"
|
|
38
|
+
RuntimeHelperCap RuntimeHelper = "builtin.cap"
|
|
39
|
+
RuntimeHelperClear RuntimeHelper = "builtin.clear"
|
|
40
|
+
RuntimeHelperPanic RuntimeHelper = "builtin.panic"
|
|
41
|
+
RuntimeHelperRecover RuntimeHelper = "builtin.recover"
|
|
42
|
+
RuntimeHelperMin RuntimeHelper = "builtin.min"
|
|
43
|
+
RuntimeHelperMax RuntimeHelper = "builtin.max"
|
|
44
|
+
RuntimeHelperComplex RuntimeHelper = "builtin.complex"
|
|
45
|
+
RuntimeHelperReal RuntimeHelper = "builtin.real"
|
|
46
|
+
RuntimeHelperImag RuntimeHelper = "builtin.imag"
|
|
47
|
+
RuntimeHelperUint64Shl RuntimeHelper = "builtin.uint64Shl"
|
|
48
|
+
RuntimeHelperUint64Shr RuntimeHelper = "builtin.uint64Shr"
|
|
49
|
+
RuntimeHelperUintShr RuntimeHelper = "builtin.uintShr"
|
|
50
|
+
RuntimeHelperUint64Mul RuntimeHelper = "builtin.uint64Mul"
|
|
51
|
+
RuntimeHelperUint64Add RuntimeHelper = "builtin.uint64Add"
|
|
52
|
+
RuntimeHelperUint64Sub RuntimeHelper = "builtin.uint64Sub"
|
|
53
|
+
RuntimeHelperUint64And RuntimeHelper = "builtin.uint64And"
|
|
54
|
+
RuntimeHelperUint64Or RuntimeHelper = "builtin.uint64Or"
|
|
55
|
+
RuntimeHelperUint64Xor RuntimeHelper = "builtin.uint64Xor"
|
|
56
|
+
|
|
57
|
+
RuntimeHelperAssignStruct RuntimeHelper = "value.assignStruct"
|
|
58
|
+
RuntimeHelperMarkAsStructValue RuntimeHelper = "value.markAsStructValue"
|
|
59
|
+
RuntimeHelperCloneStructValue RuntimeHelper = "value.cloneStructValue"
|
|
60
|
+
RuntimeHelperPointerValue RuntimeHelper = "value.pointerValue"
|
|
61
|
+
RuntimeHelperArrayEqual RuntimeHelper = "value.arrayEqual"
|
|
62
|
+
|
|
63
|
+
RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
|
|
64
|
+
RuntimeHelperFieldRef RuntimeHelper = "varref.fieldRef"
|
|
65
|
+
RuntimeHelperUnref RuntimeHelper = "varref.unref"
|
|
66
|
+
RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
|
|
67
|
+
RuntimeHelperUnsupportedPointerRef RuntimeHelper = "varref.unsupportedPointerRef"
|
|
68
|
+
|
|
69
|
+
RuntimeHelperMakeSlice RuntimeHelper = "slice.makeSlice"
|
|
70
|
+
RuntimeHelperGoSlice RuntimeHelper = "slice.goSlice"
|
|
71
|
+
RuntimeHelperArrayToSlice RuntimeHelper = "slice.arrayToSlice"
|
|
72
|
+
RuntimeHelperSliceToArray RuntimeHelper = "slice.sliceToArray"
|
|
73
|
+
RuntimeHelperSliceToArrayPointer RuntimeHelper = "slice.sliceToArrayPointer"
|
|
74
|
+
RuntimeHelperAppend RuntimeHelper = "slice.append"
|
|
75
|
+
RuntimeHelperCopy RuntimeHelper = "slice.copy"
|
|
76
|
+
RuntimeHelperAsArray RuntimeHelper = "slice.asArray"
|
|
77
|
+
RuntimeHelperStringToRunes RuntimeHelper = "slice.stringToRunes"
|
|
78
|
+
RuntimeHelperRangeString RuntimeHelper = "slice.rangeString"
|
|
79
|
+
RuntimeHelperStringToRune RuntimeHelper = "slice.stringToRune"
|
|
80
|
+
RuntimeHelperRunesToString RuntimeHelper = "slice.runesToString"
|
|
81
|
+
RuntimeHelperStringToBytes RuntimeHelper = "slice.stringToBytes"
|
|
82
|
+
RuntimeHelperBytesToString RuntimeHelper = "slice.bytesToString"
|
|
83
|
+
RuntimeHelperGenericBytesOrStringToString RuntimeHelper = "slice.genericBytesOrStringToString"
|
|
84
|
+
RuntimeHelperIndexStringOrBytes RuntimeHelper = "slice.indexStringOrBytes"
|
|
85
|
+
RuntimeHelperSliceStringOrBytes RuntimeHelper = "slice.sliceStringOrBytes"
|
|
86
|
+
RuntimeHelperIndexRef RuntimeHelper = "slice.indexRef"
|
|
87
|
+
RuntimeHelperIndexAddress RuntimeHelper = "slice.indexAddress"
|
|
88
|
+
|
|
89
|
+
RuntimeHelperMakeMap RuntimeHelper = "map.makeMap"
|
|
90
|
+
RuntimeHelperMapGet RuntimeHelper = "map.mapGet"
|
|
91
|
+
RuntimeHelperMapSet RuntimeHelper = "map.mapSet"
|
|
92
|
+
RuntimeHelperMapHas RuntimeHelper = "map.mapHas"
|
|
93
|
+
RuntimeHelperDeleteMapEntry RuntimeHelper = "map.deleteMapEntry"
|
|
94
|
+
|
|
95
|
+
RuntimeHelperNewError RuntimeHelper = "error.newError"
|
|
96
|
+
RuntimeHelperToGoError RuntimeHelper = "error.toGoError"
|
|
97
|
+
RuntimeHelperWrapPrimitiveError RuntimeHelper = "error.wrapPrimitiveError"
|
|
98
|
+
|
|
99
|
+
RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
|
|
100
|
+
RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
|
|
101
|
+
RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
|
|
102
|
+
RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
|
|
103
|
+
RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
|
|
104
|
+
RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
|
|
105
|
+
RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
|
|
106
|
+
RuntimeHelperIs RuntimeHelper = "type.is"
|
|
107
|
+
RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
|
|
108
|
+
RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
|
|
109
|
+
RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
|
|
110
|
+
RuntimeHelperNamedValueInterfaceValue RuntimeHelper = "type.namedValueInterfaceValue"
|
|
111
|
+
RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
|
|
112
|
+
RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
|
|
113
|
+
RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
|
|
114
|
+
RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
|
|
115
|
+
|
|
116
|
+
RuntimeHelperMakeChannel RuntimeHelper = "channel.makeChannel"
|
|
117
|
+
RuntimeHelperMakeChannelRef RuntimeHelper = "channel.makeChannelRef"
|
|
118
|
+
RuntimeHelperChanSend RuntimeHelper = "channel.chanSend"
|
|
119
|
+
RuntimeHelperChanRecv RuntimeHelper = "channel.chanRecv"
|
|
120
|
+
RuntimeHelperChanRecvWithOk RuntimeHelper = "channel.chanRecvWithOk"
|
|
121
|
+
RuntimeHelperSelectStatement RuntimeHelper = "channel.selectStatement"
|
|
122
|
+
|
|
123
|
+
RuntimeHelperDisposableStack RuntimeHelper = "defer.DisposableStack"
|
|
124
|
+
RuntimeHelperAsyncDisposableStack RuntimeHelper = "defer.AsyncDisposableStack"
|
|
125
|
+
|
|
126
|
+
RuntimeHelperGetHostRuntime RuntimeHelper = "host.getHostRuntime"
|
|
127
|
+
RuntimeHelperWriteHostStdoutText RuntimeHelper = "host.writeHostStdoutText"
|
|
128
|
+
RuntimeHelperWriteHostStderrText RuntimeHelper = "host.writeHostStderrText"
|
|
129
|
+
RuntimeHelperIsMainScript RuntimeHelper = "host.isMainScript"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
// RuntimeImport is a generated TypeScript import owned by the runtime contract.
|
|
133
|
+
type RuntimeImport struct {
|
|
134
|
+
Alias string
|
|
135
|
+
Source string
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// RuntimeHelperContract describes one helper exported by the runtime package.
|
|
139
|
+
type RuntimeHelperContract struct {
|
|
140
|
+
Helper RuntimeHelper
|
|
141
|
+
Export string
|
|
142
|
+
Category RuntimeHelperCategory
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// RuntimeContractOwner owns generated-code helper names and runtime capabilities.
|
|
146
|
+
type RuntimeContractOwner struct {
|
|
147
|
+
helpers map[RuntimeHelper]RuntimeHelperContract
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// NewRuntimeContractOwner creates the runtime contract owner.
|
|
151
|
+
func NewRuntimeContractOwner() *RuntimeContractOwner {
|
|
152
|
+
owner := &RuntimeContractOwner{
|
|
153
|
+
helpers: make(map[RuntimeHelper]RuntimeHelperContract),
|
|
154
|
+
}
|
|
155
|
+
for _, helper := range runtimeHelperContracts() {
|
|
156
|
+
owner.helpers[helper.Helper] = helper
|
|
157
|
+
}
|
|
158
|
+
return owner
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// BuiltinImport returns the runtime import used by generated package modules.
|
|
162
|
+
func (o *RuntimeContractOwner) BuiltinImport() RuntimeImport {
|
|
163
|
+
return RuntimeImport{
|
|
164
|
+
Alias: "$",
|
|
165
|
+
Source: "@goscript/builtin/index.js",
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Helpers returns every compiler-visible runtime helper contract.
|
|
170
|
+
func (o *RuntimeContractOwner) Helpers() []RuntimeHelperContract {
|
|
171
|
+
helpers := make([]RuntimeHelperContract, 0, len(o.helpers))
|
|
172
|
+
for _, helper := range o.helpers {
|
|
173
|
+
helpers = append(helpers, helper)
|
|
174
|
+
}
|
|
175
|
+
slices.SortFunc(helpers, compareRuntimeHelperContract)
|
|
176
|
+
return helpers
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// HelpersByCategory returns helper contracts in a category.
|
|
180
|
+
func (o *RuntimeContractOwner) HelpersByCategory(category RuntimeHelperCategory) []RuntimeHelperContract {
|
|
181
|
+
var helpers []RuntimeHelperContract
|
|
182
|
+
for _, helper := range o.helpers {
|
|
183
|
+
if helper.Category == category {
|
|
184
|
+
helpers = append(helpers, helper)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
slices.SortFunc(helpers, compareRuntimeHelperContract)
|
|
188
|
+
return helpers
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Helper returns one runtime helper contract.
|
|
192
|
+
func (o *RuntimeContractOwner) Helper(helper RuntimeHelper) (RuntimeHelperContract, bool) {
|
|
193
|
+
contract, ok := o.helpers[helper]
|
|
194
|
+
return contract, ok
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// HelperName returns the exported runtime symbol for a helper.
|
|
198
|
+
func (o *RuntimeContractOwner) HelperName(helper RuntimeHelper) (string, bool) {
|
|
199
|
+
contract, ok := o.Helper(helper)
|
|
200
|
+
if !ok {
|
|
201
|
+
return "", false
|
|
202
|
+
}
|
|
203
|
+
return contract.Export, true
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// QualifiedHelper returns a generated-code reference to a runtime helper.
|
|
207
|
+
func (o *RuntimeContractOwner) QualifiedHelper(helper RuntimeHelper) string {
|
|
208
|
+
name, ok := o.HelperName(helper)
|
|
209
|
+
if !ok {
|
|
210
|
+
panic("missing runtime helper contract: " + string(helper))
|
|
211
|
+
}
|
|
212
|
+
return o.BuiltinImport().Alias + "." + name
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// MissingRuntimeExports returns helper exports absent from the real runtime source.
|
|
216
|
+
func (o *RuntimeContractOwner) MissingRuntimeExports() ([]string, error) {
|
|
217
|
+
exports, err := scanBuiltinRuntimeExports()
|
|
218
|
+
if err != nil {
|
|
219
|
+
return nil, err
|
|
220
|
+
}
|
|
221
|
+
var missing []string
|
|
222
|
+
for _, helper := range o.Helpers() {
|
|
223
|
+
if !exports[helper.Export] {
|
|
224
|
+
missing = append(missing, helper.Export)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
slices.Sort(missing)
|
|
228
|
+
return missing, nil
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
func compareRuntimeHelperContract(a RuntimeHelperContract, b RuntimeHelperContract) int {
|
|
232
|
+
if c := cmp.Compare(a.Category, b.Category); c != 0 {
|
|
233
|
+
return c
|
|
234
|
+
}
|
|
235
|
+
if c := cmp.Compare(a.Export, b.Export); c != 0 {
|
|
236
|
+
return c
|
|
237
|
+
}
|
|
238
|
+
return cmp.Compare(a.Helper, b.Helper)
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
func runtimeHelperContracts() []RuntimeHelperContract {
|
|
242
|
+
return []RuntimeHelperContract{
|
|
243
|
+
runtimeHelper(RuntimeHelperPrintln, "println", RuntimeHelperCategoryBuiltin),
|
|
244
|
+
runtimeHelper(RuntimeHelperPrint, "print", RuntimeHelperCategoryBuiltin),
|
|
245
|
+
runtimeHelper(RuntimeHelperInt, "int", RuntimeHelperCategoryBuiltin),
|
|
246
|
+
runtimeHelper(RuntimeHelperUint, "uint", RuntimeHelperCategoryBuiltin),
|
|
247
|
+
runtimeHelper(RuntimeHelperByte, "byte", RuntimeHelperCategoryBuiltin),
|
|
248
|
+
runtimeHelper(RuntimeHelperLen, "len", RuntimeHelperCategoryBuiltin),
|
|
249
|
+
runtimeHelper(RuntimeHelperCap, "cap", RuntimeHelperCategoryBuiltin),
|
|
250
|
+
runtimeHelper(RuntimeHelperClear, "clear", RuntimeHelperCategoryBuiltin),
|
|
251
|
+
runtimeHelper(RuntimeHelperPanic, "panic", RuntimeHelperCategoryBuiltin),
|
|
252
|
+
runtimeHelper(RuntimeHelperRecover, "recover", RuntimeHelperCategoryBuiltin),
|
|
253
|
+
runtimeHelper(RuntimeHelperMin, "min", RuntimeHelperCategoryBuiltin),
|
|
254
|
+
runtimeHelper(RuntimeHelperMax, "max", RuntimeHelperCategoryBuiltin),
|
|
255
|
+
runtimeHelper(RuntimeHelperComplex, "complex", RuntimeHelperCategoryBuiltin),
|
|
256
|
+
runtimeHelper(RuntimeHelperReal, "real", RuntimeHelperCategoryBuiltin),
|
|
257
|
+
runtimeHelper(RuntimeHelperImag, "imag", RuntimeHelperCategoryBuiltin),
|
|
258
|
+
runtimeHelper(RuntimeHelperUint64Shl, "uint64Shl", RuntimeHelperCategoryBuiltin),
|
|
259
|
+
runtimeHelper(RuntimeHelperUint64Shr, "uint64Shr", RuntimeHelperCategoryBuiltin),
|
|
260
|
+
runtimeHelper(RuntimeHelperUintShr, "uintShr", RuntimeHelperCategoryBuiltin),
|
|
261
|
+
runtimeHelper(RuntimeHelperUint64Mul, "uint64Mul", RuntimeHelperCategoryBuiltin),
|
|
262
|
+
runtimeHelper(RuntimeHelperUint64Add, "uint64Add", RuntimeHelperCategoryBuiltin),
|
|
263
|
+
runtimeHelper(RuntimeHelperUint64Sub, "uint64Sub", RuntimeHelperCategoryBuiltin),
|
|
264
|
+
runtimeHelper(RuntimeHelperUint64And, "uint64And", RuntimeHelperCategoryBuiltin),
|
|
265
|
+
runtimeHelper(RuntimeHelperUint64Or, "uint64Or", RuntimeHelperCategoryBuiltin),
|
|
266
|
+
runtimeHelper(RuntimeHelperUint64Xor, "uint64Xor", RuntimeHelperCategoryBuiltin),
|
|
267
|
+
runtimeHelper(RuntimeHelperAssignStruct, "assignStruct", RuntimeHelperCategoryValue),
|
|
268
|
+
runtimeHelper(RuntimeHelperMarkAsStructValue, "markAsStructValue", RuntimeHelperCategoryValue),
|
|
269
|
+
runtimeHelper(RuntimeHelperCloneStructValue, "cloneStructValue", RuntimeHelperCategoryValue),
|
|
270
|
+
runtimeHelper(RuntimeHelperPointerValue, "pointerValue", RuntimeHelperCategoryValue),
|
|
271
|
+
runtimeHelper(RuntimeHelperArrayEqual, "arrayEqual", RuntimeHelperCategoryValue),
|
|
272
|
+
runtimeHelper(RuntimeHelperVarRef, "varRef", RuntimeHelperCategoryVarRef),
|
|
273
|
+
runtimeHelper(RuntimeHelperFieldRef, "fieldRef", RuntimeHelperCategoryVarRef),
|
|
274
|
+
runtimeHelper(RuntimeHelperUnref, "unref", RuntimeHelperCategoryVarRef),
|
|
275
|
+
runtimeHelper(RuntimeHelperIsVarRef, "isVarRef", RuntimeHelperCategoryVarRef),
|
|
276
|
+
runtimeHelper(RuntimeHelperUnsupportedPointerRef, "unsupportedPointerRef", RuntimeHelperCategoryVarRef),
|
|
277
|
+
runtimeHelper(RuntimeHelperMakeSlice, "makeSlice", RuntimeHelperCategorySlice),
|
|
278
|
+
runtimeHelper(RuntimeHelperGoSlice, "goSlice", RuntimeHelperCategorySlice),
|
|
279
|
+
runtimeHelper(RuntimeHelperArrayToSlice, "arrayToSlice", RuntimeHelperCategorySlice),
|
|
280
|
+
runtimeHelper(RuntimeHelperSliceToArray, "sliceToArray", RuntimeHelperCategorySlice),
|
|
281
|
+
runtimeHelper(RuntimeHelperSliceToArrayPointer, "sliceToArrayPointer", RuntimeHelperCategorySlice),
|
|
282
|
+
runtimeHelper(RuntimeHelperAppend, "append", RuntimeHelperCategorySlice),
|
|
283
|
+
runtimeHelper(RuntimeHelperCopy, "copy", RuntimeHelperCategorySlice),
|
|
284
|
+
runtimeHelper(RuntimeHelperAsArray, "asArray", RuntimeHelperCategorySlice),
|
|
285
|
+
runtimeHelper(RuntimeHelperStringToRunes, "stringToRunes", RuntimeHelperCategorySlice),
|
|
286
|
+
runtimeHelper(RuntimeHelperRangeString, "rangeString", RuntimeHelperCategorySlice),
|
|
287
|
+
runtimeHelper(RuntimeHelperStringToRune, "stringToRune", RuntimeHelperCategorySlice),
|
|
288
|
+
runtimeHelper(RuntimeHelperRunesToString, "runesToString", RuntimeHelperCategorySlice),
|
|
289
|
+
runtimeHelper(RuntimeHelperStringToBytes, "stringToBytes", RuntimeHelperCategorySlice),
|
|
290
|
+
runtimeHelper(RuntimeHelperBytesToString, "bytesToString", RuntimeHelperCategorySlice),
|
|
291
|
+
runtimeHelper(RuntimeHelperGenericBytesOrStringToString, "genericBytesOrStringToString", RuntimeHelperCategorySlice),
|
|
292
|
+
runtimeHelper(RuntimeHelperIndexStringOrBytes, "indexStringOrBytes", RuntimeHelperCategorySlice),
|
|
293
|
+
runtimeHelper(RuntimeHelperSliceStringOrBytes, "sliceStringOrBytes", RuntimeHelperCategorySlice),
|
|
294
|
+
runtimeHelper(RuntimeHelperIndexRef, "indexRef", RuntimeHelperCategorySlice),
|
|
295
|
+
runtimeHelper(RuntimeHelperIndexAddress, "indexAddress", RuntimeHelperCategorySlice),
|
|
296
|
+
runtimeHelper(RuntimeHelperMakeMap, "makeMap", RuntimeHelperCategoryMap),
|
|
297
|
+
runtimeHelper(RuntimeHelperMapGet, "mapGet", RuntimeHelperCategoryMap),
|
|
298
|
+
runtimeHelper(RuntimeHelperMapSet, "mapSet", RuntimeHelperCategoryMap),
|
|
299
|
+
runtimeHelper(RuntimeHelperMapHas, "mapHas", RuntimeHelperCategoryMap),
|
|
300
|
+
runtimeHelper(RuntimeHelperDeleteMapEntry, "deleteMapEntry", RuntimeHelperCategoryMap),
|
|
301
|
+
runtimeHelper(RuntimeHelperNewError, "newError", RuntimeHelperCategoryError),
|
|
302
|
+
runtimeHelper(RuntimeHelperToGoError, "toGoError", RuntimeHelperCategoryError),
|
|
303
|
+
runtimeHelper(RuntimeHelperWrapPrimitiveError, "wrapPrimitiveError", RuntimeHelperCategoryError),
|
|
304
|
+
runtimeHelper(RuntimeHelperTypeKind, "TypeKind", RuntimeHelperCategoryType),
|
|
305
|
+
runtimeHelper(RuntimeHelperRegisterStructType, "registerStructType", RuntimeHelperCategoryType),
|
|
306
|
+
runtimeHelper(RuntimeHelperRegisterInterfaceType, "registerInterfaceType", RuntimeHelperCategoryType),
|
|
307
|
+
runtimeHelper(RuntimeHelperGetTypeByName, "getTypeByName", RuntimeHelperCategoryType),
|
|
308
|
+
runtimeHelper(RuntimeHelperTypeAssert, "typeAssert", RuntimeHelperCategoryType),
|
|
309
|
+
runtimeHelper(RuntimeHelperTypeAssertTuple, "typeAssertTuple", RuntimeHelperCategoryType),
|
|
310
|
+
runtimeHelper(RuntimeHelperMustTypeAssert, "mustTypeAssert", RuntimeHelperCategoryType),
|
|
311
|
+
runtimeHelper(RuntimeHelperIs, "is", RuntimeHelperCategoryType),
|
|
312
|
+
runtimeHelper(RuntimeHelperTypeSwitch, "typeSwitch", RuntimeHelperCategoryType),
|
|
313
|
+
runtimeHelper(RuntimeHelperTypedNil, "typedNil", RuntimeHelperCategoryType),
|
|
314
|
+
runtimeHelper(RuntimeHelperInterfaceValue, "interfaceValue", RuntimeHelperCategoryType),
|
|
315
|
+
runtimeHelper(RuntimeHelperNamedValueInterfaceValue, "namedValueInterfaceValue", RuntimeHelperCategoryType),
|
|
316
|
+
runtimeHelper(RuntimeHelperFunctionValue, "functionValue", RuntimeHelperCategoryType),
|
|
317
|
+
runtimeHelper(RuntimeHelperNamedFunction, "namedFunction", RuntimeHelperCategoryType),
|
|
318
|
+
runtimeHelper(RuntimeHelperGenericZero, "genericZero", RuntimeHelperCategoryType),
|
|
319
|
+
runtimeHelper(RuntimeHelperCallGenericMethod, "callGenericMethod", RuntimeHelperCategoryType),
|
|
320
|
+
runtimeHelper(RuntimeHelperMakeChannel, "makeChannel", RuntimeHelperCategoryChannel),
|
|
321
|
+
runtimeHelper(RuntimeHelperMakeChannelRef, "makeChannelRef", RuntimeHelperCategoryChannel),
|
|
322
|
+
runtimeHelper(RuntimeHelperChanSend, "chanSend", RuntimeHelperCategoryChannel),
|
|
323
|
+
runtimeHelper(RuntimeHelperChanRecv, "chanRecv", RuntimeHelperCategoryChannel),
|
|
324
|
+
runtimeHelper(RuntimeHelperChanRecvWithOk, "chanRecvWithOk", RuntimeHelperCategoryChannel),
|
|
325
|
+
runtimeHelper(RuntimeHelperSelectStatement, "selectStatement", RuntimeHelperCategoryChannel),
|
|
326
|
+
runtimeHelper(RuntimeHelperDisposableStack, "DisposableStack", RuntimeHelperCategoryDefer),
|
|
327
|
+
runtimeHelper(RuntimeHelperAsyncDisposableStack, "AsyncDisposableStack", RuntimeHelperCategoryDefer),
|
|
328
|
+
runtimeHelper(RuntimeHelperGetHostRuntime, "getHostRuntime", RuntimeHelperCategoryHost),
|
|
329
|
+
runtimeHelper(RuntimeHelperWriteHostStdoutText, "writeHostStdoutText", RuntimeHelperCategoryHost),
|
|
330
|
+
runtimeHelper(RuntimeHelperWriteHostStderrText, "writeHostStderrText", RuntimeHelperCategoryHost),
|
|
331
|
+
runtimeHelper(RuntimeHelperIsMainScript, "isMainScript", RuntimeHelperCategoryHost),
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
func runtimeHelper(
|
|
336
|
+
helper RuntimeHelper,
|
|
337
|
+
export string,
|
|
338
|
+
category RuntimeHelperCategory,
|
|
339
|
+
) RuntimeHelperContract {
|
|
340
|
+
return RuntimeHelperContract{
|
|
341
|
+
Helper: helper,
|
|
342
|
+
Export: export,
|
|
343
|
+
Category: category,
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
func scanBuiltinRuntimeExports() (map[string]bool, error) {
|
|
348
|
+
index, err := gs.GsOverrides.ReadFile("gs/builtin/index.ts")
|
|
349
|
+
if err != nil {
|
|
350
|
+
return nil, err
|
|
351
|
+
}
|
|
352
|
+
exports := make(map[string]bool)
|
|
353
|
+
for _, module := range builtinReexportModules(string(index)) {
|
|
354
|
+
data, err := gs.GsOverrides.ReadFile("gs/builtin/" + module + ".ts")
|
|
355
|
+
if err != nil {
|
|
356
|
+
return nil, errors.Wrapf(err, "read builtin export module %s", module)
|
|
357
|
+
}
|
|
358
|
+
for _, name := range sourceExportNames(string(data)) {
|
|
359
|
+
exports[name] = true
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return exports, nil
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
func builtinReexportModules(index string) []string {
|
|
366
|
+
var modules []string
|
|
367
|
+
for line := range strings.SplitSeq(index, "\n") {
|
|
368
|
+
line = strings.TrimSpace(line)
|
|
369
|
+
if !strings.HasPrefix(line, "export * from ") {
|
|
370
|
+
continue
|
|
371
|
+
}
|
|
372
|
+
module := quotedModulePath(line)
|
|
373
|
+
module = strings.TrimPrefix(module, "./")
|
|
374
|
+
module = strings.TrimSuffix(module, ".js")
|
|
375
|
+
if module != "" {
|
|
376
|
+
modules = append(modules, module)
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
slices.Sort(modules)
|
|
380
|
+
return modules
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
func quotedModulePath(line string) string {
|
|
384
|
+
for _, quote := range []string{"'", "\""} {
|
|
385
|
+
_, remaining, ok := strings.Cut(line, quote)
|
|
386
|
+
if !ok {
|
|
387
|
+
continue
|
|
388
|
+
}
|
|
389
|
+
module, _, ok := strings.Cut(remaining, quote)
|
|
390
|
+
if ok {
|
|
391
|
+
return module
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return ""
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
func sourceExportNames(data string) []string {
|
|
398
|
+
names := make(map[string]bool)
|
|
399
|
+
for line := range strings.SplitSeq(data, "\n") {
|
|
400
|
+
line = strings.TrimSpace(line)
|
|
401
|
+
for _, prefix := range []string{
|
|
402
|
+
"export async function ",
|
|
403
|
+
"export function ",
|
|
404
|
+
"export const ",
|
|
405
|
+
"export class ",
|
|
406
|
+
"export enum ",
|
|
407
|
+
"export type ",
|
|
408
|
+
"export interface ",
|
|
409
|
+
} {
|
|
410
|
+
if !strings.HasPrefix(line, prefix) {
|
|
411
|
+
continue
|
|
412
|
+
}
|
|
413
|
+
name := exportNameAfterPrefix(line, prefix)
|
|
414
|
+
if name != "" {
|
|
415
|
+
names[name] = true
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
result := make([]string, 0, len(names))
|
|
420
|
+
for name := range names {
|
|
421
|
+
result = append(result, name)
|
|
422
|
+
}
|
|
423
|
+
slices.Sort(result)
|
|
424
|
+
return result
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
func exportNameAfterPrefix(line, prefix string) string {
|
|
428
|
+
remaining := strings.TrimSpace(strings.TrimPrefix(line, prefix))
|
|
429
|
+
for idx, char := range remaining {
|
|
430
|
+
if char == '_' || char == '$' ||
|
|
431
|
+
(char >= 'a' && char <= 'z') ||
|
|
432
|
+
(char >= 'A' && char <= 'Z') ||
|
|
433
|
+
(idx > 0 && char >= '0' && char <= '9') {
|
|
434
|
+
continue
|
|
435
|
+
}
|
|
436
|
+
return remaining[:idx]
|
|
437
|
+
}
|
|
438
|
+
return remaining
|
|
439
|
+
}
|