goscript 0.1.0 → 0.1.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/README.md +267 -255
- package/cmd/goscript/cmd-test.go +286 -0
- package/cmd/goscript/cmd-test_test.go +76 -0
- package/cmd/goscript/cmd_compile.go +9 -0
- package/cmd/goscript/main.go +1 -0
- package/compiler/build-flags.go +38 -0
- package/compiler/compile-request.go +33 -0
- package/compiler/compiler.go +1 -1
- package/compiler/compliance_test.go +0 -10
- package/compiler/config.go +2 -0
- package/compiler/gotest/owner.go +24 -0
- package/compiler/gotest/package-result.go +69 -0
- package/compiler/gotest/request.go +210 -0
- package/compiler/gotest/result.go +28 -0
- package/compiler/gotest/runner.go +1225 -0
- package/compiler/gotest/runner_test.go +1271 -0
- package/compiler/gotest/test.go +9 -0
- package/compiler/index.test.ts +1 -1
- package/compiler/lowered-program.go +80 -21
- package/compiler/lowering.go +6754 -602
- package/compiler/override-facts.go +357 -0
- package/compiler/override-registry.go +52 -190
- package/compiler/override-registry_test.go +182 -0
- package/compiler/package-graph.go +50 -27
- package/compiler/package-graph_test.go +99 -9
- package/compiler/package-test-function.go +9 -0
- package/compiler/package-test-graph-package.go +40 -0
- package/compiler/package-test-graph-variant.go +129 -0
- package/compiler/package-test-graph.go +112 -0
- package/compiler/package-test-graph_test.go +202 -0
- package/compiler/runtime-contract.go +229 -29
- package/compiler/runtime-contract_test.go +44 -30
- package/compiler/semantic-model-types.go +25 -6
- package/compiler/semantic-model.go +819 -74
- package/compiler/semantic-model_test.go +104 -0
- package/compiler/service.go +10 -4
- package/compiler/skeleton_test.go +2777 -524
- package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
- package/compiler/tsworkspace/owner.go +342 -0
- package/compiler/tsworkspace/owner_test.go +93 -0
- package/compiler/tsworkspace/result.go +17 -0
- package/compiler/tsworkspace/tool-process-other.go +14 -0
- package/compiler/tsworkspace/tool-process-unix.go +19 -0
- package/compiler/typescript-emitter.go +576 -86
- package/compiler/wasm/compile.go +1 -1
- package/compiler/wasm/compile_test.go +61 -11
- package/compiler/wasm_api.go +172 -7
- package/dist/gs/builtin/builtin.d.ts +40 -3
- package/dist/gs/builtin/builtin.js +430 -22
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +32 -10
- package/dist/gs/builtin/channel.js +119 -25
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/defer.d.ts +1 -0
- package/dist/gs/builtin/defer.js +12 -2
- package/dist/gs/builtin/defer.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +9 -0
- package/dist/gs/builtin/hostio.js +25 -0
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/map.js +40 -6
- package/dist/gs/builtin/map.js.map +1 -1
- package/dist/gs/builtin/print.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +64 -10
- package/dist/gs/builtin/slice.js +619 -244
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +7 -2
- package/dist/gs/builtin/type.js +128 -29
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +7 -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 +74 -70
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/iter.gs.js +13 -13
- package/dist/gs/bytes/iter.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/compress/zlib/index.d.ts +26 -0
- package/dist/gs/compress/zlib/index.js +168 -0
- package/dist/gs/compress/zlib/index.js.map +1 -0
- package/dist/gs/context/context.d.ts +6 -5
- package/dist/gs/context/context.js +17 -12
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/crypto/ecdh/index.d.ts +52 -0
- package/dist/gs/crypto/ecdh/index.js +226 -0
- package/dist/gs/crypto/ecdh/index.js.map +1 -0
- package/dist/gs/crypto/ed25519/index.d.ts +34 -0
- package/dist/gs/crypto/ed25519/index.js +160 -0
- package/dist/gs/crypto/ed25519/index.js.map +1 -0
- package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
- package/dist/gs/crypto/internal/constanttime/index.js +18 -0
- package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
- 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 +2 -0
- package/dist/gs/crypto/rand/index.js +85 -0
- package/dist/gs/crypto/rand/index.js.map +1 -1
- package/dist/gs/crypto/sha256/index.d.ts +8 -0
- package/dist/gs/crypto/sha256/index.js +118 -0
- package/dist/gs/crypto/sha256/index.js.map +1 -0
- package/dist/gs/crypto/sha512/index.d.ts +14 -0
- package/dist/gs/crypto/sha512/index.js +129 -0
- package/dist/gs/crypto/sha512/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 +33 -0
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/errors/errors.d.ts +4 -0
- package/dist/gs/errors/errors.js +108 -4
- 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 +37 -2
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +245 -1
- 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 +861 -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 +217 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +814 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
- package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
- package/dist/gs/github.com/aperturerobotics/util/conc/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/hack-pad/safejs/internal/catch/index.d.ts +3 -0
- package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
- package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
- 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 +72 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
- package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
- package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
- package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
- 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 +13 -0
- package/dist/gs/go/scanner/index.js +35 -0
- package/dist/gs/go/scanner/index.js.map +1 -1
- package/dist/gs/go/token/index.d.ts +156 -0
- package/dist/gs/go/token/index.js +507 -4
- package/dist/gs/go/token/index.js.map +1 -1
- package/dist/gs/hash/fnv/index.d.ts +57 -0
- package/dist/gs/hash/fnv/index.js +299 -0
- package/dist/gs/hash/fnv/index.js.map +1 -0
- package/dist/gs/hash/index.d.ts +17 -0
- package/dist/gs/hash/index.js +94 -0
- package/dist/gs/hash/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/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/readlink.d.ts +8 -0
- package/dist/gs/io/fs/readlink.js +60 -0
- package/dist/gs/io/fs/readlink.js.map +1 -0
- 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/iter/iter.d.ts +3 -2
- package/dist/gs/iter/iter.js.map +1 -1
- package/dist/gs/maps/iter.d.ts +5 -5
- package/dist/gs/maps/iter.js +48 -21
- package/dist/gs/maps/iter.js.map +1 -1
- package/dist/gs/maps/maps.d.ts +6 -6
- 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 +70 -48
- 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 +52 -0
- package/dist/gs/mime/index.js.map +1 -0
- package/dist/gs/net/http/httptest/index.d.ts +30 -0
- package/dist/gs/net/http/httptest/index.js +101 -0
- package/dist/gs/net/http/httptest/index.js.map +1 -0
- package/dist/gs/net/http/index.d.ts +131 -0
- package/dist/gs/net/http/index.js +307 -0
- package/dist/gs/net/http/index.js.map +1 -0
- package/dist/gs/net/http/pprof/index.d.ts +8 -0
- package/dist/gs/net/http/pprof/index.js +59 -0
- package/dist/gs/net/http/pprof/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 +9 -7
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +95 -15
- package/dist/gs/os/types_js.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 +8 -4
- package/dist/gs/path/filepath/path.js +192 -8
- package/dist/gs/path/filepath/path.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 +4 -3
- package/dist/gs/reflect/index.js +3 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/iter.js +2 -2
- package/dist/gs/reflect/iter.js.map +1 -1
- package/dist/gs/reflect/map.js +29 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +31 -9
- package/dist/gs/reflect/type.js +536 -43
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +1 -0
- package/dist/gs/reflect/types.js +3 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.d.ts +4 -1
- package/dist/gs/reflect/value.js +39 -1
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +1 -1
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/debug/index.d.ts +41 -0
- package/dist/gs/runtime/debug/index.js +66 -0
- package/dist/gs/runtime/debug/index.js.map +1 -0
- package/dist/gs/runtime/pprof/index.d.ts +20 -0
- package/dist/gs/runtime/pprof/index.js +85 -0
- package/dist/gs/runtime/pprof/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/runtime/trace/index.d.ts +19 -0
- package/dist/gs/runtime/trace/index.js +64 -0
- package/dist/gs/runtime/trace/index.js.map +1 -0
- package/dist/gs/slices/slices.d.ts +42 -8
- package/dist/gs/slices/slices.js +425 -11
- package/dist/gs/slices/slices.js.map +1 -1
- package/dist/gs/sort/slice.gs.d.ts +5 -3
- package/dist/gs/sort/slice.gs.js +60 -22
- 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/strings/builder.d.ts +1 -1
- package/dist/gs/strings/builder.js +29 -19
- package/dist/gs/strings/builder.js.map +1 -1
- package/dist/gs/strings/iter.js +140 -75
- package/dist/gs/strings/iter.js.map +1 -1
- package/dist/gs/strings/replace.js +2 -2
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/strings/strings.js +52 -6
- package/dist/gs/strings/strings.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/sync.d.ts +8 -3
- package/dist/gs/sync/sync.js +66 -11
- 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 +117 -111
- package/dist/gs/syscall/errors.js +45 -0
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +37 -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 +383 -0
- package/dist/gs/syscall/js/index.js.map +1 -0
- package/dist/gs/syscall/types.d.ts +26 -1
- 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 +78 -0
- package/dist/gs/testing/testing.js +318 -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 +227 -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 +76 -0
- package/dist/gs/unique/index.js.map +1 -0
- package/go.mod +8 -8
- package/go.sum +14 -14
- package/gs/builtin/builtin.ts +585 -27
- package/gs/builtin/channel.ts +183 -29
- package/gs/builtin/defer.ts +13 -2
- package/gs/builtin/hostio.test.ts +1 -0
- package/gs/builtin/hostio.ts +38 -0
- package/gs/builtin/map.ts +46 -6
- package/gs/builtin/print.ts +12 -3
- package/gs/builtin/runtime-contract.test.ts +383 -10
- package/gs/builtin/slice.test.ts +70 -0
- package/gs/builtin/slice.ts +785 -265
- package/gs/builtin/type.ts +160 -41
- package/gs/builtin/varRef.ts +40 -1
- package/gs/bytes/buffer.gs.ts +74 -70
- package/gs/bytes/iter.gs.ts +13 -14
- package/gs/bytes/meta.json +8 -3
- package/gs/bytes/reader.gs.ts +20 -19
- package/gs/compress/zlib/index.test.ts +28 -0
- package/gs/compress/zlib/index.ts +200 -0
- package/gs/compress/zlib/meta.json +3 -0
- package/gs/context/context.test.ts +71 -0
- package/gs/context/context.ts +30 -29
- package/gs/crypto/ecdh/index.test.ts +43 -0
- package/gs/crypto/ecdh/index.ts +274 -0
- package/gs/crypto/ed25519/index.test.ts +41 -0
- package/gs/crypto/ed25519/index.ts +238 -0
- package/gs/crypto/ed25519/meta.json +13 -0
- package/gs/crypto/internal/constanttime/index.test.ts +25 -0
- package/gs/crypto/internal/constanttime/index.ts +22 -0
- 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 +89 -1
- package/gs/crypto/rand/index.ts +103 -1
- package/gs/crypto/rand/meta.json +4 -1
- package/gs/crypto/sha256/index.test.ts +78 -0
- package/gs/crypto/sha256/index.ts +150 -0
- package/gs/crypto/sha256/meta.json +9 -0
- package/gs/crypto/sha512/index.test.ts +31 -0
- package/gs/crypto/sha512/index.ts +161 -0
- package/gs/crypto/sha512/meta.json +11 -0
- package/gs/embed/index.ts +20 -0
- package/gs/embed/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +39 -3
- package/gs/encoding/json/index.ts +45 -3
- package/gs/errors/errors.test.ts +85 -0
- package/gs/errors/errors.ts +132 -4
- package/gs/fmt/fmt.test.ts +3 -1
- package/gs/fmt/fmt.ts +55 -19
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +128 -1
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +342 -4
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +180 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1084 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +1233 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +46 -0
- package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
- package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
- package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
- package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
- package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
- package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
- package/gs/github.com/klauspost/compress/internal/le/index.test.ts +37 -0
- package/gs/github.com/klauspost/compress/internal/le/index.ts +115 -0
- package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
- package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
- package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
- package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
- package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -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 +22 -0
- package/gs/go/scanner/index.ts +47 -0
- package/gs/go/token/index.test.ts +47 -1
- package/gs/go/token/index.ts +583 -4
- package/gs/hash/fnv/index.test.ts +67 -0
- package/gs/hash/fnv/index.ts +351 -0
- package/gs/hash/fnv/meta.json +3 -0
- package/gs/hash/index.test.ts +37 -0
- package/gs/hash/index.ts +118 -0
- package/gs/hash/meta.json +5 -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 +69 -0
- package/gs/io/fs/walk.test.ts +61 -0
- package/gs/io/fs/walk.ts +17 -9
- package/gs/io/io.ts +177 -31
- package/gs/io/meta.json +10 -2
- package/gs/iter/iter.ts +8 -2
- package/gs/maps/iter.ts +75 -26
- package/gs/maps/maps.test.ts +23 -0
- package/gs/maps/maps.ts +13 -11
- package/gs/math/bits/index.test.ts +20 -0
- package/gs/math/bits/index.ts +107 -64
- package/gs/math/const.gs.test.ts +11 -5
- package/gs/math/const.gs.ts +5 -6
- package/gs/mime/index.ts +60 -0
- package/gs/net/http/httptest/index.test.ts +53 -0
- package/gs/net/http/httptest/index.ts +120 -0
- package/gs/net/http/index.test.ts +148 -0
- package/gs/net/http/index.ts +432 -0
- package/gs/net/http/meta.json +6 -0
- package/gs/net/http/pprof/index.test.ts +47 -0
- package/gs/net/http/pprof/index.ts +65 -0
- package/gs/os/dir_unix.gs.ts +2 -3
- package/gs/os/error.gs.ts +9 -10
- package/gs/os/error.test.ts +41 -0
- package/gs/os/file_unix_js.test.ts +55 -0
- package/gs/os/tempfile.gs.test.ts +37 -10
- package/gs/os/types_js.gs.ts +96 -17
- package/gs/path/filepath/match.test.ts +31 -12
- package/gs/path/filepath/match.ts +181 -3
- package/gs/path/filepath/meta.json +6 -0
- package/gs/path/filepath/path.test.ts +80 -0
- package/gs/path/filepath/path.ts +244 -11
- package/gs/path/path.ts +20 -5
- package/gs/reflect/field.test.ts +63 -0
- package/gs/reflect/index.ts +5 -1
- package/gs/reflect/iter.ts +2 -2
- package/gs/reflect/map.test.ts +42 -1
- package/gs/reflect/map.ts +39 -0
- package/gs/reflect/type.ts +728 -65
- package/gs/reflect/typefor.test.ts +100 -0
- package/gs/reflect/types.ts +3 -1
- package/gs/reflect/value.ts +50 -1
- package/gs/reflect/visiblefields.ts +1 -1
- package/gs/runtime/debug/index.test.ts +45 -0
- package/gs/runtime/debug/index.ts +96 -0
- package/gs/runtime/pprof/index.test.ts +36 -0
- package/gs/runtime/pprof/index.ts +104 -0
- package/gs/runtime/pprof/meta.json +6 -0
- package/gs/runtime/runtime.test.ts +19 -0
- package/gs/runtime/runtime.ts +98 -3
- package/gs/runtime/trace/index.test.ts +45 -0
- package/gs/runtime/trace/index.ts +97 -0
- package/gs/runtime/trace/meta.json +7 -0
- package/gs/slices/meta.json +2 -1
- package/gs/slices/slices.test.ts +180 -0
- package/gs/slices/slices.ts +502 -15
- package/gs/sort/meta.json +7 -0
- package/gs/sort/slice.gs.ts +85 -26
- package/gs/sort/slice.test.ts +40 -0
- package/gs/sort/sort.gs.ts +16 -13
- package/gs/strings/builder.test.ts +8 -0
- package/gs/strings/builder.ts +33 -20
- package/gs/strings/iter.test.ts +5 -7
- package/gs/strings/iter.ts +146 -71
- package/gs/strings/replace.test.ts +1 -4
- package/gs/strings/replace.ts +6 -6
- package/gs/strings/strings.test.ts +4 -0
- package/gs/strings/strings.ts +54 -6
- package/gs/sync/atomic/type.gs.ts +13 -14
- package/gs/sync/meta.json +3 -1
- package/gs/sync/sync.test.ts +69 -1
- package/gs/sync/sync.ts +72 -13
- package/gs/syscall/constants.ts +39 -24
- package/gs/syscall/errors.ts +165 -112
- package/gs/syscall/fs.ts +195 -0
- package/gs/syscall/js/index.ts +485 -0
- package/gs/syscall/js/meta.json +4 -0
- package/gs/syscall/net.test.ts +111 -0
- package/gs/syscall/types.ts +63 -2
- package/gs/testing/index.ts +1 -0
- package/gs/testing/meta.json +5 -0
- package/gs/testing/testing.test.ts +146 -0
- package/gs/testing/testing.ts +399 -0
- package/gs/time/meta.json +2 -2
- package/gs/time/time.test.ts +110 -0
- package/gs/time/time.ts +309 -57
- package/gs/unicode/unicode.test.ts +36 -0
- package/gs/unicode/unicode.ts +115 -9
- package/gs/unicode/utf8/utf8.test.ts +13 -0
- package/gs/unicode/utf8/utf8.ts +28 -16
- package/gs/unique/index.ts +98 -0
- package/package.json +3 -2
|
@@ -3,6 +3,10 @@ package compiler
|
|
|
3
3
|
import (
|
|
4
4
|
"cmp"
|
|
5
5
|
"slices"
|
|
6
|
+
"strings"
|
|
7
|
+
|
|
8
|
+
gs "github.com/aperturerobotics/goscript"
|
|
9
|
+
"github.com/pkg/errors"
|
|
6
10
|
)
|
|
7
11
|
|
|
8
12
|
// RuntimeHelperCategory names a runtime helper family owned by the contract.
|
|
@@ -25,40 +29,82 @@ const (
|
|
|
25
29
|
type RuntimeHelper string
|
|
26
30
|
|
|
27
31
|
const (
|
|
28
|
-
RuntimeHelperPrintln
|
|
29
|
-
RuntimeHelperPrint
|
|
30
|
-
RuntimeHelperInt
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
+
RuntimeHelperInt64Shl RuntimeHelper = "builtin.int64Shl"
|
|
50
|
+
RuntimeHelperInt64Shr RuntimeHelper = "builtin.int64Shr"
|
|
51
|
+
RuntimeHelperUintShr RuntimeHelper = "builtin.uintShr"
|
|
52
|
+
RuntimeHelperUint64Div RuntimeHelper = "builtin.uint64Div"
|
|
53
|
+
RuntimeHelperUint64Mod RuntimeHelper = "builtin.uint64Mod"
|
|
54
|
+
RuntimeHelperUint64Mul RuntimeHelper = "builtin.uint64Mul"
|
|
55
|
+
RuntimeHelperUint64Add RuntimeHelper = "builtin.uint64Add"
|
|
56
|
+
RuntimeHelperUint64Sub RuntimeHelper = "builtin.uint64Sub"
|
|
57
|
+
RuntimeHelperUint64And RuntimeHelper = "builtin.uint64And"
|
|
58
|
+
RuntimeHelperUint64Or RuntimeHelper = "builtin.uint64Or"
|
|
59
|
+
RuntimeHelperUint64Xor RuntimeHelper = "builtin.uint64Xor"
|
|
60
|
+
RuntimeHelperInt64Div RuntimeHelper = "builtin.int64Div"
|
|
61
|
+
RuntimeHelperInt64Mod RuntimeHelper = "builtin.int64Mod"
|
|
62
|
+
RuntimeHelperInt64Mul RuntimeHelper = "builtin.int64Mul"
|
|
63
|
+
RuntimeHelperInt64Add RuntimeHelper = "builtin.int64Add"
|
|
64
|
+
RuntimeHelperInt64Sub RuntimeHelper = "builtin.int64Sub"
|
|
65
|
+
RuntimeHelperInt64And RuntimeHelper = "builtin.int64And"
|
|
66
|
+
RuntimeHelperInt64Or RuntimeHelper = "builtin.int64Or"
|
|
67
|
+
RuntimeHelperInt64Xor RuntimeHelper = "builtin.int64Xor"
|
|
39
68
|
|
|
40
69
|
RuntimeHelperAssignStruct RuntimeHelper = "value.assignStruct"
|
|
41
70
|
RuntimeHelperMarkAsStructValue RuntimeHelper = "value.markAsStructValue"
|
|
71
|
+
RuntimeHelperCloneStructValue RuntimeHelper = "value.cloneStructValue"
|
|
72
|
+
RuntimeHelperCloneArrayValue RuntimeHelper = "value.cloneArrayValue"
|
|
42
73
|
RuntimeHelperPointerValue RuntimeHelper = "value.pointerValue"
|
|
74
|
+
RuntimeHelperPointerValueOrNil RuntimeHelper = "value.pointerValueOrNil"
|
|
75
|
+
RuntimeHelperArrayEqual RuntimeHelper = "value.arrayEqual"
|
|
76
|
+
RuntimeHelperComparableEqual RuntimeHelper = "value.comparableEqual"
|
|
43
77
|
|
|
44
|
-
RuntimeHelperVarRef
|
|
45
|
-
|
|
46
|
-
|
|
78
|
+
RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
|
|
79
|
+
RuntimeHelperFieldRef RuntimeHelper = "varref.fieldRef"
|
|
80
|
+
RuntimeHelperUnref RuntimeHelper = "varref.unref"
|
|
81
|
+
RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
|
|
82
|
+
RuntimeHelperUnsupportedPointerRef RuntimeHelper = "varref.unsupportedPointerRef"
|
|
47
83
|
|
|
48
84
|
RuntimeHelperMakeSlice RuntimeHelper = "slice.makeSlice"
|
|
49
85
|
RuntimeHelperGoSlice RuntimeHelper = "slice.goSlice"
|
|
50
86
|
RuntimeHelperArrayToSlice RuntimeHelper = "slice.arrayToSlice"
|
|
87
|
+
RuntimeHelperArrayPointerFromIndexRef RuntimeHelper = "slice.arrayPointerFromIndexRef"
|
|
88
|
+
RuntimeHelperSliceToArray RuntimeHelper = "slice.sliceToArray"
|
|
89
|
+
RuntimeHelperSliceToArrayPointer RuntimeHelper = "slice.sliceToArrayPointer"
|
|
51
90
|
RuntimeHelperAppend RuntimeHelper = "slice.append"
|
|
52
91
|
RuntimeHelperCopy RuntimeHelper = "slice.copy"
|
|
53
92
|
RuntimeHelperAsArray RuntimeHelper = "slice.asArray"
|
|
54
93
|
RuntimeHelperStringToRunes RuntimeHelper = "slice.stringToRunes"
|
|
94
|
+
RuntimeHelperRangeString RuntimeHelper = "slice.rangeString"
|
|
55
95
|
RuntimeHelperStringToRune RuntimeHelper = "slice.stringToRune"
|
|
56
96
|
RuntimeHelperRunesToString RuntimeHelper = "slice.runesToString"
|
|
57
97
|
RuntimeHelperStringToBytes RuntimeHelper = "slice.stringToBytes"
|
|
58
98
|
RuntimeHelperBytesToString RuntimeHelper = "slice.bytesToString"
|
|
99
|
+
RuntimeHelperStringEqual RuntimeHelper = "slice.stringEqual"
|
|
100
|
+
RuntimeHelperStringCompare RuntimeHelper = "slice.stringCompare"
|
|
101
|
+
RuntimeHelperStringHeaderRef RuntimeHelper = "slice.stringHeaderRef"
|
|
102
|
+
RuntimeHelperSliceHeaderRef RuntimeHelper = "slice.sliceHeaderRef"
|
|
59
103
|
RuntimeHelperGenericBytesOrStringToString RuntimeHelper = "slice.genericBytesOrStringToString"
|
|
60
104
|
RuntimeHelperIndexStringOrBytes RuntimeHelper = "slice.indexStringOrBytes"
|
|
61
105
|
RuntimeHelperSliceStringOrBytes RuntimeHelper = "slice.sliceStringOrBytes"
|
|
106
|
+
RuntimeHelperIndexRef RuntimeHelper = "slice.indexRef"
|
|
107
|
+
RuntimeHelperIndexAddress RuntimeHelper = "slice.indexAddress"
|
|
62
108
|
|
|
63
109
|
RuntimeHelperMakeMap RuntimeHelper = "map.makeMap"
|
|
64
110
|
RuntimeHelperMapGet RuntimeHelper = "map.mapGet"
|
|
@@ -70,21 +116,22 @@ const (
|
|
|
70
116
|
RuntimeHelperToGoError RuntimeHelper = "error.toGoError"
|
|
71
117
|
RuntimeHelperWrapPrimitiveError RuntimeHelper = "error.wrapPrimitiveError"
|
|
72
118
|
|
|
73
|
-
RuntimeHelperTypeKind
|
|
74
|
-
RuntimeHelperRegisterStructType
|
|
75
|
-
RuntimeHelperRegisterInterfaceType
|
|
76
|
-
RuntimeHelperGetTypeByName
|
|
77
|
-
RuntimeHelperTypeAssert
|
|
78
|
-
RuntimeHelperTypeAssertTuple
|
|
79
|
-
RuntimeHelperMustTypeAssert
|
|
80
|
-
RuntimeHelperIs
|
|
81
|
-
RuntimeHelperTypeSwitch
|
|
82
|
-
RuntimeHelperTypedNil
|
|
83
|
-
RuntimeHelperInterfaceValue
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
119
|
+
RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
|
|
120
|
+
RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
|
|
121
|
+
RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
|
|
122
|
+
RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
|
|
123
|
+
RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
|
|
124
|
+
RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
|
|
125
|
+
RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
|
|
126
|
+
RuntimeHelperIs RuntimeHelper = "type.is"
|
|
127
|
+
RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
|
|
128
|
+
RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
|
|
129
|
+
RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
|
|
130
|
+
RuntimeHelperNamedValueInterfaceValue RuntimeHelper = "type.namedValueInterfaceValue"
|
|
131
|
+
RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
|
|
132
|
+
RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
|
|
133
|
+
RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
|
|
134
|
+
RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
|
|
88
135
|
|
|
89
136
|
RuntimeHelperMakeChannel RuntimeHelper = "channel.makeChannel"
|
|
90
137
|
RuntimeHelperMakeChannelRef RuntimeHelper = "channel.makeChannelRef"
|
|
@@ -185,6 +232,22 @@ func (o *RuntimeContractOwner) QualifiedHelper(helper RuntimeHelper) string {
|
|
|
185
232
|
return o.BuiltinImport().Alias + "." + name
|
|
186
233
|
}
|
|
187
234
|
|
|
235
|
+
// MissingRuntimeExports returns helper exports absent from the real runtime source.
|
|
236
|
+
func (o *RuntimeContractOwner) MissingRuntimeExports() ([]string, error) {
|
|
237
|
+
exports, err := scanBuiltinRuntimeExports()
|
|
238
|
+
if err != nil {
|
|
239
|
+
return nil, err
|
|
240
|
+
}
|
|
241
|
+
var missing []string
|
|
242
|
+
for _, helper := range o.Helpers() {
|
|
243
|
+
if !exports[helper.Export] {
|
|
244
|
+
missing = append(missing, helper.Export)
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
slices.Sort(missing)
|
|
248
|
+
return missing, nil
|
|
249
|
+
}
|
|
250
|
+
|
|
188
251
|
func compareRuntimeHelperContract(a RuntimeHelperContract, b RuntimeHelperContract) int {
|
|
189
252
|
if c := cmp.Compare(a.Category, b.Category); c != 0 {
|
|
190
253
|
return c
|
|
@@ -200,6 +263,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
|
|
|
200
263
|
runtimeHelper(RuntimeHelperPrintln, "println", RuntimeHelperCategoryBuiltin),
|
|
201
264
|
runtimeHelper(RuntimeHelperPrint, "print", RuntimeHelperCategoryBuiltin),
|
|
202
265
|
runtimeHelper(RuntimeHelperInt, "int", RuntimeHelperCategoryBuiltin),
|
|
266
|
+
runtimeHelper(RuntimeHelperUint, "uint", RuntimeHelperCategoryBuiltin),
|
|
203
267
|
runtimeHelper(RuntimeHelperByte, "byte", RuntimeHelperCategoryBuiltin),
|
|
204
268
|
runtimeHelper(RuntimeHelperLen, "len", RuntimeHelperCategoryBuiltin),
|
|
205
269
|
runtimeHelper(RuntimeHelperCap, "cap", RuntimeHelperCategoryBuiltin),
|
|
@@ -208,26 +272,67 @@ func runtimeHelperContracts() []RuntimeHelperContract {
|
|
|
208
272
|
runtimeHelper(RuntimeHelperRecover, "recover", RuntimeHelperCategoryBuiltin),
|
|
209
273
|
runtimeHelper(RuntimeHelperMin, "min", RuntimeHelperCategoryBuiltin),
|
|
210
274
|
runtimeHelper(RuntimeHelperMax, "max", RuntimeHelperCategoryBuiltin),
|
|
275
|
+
runtimeHelper(RuntimeHelperComplex, "complex", RuntimeHelperCategoryBuiltin),
|
|
276
|
+
runtimeHelper(RuntimeHelperReal, "real", RuntimeHelperCategoryBuiltin),
|
|
277
|
+
runtimeHelper(RuntimeHelperImag, "imag", RuntimeHelperCategoryBuiltin),
|
|
278
|
+
runtimeHelper(RuntimeHelperUint64Shl, "uint64Shl", RuntimeHelperCategoryBuiltin),
|
|
279
|
+
runtimeHelper(RuntimeHelperUint64Shr, "uint64Shr", RuntimeHelperCategoryBuiltin),
|
|
280
|
+
runtimeHelper(RuntimeHelperInt64Shl, "int64Shl", RuntimeHelperCategoryBuiltin),
|
|
281
|
+
runtimeHelper(RuntimeHelperInt64Shr, "int64Shr", RuntimeHelperCategoryBuiltin),
|
|
282
|
+
runtimeHelper(RuntimeHelperUintShr, "uintShr", RuntimeHelperCategoryBuiltin),
|
|
283
|
+
runtimeHelper(RuntimeHelperUint64Div, "uint64Div", RuntimeHelperCategoryBuiltin),
|
|
284
|
+
runtimeHelper(RuntimeHelperUint64Mod, "uint64Mod", RuntimeHelperCategoryBuiltin),
|
|
285
|
+
runtimeHelper(RuntimeHelperUint64Mul, "uint64Mul", RuntimeHelperCategoryBuiltin),
|
|
286
|
+
runtimeHelper(RuntimeHelperUint64Add, "uint64Add", RuntimeHelperCategoryBuiltin),
|
|
287
|
+
runtimeHelper(RuntimeHelperUint64Sub, "uint64Sub", RuntimeHelperCategoryBuiltin),
|
|
288
|
+
runtimeHelper(RuntimeHelperUint64And, "uint64And", RuntimeHelperCategoryBuiltin),
|
|
289
|
+
runtimeHelper(RuntimeHelperUint64Or, "uint64Or", RuntimeHelperCategoryBuiltin),
|
|
290
|
+
runtimeHelper(RuntimeHelperUint64Xor, "uint64Xor", RuntimeHelperCategoryBuiltin),
|
|
291
|
+
runtimeHelper(RuntimeHelperInt64Div, "int64Div", RuntimeHelperCategoryBuiltin),
|
|
292
|
+
runtimeHelper(RuntimeHelperInt64Mod, "int64Mod", RuntimeHelperCategoryBuiltin),
|
|
293
|
+
runtimeHelper(RuntimeHelperInt64Mul, "int64Mul", RuntimeHelperCategoryBuiltin),
|
|
294
|
+
runtimeHelper(RuntimeHelperInt64Add, "int64Add", RuntimeHelperCategoryBuiltin),
|
|
295
|
+
runtimeHelper(RuntimeHelperInt64Sub, "int64Sub", RuntimeHelperCategoryBuiltin),
|
|
296
|
+
runtimeHelper(RuntimeHelperInt64And, "int64And", RuntimeHelperCategoryBuiltin),
|
|
297
|
+
runtimeHelper(RuntimeHelperInt64Or, "int64Or", RuntimeHelperCategoryBuiltin),
|
|
298
|
+
runtimeHelper(RuntimeHelperInt64Xor, "int64Xor", RuntimeHelperCategoryBuiltin),
|
|
211
299
|
runtimeHelper(RuntimeHelperAssignStruct, "assignStruct", RuntimeHelperCategoryValue),
|
|
212
300
|
runtimeHelper(RuntimeHelperMarkAsStructValue, "markAsStructValue", RuntimeHelperCategoryValue),
|
|
301
|
+
runtimeHelper(RuntimeHelperCloneStructValue, "cloneStructValue", RuntimeHelperCategoryValue),
|
|
302
|
+
runtimeHelper(RuntimeHelperCloneArrayValue, "cloneArrayValue", RuntimeHelperCategoryValue),
|
|
213
303
|
runtimeHelper(RuntimeHelperPointerValue, "pointerValue", RuntimeHelperCategoryValue),
|
|
304
|
+
runtimeHelper(RuntimeHelperPointerValueOrNil, "pointerValueOrNil", RuntimeHelperCategoryValue),
|
|
305
|
+
runtimeHelper(RuntimeHelperArrayEqual, "arrayEqual", RuntimeHelperCategoryValue),
|
|
306
|
+
runtimeHelper(RuntimeHelperComparableEqual, "comparableEqual", RuntimeHelperCategoryValue),
|
|
214
307
|
runtimeHelper(RuntimeHelperVarRef, "varRef", RuntimeHelperCategoryVarRef),
|
|
308
|
+
runtimeHelper(RuntimeHelperFieldRef, "fieldRef", RuntimeHelperCategoryVarRef),
|
|
215
309
|
runtimeHelper(RuntimeHelperUnref, "unref", RuntimeHelperCategoryVarRef),
|
|
216
310
|
runtimeHelper(RuntimeHelperIsVarRef, "isVarRef", RuntimeHelperCategoryVarRef),
|
|
311
|
+
runtimeHelper(RuntimeHelperUnsupportedPointerRef, "unsupportedPointerRef", RuntimeHelperCategoryVarRef),
|
|
217
312
|
runtimeHelper(RuntimeHelperMakeSlice, "makeSlice", RuntimeHelperCategorySlice),
|
|
218
313
|
runtimeHelper(RuntimeHelperGoSlice, "goSlice", RuntimeHelperCategorySlice),
|
|
219
314
|
runtimeHelper(RuntimeHelperArrayToSlice, "arrayToSlice", RuntimeHelperCategorySlice),
|
|
315
|
+
runtimeHelper(RuntimeHelperArrayPointerFromIndexRef, "arrayPointerFromIndexRef", RuntimeHelperCategorySlice),
|
|
316
|
+
runtimeHelper(RuntimeHelperSliceToArray, "sliceToArray", RuntimeHelperCategorySlice),
|
|
317
|
+
runtimeHelper(RuntimeHelperSliceToArrayPointer, "sliceToArrayPointer", RuntimeHelperCategorySlice),
|
|
220
318
|
runtimeHelper(RuntimeHelperAppend, "append", RuntimeHelperCategorySlice),
|
|
221
319
|
runtimeHelper(RuntimeHelperCopy, "copy", RuntimeHelperCategorySlice),
|
|
222
320
|
runtimeHelper(RuntimeHelperAsArray, "asArray", RuntimeHelperCategorySlice),
|
|
223
321
|
runtimeHelper(RuntimeHelperStringToRunes, "stringToRunes", RuntimeHelperCategorySlice),
|
|
322
|
+
runtimeHelper(RuntimeHelperRangeString, "rangeString", RuntimeHelperCategorySlice),
|
|
224
323
|
runtimeHelper(RuntimeHelperStringToRune, "stringToRune", RuntimeHelperCategorySlice),
|
|
225
324
|
runtimeHelper(RuntimeHelperRunesToString, "runesToString", RuntimeHelperCategorySlice),
|
|
226
325
|
runtimeHelper(RuntimeHelperStringToBytes, "stringToBytes", RuntimeHelperCategorySlice),
|
|
227
326
|
runtimeHelper(RuntimeHelperBytesToString, "bytesToString", RuntimeHelperCategorySlice),
|
|
327
|
+
runtimeHelper(RuntimeHelperStringEqual, "stringEqual", RuntimeHelperCategorySlice),
|
|
328
|
+
runtimeHelper(RuntimeHelperStringCompare, "stringCompare", RuntimeHelperCategorySlice),
|
|
329
|
+
runtimeHelper(RuntimeHelperStringHeaderRef, "stringHeaderRef", RuntimeHelperCategorySlice),
|
|
330
|
+
runtimeHelper(RuntimeHelperSliceHeaderRef, "sliceHeaderRef", RuntimeHelperCategorySlice),
|
|
228
331
|
runtimeHelper(RuntimeHelperGenericBytesOrStringToString, "genericBytesOrStringToString", RuntimeHelperCategorySlice),
|
|
229
332
|
runtimeHelper(RuntimeHelperIndexStringOrBytes, "indexStringOrBytes", RuntimeHelperCategorySlice),
|
|
230
333
|
runtimeHelper(RuntimeHelperSliceStringOrBytes, "sliceStringOrBytes", RuntimeHelperCategorySlice),
|
|
334
|
+
runtimeHelper(RuntimeHelperIndexRef, "indexRef", RuntimeHelperCategorySlice),
|
|
335
|
+
runtimeHelper(RuntimeHelperIndexAddress, "indexAddress", RuntimeHelperCategorySlice),
|
|
231
336
|
runtimeHelper(RuntimeHelperMakeMap, "makeMap", RuntimeHelperCategoryMap),
|
|
232
337
|
runtimeHelper(RuntimeHelperMapGet, "mapGet", RuntimeHelperCategoryMap),
|
|
233
338
|
runtimeHelper(RuntimeHelperMapSet, "mapSet", RuntimeHelperCategoryMap),
|
|
@@ -247,6 +352,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
|
|
|
247
352
|
runtimeHelper(RuntimeHelperTypeSwitch, "typeSwitch", RuntimeHelperCategoryType),
|
|
248
353
|
runtimeHelper(RuntimeHelperTypedNil, "typedNil", RuntimeHelperCategoryType),
|
|
249
354
|
runtimeHelper(RuntimeHelperInterfaceValue, "interfaceValue", RuntimeHelperCategoryType),
|
|
355
|
+
runtimeHelper(RuntimeHelperNamedValueInterfaceValue, "namedValueInterfaceValue", RuntimeHelperCategoryType),
|
|
250
356
|
runtimeHelper(RuntimeHelperFunctionValue, "functionValue", RuntimeHelperCategoryType),
|
|
251
357
|
runtimeHelper(RuntimeHelperNamedFunction, "namedFunction", RuntimeHelperCategoryType),
|
|
252
358
|
runtimeHelper(RuntimeHelperGenericZero, "genericZero", RuntimeHelperCategoryType),
|
|
@@ -277,3 +383,97 @@ func runtimeHelper(
|
|
|
277
383
|
Category: category,
|
|
278
384
|
}
|
|
279
385
|
}
|
|
386
|
+
|
|
387
|
+
func scanBuiltinRuntimeExports() (map[string]bool, error) {
|
|
388
|
+
index, err := gs.GsOverrides.ReadFile("gs/builtin/index.ts")
|
|
389
|
+
if err != nil {
|
|
390
|
+
return nil, err
|
|
391
|
+
}
|
|
392
|
+
exports := make(map[string]bool)
|
|
393
|
+
for _, module := range builtinReexportModules(string(index)) {
|
|
394
|
+
data, err := gs.GsOverrides.ReadFile("gs/builtin/" + module + ".ts")
|
|
395
|
+
if err != nil {
|
|
396
|
+
return nil, errors.Wrapf(err, "read builtin export module %s", module)
|
|
397
|
+
}
|
|
398
|
+
for _, name := range sourceExportNames(string(data)) {
|
|
399
|
+
exports[name] = true
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return exports, nil
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
func builtinReexportModules(index string) []string {
|
|
406
|
+
var modules []string
|
|
407
|
+
for line := range strings.SplitSeq(index, "\n") {
|
|
408
|
+
line = strings.TrimSpace(line)
|
|
409
|
+
if !strings.HasPrefix(line, "export * from ") {
|
|
410
|
+
continue
|
|
411
|
+
}
|
|
412
|
+
module := quotedModulePath(line)
|
|
413
|
+
module = strings.TrimPrefix(module, "./")
|
|
414
|
+
module = strings.TrimSuffix(module, ".js")
|
|
415
|
+
if module != "" {
|
|
416
|
+
modules = append(modules, module)
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
slices.Sort(modules)
|
|
420
|
+
return modules
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
func quotedModulePath(line string) string {
|
|
424
|
+
for _, quote := range []string{"'", "\""} {
|
|
425
|
+
_, remaining, ok := strings.Cut(line, quote)
|
|
426
|
+
if !ok {
|
|
427
|
+
continue
|
|
428
|
+
}
|
|
429
|
+
module, _, ok := strings.Cut(remaining, quote)
|
|
430
|
+
if ok {
|
|
431
|
+
return module
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
return ""
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
func sourceExportNames(data string) []string {
|
|
438
|
+
names := make(map[string]bool)
|
|
439
|
+
for line := range strings.SplitSeq(data, "\n") {
|
|
440
|
+
line = strings.TrimSpace(line)
|
|
441
|
+
for _, prefix := range []string{
|
|
442
|
+
"export async function ",
|
|
443
|
+
"export function ",
|
|
444
|
+
"export const ",
|
|
445
|
+
"export class ",
|
|
446
|
+
"export enum ",
|
|
447
|
+
"export type ",
|
|
448
|
+
"export interface ",
|
|
449
|
+
} {
|
|
450
|
+
if !strings.HasPrefix(line, prefix) {
|
|
451
|
+
continue
|
|
452
|
+
}
|
|
453
|
+
name := exportNameAfterPrefix(line, prefix)
|
|
454
|
+
if name != "" {
|
|
455
|
+
names[name] = true
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
result := make([]string, 0, len(names))
|
|
460
|
+
for name := range names {
|
|
461
|
+
result = append(result, name)
|
|
462
|
+
}
|
|
463
|
+
slices.Sort(result)
|
|
464
|
+
return result
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
func exportNameAfterPrefix(line, prefix string) string {
|
|
468
|
+
remaining := strings.TrimSpace(strings.TrimPrefix(line, prefix))
|
|
469
|
+
for idx, char := range remaining {
|
|
470
|
+
if char == '_' || char == '$' ||
|
|
471
|
+
(char >= 'a' && char <= 'z') ||
|
|
472
|
+
(char >= 'A' && char <= 'Z') ||
|
|
473
|
+
(idx > 0 && char >= '0' && char <= '9') {
|
|
474
|
+
continue
|
|
475
|
+
}
|
|
476
|
+
return remaining[:idx]
|
|
477
|
+
}
|
|
478
|
+
return remaining
|
|
479
|
+
}
|
|
@@ -11,36 +11,40 @@ func TestRuntimeContractOwnsBuiltinImportAndHelpers(t *testing.T) {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
wantHelpers := map[RuntimeHelper]RuntimeHelperCategory{
|
|
14
|
-
RuntimeHelperPrintln:
|
|
15
|
-
RuntimeHelperPrint:
|
|
16
|
-
RuntimeHelperInt:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
14
|
+
RuntimeHelperPrintln: RuntimeHelperCategoryBuiltin,
|
|
15
|
+
RuntimeHelperPrint: RuntimeHelperCategoryBuiltin,
|
|
16
|
+
RuntimeHelperInt: RuntimeHelperCategoryBuiltin,
|
|
17
|
+
RuntimeHelperUint: RuntimeHelperCategoryBuiltin,
|
|
18
|
+
RuntimeHelperByte: RuntimeHelperCategoryBuiltin,
|
|
19
|
+
RuntimeHelperVarRef: RuntimeHelperCategoryVarRef,
|
|
20
|
+
RuntimeHelperUnref: RuntimeHelperCategoryVarRef,
|
|
21
|
+
RuntimeHelperUnsupportedPointerRef: RuntimeHelperCategoryVarRef,
|
|
22
|
+
RuntimeHelperAssignStruct: RuntimeHelperCategoryValue,
|
|
23
|
+
RuntimeHelperMarkAsStructValue: RuntimeHelperCategoryValue,
|
|
24
|
+
RuntimeHelperPointerValue: RuntimeHelperCategoryValue,
|
|
25
|
+
RuntimeHelperMakeSlice: RuntimeHelperCategorySlice,
|
|
26
|
+
RuntimeHelperAppend: RuntimeHelperCategorySlice,
|
|
27
|
+
RuntimeHelperIndexAddress: RuntimeHelperCategorySlice,
|
|
28
|
+
RuntimeHelperMakeMap: RuntimeHelperCategoryMap,
|
|
29
|
+
RuntimeHelperMapGet: RuntimeHelperCategoryMap,
|
|
30
|
+
RuntimeHelperNewError: RuntimeHelperCategoryError,
|
|
31
|
+
RuntimeHelperRegisterStructType: RuntimeHelperCategoryType,
|
|
32
|
+
RuntimeHelperTypeAssert: RuntimeHelperCategoryType,
|
|
33
|
+
RuntimeHelperTypedNil: RuntimeHelperCategoryType,
|
|
34
|
+
RuntimeHelperInterfaceValue: RuntimeHelperCategoryType,
|
|
35
|
+
RuntimeHelperNamedValueInterfaceValue: RuntimeHelperCategoryType,
|
|
36
|
+
RuntimeHelperFunctionValue: RuntimeHelperCategoryType,
|
|
37
|
+
RuntimeHelperNamedFunction: RuntimeHelperCategoryType,
|
|
38
|
+
RuntimeHelperGenericZero: RuntimeHelperCategoryType,
|
|
39
|
+
RuntimeHelperCallGenericMethod: RuntimeHelperCategoryType,
|
|
40
|
+
RuntimeHelperMakeChannel: RuntimeHelperCategoryChannel,
|
|
41
|
+
RuntimeHelperSelectStatement: RuntimeHelperCategoryChannel,
|
|
42
|
+
RuntimeHelperDisposableStack: RuntimeHelperCategoryDefer,
|
|
43
|
+
RuntimeHelperAsyncDisposableStack: RuntimeHelperCategoryDefer,
|
|
44
|
+
RuntimeHelperGetHostRuntime: RuntimeHelperCategoryHost,
|
|
45
|
+
RuntimeHelperWriteHostStdoutText: RuntimeHelperCategoryHost,
|
|
46
|
+
RuntimeHelperWriteHostStderrText: RuntimeHelperCategoryHost,
|
|
47
|
+
RuntimeHelperIsMainScript: RuntimeHelperCategoryHost,
|
|
44
48
|
}
|
|
45
49
|
for helper, category := range wantHelpers {
|
|
46
50
|
contract, ok := owner.Helper(helper)
|
|
@@ -88,3 +92,13 @@ func TestCompileServiceSharesRuntimeContractOwner(t *testing.T) {
|
|
|
88
92
|
t.Fatalf("qualified println helper = %q, want $.println", got)
|
|
89
93
|
}
|
|
90
94
|
}
|
|
95
|
+
|
|
96
|
+
func TestRuntimeContractHelpersAreExportedByBuiltinRuntime(t *testing.T) {
|
|
97
|
+
missing, err := NewRuntimeContractOwner().MissingRuntimeExports()
|
|
98
|
+
if err != nil {
|
|
99
|
+
t.Fatal(err.Error())
|
|
100
|
+
}
|
|
101
|
+
if len(missing) != 0 {
|
|
102
|
+
t.Fatalf("runtime helper exports missing from gs/builtin: %v", missing)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -12,6 +12,8 @@ type SemanticModel struct {
|
|
|
12
12
|
addressTaken map[types.Object]bool
|
|
13
13
|
needsVarRef map[types.Object]bool
|
|
14
14
|
functions map[*types.Func]*semanticFunction
|
|
15
|
+
functionsByFullName map[string]*semanticFunction
|
|
16
|
+
functionLookupMisses map[*types.Func]bool
|
|
15
17
|
types map[*types.Named]*semanticType
|
|
16
18
|
values map[types.Object]*semanticValue
|
|
17
19
|
generatedImports map[string]map[string]bool
|
|
@@ -64,12 +66,13 @@ type semanticField struct {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
type semanticValue struct {
|
|
67
|
-
name
|
|
68
|
-
object
|
|
69
|
-
typ
|
|
70
|
-
zeroValueKind
|
|
71
|
-
position
|
|
72
|
-
topLevel
|
|
69
|
+
name string
|
|
70
|
+
object types.Object
|
|
71
|
+
typ types.Type
|
|
72
|
+
zeroValueKind string
|
|
73
|
+
position sourcePosition
|
|
74
|
+
topLevel bool
|
|
75
|
+
asyncCompatibleFunction bool
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
type semanticFunction struct {
|
|
@@ -79,6 +82,7 @@ type semanticFunction struct {
|
|
|
79
82
|
receiver *types.Named
|
|
80
83
|
receiverPointer bool
|
|
81
84
|
position sourcePosition
|
|
85
|
+
hasBody bool
|
|
82
86
|
async bool
|
|
83
87
|
asyncReasons []string
|
|
84
88
|
calls map[*types.Func]bool
|
|
@@ -91,6 +95,21 @@ type semanticInterfaceImplementation struct {
|
|
|
91
95
|
asyncMethods map[string]bool
|
|
92
96
|
}
|
|
93
97
|
|
|
98
|
+
type semanticInterfaceImplementationGraphEntry struct {
|
|
99
|
+
typ *types.Named
|
|
100
|
+
iface *types.Named
|
|
101
|
+
pointer bool
|
|
102
|
+
ifaceMethods map[string]*types.Func
|
|
103
|
+
implMethods map[string]*types.Func
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
type semanticImplementationMethodSet struct {
|
|
107
|
+
typ *types.Named
|
|
108
|
+
receiver types.Type
|
|
109
|
+
pointer bool
|
|
110
|
+
methods map[string]*types.Func
|
|
111
|
+
}
|
|
112
|
+
|
|
94
113
|
type semanticTypeAssertion struct {
|
|
95
114
|
position sourcePosition
|
|
96
115
|
source types.Type
|