goscript 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cmd/goscript/cmd-test.go +104 -11
- package/cmd/goscript/cmd-test_test.go +1 -1
- package/cmd/goscript/cmd_compile.go +9 -0
- package/compiler/compile-request.go +31 -0
- package/compiler/compiler.go +1 -1
- package/compiler/compliance_test.go +0 -2
- package/compiler/config.go +2 -0
- package/compiler/gotest/package-result.go +2 -0
- package/compiler/gotest/request.go +85 -20
- package/compiler/gotest/runner.go +733 -96
- package/compiler/gotest/runner_test.go +647 -3
- package/compiler/lowered-program.go +10 -2
- package/compiler/lowering.go +2676 -349
- package/compiler/override-facts.go +77 -27
- package/compiler/override-registry.go +5 -4
- package/compiler/override-registry_test.go +178 -0
- package/compiler/package-graph_test.go +62 -7
- package/compiler/package-test-graph-variant.go +40 -16
- package/compiler/package-test-graph.go +0 -5
- package/compiler/package-test-graph_test.go +61 -3
- package/compiler/runtime-contract.go +40 -0
- package/compiler/semantic-model-types.go +16 -0
- package/compiler/semantic-model.go +336 -91
- package/compiler/semantic-model_test.go +50 -1
- package/compiler/service.go +9 -3
- package/compiler/skeleton_test.go +2371 -296
- package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
- package/compiler/tsworkspace/owner.go +8 -0
- package/compiler/tsworkspace/tool-process-other.go +14 -0
- package/compiler/tsworkspace/tool-process-unix.go +19 -0
- package/compiler/typescript-emitter.go +149 -10
- package/dist/gs/builtin/builtin.d.ts +20 -1
- package/dist/gs/builtin/builtin.js +246 -26
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +24 -10
- package/dist/gs/builtin/channel.js +143 -34
- 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 +43 -9
- package/dist/gs/builtin/slice.js +437 -234
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +2 -0
- package/dist/gs/builtin/type.js +55 -10
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +2 -0
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +28 -28
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/bytes.gs.d.ts +7 -5
- package/dist/gs/bytes/bytes.gs.js +10 -4
- package/dist/gs/bytes/bytes.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/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 +1 -1
- package/dist/gs/context/context.js +8 -3
- 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/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/sha1/index.d.ts +5 -0
- package/dist/gs/crypto/sha1/index.js +106 -0
- package/dist/gs/crypto/sha1/index.js.map +1 -0
- 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/encoding/json/index.d.ts +3 -0
- package/dist/gs/encoding/json/index.js +15 -0
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/errors/errors.js +29 -6
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/fmt/fmt.d.ts +1 -1
- package/dist/gs/fmt/fmt.js +64 -3
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +7 -7
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +52 -18
- 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.js +56 -20
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +57 -3
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +366 -1
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -1
- 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.js +3 -2
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -1
- 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/token/index.js +11 -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/io/fs/readlink.js +2 -6
- package/dist/gs/io/fs/readlink.js.map +1 -1
- package/dist/gs/io/fs/walk.js.map +1 -1
- package/dist/gs/io/io.d.ts +8 -5
- package/dist/gs/io/io.js +20 -2
- 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/math/bits/index.js +14 -24
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/mime/index.js +3 -1
- package/dist/gs/mime/index.js.map +1 -1
- package/dist/gs/net/http/httptest/index.d.ts +20 -1
- package/dist/gs/net/http/httptest/index.js +85 -3
- package/dist/gs/net/http/httptest/index.js.map +1 -1
- package/dist/gs/net/http/index.d.ts +118 -6
- package/dist/gs/net/http/index.js +389 -14
- package/dist/gs/net/http/index.js.map +1 -1
- 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/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/os/zero_copy_posix.gs.js +1 -1
- package/dist/gs/os/zero_copy_posix.gs.js.map +1 -1
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/filepath/path.d.ts +5 -3
- package/dist/gs/path/filepath/path.js +65 -10
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -2
- package/dist/gs/reflect/index.js +2 -1
- 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 +26 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +24 -5
- package/dist/gs/reflect/type.js +390 -38
- 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 +39 -0
- package/dist/gs/runtime/debug/index.js +58 -0
- package/dist/gs/runtime/debug/index.js.map +1 -1
- 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/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 +24 -9
- package/dist/gs/slices/slices.js +229 -24
- 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 +55 -17
- package/dist/gs/sort/slice.gs.js.map +1 -1
- package/dist/gs/strings/builder.js +26 -17
- 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/sync.d.ts +6 -3
- package/dist/gs/sync/sync.js +39 -11
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/errors.d.ts +116 -112
- package/dist/gs/syscall/errors.js +38 -1
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +2 -8
- package/dist/gs/syscall/fs.js.map +1 -1
- package/dist/gs/syscall/js/index.js +20 -12
- package/dist/gs/syscall/js/index.js.map +1 -1
- package/dist/gs/syscall/types.d.ts +4 -1
- package/dist/gs/syscall/types.js.map +1 -1
- package/dist/gs/testing/testing.d.ts +4 -3
- package/dist/gs/testing/testing.js +21 -4
- package/dist/gs/testing/testing.js.map +1 -1
- package/dist/gs/time/time.js +22 -0
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/dist/gs/unique/index.js +7 -2
- package/dist/gs/unique/index.js.map +1 -1
- package/go.mod +8 -8
- package/go.sum +14 -23
- package/gs/builtin/builtin.ts +364 -37
- package/gs/builtin/channel.ts +208 -38
- 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 +290 -10
- package/gs/builtin/slice.test.ts +70 -0
- package/gs/builtin/slice.ts +566 -255
- package/gs/builtin/type.ts +63 -10
- package/gs/builtin/varRef.ts +2 -0
- package/gs/bytes/buffer.gs.ts +28 -28
- package/gs/bytes/bytes.gs.ts +19 -10
- package/gs/bytes/bytes.test.ts +17 -0
- package/gs/bytes/iter.gs.ts +13 -14
- 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 +36 -2
- package/gs/context/context.ts +9 -4
- 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/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/sha1/index.test.ts +28 -0
- package/gs/crypto/sha1/index.ts +130 -0
- package/gs/crypto/sha1/meta.json +8 -0
- 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/encoding/json/index.test.ts +25 -3
- package/gs/encoding/json/index.ts +21 -3
- package/gs/errors/errors.test.ts +4 -1
- package/gs/errors/errors.ts +32 -8
- package/gs/fmt/fmt.test.ts +23 -1
- package/gs/fmt/fmt.ts +76 -10
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +62 -7
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +78 -36
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +32 -11
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +122 -43
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +518 -4
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +6 -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 +2 -1
- package/gs/github.com/klauspost/compress/internal/le/index.ts +6 -5
- 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/token/index.ts +17 -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/byteorder/index.test.ts +6 -6
- package/gs/io/fs/readlink.ts +40 -48
- package/gs/io/fs/walk.ts +10 -2
- package/gs/io/io.test.ts +64 -0
- package/gs/io/io.ts +34 -13
- package/gs/iter/iter.ts +8 -2
- package/gs/maps/iter.ts +69 -26
- package/gs/maps/maps.test.ts +23 -0
- package/gs/maps/maps.ts +6 -6
- package/gs/math/bits/index.test.ts +20 -0
- package/gs/math/bits/index.ts +15 -28
- package/gs/mime/index.ts +8 -2
- package/gs/net/http/httptest/index.test.ts +85 -0
- package/gs/net/http/httptest/index.ts +113 -3
- package/gs/net/http/index.test.ts +159 -1
- package/gs/net/http/index.ts +515 -15
- 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/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 +94 -15
- package/gs/os/zero_copy_posix.gs.ts +1 -2
- package/gs/path/filepath/match.ts +4 -1
- package/gs/path/filepath/meta.json +6 -0
- package/gs/path/filepath/path.test.ts +57 -2
- package/gs/path/filepath/path.ts +91 -12
- package/gs/reflect/field.test.ts +63 -0
- package/gs/reflect/index.ts +4 -1
- package/gs/reflect/iter.ts +2 -2
- package/gs/reflect/map.test.ts +24 -2
- package/gs/reflect/map.ts +35 -0
- package/gs/reflect/type.ts +543 -60
- 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 +22 -1
- package/gs/runtime/debug/index.ts +88 -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/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 +86 -0
- package/gs/slices/slices.ts +284 -37
- package/gs/sort/slice.gs.ts +73 -23
- package/gs/sort/slice.test.ts +40 -0
- package/gs/strings/builder.test.ts +8 -0
- package/gs/strings/builder.ts +29 -17
- 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/meta.json +1 -0
- package/gs/sync/sync.test.ts +57 -1
- package/gs/sync/sync.ts +45 -13
- package/gs/syscall/errors.ts +158 -115
- package/gs/syscall/fs.ts +8 -8
- package/gs/syscall/js/index.ts +49 -22
- package/gs/syscall/net.test.ts +26 -0
- package/gs/syscall/types.ts +7 -2
- package/gs/testing/testing.test.ts +56 -0
- package/gs/testing/testing.ts +27 -10
- package/gs/time/meta.json +2 -2
- package/gs/time/time.test.ts +4 -0
- package/gs/time/time.ts +33 -2
- package/gs/unicode/unicode.test.ts +14 -3
- package/gs/unicode/unicode.ts +1 -5
- package/gs/unique/index.ts +9 -2
- package/package.json +3 -3
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js';
|
|
2
|
+
import * as io from '@goscript/io/index.js';
|
|
3
|
+
type WriterArg = io.Writer | $.VarRef<io.Writer> | null | undefined;
|
|
4
|
+
export declare class Profile {
|
|
5
|
+
name: string;
|
|
6
|
+
constructor(name?: string);
|
|
7
|
+
Name(): string;
|
|
8
|
+
Count(): number;
|
|
9
|
+
WriteTo(w: WriterArg, debug: number): $.GoError;
|
|
10
|
+
}
|
|
11
|
+
export declare function Lookup(name: string): Profile | null;
|
|
12
|
+
export declare function Profiles(): $.Slice<Profile | null>;
|
|
13
|
+
export declare function StartCPUProfile(w: WriterArg): $.GoError;
|
|
14
|
+
export declare function StopCPUProfile(): void;
|
|
15
|
+
export declare function SetGoroutineLabels(_ctx: unknown): void;
|
|
16
|
+
export declare function Do(_ctx: unknown, _labels: unknown, fn: (() => void) | null): void;
|
|
17
|
+
export declare function ForLabels(_ctx: unknown, _f: unknown): void;
|
|
18
|
+
export declare function WithLabels(ctx: unknown, _labels: unknown): unknown;
|
|
19
|
+
export declare function Labels(...args: string[]): Map<string, string>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js';
|
|
2
|
+
import * as errors from '@goscript/errors/index.js';
|
|
3
|
+
let activeCPUWriter = null;
|
|
4
|
+
export class Profile {
|
|
5
|
+
name;
|
|
6
|
+
constructor(name = '') {
|
|
7
|
+
this.name = name;
|
|
8
|
+
}
|
|
9
|
+
Name() {
|
|
10
|
+
return this.name;
|
|
11
|
+
}
|
|
12
|
+
Count() {
|
|
13
|
+
return this.name === '' ? 0 : 1;
|
|
14
|
+
}
|
|
15
|
+
WriteTo(w, debug) {
|
|
16
|
+
return writeProfile(w, `goscript pprof ${this.name} debug=${debug}\n`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function Lookup(name) {
|
|
20
|
+
switch (name) {
|
|
21
|
+
case 'heap':
|
|
22
|
+
case 'allocs':
|
|
23
|
+
case 'goroutine':
|
|
24
|
+
case 'threadcreate':
|
|
25
|
+
case 'block':
|
|
26
|
+
case 'mutex':
|
|
27
|
+
return new Profile(name);
|
|
28
|
+
default:
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function Profiles() {
|
|
33
|
+
return $.arrayToSlice([
|
|
34
|
+
new Profile('allocs'),
|
|
35
|
+
new Profile('block'),
|
|
36
|
+
new Profile('goroutine'),
|
|
37
|
+
new Profile('heap'),
|
|
38
|
+
new Profile('mutex'),
|
|
39
|
+
new Profile('threadcreate'),
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
export function StartCPUProfile(w) {
|
|
43
|
+
const writer = writerFromArg(w);
|
|
44
|
+
if (writer == null) {
|
|
45
|
+
return errors.New('runtime/pprof: nil profile writer');
|
|
46
|
+
}
|
|
47
|
+
if (activeCPUWriter != null) {
|
|
48
|
+
return errors.New('runtime/pprof: CPU profiling already active');
|
|
49
|
+
}
|
|
50
|
+
activeCPUWriter = writer;
|
|
51
|
+
return writeProfile(writer, 'goscript cpu profile start\n');
|
|
52
|
+
}
|
|
53
|
+
export function StopCPUProfile() {
|
|
54
|
+
if (activeCPUWriter != null) {
|
|
55
|
+
writeProfile(activeCPUWriter, 'goscript cpu profile stop\n');
|
|
56
|
+
activeCPUWriter = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function SetGoroutineLabels(_ctx) { }
|
|
60
|
+
export function Do(_ctx, _labels, fn) {
|
|
61
|
+
fn?.();
|
|
62
|
+
}
|
|
63
|
+
export function ForLabels(_ctx, _f) { }
|
|
64
|
+
export function WithLabels(ctx, _labels) {
|
|
65
|
+
return ctx;
|
|
66
|
+
}
|
|
67
|
+
export function Labels(...args) {
|
|
68
|
+
const labels = new Map();
|
|
69
|
+
for (let i = 0; i + 1 < args.length; i += 2) {
|
|
70
|
+
labels.set(args[i], args[i + 1]);
|
|
71
|
+
}
|
|
72
|
+
return labels;
|
|
73
|
+
}
|
|
74
|
+
function writerFromArg(w) {
|
|
75
|
+
return $.pointerValueOrNil(w);
|
|
76
|
+
}
|
|
77
|
+
function writeProfile(w, text) {
|
|
78
|
+
const writer = writerFromArg(w);
|
|
79
|
+
if (writer == null) {
|
|
80
|
+
return errors.New('runtime/pprof: nil profile writer');
|
|
81
|
+
}
|
|
82
|
+
const [, err] = writer.Write($.stringToBytes(text));
|
|
83
|
+
return err;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../gs/runtime/pprof/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js';
|
|
2
|
+
import * as context from '@goscript/context/index.js';
|
|
3
|
+
import * as io from '@goscript/io/index.js';
|
|
4
|
+
export declare class Task {
|
|
5
|
+
id: number;
|
|
6
|
+
constructor(id?: number);
|
|
7
|
+
End(): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class Region {
|
|
10
|
+
End(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare function NewTask(pctx: context.Context | null, _taskType: string): [context.Context | null, Task];
|
|
13
|
+
export declare function Log(_ctx: context.Context | null, category: string, message: string): void;
|
|
14
|
+
export declare function Logf(_ctx: context.Context | null, _category: string, _format: string, ..._args: unknown[]): void;
|
|
15
|
+
export declare function WithRegion(_ctx: context.Context | null, _regionType: string, fn: (() => void) | null): void;
|
|
16
|
+
export declare function StartRegion(_ctx: context.Context | null, _regionType: string): Region;
|
|
17
|
+
export declare function IsEnabled(): boolean;
|
|
18
|
+
export declare function Start(w: io.Writer | $.VarRef<io.Writer> | null): $.GoError;
|
|
19
|
+
export declare function Stop(): void;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js';
|
|
2
|
+
import * as context from '@goscript/context/index.js';
|
|
3
|
+
import * as errors from '@goscript/errors/index.js';
|
|
4
|
+
class traceContextKey {
|
|
5
|
+
}
|
|
6
|
+
const traceState = {
|
|
7
|
+
activeWriter: null,
|
|
8
|
+
nextTaskID: 0,
|
|
9
|
+
};
|
|
10
|
+
export class Task {
|
|
11
|
+
id;
|
|
12
|
+
constructor(id = 0) {
|
|
13
|
+
this.id = id;
|
|
14
|
+
}
|
|
15
|
+
End() { }
|
|
16
|
+
}
|
|
17
|
+
export class Region {
|
|
18
|
+
End() { }
|
|
19
|
+
}
|
|
20
|
+
export function NewTask(pctx, _taskType) {
|
|
21
|
+
const parent = pctx ?? context.Background();
|
|
22
|
+
const task = new Task(++traceState.nextTaskID);
|
|
23
|
+
return [
|
|
24
|
+
context.WithValue(parent, $.interfaceValue(new traceContextKey(), 'trace.traceContextKey'), $.interfaceValue(task, '*trace.Task')),
|
|
25
|
+
task,
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
export function Log(_ctx, category, message) {
|
|
29
|
+
writeTrace(`log ${category} ${message}\n`);
|
|
30
|
+
}
|
|
31
|
+
export function Logf(_ctx, _category, _format, ..._args) { }
|
|
32
|
+
export function WithRegion(_ctx, _regionType, fn) {
|
|
33
|
+
fn?.();
|
|
34
|
+
}
|
|
35
|
+
export function StartRegion(_ctx, _regionType) {
|
|
36
|
+
return new Region();
|
|
37
|
+
}
|
|
38
|
+
export function IsEnabled() {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
export function Start(w) {
|
|
42
|
+
const writer = $.pointerValueOrNil(w);
|
|
43
|
+
if (writer == null) {
|
|
44
|
+
return errors.New('runtime/trace: nil trace writer');
|
|
45
|
+
}
|
|
46
|
+
if (traceState.activeWriter != null) {
|
|
47
|
+
return errors.New('runtime/trace: trace already active');
|
|
48
|
+
}
|
|
49
|
+
traceState.activeWriter = writer;
|
|
50
|
+
return writeTrace('goscript trace start\n');
|
|
51
|
+
}
|
|
52
|
+
export function Stop() {
|
|
53
|
+
writeTrace('goscript trace stop\n');
|
|
54
|
+
traceState.activeWriter = null;
|
|
55
|
+
}
|
|
56
|
+
function writeTrace(text) {
|
|
57
|
+
const writer = traceState.activeWriter;
|
|
58
|
+
if (writer == null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const [, err] = writer.Write($.stringToBytes(text));
|
|
62
|
+
return err;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../gs/runtime/trace/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAA;AAC/C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAA;AACrD,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAA;AAGnD,MAAM,eAAe;CAAG;AAExB,MAAM,UAAU,GAAG;IACjB,YAAY,EAAE,IAAwB;IACtC,UAAU,EAAE,CAAC;CACd,CAAA;AAED,MAAM,OAAO,IAAI;IACR,EAAE,CAAQ;IAEjB,YAAY,EAAE,GAAG,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAEM,GAAG,KAAU,CAAC;CACtB;AAED,MAAM,OAAO,MAAM;IACV,GAAG,KAAU,CAAC;CACtB;AAED,MAAM,UAAU,OAAO,CACrB,IAA4B,EAC5B,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IAC9C,OAAO;QACL,OAAO,CAAC,SAAS,CACf,MAAM,EACN,CAAC,CAAC,cAAc,CAAC,IAAI,eAAe,EAAE,EAAE,uBAAuB,CAAC,EAChE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CACtC;QACD,IAAI;KACL,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAE,QAAgB,EAAE,OAAe;IACjF,UAAU,CAAC,OAAO,QAAQ,IAAI,OAAO,IAAI,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAA4B,EAC5B,SAAiB,EACjB,OAAe,EACf,GAAG,KAAgB,IACZ,CAAC;AAEV,MAAM,UAAU,UAAU,CACxB,IAA4B,EAC5B,WAAmB,EACnB,EAAuB;IAEvB,EAAE,EAAE,EAAE,CAAA;AACR,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAA4B,EAC5B,WAAmB;IAEnB,OAAO,IAAI,MAAM,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAyC;IAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;IAC1D,CAAC;IACD,UAAU,CAAC,YAAY,GAAG,MAAM,CAAA;IAChC,OAAO,UAAU,CAAC,wBAAwB,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACnC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAA;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAA;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import * as $ from '@goscript/builtin/index.js';
|
|
2
2
|
import * as cmp from '../cmp/index.js';
|
|
3
3
|
import * as iter from '../iter/index.js';
|
|
4
|
+
type SyncCallbackResult<T> = T | globalThis.Promise<T>;
|
|
5
|
+
type CompareCallback<T, U = T> = ((v1: T, v2: U) => SyncCallbackResult<number>) | null;
|
|
6
|
+
type PredicateCallback<T> = ((value: T) => SyncCallbackResult<boolean>) | null;
|
|
7
|
+
type EqualCallback<T, U = T> = ((v1: T, v2: U) => SyncCallbackResult<boolean>) | null;
|
|
4
8
|
/**
|
|
5
9
|
* Compare compares the elements of s1 and s2 using cmp.Compare.
|
|
6
10
|
* The elements are compared sequentially, starting at index 0,
|
|
@@ -14,23 +18,28 @@ import * as iter from '../iter/index.js';
|
|
|
14
18
|
* @returns -1, 0, or 1
|
|
15
19
|
*/
|
|
16
20
|
export declare function Compare<T extends string | number>(s1: $.Slice<T>, s2: $.Slice<T>): number;
|
|
21
|
+
export declare function CompareFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, compare: CompareCallback<T, U>): number;
|
|
17
22
|
/**
|
|
18
23
|
* Clone returns a shallow copy of s while preserving nilness.
|
|
19
24
|
* @param s The slice to clone
|
|
20
25
|
* @returns A new slice with the same elements, or null for a nil slice
|
|
21
26
|
*/
|
|
22
27
|
export declare function Clone<T>(s: $.Slice<T>): $.Slice<T>;
|
|
28
|
+
export declare function Concat<T>(...slices: $.Slice<T>[]): $.Slice<T>;
|
|
23
29
|
/**
|
|
24
30
|
* All returns an iterator over index-value pairs in the slice.
|
|
25
31
|
* This is equivalent to Go's slices.All function.
|
|
26
32
|
* @param s The slice to iterate over
|
|
27
33
|
* @returns An iterator function that yields index-value pairs
|
|
28
34
|
*/
|
|
29
|
-
export declare function All<T>(s: $.Slice<T>): (yieldFunc: (index: number, value: T) =>
|
|
35
|
+
export declare function All<T>(s: $.Slice<T>): (yieldFunc: (index: number, value: T) => iter.YieldResult) => void | globalThis.Promise<void>;
|
|
30
36
|
export declare function Backward<T>(s: $.Slice<T>): (_yield: (index: number, value: T) => boolean | globalThis.Promise<boolean>) => void | globalThis.Promise<void>;
|
|
31
37
|
export declare function Sort<T extends string | number>(s: $.Slice<T>): void;
|
|
32
38
|
export declare function IsSorted<T extends string | number>(x: $.Slice<T>): boolean;
|
|
33
39
|
export declare function Max<T extends cmp.Ordered>(x: $.Slice<T>): T;
|
|
40
|
+
export declare function Min<T extends cmp.Ordered>(x: $.Slice<T>): T;
|
|
41
|
+
export declare function MaxFunc<T>(x: $.Slice<T>, compare: CompareCallback<T>): T;
|
|
42
|
+
export declare function MinFunc<T>(x: $.Slice<T>, compare: CompareCallback<T>): T;
|
|
34
43
|
export declare function Collect<T>(seq: iter.Seq<T>): $.Slice<T>;
|
|
35
44
|
export declare function Sorted<T extends string | number>(seq: iter.Seq<T>): $.Slice<T>;
|
|
36
45
|
/**
|
|
@@ -43,13 +52,17 @@ export declare function Sorted<T extends string | number>(seq: iter.Seq<T>): $.S
|
|
|
43
52
|
* @returns The modified slice
|
|
44
53
|
*/
|
|
45
54
|
export declare function Delete<T>(s: $.Slice<T>, i: number, j: number): $.Slice<T>;
|
|
46
|
-
export declare function DeleteFunc<T>(s: $.Slice<T>, del:
|
|
55
|
+
export declare function DeleteFunc<T>(s: $.Slice<T>, del: PredicateCallback<T>): $.Slice<T>;
|
|
56
|
+
export declare function Replace<T>(s: $.Slice<T>, i: number, j: number, ...v: T[]): $.Slice<T>;
|
|
57
|
+
export declare function Compact<T>(s: $.Slice<T>): $.Slice<T>;
|
|
58
|
+
export declare function CompactFunc<T>(s: $.Slice<T>, eq: EqualCallback<T>): $.Slice<T>;
|
|
59
|
+
export declare function Clip<T>(s: $.Slice<T>): $.Slice<T>;
|
|
47
60
|
export declare function Equal<T>(s1: $.Slice<T>, s2: $.Slice<T>): boolean;
|
|
48
|
-
export declare function EqualFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, eq:
|
|
61
|
+
export declare function EqualFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, eq: EqualCallback<T, U>): boolean;
|
|
49
62
|
export declare function Index<T>(s: $.Slice<T>, v: T): number;
|
|
50
|
-
export declare function IndexFunc<T>(s: $.Slice<T>, f:
|
|
63
|
+
export declare function IndexFunc<T>(s: $.Slice<T>, f: PredicateCallback<T>): number;
|
|
51
64
|
export declare function Contains<T>(s: $.Slice<T>, v: T): boolean;
|
|
52
|
-
export declare function ContainsFunc<T>(s: $.Slice<T>, f:
|
|
65
|
+
export declare function ContainsFunc<T>(s: $.Slice<T>, f: PredicateCallback<T>): boolean;
|
|
53
66
|
export declare function Insert<T>(s: $.Slice<T>, i: number, ...v: T[]): $.Slice<T>;
|
|
54
67
|
export declare function Reverse<T>(s: $.Slice<T>): void;
|
|
55
68
|
/**
|
|
@@ -70,9 +83,9 @@ export declare function Grow<T>(s: $.Slice<T>, n: number): $.Slice<T>;
|
|
|
70
83
|
* @param s The slice to sort in place
|
|
71
84
|
* @param cmp Comparison function
|
|
72
85
|
*/
|
|
73
|
-
export declare function SortFunc<T>(s: $.Slice<T>, cmp:
|
|
74
|
-
export declare function IsSortedFunc<T>(x: $.Slice<T>, cmp:
|
|
75
|
-
export declare function SortStableFunc<T>(s: $.Slice<T>, cmp:
|
|
86
|
+
export declare function SortFunc<T>(s: $.Slice<T>, cmp: CompareCallback<T>): void;
|
|
87
|
+
export declare function IsSortedFunc<T>(x: $.Slice<T>, cmp: CompareCallback<T>): boolean;
|
|
88
|
+
export declare function SortStableFunc<T>(s: $.Slice<T>, cmp: CompareCallback<T>): void;
|
|
76
89
|
/**
|
|
77
90
|
* BinarySearchFunc works like BinarySearch, but uses a custom comparison function.
|
|
78
91
|
* The slice must be sorted in increasing order, where "increasing" is defined by cmp.
|
|
@@ -85,4 +98,6 @@ export declare function SortStableFunc<T>(s: $.Slice<T>, cmp: (a: T, b: T) => nu
|
|
|
85
98
|
* @param cmp Comparison function
|
|
86
99
|
* @returns A tuple of [index, found] where index is the position and found indicates if target was found
|
|
87
100
|
*/
|
|
88
|
-
export declare function BinarySearchFunc<E, T>(x: $.Slice<E>, target: T, cmp:
|
|
101
|
+
export declare function BinarySearchFunc<E, T>(x: $.Slice<E>, target: T, cmp: CompareCallback<E, T>): [number, boolean];
|
|
102
|
+
export declare function BinarySearch<T extends cmp.Ordered>(x: $.Slice<T>, target: T): [number, boolean];
|
|
103
|
+
export {};
|
package/dist/gs/slices/slices.js
CHANGED
|
@@ -34,6 +34,27 @@ export function Compare(s1, s2) {
|
|
|
34
34
|
}
|
|
35
35
|
return 0;
|
|
36
36
|
}
|
|
37
|
+
export function CompareFunc(s1, s2, compare) {
|
|
38
|
+
if (compare == null) {
|
|
39
|
+
throw new Error('slices.CompareFunc: nil comparison function');
|
|
40
|
+
}
|
|
41
|
+
const len1 = $.len(s1);
|
|
42
|
+
const len2 = $.len(s2);
|
|
43
|
+
const minLen = len1 < len2 ? len1 : len2;
|
|
44
|
+
for (let i = 0; i < minLen; i++) {
|
|
45
|
+
const result = syncNumber(compare(s1[i], s2[i]));
|
|
46
|
+
if (result !== 0) {
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (len1 < len2) {
|
|
51
|
+
return -1;
|
|
52
|
+
}
|
|
53
|
+
if (len1 > len2) {
|
|
54
|
+
return 1;
|
|
55
|
+
}
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
37
58
|
/**
|
|
38
59
|
* Clone returns a shallow copy of s while preserving nilness.
|
|
39
60
|
* @param s The slice to clone
|
|
@@ -50,6 +71,38 @@ export function Clone(s) {
|
|
|
50
71
|
}
|
|
51
72
|
return out;
|
|
52
73
|
}
|
|
74
|
+
export function Concat(...slices) {
|
|
75
|
+
let size = 0;
|
|
76
|
+
let byteSlice = false;
|
|
77
|
+
for (const slice of slices) {
|
|
78
|
+
size += $.len(slice);
|
|
79
|
+
byteSlice = byteSlice || slice instanceof Uint8Array;
|
|
80
|
+
}
|
|
81
|
+
if (size === 0) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
if (byteSlice) {
|
|
85
|
+
const out = new Uint8Array(size);
|
|
86
|
+
let pos = 0;
|
|
87
|
+
for (const slice of slices) {
|
|
88
|
+
const length = $.len(slice);
|
|
89
|
+
for (let i = 0; i < length; i++) {
|
|
90
|
+
out[pos++] = slice[i];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
const out = $.makeSlice(size);
|
|
96
|
+
let pos = 0;
|
|
97
|
+
for (const slice of slices) {
|
|
98
|
+
const length = $.len(slice);
|
|
99
|
+
for (let i = 0; i < length; i++) {
|
|
100
|
+
;
|
|
101
|
+
out[pos++] = slice[i];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
53
106
|
/**
|
|
54
107
|
* All returns an iterator over index-value pairs in the slice.
|
|
55
108
|
* This is equivalent to Go's slices.All function.
|
|
@@ -59,12 +112,23 @@ export function Clone(s) {
|
|
|
59
112
|
export function All(s) {
|
|
60
113
|
return function (_yield) {
|
|
61
114
|
const length = $.len(s);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
115
|
+
const walk = (i) => {
|
|
116
|
+
for (; i < length; i++) {
|
|
117
|
+
const value = s[i]; // Use proper indexing to avoid type issues
|
|
118
|
+
const keepGoing = _yield(i, value);
|
|
119
|
+
if (keepGoing instanceof Promise) {
|
|
120
|
+
return keepGoing.then((next) => {
|
|
121
|
+
if (next) {
|
|
122
|
+
return walk(i + 1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (!keepGoing) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
66
129
|
}
|
|
67
|
-
}
|
|
130
|
+
};
|
|
131
|
+
return walk(0);
|
|
68
132
|
};
|
|
69
133
|
}
|
|
70
134
|
export function Backward(s) {
|
|
@@ -115,6 +179,51 @@ export function Max(x) {
|
|
|
115
179
|
}
|
|
116
180
|
return max;
|
|
117
181
|
}
|
|
182
|
+
export function Min(x) {
|
|
183
|
+
if ($.len(x) === 0) {
|
|
184
|
+
throw new Error('slices.Min: empty list');
|
|
185
|
+
}
|
|
186
|
+
let min = x[0];
|
|
187
|
+
for (let i = 1; i < $.len(x); i++) {
|
|
188
|
+
const value = x[i];
|
|
189
|
+
if (cmp.Compare(value, min) < 0) {
|
|
190
|
+
min = value;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return min;
|
|
194
|
+
}
|
|
195
|
+
export function MaxFunc(x, compare) {
|
|
196
|
+
if (compare == null) {
|
|
197
|
+
throw new Error('slices.MaxFunc: nil comparison function');
|
|
198
|
+
}
|
|
199
|
+
if ($.len(x) === 0) {
|
|
200
|
+
throw new Error('slices.MaxFunc: empty list');
|
|
201
|
+
}
|
|
202
|
+
let max = x[0];
|
|
203
|
+
for (let i = 1; i < $.len(x); i++) {
|
|
204
|
+
const value = x[i];
|
|
205
|
+
if (syncNumber(compare(max, value)) < 0) {
|
|
206
|
+
max = value;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return max;
|
|
210
|
+
}
|
|
211
|
+
export function MinFunc(x, compare) {
|
|
212
|
+
if (compare == null) {
|
|
213
|
+
throw new Error('slices.MinFunc: nil comparison function');
|
|
214
|
+
}
|
|
215
|
+
if ($.len(x) === 0) {
|
|
216
|
+
throw new Error('slices.MinFunc: empty list');
|
|
217
|
+
}
|
|
218
|
+
let min = x[0];
|
|
219
|
+
for (let i = 1; i < $.len(x); i++) {
|
|
220
|
+
const value = x[i];
|
|
221
|
+
if (syncNumber(compare(value, min)) < 0) {
|
|
222
|
+
min = value;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return min;
|
|
226
|
+
}
|
|
118
227
|
export function Collect(seq) {
|
|
119
228
|
const out = [];
|
|
120
229
|
seq((value) => {
|
|
@@ -160,13 +269,16 @@ export function Delete(s, i, j) {
|
|
|
160
269
|
return $.goSlice(s, 0, length - deleteCount);
|
|
161
270
|
}
|
|
162
271
|
export function DeleteFunc(s, del) {
|
|
272
|
+
if (del == null) {
|
|
273
|
+
throw new Error('slices.DeleteFunc: nil delete function');
|
|
274
|
+
}
|
|
163
275
|
if (s === null || s === undefined) {
|
|
164
276
|
return s;
|
|
165
277
|
}
|
|
166
278
|
let w = 0;
|
|
167
279
|
for (let i = 0; i < s.length; i++) {
|
|
168
280
|
const value = s[i];
|
|
169
|
-
if (!del(value)) {
|
|
281
|
+
if (!syncBoolean(del(value))) {
|
|
170
282
|
;
|
|
171
283
|
s[w] = value;
|
|
172
284
|
w++;
|
|
@@ -178,6 +290,77 @@ export function DeleteFunc(s, del) {
|
|
|
178
290
|
}
|
|
179
291
|
return $.goSlice(s, 0, w);
|
|
180
292
|
}
|
|
293
|
+
export function Replace(s, i, j, ...v) {
|
|
294
|
+
const length = $.len(s);
|
|
295
|
+
if (i < 0 || j < i || j > length) {
|
|
296
|
+
throw new Error(`slice bounds out of range [${i}:${j}] with length ${length}`);
|
|
297
|
+
}
|
|
298
|
+
const out = $.makeSlice(length - (j - i) + v.length);
|
|
299
|
+
let pos = 0;
|
|
300
|
+
for (let idx = 0; idx < i; idx++) {
|
|
301
|
+
;
|
|
302
|
+
out[pos++] = s[idx];
|
|
303
|
+
}
|
|
304
|
+
for (const value of v) {
|
|
305
|
+
;
|
|
306
|
+
out[pos++] = value;
|
|
307
|
+
}
|
|
308
|
+
for (let idx = j; idx < length; idx++) {
|
|
309
|
+
;
|
|
310
|
+
out[pos++] = s[idx];
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
export function Compact(s) {
|
|
315
|
+
if (s === null || s === undefined || $.len(s) < 2) {
|
|
316
|
+
return s;
|
|
317
|
+
}
|
|
318
|
+
let w = 1;
|
|
319
|
+
for (let i = 1; i < $.len(s); i++) {
|
|
320
|
+
if (s[i] !== s[i - 1]) {
|
|
321
|
+
;
|
|
322
|
+
s[w] = s[i];
|
|
323
|
+
w++;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
for (let i = w; i < $.len(s); i++) {
|
|
327
|
+
;
|
|
328
|
+
s[i] = clearValue(s);
|
|
329
|
+
}
|
|
330
|
+
return $.goSlice(s, 0, w);
|
|
331
|
+
}
|
|
332
|
+
export function CompactFunc(s, eq) {
|
|
333
|
+
if (eq == null) {
|
|
334
|
+
throw new Error('slices.CompactFunc: nil equality function');
|
|
335
|
+
}
|
|
336
|
+
if (s === null || s === undefined || $.len(s) < 2) {
|
|
337
|
+
return s;
|
|
338
|
+
}
|
|
339
|
+
let w = 1;
|
|
340
|
+
for (let i = 1; i < $.len(s); i++) {
|
|
341
|
+
if (!syncBoolean(eq(s[i - 1], s[i]))) {
|
|
342
|
+
;
|
|
343
|
+
s[w] = s[i];
|
|
344
|
+
w++;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
for (let i = w; i < $.len(s); i++) {
|
|
348
|
+
;
|
|
349
|
+
s[i] = clearValue(s);
|
|
350
|
+
}
|
|
351
|
+
return $.goSlice(s, 0, w);
|
|
352
|
+
}
|
|
353
|
+
export function Clip(s) {
|
|
354
|
+
if (s == null) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
const out = $.makeSlice($.len(s), $.len(s));
|
|
358
|
+
for (let i = 0; i < $.len(s); i++) {
|
|
359
|
+
;
|
|
360
|
+
out[i] = s[i];
|
|
361
|
+
}
|
|
362
|
+
return out;
|
|
363
|
+
}
|
|
181
364
|
export function Equal(s1, s2) {
|
|
182
365
|
const len1 = $.len(s1);
|
|
183
366
|
if (len1 !== $.len(s2)) {
|
|
@@ -191,12 +374,15 @@ export function Equal(s1, s2) {
|
|
|
191
374
|
return true;
|
|
192
375
|
}
|
|
193
376
|
export function EqualFunc(s1, s2, eq) {
|
|
377
|
+
if (eq == null) {
|
|
378
|
+
throw new Error('slices.EqualFunc: nil equality function');
|
|
379
|
+
}
|
|
194
380
|
const len1 = $.len(s1);
|
|
195
381
|
if (len1 !== $.len(s2)) {
|
|
196
382
|
return false;
|
|
197
383
|
}
|
|
198
384
|
for (let i = 0; i < len1; i++) {
|
|
199
|
-
if (!eq(s1[i], s2[i])) {
|
|
385
|
+
if (!syncBoolean(eq(s1[i], s2[i]))) {
|
|
200
386
|
return false;
|
|
201
387
|
}
|
|
202
388
|
}
|
|
@@ -211,8 +397,11 @@ export function Index(s, v) {
|
|
|
211
397
|
return -1;
|
|
212
398
|
}
|
|
213
399
|
export function IndexFunc(s, f) {
|
|
400
|
+
if (f == null) {
|
|
401
|
+
throw new Error('slices.IndexFunc: nil predicate function');
|
|
402
|
+
}
|
|
214
403
|
for (let i = 0; i < $.len(s); i++) {
|
|
215
|
-
if (f(s[i])) {
|
|
404
|
+
if (syncBoolean(f(s[i]))) {
|
|
216
405
|
return i;
|
|
217
406
|
}
|
|
218
407
|
}
|
|
@@ -295,37 +484,35 @@ export function Grow(s, n) {
|
|
|
295
484
|
* @param cmp Comparison function
|
|
296
485
|
*/
|
|
297
486
|
export function SortFunc(s, cmp) {
|
|
487
|
+
if (cmp == null) {
|
|
488
|
+
throw new Error('slices.SortFunc: nil comparison function');
|
|
489
|
+
}
|
|
298
490
|
if (s === null || s === undefined) {
|
|
299
491
|
return;
|
|
300
492
|
}
|
|
301
493
|
const arr = s;
|
|
302
|
-
arr.sort(cmp);
|
|
494
|
+
arr.sort((a, b) => syncNumber(cmp(a, b)));
|
|
303
495
|
}
|
|
304
496
|
export function IsSortedFunc(x, cmp) {
|
|
497
|
+
if (cmp == null) {
|
|
498
|
+
throw new Error('slices.IsSortedFunc: nil comparison function');
|
|
499
|
+
}
|
|
305
500
|
for (let i = $.len(x) - 1; i > 0; i--) {
|
|
306
|
-
if (cmp(x[i], x[i - 1]) < 0) {
|
|
501
|
+
if (syncNumber(cmp(x[i], x[i - 1])) < 0) {
|
|
307
502
|
return false;
|
|
308
503
|
}
|
|
309
504
|
}
|
|
310
505
|
return true;
|
|
311
506
|
}
|
|
312
507
|
export function SortStableFunc(s, cmp) {
|
|
508
|
+
if (cmp == null) {
|
|
509
|
+
throw new Error('slices.SortStableFunc: nil comparison function');
|
|
510
|
+
}
|
|
313
511
|
if (s === null || s === undefined) {
|
|
314
512
|
return;
|
|
315
513
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
.sort((a, b) => {
|
|
319
|
-
const result = cmp(a.value, b.value);
|
|
320
|
-
if (result !== 0) {
|
|
321
|
-
return result;
|
|
322
|
-
}
|
|
323
|
-
return a.index - b.index;
|
|
324
|
-
});
|
|
325
|
-
for (let i = 0; i < sorted.length; i++) {
|
|
326
|
-
;
|
|
327
|
-
s[i] = sorted[i].value;
|
|
328
|
-
}
|
|
514
|
+
;
|
|
515
|
+
s.sort((a, b) => syncNumber(cmp(a, b)));
|
|
329
516
|
}
|
|
330
517
|
function clearValue(s) {
|
|
331
518
|
if (s instanceof Uint8Array) {
|
|
@@ -359,11 +546,14 @@ function clearValue(s) {
|
|
|
359
546
|
* @returns A tuple of [index, found] where index is the position and found indicates if target was found
|
|
360
547
|
*/
|
|
361
548
|
export function BinarySearchFunc(x, target, cmp) {
|
|
549
|
+
if (cmp == null) {
|
|
550
|
+
throw new Error('slices.BinarySearchFunc: nil comparison function');
|
|
551
|
+
}
|
|
362
552
|
let left = 0;
|
|
363
553
|
let right = $.len(x);
|
|
364
554
|
while (left < right) {
|
|
365
555
|
const mid = Math.floor((left + right) / 2);
|
|
366
|
-
const result = cmp(x[mid], target);
|
|
556
|
+
const result = syncNumber(cmp(x[mid], target));
|
|
367
557
|
if (result < 0) {
|
|
368
558
|
left = mid + 1;
|
|
369
559
|
}
|
|
@@ -376,4 +566,19 @@ export function BinarySearchFunc(x, target, cmp) {
|
|
|
376
566
|
}
|
|
377
567
|
return [left, false];
|
|
378
568
|
}
|
|
569
|
+
function syncNumber(value) {
|
|
570
|
+
if (value instanceof Promise) {
|
|
571
|
+
throw new Error('slices: asynchronous callback result is not supported');
|
|
572
|
+
}
|
|
573
|
+
return value;
|
|
574
|
+
}
|
|
575
|
+
function syncBoolean(value) {
|
|
576
|
+
if (value instanceof Promise) {
|
|
577
|
+
throw new Error('slices: asynchronous callback result is not supported');
|
|
578
|
+
}
|
|
579
|
+
return value;
|
|
580
|
+
}
|
|
581
|
+
export function BinarySearch(x, target) {
|
|
582
|
+
return BinarySearchFunc(x, target, cmp.Compare);
|
|
583
|
+
}
|
|
379
584
|
//# sourceMappingURL=slices.js.map
|