goscript 0.1.1 → 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/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 +9 -2
- package/compiler/lowering.go +2001 -345
- package/compiler/override-facts.go +77 -27
- package/compiler/override-registry.go +5 -4
- package/compiler/override-registry_test.go +135 -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 +1921 -298
- 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 +122 -9
- 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 +107 -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 +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 +47 -7
- 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/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/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.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.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 +83 -3
- package/dist/gs/net/http/httptest/index.js.map +1 -1
- package/dist/gs/net/http/index.d.ts +110 -6
- package/dist/gs/net/http/index.js +262 -16
- 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/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 +161 -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 +257 -10
- package/gs/builtin/slice.test.ts +70 -0
- package/gs/builtin/slice.ts +566 -255
- package/gs/builtin/type.ts +53 -9
- package/gs/builtin/varRef.ts +2 -0
- package/gs/bytes/buffer.gs.ts +28 -28
- 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 +31 -1
- 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/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 +3 -1
- package/gs/fmt/fmt.ts +1 -5
- 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.ts +4 -1
- 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 +53 -0
- package/gs/net/http/httptest/index.ts +98 -3
- package/gs/net/http/index.test.ts +129 -1
- package/gs/net/http/index.ts +370 -19
- 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/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/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,72 @@
|
|
|
1
|
+
//go:build unix
|
|
2
|
+
|
|
3
|
+
package tsworkspace
|
|
4
|
+
|
|
5
|
+
import (
|
|
6
|
+
"context"
|
|
7
|
+
"errors"
|
|
8
|
+
"os"
|
|
9
|
+
"path/filepath"
|
|
10
|
+
"strconv"
|
|
11
|
+
"strings"
|
|
12
|
+
"syscall"
|
|
13
|
+
"testing"
|
|
14
|
+
"time"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
func TestOwnerRunToolCancelsProcessGroup(t *testing.T) {
|
|
18
|
+
dir := t.TempDir()
|
|
19
|
+
pidFile := filepath.Join(dir, "child.pid")
|
|
20
|
+
tool := filepath.Join(dir, "spawn-child.sh")
|
|
21
|
+
script := "#!/bin/sh\n" +
|
|
22
|
+
"sleep 30 &\n" +
|
|
23
|
+
"echo $! > " + strconv.Quote(pidFile) + "\n" +
|
|
24
|
+
"wait\n"
|
|
25
|
+
if err := os.WriteFile(tool, []byte(script), 0o755); err != nil {
|
|
26
|
+
t.Fatal(err.Error())
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
|
30
|
+
defer cancel()
|
|
31
|
+
result := NewOwner(dir, dir).RunTool(ctx, PhaseRuntime, dir, tool)
|
|
32
|
+
if !result.Failed() {
|
|
33
|
+
t.Fatalf("expected canceled tool to fail")
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pid := readChildPID(t, pidFile)
|
|
37
|
+
deadline := time.Now().Add(2 * time.Second)
|
|
38
|
+
for processExists(pid) && time.Now().Before(deadline) {
|
|
39
|
+
time.Sleep(25 * time.Millisecond)
|
|
40
|
+
}
|
|
41
|
+
if processExists(pid) {
|
|
42
|
+
_ = syscall.Kill(pid, syscall.SIGKILL)
|
|
43
|
+
t.Fatalf("child process %d survived canceled tool", pid)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
func readChildPID(t *testing.T, path string) int {
|
|
48
|
+
t.Helper()
|
|
49
|
+
deadline := time.Now().Add(2 * time.Second)
|
|
50
|
+
var data []byte
|
|
51
|
+
var err error
|
|
52
|
+
for time.Now().Before(deadline) {
|
|
53
|
+
data, err = os.ReadFile(path)
|
|
54
|
+
if err == nil {
|
|
55
|
+
break
|
|
56
|
+
}
|
|
57
|
+
time.Sleep(25 * time.Millisecond)
|
|
58
|
+
}
|
|
59
|
+
if err != nil {
|
|
60
|
+
t.Fatalf("read child pid: %v", err)
|
|
61
|
+
}
|
|
62
|
+
pid, err := strconv.Atoi(strings.TrimSpace(string(data)))
|
|
63
|
+
if err != nil {
|
|
64
|
+
t.Fatalf("parse child pid %q: %v", data, err)
|
|
65
|
+
}
|
|
66
|
+
return pid
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
func processExists(pid int) bool {
|
|
70
|
+
err := syscall.Kill(pid, 0)
|
|
71
|
+
return err == nil || errors.Is(err, syscall.EPERM)
|
|
72
|
+
}
|
|
@@ -106,6 +106,12 @@ func (o *Owner) RunTool(ctx context.Context, phase Phase, dir string, name strin
|
|
|
106
106
|
}
|
|
107
107
|
start := time.Now()
|
|
108
108
|
cmd := exec.CommandContext(ctx, tool, args...)
|
|
109
|
+
configureToolCommand(cmd)
|
|
110
|
+
cmd.Cancel = func() error {
|
|
111
|
+
killToolCommand(cmd)
|
|
112
|
+
return nil
|
|
113
|
+
}
|
|
114
|
+
cmd.WaitDelay = 5 * time.Second
|
|
109
115
|
cmd.Dir = dir
|
|
110
116
|
var output bytes.Buffer
|
|
111
117
|
cmd.Stdout = &output
|
|
@@ -232,6 +238,8 @@ func sourceDirectory() string {
|
|
|
232
238
|
|
|
233
239
|
const nodeAmbientTypes = `declare const process: {
|
|
234
240
|
env?: Record<string, string | undefined>
|
|
241
|
+
chdir?: (directory: string) => void
|
|
242
|
+
cwd?: () => string
|
|
235
243
|
exit?: (code?: number) => never
|
|
236
244
|
}
|
|
237
245
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//go:build unix
|
|
2
|
+
|
|
3
|
+
package tsworkspace
|
|
4
|
+
|
|
5
|
+
import (
|
|
6
|
+
"os/exec"
|
|
7
|
+
"syscall"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
func configureToolCommand(cmd *exec.Cmd) {
|
|
11
|
+
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
func killToolCommand(cmd *exec.Cmd) {
|
|
15
|
+
if cmd == nil || cmd.Process == nil {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
_ = syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
|
|
19
|
+
}
|
|
@@ -132,6 +132,16 @@ func (o *TypeScriptEmitOwner) renderLoweredFile(pkg *loweredPackage, file *lower
|
|
|
132
132
|
b.WriteString(imp.source)
|
|
133
133
|
b.WriteString("\"\n")
|
|
134
134
|
}
|
|
135
|
+
sideEffectImports := make(map[string]bool)
|
|
136
|
+
for _, imp := range file.imports {
|
|
137
|
+
if !imp.sideEffect || sideEffectImports[imp.source] {
|
|
138
|
+
continue
|
|
139
|
+
}
|
|
140
|
+
sideEffectImports[imp.source] = true
|
|
141
|
+
b.WriteString("import \"")
|
|
142
|
+
b.WriteString(imp.source)
|
|
143
|
+
b.WriteString("\"\n")
|
|
144
|
+
}
|
|
135
145
|
if len(file.imports) != 0 {
|
|
136
146
|
b.WriteString("\n")
|
|
137
147
|
}
|
|
@@ -251,6 +261,8 @@ func structZeroValueDeps(structType *loweredStruct, names map[string]bool) []str
|
|
|
251
261
|
func renderStruct(b *strings.Builder, structType *loweredStruct, runtimeOwner *RuntimeContractOwner) {
|
|
252
262
|
varRef := runtimeOwner.QualifiedHelper(RuntimeHelperVarRef)
|
|
253
263
|
markStructValue := runtimeOwner.QualifiedHelper(RuntimeHelperMarkAsStructValue)
|
|
264
|
+
cloneStructValue := runtimeOwner.QualifiedHelper(RuntimeHelperCloneStructValue)
|
|
265
|
+
cloneArrayValue := runtimeOwner.QualifiedHelper(RuntimeHelperCloneArrayValue)
|
|
254
266
|
registerStructType := runtimeOwner.QualifiedHelper(RuntimeHelperRegisterStructType)
|
|
255
267
|
if structType.exported {
|
|
256
268
|
b.WriteString("export ")
|
|
@@ -305,9 +317,20 @@ func renderStruct(b *strings.Builder, structType *loweredStruct, runtimeOwner *R
|
|
|
305
317
|
b.WriteString(field.name)
|
|
306
318
|
b.WriteString(" ? ")
|
|
307
319
|
b.WriteString(markStructValue)
|
|
320
|
+
b.WriteString("(")
|
|
321
|
+
b.WriteString(cloneStructValue)
|
|
322
|
+
b.WriteString("(init.")
|
|
323
|
+
b.WriteString(field.name)
|
|
324
|
+
b.WriteString(")) : ")
|
|
325
|
+
b.WriteString(field.zero)
|
|
326
|
+
} else if field.arrayValue {
|
|
327
|
+
b.WriteString("init?.")
|
|
328
|
+
b.WriteString(field.name)
|
|
329
|
+
b.WriteString(" !== undefined ? ")
|
|
330
|
+
b.WriteString(cloneArrayValue)
|
|
308
331
|
b.WriteString("(init.")
|
|
309
332
|
b.WriteString(field.name)
|
|
310
|
-
b.WriteString("
|
|
333
|
+
b.WriteString(") : ")
|
|
311
334
|
b.WriteString(field.zero)
|
|
312
335
|
} else {
|
|
313
336
|
b.WriteString("init?.")
|
|
@@ -337,9 +360,16 @@ func renderStruct(b *strings.Builder, structType *loweredStruct, runtimeOwner *R
|
|
|
337
360
|
b.WriteString("(")
|
|
338
361
|
if field.structValue {
|
|
339
362
|
b.WriteString(markStructValue)
|
|
363
|
+
b.WriteString("(")
|
|
364
|
+
b.WriteString(cloneStructValue)
|
|
340
365
|
b.WriteString("(this._fields.")
|
|
341
366
|
b.WriteString(field.name)
|
|
342
|
-
b.WriteString(".value
|
|
367
|
+
b.WriteString(".value))")
|
|
368
|
+
} else if field.arrayValue {
|
|
369
|
+
b.WriteString(cloneArrayValue)
|
|
370
|
+
b.WriteString("(this._fields.")
|
|
371
|
+
b.WriteString(field.name)
|
|
372
|
+
b.WriteString(".value)")
|
|
343
373
|
} else {
|
|
344
374
|
b.WriteString("this._fields.")
|
|
345
375
|
b.WriteString(field.name)
|
|
@@ -421,6 +451,7 @@ func renderFunction(b *strings.Builder, fn *loweredFunction) {
|
|
|
421
451
|
}
|
|
422
452
|
b.WriteString("function ")
|
|
423
453
|
b.WriteString(fn.name)
|
|
454
|
+
renderFunctionTypeParams(b, fn)
|
|
424
455
|
b.WriteString("(")
|
|
425
456
|
for idx, param := range fn.params {
|
|
426
457
|
if idx != 0 {
|
|
@@ -463,6 +494,7 @@ func renderMethod(b *strings.Builder, fn *loweredFunction) {
|
|
|
463
494
|
b.WriteString("async ")
|
|
464
495
|
}
|
|
465
496
|
b.WriteString(fn.name)
|
|
497
|
+
renderFunctionTypeParams(b, fn)
|
|
466
498
|
b.WriteString("(")
|
|
467
499
|
for idx, param := range fn.params {
|
|
468
500
|
if idx != 0 {
|
|
@@ -499,6 +531,20 @@ func renderMethod(b *strings.Builder, fn *loweredFunction) {
|
|
|
499
531
|
b.WriteString("}\n")
|
|
500
532
|
}
|
|
501
533
|
|
|
534
|
+
func renderFunctionTypeParams(b *strings.Builder, fn *loweredFunction) {
|
|
535
|
+
if len(fn.typeParams) == 0 {
|
|
536
|
+
return
|
|
537
|
+
}
|
|
538
|
+
b.WriteString("<")
|
|
539
|
+
for idx, typeParam := range fn.typeParams {
|
|
540
|
+
if idx != 0 {
|
|
541
|
+
b.WriteString(", ")
|
|
542
|
+
}
|
|
543
|
+
b.WriteString(typeParam)
|
|
544
|
+
}
|
|
545
|
+
b.WriteString(">")
|
|
546
|
+
}
|
|
547
|
+
|
|
502
548
|
func receiverValue(fn *loweredFunction) string {
|
|
503
549
|
if fn.receiverValue != "" {
|
|
504
550
|
return fn.receiverValue
|
|
@@ -774,7 +820,7 @@ func renderSelect(b *strings.Builder, stmt *loweredSelect, indent int) {
|
|
|
774
820
|
}
|
|
775
821
|
b.WriteString(">([\n")
|
|
776
822
|
for idx, switchCase := range stmt.cases {
|
|
777
|
-
renderSelectCase(b, switchCase, stmt.external, indent+1)
|
|
823
|
+
renderSelectCase(b, switchCase, stmt.external, stmt.result, indent+1)
|
|
778
824
|
if idx != len(stmt.cases)-1 {
|
|
779
825
|
b.WriteString(",")
|
|
780
826
|
}
|
|
@@ -821,7 +867,9 @@ func renderSelectExternalBodies(b *strings.Builder, stmt *loweredSelect, indent
|
|
|
821
867
|
writeIndent(b, indent+2)
|
|
822
868
|
b.WriteString("{\n")
|
|
823
869
|
writeIndent(b, indent+3)
|
|
824
|
-
b.WriteString("const
|
|
870
|
+
b.WriteString("const ")
|
|
871
|
+
b.WriteString(stmt.result)
|
|
872
|
+
b.WriteString(" = ")
|
|
825
873
|
b.WriteString(stmt.value)
|
|
826
874
|
b.WriteString("\n")
|
|
827
875
|
renderStmts(b, switchCase.prelude, indent+3)
|
|
@@ -839,7 +887,7 @@ func renderSelectExternalBodies(b *strings.Builder, stmt *loweredSelect, indent
|
|
|
839
887
|
}
|
|
840
888
|
}
|
|
841
889
|
|
|
842
|
-
func renderSelectCase(b *strings.Builder, switchCase loweredSelectCase, external bool, indent int) {
|
|
890
|
+
func renderSelectCase(b *strings.Builder, switchCase loweredSelectCase, external bool, resultName string, indent int) {
|
|
843
891
|
writeIndent(b, indent)
|
|
844
892
|
b.WriteString("{\n")
|
|
845
893
|
writeIndent(b, indent+1)
|
|
@@ -865,10 +913,14 @@ func renderSelectCase(b *strings.Builder, switchCase loweredSelectCase, external
|
|
|
865
913
|
b.WriteString(",\n")
|
|
866
914
|
}
|
|
867
915
|
writeIndent(b, indent+1)
|
|
868
|
-
b.WriteString("onSelected: async (
|
|
916
|
+
b.WriteString("onSelected: async (")
|
|
917
|
+
b.WriteString(resultName)
|
|
918
|
+
b.WriteString(") => {\n")
|
|
869
919
|
if external {
|
|
870
920
|
writeIndent(b, indent+2)
|
|
871
|
-
b.WriteString("return
|
|
921
|
+
b.WriteString("return ")
|
|
922
|
+
b.WriteString(resultName)
|
|
923
|
+
b.WriteString("\n")
|
|
872
924
|
writeIndent(b, indent+1)
|
|
873
925
|
b.WriteString("}\n")
|
|
874
926
|
writeIndent(b, indent)
|
|
@@ -876,13 +928,67 @@ func renderSelectCase(b *strings.Builder, switchCase loweredSelectCase, external
|
|
|
876
928
|
return
|
|
877
929
|
}
|
|
878
930
|
renderStmts(b, switchCase.prelude, indent+2)
|
|
879
|
-
|
|
931
|
+
renderSelectCaseStmts(b, switchCase.body, indent+2)
|
|
880
932
|
writeIndent(b, indent+1)
|
|
881
933
|
b.WriteString("}\n")
|
|
882
934
|
writeIndent(b, indent)
|
|
883
935
|
b.WriteString("}")
|
|
884
936
|
}
|
|
885
937
|
|
|
938
|
+
func renderSelectCaseStmts(b *strings.Builder, stmts []loweredStmt, indent int) {
|
|
939
|
+
for idx, stmt := range stmts {
|
|
940
|
+
renderLeadingLines(b, stmt.leading, indent)
|
|
941
|
+
if stmt.rangeFunc != nil {
|
|
942
|
+
renderRangeFunc(b, stmt.rangeFunc, indent)
|
|
943
|
+
continue
|
|
944
|
+
}
|
|
945
|
+
if stmt.switchStmt != nil {
|
|
946
|
+
renderSwitch(b, stmt.switchStmt, indent)
|
|
947
|
+
continue
|
|
948
|
+
}
|
|
949
|
+
if stmt.selectStmt != nil {
|
|
950
|
+
renderSelect(b, stmt.selectStmt, indent)
|
|
951
|
+
continue
|
|
952
|
+
}
|
|
953
|
+
if stmt.typeSwitch != nil {
|
|
954
|
+
renderTypeSwitch(b, stmt.typeSwitch, indent)
|
|
955
|
+
continue
|
|
956
|
+
}
|
|
957
|
+
writeIndent(b, indent)
|
|
958
|
+
if stmt.text == "" && (stmt.hasBlock || len(stmt.children) != 0) {
|
|
959
|
+
b.WriteString("{\n")
|
|
960
|
+
renderSelectCaseStmts(b, stmt.children, indent+1)
|
|
961
|
+
writeIndent(b, indent)
|
|
962
|
+
b.WriteString("}\n")
|
|
963
|
+
continue
|
|
964
|
+
}
|
|
965
|
+
if strings.TrimSpace(stmt.text) == "return" {
|
|
966
|
+
b.WriteString("return $.selectVoidReturn()\n")
|
|
967
|
+
continue
|
|
968
|
+
}
|
|
969
|
+
writeIndentedText(b, stmt.text, indent)
|
|
970
|
+
if !stmt.hasBlock && len(stmt.children) == 0 {
|
|
971
|
+
if idx+1 < len(stmts) && needsASIBarrier(stmt, stmts[idx+1]) {
|
|
972
|
+
b.WriteString(";")
|
|
973
|
+
}
|
|
974
|
+
b.WriteString("\n")
|
|
975
|
+
continue
|
|
976
|
+
}
|
|
977
|
+
b.WriteString(" {\n")
|
|
978
|
+
renderSelectCaseStmts(b, stmt.children, indent+1)
|
|
979
|
+
writeIndent(b, indent)
|
|
980
|
+
b.WriteString("}")
|
|
981
|
+
if len(stmt.elseBody) == 0 {
|
|
982
|
+
b.WriteString("\n")
|
|
983
|
+
continue
|
|
984
|
+
}
|
|
985
|
+
b.WriteString(" else {\n")
|
|
986
|
+
renderSelectCaseStmts(b, stmt.elseBody, indent+1)
|
|
987
|
+
writeIndent(b, indent)
|
|
988
|
+
b.WriteString("}\n")
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
886
992
|
func renderTypeSwitch(b *strings.Builder, stmt *loweredTypeSwitch, indent int) {
|
|
887
993
|
writeIndent(b, indent)
|
|
888
994
|
b.WriteString("{\n")
|
|
@@ -965,7 +1071,11 @@ func renderTypeSwitchInlineBody(
|
|
|
965
1071
|
indent int,
|
|
966
1072
|
) {
|
|
967
1073
|
if varName == "" {
|
|
968
|
-
|
|
1074
|
+
writeIndent(b, indent)
|
|
1075
|
+
b.WriteString("{\n")
|
|
1076
|
+
renderStmts(b, body, indent+1)
|
|
1077
|
+
writeIndent(b, indent)
|
|
1078
|
+
b.WriteString("}\n")
|
|
969
1079
|
return
|
|
970
1080
|
}
|
|
971
1081
|
writeIndent(b, indent)
|
|
@@ -1002,6 +1112,9 @@ func renderTypeSwitchInlineBody(
|
|
|
1002
1112
|
func renderIndex(pkg *loweredPackage) string {
|
|
1003
1113
|
var lines []string
|
|
1004
1114
|
for _, file := range pkg.files {
|
|
1115
|
+
if file.sideEffect {
|
|
1116
|
+
lines = append(lines, "import \"./"+file.outputName+"\"")
|
|
1117
|
+
}
|
|
1005
1118
|
exports := slices.Clone(file.exports)
|
|
1006
1119
|
slices.Sort(exports)
|
|
1007
1120
|
if len(exports) != 0 {
|
|
@@ -10,11 +10,16 @@ export declare function print(...args: any[]): void;
|
|
|
10
10
|
* @param args Arguments to print
|
|
11
11
|
*/
|
|
12
12
|
export declare function println(...args: any[]): void;
|
|
13
|
+
export declare class GoPanic extends Error {
|
|
14
|
+
readonly value: unknown;
|
|
15
|
+
constructor(value: unknown);
|
|
16
|
+
}
|
|
13
17
|
/**
|
|
14
18
|
* Implementation of Go's built-in panic function
|
|
15
19
|
* @param args Arguments passed to panic
|
|
16
20
|
*/
|
|
17
|
-
export declare function panic(...args:
|
|
21
|
+
export declare function panic(...args: unknown[]): never;
|
|
22
|
+
export declare function panicValue(value: unknown): unknown;
|
|
18
23
|
/**
|
|
19
24
|
* Implementation of Go's built-in clear function.
|
|
20
25
|
* For slices, it sets all elements to their zero value.
|
|
@@ -35,7 +40,9 @@ export declare function assignStruct<T>(target: T, source: T): void;
|
|
|
35
40
|
* variable's address.
|
|
36
41
|
*/
|
|
37
42
|
export declare function pointerValue<T>(value: T | VarRef<T> | null | undefined): T;
|
|
43
|
+
export declare function pointerValueOrNil<T>(value: T | VarRef<T> | null | undefined): T | null;
|
|
38
44
|
export declare function arrayEqual(a: unknown, b: unknown): boolean;
|
|
45
|
+
export declare function comparableEqual(a: unknown, b: unknown): boolean;
|
|
39
46
|
export interface Complex {
|
|
40
47
|
real: number;
|
|
41
48
|
imag: number;
|
|
@@ -48,13 +55,25 @@ export declare function int(value: number | bigint, bits?: number): number;
|
|
|
48
55
|
export declare function uint(value: number | bigint, bits?: number): number;
|
|
49
56
|
export declare function uint64Shl(value: number | bigint, shift: number | bigint): number;
|
|
50
57
|
export declare function uint64Shr(value: number | bigint, shift: number | bigint): number;
|
|
58
|
+
export declare function int64Shl(value: number | bigint, shift: number | bigint): number;
|
|
59
|
+
export declare function int64Shr(value: number | bigint, shift: number | bigint): number;
|
|
51
60
|
export declare function uintShr(value: number | bigint, shift: number | bigint, bits?: number): number;
|
|
52
61
|
export declare function uint64Mul(left: number | bigint, right: number | bigint): number;
|
|
62
|
+
export declare function int64Mul(left: number | bigint, right: number | bigint): number;
|
|
63
|
+
export declare function uint64Div(left: number | bigint, right: number | bigint): number;
|
|
64
|
+
export declare function int64Div(left: number | bigint, right: number | bigint): number;
|
|
65
|
+
export declare function uint64Mod(left: number | bigint, right: number | bigint): number;
|
|
66
|
+
export declare function int64Mod(left: number | bigint, right: number | bigint): number;
|
|
53
67
|
export declare function uint64Add(left: number | bigint, right: number | bigint): number;
|
|
68
|
+
export declare function int64Add(left: number | bigint, right: number | bigint): number;
|
|
54
69
|
export declare function uint64Sub(left: number | bigint, right: number | bigint): number;
|
|
70
|
+
export declare function int64Sub(left: number | bigint, right: number | bigint): number;
|
|
55
71
|
export declare function uint64And(left: number | bigint, right: number | bigint): number;
|
|
72
|
+
export declare function int64And(left: number | bigint, right: number | bigint): number;
|
|
56
73
|
export declare function uint64Or(left: number | bigint, right: number | bigint): number;
|
|
74
|
+
export declare function int64Or(left: number | bigint, right: number | bigint): number;
|
|
57
75
|
export declare function uint64Xor(left: number | bigint, right: number | bigint): number;
|
|
76
|
+
export declare function int64Xor(left: number | bigint, right: number | bigint): number;
|
|
58
77
|
/**
|
|
59
78
|
* Normalizes various byte representations into a `Uint8Array` for protobuf compatibility.
|
|
60
79
|
*
|