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
package/gs/strings/replace.ts
CHANGED
|
@@ -396,12 +396,12 @@ class trieNode {
|
|
|
396
396
|
// what is currently t.prefix[0] will lead to prefixNode, and
|
|
397
397
|
// looking up key[0] will lead to keyNode.
|
|
398
398
|
const prefixNode =
|
|
399
|
-
$.len(t!.prefix) == 1
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
399
|
+
$.len(t!.prefix) == 1 ?
|
|
400
|
+
t!.next
|
|
401
|
+
: new trieNode({
|
|
402
|
+
next: t!.next,
|
|
403
|
+
prefix: $.sliceString(t!.prefix, 1, undefined),
|
|
404
|
+
})
|
|
405
405
|
let keyNode = new trieNode()
|
|
406
406
|
t!.table = $.makeSlice<trieNode | null>(r!.tableSize)
|
|
407
407
|
t!.table![r!.mapping![$.indexString(t!.prefix, 0)]] = prefixNode
|
|
@@ -203,6 +203,7 @@ describe('strings', () => {
|
|
|
203
203
|
expect(Index('hello world', 'xyz')).toBe(-1)
|
|
204
204
|
expect(Index('hello', 'hello')).toBe(0)
|
|
205
205
|
expect(Index('', '')).toBe(0)
|
|
206
|
+
expect(Index('世界,你好', ',')).toBe(6)
|
|
206
207
|
})
|
|
207
208
|
})
|
|
208
209
|
|
|
@@ -219,6 +220,7 @@ describe('strings', () => {
|
|
|
219
220
|
expect(IndexByte('hello', 101)).toBe(1) // 'e'
|
|
220
221
|
expect(IndexByte('hello', 120)).toBe(-1) // 'x'
|
|
221
222
|
expect(IndexByte('', 97)).toBe(-1) // 'a'
|
|
223
|
+
expect(IndexByte('世界,你好', 44)).toBe(6)
|
|
222
224
|
})
|
|
223
225
|
})
|
|
224
226
|
|
|
@@ -257,6 +259,7 @@ describe('strings', () => {
|
|
|
257
259
|
expect(LastIndex('hello world hello', 'hello')).toBe(12)
|
|
258
260
|
expect(LastIndex('hello world', 'xyz')).toBe(-1)
|
|
259
261
|
expect(LastIndex('hello', 'hello')).toBe(0)
|
|
262
|
+
expect(LastIndex('世界,你好', '你好')).toBe(7)
|
|
260
263
|
})
|
|
261
264
|
})
|
|
262
265
|
|
|
@@ -273,6 +276,7 @@ describe('strings', () => {
|
|
|
273
276
|
expect(LastIndexByte('hello', 108)).toBe(3) // 'l'
|
|
274
277
|
expect(LastIndexByte('hello', 120)).toBe(-1) // 'x'
|
|
275
278
|
expect(LastIndexByte('', 97)).toBe(-1) // 'a'
|
|
279
|
+
expect(LastIndexByte('世界,你好', 44)).toBe(6)
|
|
276
280
|
})
|
|
277
281
|
})
|
|
278
282
|
|
package/gs/strings/strings.ts
CHANGED
|
@@ -56,18 +56,31 @@ export function ContainsFunc(
|
|
|
56
56
|
|
|
57
57
|
// Index returns the index of the first instance of substr in s, or -1 if substr is not present in s.
|
|
58
58
|
export function Index(s: string, substr: string): number {
|
|
59
|
-
|
|
59
|
+
if (substr === '') {
|
|
60
|
+
return 0
|
|
61
|
+
}
|
|
62
|
+
return indexBytes($.stringToBytes(s), $.stringToBytes(substr))
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
// LastIndex returns the index of the last instance of substr in s, or -1 if substr is not present in s.
|
|
63
66
|
export function LastIndex(s: string, substr: string): number {
|
|
64
|
-
|
|
67
|
+
const haystack = $.stringToBytes(s)
|
|
68
|
+
const needle = $.stringToBytes(substr)
|
|
69
|
+
if (needle.length === 0) {
|
|
70
|
+
return haystack.length
|
|
71
|
+
}
|
|
72
|
+
return lastIndexBytes(haystack, needle)
|
|
65
73
|
}
|
|
66
74
|
|
|
67
75
|
// IndexByte returns the index of the first instance of c in s, or -1 if c is not present in s.
|
|
68
76
|
export function IndexByte(s: string, c: number): number {
|
|
69
|
-
const
|
|
70
|
-
|
|
77
|
+
const bytes = $.stringToBytes(s)
|
|
78
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
79
|
+
if (bytes[i] === (c & 0xff)) {
|
|
80
|
+
return i
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return -1
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
// IndexRune returns the index of the first instance of the Unicode code point r, or -1 if rune is not present in s.
|
|
@@ -98,8 +111,43 @@ export function LastIndexAny(s: string, chars: string): number {
|
|
|
98
111
|
|
|
99
112
|
// LastIndexByte returns the index of the last instance of c in s, or -1 if c is not present in s.
|
|
100
113
|
export function LastIndexByte(s: string, c: number): number {
|
|
101
|
-
const
|
|
102
|
-
|
|
114
|
+
const bytes = $.stringToBytes(s)
|
|
115
|
+
for (let i = bytes.length - 1; i >= 0; i--) {
|
|
116
|
+
if (bytes[i] === (c & 0xff)) {
|
|
117
|
+
return i
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return -1
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function indexBytes(haystack: Uint8Array, needle: Uint8Array): number {
|
|
124
|
+
if (needle.length === 0) {
|
|
125
|
+
return 0
|
|
126
|
+
}
|
|
127
|
+
outer: for (let i = 0; i <= haystack.length - needle.length; i++) {
|
|
128
|
+
for (let j = 0; j < needle.length; j++) {
|
|
129
|
+
if (haystack[i + j] !== needle[j]) {
|
|
130
|
+
continue outer
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return i
|
|
134
|
+
}
|
|
135
|
+
return -1
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function lastIndexBytes(haystack: Uint8Array, needle: Uint8Array): number {
|
|
139
|
+
if (needle.length === 0) {
|
|
140
|
+
return haystack.length
|
|
141
|
+
}
|
|
142
|
+
outer: for (let i = haystack.length - needle.length; i >= 0; i--) {
|
|
143
|
+
for (let j = 0; j < needle.length; j++) {
|
|
144
|
+
if (haystack[i + j] !== needle[j]) {
|
|
145
|
+
continue outer
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return i
|
|
149
|
+
}
|
|
150
|
+
return -1
|
|
103
151
|
}
|
|
104
152
|
|
|
105
153
|
// IndexFunc returns the index into s of the first Unicode code point satisfying f(c), or -1 if none do.
|
|
@@ -4,6 +4,8 @@ import { AddInt64, AddUint64, AndInt64, AndUint64, CompareAndSwapInt64, CompareA
|
|
|
4
4
|
|
|
5
5
|
import * as unsafe from "@goscript/unsafe/index.js"
|
|
6
6
|
|
|
7
|
+
export type PointerValue<T> = T | $.VarRef<T> | null
|
|
8
|
+
|
|
7
9
|
export class Bool {
|
|
8
10
|
public get v(): number {
|
|
9
11
|
return this._fields.v.value
|
|
@@ -74,18 +76,18 @@ export function b32(b: boolean): number {
|
|
|
74
76
|
|
|
75
77
|
|
|
76
78
|
export class Pointer<T> {
|
|
77
|
-
public get v():
|
|
79
|
+
public get v(): PointerValue<T> {
|
|
78
80
|
return this._fields.v.value
|
|
79
81
|
}
|
|
80
|
-
public set v(value:
|
|
82
|
+
public set v(value: PointerValue<T>) {
|
|
81
83
|
this._fields.v.value = value
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
public _fields: {
|
|
85
|
-
v: $.VarRef
|
|
87
|
+
v: $.VarRef<PointerValue<T>>;
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
constructor(init?: Partial<{v?:
|
|
90
|
+
constructor(init?: Partial<{v?: PointerValue<T>}>) {
|
|
89
91
|
this._fields = {
|
|
90
92
|
v: $.varRef(init?.v ?? null)
|
|
91
93
|
}
|
|
@@ -100,14 +102,13 @@ export class Pointer<T> {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
// Load atomically loads and returns the value stored in x.
|
|
103
|
-
public Load():
|
|
105
|
+
public Load(): PointerValue<T> {
|
|
104
106
|
const x = this
|
|
105
|
-
return LoadPointer(x._fields.v) as
|
|
107
|
+
return LoadPointer(x._fields.v) as PointerValue<T>
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
// Store atomically stores val into x.
|
|
109
|
-
|
|
110
|
-
public Store(val: $.VarRef<T> | null): void {
|
|
111
|
+
public Store(val: PointerValue<T>): void {
|
|
111
112
|
const x = this
|
|
112
113
|
if (val === null) {
|
|
113
114
|
StorePointer(x._fields.v, null)
|
|
@@ -117,17 +118,16 @@ export class Pointer<T> {
|
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
// Swap atomically stores new into x and returns the previous value.
|
|
120
|
-
|
|
121
|
-
public Swap(_new: $.VarRef<T> | null): $.VarRef<T> | null {
|
|
121
|
+
public Swap(_new: PointerValue<T>): PointerValue<T> {
|
|
122
122
|
const x = this
|
|
123
123
|
if (_new === null) {
|
|
124
|
-
return SwapPointer(x._fields.v, null) as
|
|
124
|
+
return SwapPointer(x._fields.v, null) as PointerValue<T>
|
|
125
125
|
}
|
|
126
|
-
return SwapPointer(x._fields.v, unsafe.Pointer(_new)) as
|
|
126
|
+
return SwapPointer(x._fields.v, unsafe.Pointer(_new)) as PointerValue<T>
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
// CompareAndSwap executes the compare-and-swap operation for x.
|
|
130
|
-
public CompareAndSwap(old:
|
|
130
|
+
public CompareAndSwap(old: PointerValue<T>, _new: PointerValue<T>): boolean {
|
|
131
131
|
const x = this
|
|
132
132
|
return CompareAndSwapPointer(x._fields.v, old ? unsafe.Pointer(old) : null, _new ? unsafe.Pointer(_new) : null)
|
|
133
133
|
}
|
|
@@ -598,4 +598,3 @@ class align64 {
|
|
|
598
598
|
{}
|
|
599
599
|
);
|
|
600
600
|
}
|
|
601
|
-
|
package/gs/sync/meta.json
CHANGED
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
"WaitGroup.Wait": true,
|
|
10
10
|
"Once.Do": true,
|
|
11
11
|
"Cond.Wait": true,
|
|
12
|
+
"Map.CompareAndDelete": true,
|
|
12
13
|
"Map.Delete": true,
|
|
13
14
|
"Map.Load": true,
|
|
14
15
|
"Map.LoadAndDelete": true,
|
|
15
16
|
"Map.LoadOrStore": true,
|
|
16
17
|
"Map.Range": true,
|
|
17
|
-
"Map.Store": true
|
|
18
|
+
"Map.Store": true,
|
|
19
|
+
"Map.Swap": true
|
|
18
20
|
}
|
|
19
21
|
}
|
package/gs/sync/sync.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest'
|
|
2
2
|
|
|
3
|
-
import { WaitGroup } from './sync.js'
|
|
3
|
+
import { Cond, Map, Mutex, RWMutex, WaitGroup } from './sync.js'
|
|
4
4
|
|
|
5
5
|
describe('sync.WaitGroup', () => {
|
|
6
6
|
it('Go tracks scheduled work and unblocks Wait after completion', async () => {
|
|
@@ -22,3 +22,71 @@ describe('sync.WaitGroup', () => {
|
|
|
22
22
|
expect(events).toEqual(['worker start', 'worker done', 'wait done'])
|
|
23
23
|
})
|
|
24
24
|
})
|
|
25
|
+
|
|
26
|
+
describe('sync.Cond', () => {
|
|
27
|
+
it('exposes the Locker as public field L', async () => {
|
|
28
|
+
const mutex = new Mutex()
|
|
29
|
+
const cond = new Cond(mutex)
|
|
30
|
+
|
|
31
|
+
expect(cond.L).toBe(mutex)
|
|
32
|
+
await cond.L.Lock()
|
|
33
|
+
cond.L.Unlock()
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
describe('sync.RWMutex', () => {
|
|
38
|
+
it('exposes RLocker as a read-lock Locker', async () => {
|
|
39
|
+
const rw = new RWMutex()
|
|
40
|
+
const locker = rw.RLocker()
|
|
41
|
+
|
|
42
|
+
await locker.Lock()
|
|
43
|
+
locker.Unlock()
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe('sync.Map', () => {
|
|
48
|
+
it('Clear deletes all entries', async () => {
|
|
49
|
+
const m = new Map()
|
|
50
|
+
|
|
51
|
+
await m.Store('first', 1)
|
|
52
|
+
await m.Store('second', 2)
|
|
53
|
+
await m.Clear()
|
|
54
|
+
|
|
55
|
+
expect(await m.Load('first')).toEqual([undefined, false])
|
|
56
|
+
expect(await m.Load('second')).toEqual([undefined, false])
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('CompareAndSwap swaps only matching entries', async () => {
|
|
60
|
+
const m = new Map()
|
|
61
|
+
|
|
62
|
+
await m.Store('key', 'value')
|
|
63
|
+
expect(await m.CompareAndSwap('key', 'other', 'next')).toBe(false)
|
|
64
|
+
expect(await m.Load('key')).toEqual(['value', true])
|
|
65
|
+
expect(await m.CompareAndSwap('key', 'value', 'next')).toBe(true)
|
|
66
|
+
expect(await m.Load('key')).toEqual(['next', true])
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('CompareAndDelete deletes only matching entries', async () => {
|
|
70
|
+
const m = new Map()
|
|
71
|
+
|
|
72
|
+
await m.Store('key', 'value')
|
|
73
|
+
expect(await m.CompareAndDelete('key', 'other')).toBe(false)
|
|
74
|
+
expect(await m.Load('key')).toEqual(['value', true])
|
|
75
|
+
expect(await m.CompareAndDelete('key', 'value')).toBe(true)
|
|
76
|
+
expect(await m.Load('key')).toEqual([undefined, false])
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('Range accepts generated async-shaped callbacks', async () => {
|
|
80
|
+
const m = new Map()
|
|
81
|
+
const visited: string[] = []
|
|
82
|
+
|
|
83
|
+
await m.Store('a', 1)
|
|
84
|
+
await m.Store('b', 2)
|
|
85
|
+
await m.Range(async (key, value) => {
|
|
86
|
+
visited.push(`${key}:${value}`)
|
|
87
|
+
return key !== 'a'
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
expect(visited).toEqual(['a:1'])
|
|
91
|
+
})
|
|
92
|
+
})
|
package/gs/sync/sync.ts
CHANGED
|
@@ -143,6 +143,15 @@ export class RWMutex {
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
+
// RLocker returns a Locker interface that implements Lock and Unlock by
|
|
147
|
+
// calling RLock and RUnlock.
|
|
148
|
+
public RLocker(): Locker {
|
|
149
|
+
return {
|
|
150
|
+
Lock: () => this.RLock(),
|
|
151
|
+
Unlock: () => this.RUnlock(),
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
146
155
|
private _wakeUpWaiters(): void {
|
|
147
156
|
// Prioritize writers
|
|
148
157
|
if (this._writerWaitQueue.length > 0 && this._readers === 0) {
|
|
@@ -232,7 +241,7 @@ export class Once {
|
|
|
232
241
|
}
|
|
233
242
|
|
|
234
243
|
// Do calls the function f if and only if Do is being called for the first time for this instance of Once
|
|
235
|
-
public async Do(f: () => void): Promise<void> {
|
|
244
|
+
public async Do(f: () => void | Promise<void>): Promise<void> {
|
|
236
245
|
if (this._done) {
|
|
237
246
|
return
|
|
238
247
|
}
|
|
@@ -240,7 +249,7 @@ export class Once {
|
|
|
240
249
|
await this._m.Lock()
|
|
241
250
|
try {
|
|
242
251
|
if (!this._done) {
|
|
243
|
-
f()
|
|
252
|
+
await f()
|
|
244
253
|
this._done = true
|
|
245
254
|
}
|
|
246
255
|
} finally {
|
|
@@ -256,11 +265,11 @@ export class Once {
|
|
|
256
265
|
|
|
257
266
|
// Cond implements a condition variable, a rendezvous point for goroutines waiting for or announcing the occurrence of an event
|
|
258
267
|
export class Cond {
|
|
259
|
-
|
|
268
|
+
public L: Locker
|
|
260
269
|
private _waiters: Array<() => void> = []
|
|
261
270
|
|
|
262
271
|
constructor(l: Locker) {
|
|
263
|
-
this.
|
|
272
|
+
this.L = l
|
|
264
273
|
}
|
|
265
274
|
|
|
266
275
|
// Broadcast wakes all goroutines waiting on c
|
|
@@ -281,11 +290,11 @@ export class Cond {
|
|
|
281
290
|
|
|
282
291
|
// Wait atomically unlocks c.L and suspends execution of the calling goroutine
|
|
283
292
|
public async Wait(): Promise<void> {
|
|
284
|
-
this.
|
|
293
|
+
this.L.Unlock()
|
|
285
294
|
|
|
286
295
|
return new Promise<void>((resolve) => {
|
|
287
296
|
this._waiters.push(async () => {
|
|
288
|
-
await this.
|
|
297
|
+
await this.L.Lock()
|
|
289
298
|
resolve()
|
|
290
299
|
})
|
|
291
300
|
})
|
|
@@ -293,7 +302,7 @@ export class Cond {
|
|
|
293
302
|
|
|
294
303
|
// clone returns a copy of this Cond instance
|
|
295
304
|
public clone(): Cond {
|
|
296
|
-
return new Cond(this.
|
|
305
|
+
return new Cond(this.L)
|
|
297
306
|
}
|
|
298
307
|
}
|
|
299
308
|
|
|
@@ -311,6 +320,16 @@ export class Map {
|
|
|
311
320
|
// Map has no public fields to initialize
|
|
312
321
|
}
|
|
313
322
|
|
|
323
|
+
// Clear deletes all entries.
|
|
324
|
+
public async Clear(): Promise<void> {
|
|
325
|
+
await this._m.Lock()
|
|
326
|
+
try {
|
|
327
|
+
this._data.clear()
|
|
328
|
+
} finally {
|
|
329
|
+
this._m.Unlock()
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
314
333
|
// Delete deletes the value for a key
|
|
315
334
|
public async Delete(key: any): Promise<void> {
|
|
316
335
|
await this._m.Lock()
|
|
@@ -321,6 +340,29 @@ export class Map {
|
|
|
321
340
|
}
|
|
322
341
|
}
|
|
323
342
|
|
|
343
|
+
// CompareAndDelete deletes the entry for key if its value is equal to old.
|
|
344
|
+
public async CompareAndDelete(key: any, old: any): Promise<boolean> {
|
|
345
|
+
await this._m.Lock()
|
|
346
|
+
try {
|
|
347
|
+
if (!this._data.has(key) || this._data.get(key) !== old) {
|
|
348
|
+
return false
|
|
349
|
+
}
|
|
350
|
+
this._data.delete(key)
|
|
351
|
+
return true
|
|
352
|
+
} finally {
|
|
353
|
+
this._m.Unlock()
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// CompareAndSwap swaps the old and new values for key if the stored value is old.
|
|
358
|
+
public CompareAndSwap(key: any, old: any, value: any): boolean {
|
|
359
|
+
if (!this._data.has(key) || this._data.get(key) !== old) {
|
|
360
|
+
return false
|
|
361
|
+
}
|
|
362
|
+
this._data.set(key, value)
|
|
363
|
+
return true
|
|
364
|
+
}
|
|
365
|
+
|
|
324
366
|
// Load returns the value stored in the map for a key, or nil if no value is present
|
|
325
367
|
public async Load(key: any): Promise<[any, boolean]> {
|
|
326
368
|
await this._m.RLock()
|
|
@@ -360,17 +402,21 @@ export class Map {
|
|
|
360
402
|
}
|
|
361
403
|
|
|
362
404
|
// Range calls f sequentially for each key and value present in the map
|
|
363
|
-
public async Range(
|
|
405
|
+
public async Range(
|
|
406
|
+
f: (key: any, value: any) => boolean | globalThis.Promise<boolean>,
|
|
407
|
+
): Promise<void> {
|
|
364
408
|
await this._m.RLock()
|
|
409
|
+
let entries: [any, any][]
|
|
365
410
|
try {
|
|
366
|
-
|
|
367
|
-
if (!f(key, value)) {
|
|
368
|
-
break
|
|
369
|
-
}
|
|
370
|
-
}
|
|
411
|
+
entries = Array.from(this._data)
|
|
371
412
|
} finally {
|
|
372
413
|
this._m.RUnlock()
|
|
373
414
|
}
|
|
415
|
+
for (const [key, value] of entries) {
|
|
416
|
+
if (!(await f(key, value))) {
|
|
417
|
+
break
|
|
418
|
+
}
|
|
419
|
+
}
|
|
374
420
|
}
|
|
375
421
|
|
|
376
422
|
// Store sets the value for a key
|
|
@@ -383,6 +429,19 @@ export class Map {
|
|
|
383
429
|
}
|
|
384
430
|
}
|
|
385
431
|
|
|
432
|
+
// Swap swaps the value for a key and returns the previous value if any
|
|
433
|
+
public async Swap(key: any, value: any): Promise<[any, boolean]> {
|
|
434
|
+
await this._m.Lock()
|
|
435
|
+
try {
|
|
436
|
+
const previous = this._data.get(key)
|
|
437
|
+
const loaded = this._data.has(key)
|
|
438
|
+
this._data.set(key, value)
|
|
439
|
+
return [previous, loaded]
|
|
440
|
+
} finally {
|
|
441
|
+
this._m.Unlock()
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
386
445
|
// clone returns a copy of this Map instance
|
|
387
446
|
public clone(): Map {
|
|
388
447
|
return new Map()
|
package/gs/syscall/constants.ts
CHANGED
|
@@ -1,29 +1,44 @@
|
|
|
1
1
|
// Essential syscall constants
|
|
2
|
-
export const O_RDONLY = 0
|
|
3
|
-
export const O_WRONLY = 1
|
|
4
|
-
export const O_RDWR = 2
|
|
5
|
-
export const O_APPEND = 8
|
|
6
|
-
export const O_CREATE = 64
|
|
7
|
-
export const O_EXCL = 128
|
|
8
|
-
export const O_SYNC = 256
|
|
9
|
-
export const O_TRUNC = 512
|
|
2
|
+
export const O_RDONLY: number = 0
|
|
3
|
+
export const O_WRONLY: number = 1
|
|
4
|
+
export const O_RDWR: number = 2
|
|
5
|
+
export const O_APPEND: number = 8
|
|
6
|
+
export const O_CREATE: number = 64
|
|
7
|
+
export const O_EXCL: number = 128
|
|
8
|
+
export const O_SYNC: number = 256
|
|
9
|
+
export const O_TRUNC: number = 512
|
|
10
10
|
|
|
11
|
-
export const Stdin = 0
|
|
12
|
-
export const Stdout = 1
|
|
13
|
-
export const Stderr = 2
|
|
11
|
+
export const Stdin: number = 0
|
|
12
|
+
export const Stdout: number = 1
|
|
13
|
+
export const Stderr: number = 2
|
|
14
14
|
|
|
15
|
-
export const SIGINT = 2
|
|
16
|
-
export const SIGTERM = 15
|
|
15
|
+
export const SIGINT: number = 2
|
|
16
|
+
export const SIGTERM: number = 15
|
|
17
|
+
|
|
18
|
+
export const AF_UNIX: number = 1
|
|
19
|
+
export const AF_INET: number = 2
|
|
20
|
+
export const AF_INET6: number = 10
|
|
21
|
+
|
|
22
|
+
export const SOCK_STREAM: number = 1
|
|
23
|
+
export const SOCK_DGRAM: number = 2
|
|
24
|
+
export const SOCK_RAW: number = 3
|
|
25
|
+
export const SOCK_SEQPACKET: number = 5
|
|
26
|
+
|
|
27
|
+
export const IPPROTO_IPV6: number = 0x29
|
|
28
|
+
export const IPPROTO_TCP: number = 6
|
|
29
|
+
export const IPV6_V6ONLY: number = 0x1a
|
|
30
|
+
export const SOMAXCONN: number = 0x80
|
|
31
|
+
export const F_DUPFD_CLOEXEC: number = 1
|
|
17
32
|
|
|
18
33
|
// File mode constants
|
|
19
|
-
export const S_IFMT = 0o170000
|
|
20
|
-
export const S_IFREG = 0o100000
|
|
21
|
-
export const S_IFDIR = 0o040000
|
|
22
|
-
export const S_IFLNK = 0o120000
|
|
23
|
-
export const S_IFBLK = 0o060000
|
|
24
|
-
export const S_IFCHR = 0o020000
|
|
25
|
-
export const S_IFIFO = 0o010000
|
|
26
|
-
export const S_IFSOCK = 0o140000
|
|
27
|
-
export const S_ISUID = 0o004000
|
|
28
|
-
export const S_ISGID = 0o002000
|
|
29
|
-
export const S_ISVTX = 0o001000
|
|
34
|
+
export const S_IFMT: number = 0o170000
|
|
35
|
+
export const S_IFREG: number = 0o100000
|
|
36
|
+
export const S_IFDIR: number = 0o040000
|
|
37
|
+
export const S_IFLNK: number = 0o120000
|
|
38
|
+
export const S_IFBLK: number = 0o060000
|
|
39
|
+
export const S_IFCHR: number = 0o020000
|
|
40
|
+
export const S_IFIFO: number = 0o010000
|
|
41
|
+
export const S_IFSOCK: number = 0o140000
|
|
42
|
+
export const S_ISUID: number = 0o004000
|
|
43
|
+
export const S_ISGID: number = 0o002000
|
|
44
|
+
export const S_ISVTX: number = 0o001000
|