goscript 0.0.84 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -243
- package/cmd/goscript/cmd-test.go +193 -0
- package/cmd/goscript/cmd-test_test.go +76 -0
- package/cmd/goscript/cmd_compile.go +70 -69
- package/cmd/goscript/cmd_compile_test.go +79 -0
- package/cmd/goscript/main.go +11 -5
- package/compiler/build-flags.go +38 -0
- package/compiler/compile-request.go +220 -0
- package/compiler/compiler.go +16 -1336
- package/compiler/compliance_test.go +188 -0
- package/compiler/config.go +6 -13
- package/compiler/diagnostic.go +70 -0
- package/compiler/gotest/owner.go +24 -0
- package/compiler/gotest/package-result.go +67 -0
- package/compiler/gotest/request.go +145 -0
- package/compiler/gotest/result.go +28 -0
- package/compiler/gotest/runner.go +588 -0
- package/compiler/gotest/runner_test.go +627 -0
- package/compiler/gotest/test.go +9 -0
- package/compiler/index.test.ts +28 -28
- package/compiler/index.ts +40 -72
- package/compiler/lowered-program.go +184 -0
- package/compiler/lowering.go +8072 -0
- package/compiler/override-facts.go +307 -0
- package/compiler/override-registry.go +283 -0
- package/compiler/override-registry_test.go +254 -0
- package/compiler/package-graph.go +254 -0
- package/compiler/package-graph_test.go +316 -0
- package/compiler/package-test-function.go +9 -0
- package/compiler/package-test-graph-package.go +40 -0
- package/compiler/package-test-graph-variant.go +105 -0
- package/compiler/package-test-graph.go +117 -0
- package/compiler/package-test-graph_test.go +144 -0
- package/compiler/result.go +13 -0
- package/compiler/runtime-contract.go +439 -0
- package/compiler/runtime-contract_test.go +104 -0
- package/compiler/semantic-model-types.go +113 -0
- package/compiler/semantic-model.go +1422 -0
- package/compiler/semantic-model_test.go +471 -0
- package/compiler/service.go +133 -0
- package/compiler/skeleton_test.go +1775 -0
- package/compiler/tsworkspace/owner.go +334 -0
- package/compiler/tsworkspace/owner_test.go +93 -0
- package/compiler/tsworkspace/result.go +17 -0
- package/compiler/typescript-emitter.go +1040 -0
- package/compiler/wasm/compile.go +2 -3
- package/compiler/wasm/compile_test.go +79 -0
- package/compiler/wasm_api.go +140 -124
- package/dist/compiler/index.d.ts +1 -3
- package/dist/compiler/index.js +31 -55
- package/dist/compiler/index.js.map +1 -1
- package/dist/gs/builtin/builtin.d.ts +33 -2
- package/dist/gs/builtin/builtin.js +217 -6
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +11 -3
- package/dist/gs/builtin/channel.js +12 -0
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +15 -1
- package/dist/gs/builtin/hostio.js +134 -49
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/index.d.ts +1 -0
- package/dist/gs/builtin/index.js +1 -0
- package/dist/gs/builtin/index.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +23 -3
- package/dist/gs/builtin/slice.js +216 -44
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +16 -2
- package/dist/gs/builtin/type.js +134 -21
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +5 -0
- package/dist/gs/builtin/varRef.js +23 -0
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +48 -44
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/bytes.gs.js.map +1 -1
- package/dist/gs/bytes/reader.gs.js +20 -18
- package/dist/gs/bytes/reader.gs.js.map +1 -1
- package/dist/gs/context/context.d.ts +5 -4
- package/dist/gs/context/context.js +10 -10
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
- package/dist/gs/crypto/rand/index.d.ts +5 -0
- package/dist/gs/crypto/rand/index.js +77 -0
- package/dist/gs/crypto/rand/index.js.map +1 -0
- package/dist/gs/embed/index.d.ts +7 -0
- package/dist/gs/embed/index.js +16 -0
- package/dist/gs/embed/index.js.map +1 -0
- package/dist/gs/encoding/json/index.d.ts +4 -0
- package/dist/gs/encoding/json/index.js +178 -0
- package/dist/gs/encoding/json/index.js.map +1 -0
- package/dist/gs/errors/errors.d.ts +4 -0
- package/dist/gs/errors/errors.js +81 -0
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/fmt/fmt.d.ts +4 -4
- package/dist/gs/fmt/fmt.js +42 -11
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
- package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
- package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
- package/dist/gs/go/internal/scannerhooks/index.js +5 -0
- package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
- package/dist/gs/go/scanner/index.d.ts +42 -0
- package/dist/gs/go/scanner/index.js +155 -0
- package/dist/gs/go/scanner/index.js.map +1 -0
- package/dist/gs/go/token/index.d.ts +187 -0
- package/dist/gs/go/token/index.js +578 -0
- package/dist/gs/go/token/index.js.map +1 -0
- package/dist/gs/internal/abi/index.d.ts +4 -0
- package/dist/gs/internal/abi/index.js +10 -0
- package/dist/gs/internal/abi/index.js.map +1 -1
- package/dist/gs/internal/bytealg/index.d.ts +2 -0
- package/dist/gs/internal/bytealg/index.js +14 -0
- package/dist/gs/internal/bytealg/index.js.map +1 -1
- package/dist/gs/internal/byteorder/index.d.ts +8 -2
- package/dist/gs/internal/byteorder/index.js +56 -25
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/internal/godebug/index.d.ts +12 -0
- package/dist/gs/internal/godebug/index.js +30 -0
- package/dist/gs/internal/godebug/index.js.map +1 -0
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/io/fs/index.d.ts +1 -0
- package/dist/gs/io/fs/index.js +1 -0
- package/dist/gs/io/fs/index.js.map +1 -1
- package/dist/gs/io/fs/readdir.js.map +1 -1
- package/dist/gs/io/fs/readfile.js.map +1 -1
- package/dist/gs/io/fs/readlink.d.ts +8 -0
- package/dist/gs/io/fs/readlink.js +64 -0
- package/dist/gs/io/fs/readlink.js.map +1 -0
- package/dist/gs/io/fs/stat.js.map +1 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/fs/walk.d.ts +3 -3
- package/dist/gs/io/fs/walk.js +7 -7
- package/dist/gs/io/fs/walk.js.map +1 -1
- package/dist/gs/io/io.d.ts +40 -6
- package/dist/gs/io/io.js +151 -26
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/maps/iter.d.ts +3 -3
- package/dist/gs/maps/iter.js +3 -3
- package/dist/gs/maps/iter.js.map +1 -1
- package/dist/gs/maps/maps.d.ts +2 -2
- package/dist/gs/maps/maps.js +1 -1
- package/dist/gs/maps/maps.js.map +1 -1
- package/dist/gs/math/bits/index.d.ts +13 -4
- package/dist/gs/math/bits/index.js +66 -34
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/math/const.gs.d.ts +5 -5
- package/dist/gs/math/const.gs.js +4 -4
- package/dist/gs/math/const.gs.js.map +1 -1
- package/dist/gs/mime/index.d.ts +1 -0
- package/dist/gs/mime/index.js +50 -0
- package/dist/gs/mime/index.js.map +1 -0
- package/dist/gs/net/http/httptest/index.d.ts +11 -0
- package/dist/gs/net/http/httptest/index.js +21 -0
- package/dist/gs/net/http/httptest/index.js.map +1 -0
- package/dist/gs/net/http/index.d.ts +27 -0
- package/dist/gs/net/http/index.js +61 -0
- package/dist/gs/net/http/index.js.map +1 -0
- package/dist/gs/os/dir_unix.gs.js +2 -2
- package/dist/gs/os/dir_unix.gs.js.map +1 -1
- package/dist/gs/os/error.gs.js +2 -4
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/exec.gs.js.map +1 -1
- package/dist/gs/os/exec_posix.gs.js.map +1 -1
- package/dist/gs/os/rawconn_js.gs.js.map +1 -1
- package/dist/gs/os/root_js.gs.js.map +1 -1
- package/dist/gs/os/tempfile.gs.js +66 -9
- package/dist/gs/os/tempfile.gs.js.map +1 -1
- package/dist/gs/os/types.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +9 -9
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/path/filepath/match.js +165 -3
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/filepath/path.d.ts +3 -1
- package/dist/gs/path/filepath/path.js +133 -4
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/path/match.js.map +1 -1
- package/dist/gs/path/path.d.ts +4 -1
- package/dist/gs/path/path.js +16 -4
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -3
- package/dist/gs/reflect/index.js +2 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +3 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +9 -5
- package/dist/gs/reflect/type.js +233 -21
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/debug/index.d.ts +2 -0
- package/dist/gs/runtime/debug/index.js +8 -0
- package/dist/gs/runtime/debug/index.js.map +1 -0
- package/dist/gs/runtime/runtime.d.ts +35 -3
- package/dist/gs/runtime/runtime.js +72 -0
- package/dist/gs/runtime/runtime.js.map +1 -1
- package/dist/gs/slices/slices.d.ts +24 -5
- package/dist/gs/slices/slices.js +214 -5
- package/dist/gs/slices/slices.js.map +1 -1
- package/dist/gs/sort/slice.gs.d.ts +3 -3
- package/dist/gs/sort/slice.gs.js +6 -6
- package/dist/gs/sort/slice.gs.js.map +1 -1
- package/dist/gs/sort/sort.gs.d.ts +4 -4
- package/dist/gs/sort/sort.gs.js +11 -8
- package/dist/gs/sort/sort.gs.js.map +1 -1
- package/dist/gs/strconv/atoi.gs.js.map +1 -1
- package/dist/gs/strconv/quote.gs.js.map +1 -1
- package/dist/gs/strings/builder.d.ts +1 -1
- package/dist/gs/strings/builder.js +3 -2
- package/dist/gs/strings/builder.js.map +1 -1
- package/dist/gs/strings/reader.js.map +1 -1
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
- package/dist/gs/sync/atomic/type.gs.js +0 -2
- package/dist/gs/sync/atomic/type.gs.js.map +1 -1
- package/dist/gs/sync/atomic/value.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +3 -0
- package/dist/gs/sync/sync.js +39 -0
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/constants.d.ts +36 -24
- package/dist/gs/syscall/constants.js +12 -0
- package/dist/gs/syscall/constants.js.map +1 -1
- package/dist/gs/syscall/errors.d.ts +2 -0
- package/dist/gs/syscall/errors.js +8 -0
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +43 -0
- package/dist/gs/syscall/fs.js +102 -0
- package/dist/gs/syscall/fs.js.map +1 -1
- package/dist/gs/syscall/js/index.d.ts +90 -0
- package/dist/gs/syscall/js/index.js +375 -0
- package/dist/gs/syscall/js/index.js.map +1 -0
- package/dist/gs/syscall/types.d.ts +22 -0
- package/dist/gs/syscall/types.js +45 -1
- package/dist/gs/syscall/types.js.map +1 -1
- package/dist/gs/testing/index.d.ts +1 -0
- package/dist/gs/testing/index.js +2 -0
- package/dist/gs/testing/index.js.map +1 -0
- package/dist/gs/testing/testing.d.ts +77 -0
- package/dist/gs/testing/testing.js +301 -0
- package/dist/gs/testing/testing.js.map +1 -0
- package/dist/gs/time/time.d.ts +41 -4
- package/dist/gs/time/time.js +205 -36
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.d.ts +23 -1
- package/dist/gs/unicode/unicode.js +79 -10
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
- package/dist/gs/unicode/utf8/utf8.js +24 -11
- package/dist/gs/unicode/utf8/utf8.js.map +1 -1
- package/dist/gs/unique/index.d.ts +11 -0
- package/dist/gs/unique/index.js +71 -0
- package/dist/gs/unique/index.js.map +1 -0
- package/go.mod +2 -2
- package/go.sum +9 -0
- package/gs/builtin/builtin.ts +266 -8
- package/gs/builtin/channel.ts +22 -0
- package/gs/builtin/hostio.test.ts +177 -0
- package/gs/builtin/hostio.ts +171 -56
- package/gs/builtin/index.ts +1 -0
- package/gs/builtin/runtime-contract.test.ts +356 -0
- package/gs/builtin/slice.ts +259 -50
- package/gs/builtin/type.ts +188 -30
- package/gs/builtin/varRef.ts +38 -1
- package/gs/bytes/buffer.gs.ts +48 -44
- package/gs/bytes/meta.json +8 -3
- package/gs/bytes/reader.gs.ts +20 -19
- package/gs/context/context.test.ts +41 -0
- package/gs/context/context.ts +22 -26
- package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
- package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
- package/gs/crypto/rand/index.test.ts +32 -0
- package/gs/crypto/rand/index.ts +90 -0
- package/gs/crypto/rand/meta.json +5 -0
- package/gs/embed/index.ts +20 -0
- package/gs/embed/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +79 -0
- package/gs/encoding/json/index.ts +210 -0
- package/gs/errors/errors.test.ts +82 -0
- package/gs/errors/errors.ts +104 -0
- package/gs/fmt/fmt.ts +56 -16
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
- package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
- package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
- package/gs/go/internal/scannerhooks/index.test.ts +14 -0
- package/gs/go/internal/scannerhooks/index.ts +9 -0
- package/gs/go/scanner/index.test.ts +72 -0
- package/gs/go/scanner/index.ts +204 -0
- package/gs/go/token/index.test.ts +67 -0
- package/gs/go/token/index.ts +686 -0
- package/gs/internal/abi/index.test.ts +18 -0
- package/gs/internal/abi/index.ts +14 -0
- package/gs/internal/bytealg/index.test.ts +18 -0
- package/gs/internal/bytealg/index.ts +16 -0
- package/gs/internal/byteorder/index.test.ts +39 -0
- package/gs/internal/byteorder/index.ts +100 -27
- package/gs/internal/godebug/index.test.ts +16 -0
- package/gs/internal/godebug/index.ts +35 -0
- package/gs/io/fs/index.ts +1 -0
- package/gs/io/fs/meta.json +5 -0
- package/gs/io/fs/readlink.test.ts +43 -0
- package/gs/io/fs/readlink.ts +77 -0
- package/gs/io/fs/walk.test.ts +61 -0
- package/gs/io/fs/walk.ts +9 -9
- package/gs/io/io.ts +174 -31
- package/gs/io/meta.json +10 -2
- package/gs/maps/iter.ts +12 -6
- package/gs/maps/maps.ts +8 -6
- package/gs/math/bits/index.ts +103 -47
- package/gs/math/const.gs.test.ts +11 -5
- package/gs/math/const.gs.ts +5 -6
- package/gs/mime/index.ts +54 -0
- package/gs/net/http/httptest/index.ts +25 -0
- package/gs/net/http/index.test.ts +20 -0
- package/gs/net/http/index.ts +81 -0
- package/gs/os/dir_unix.gs.ts +2 -3
- package/gs/os/file_unix_js.test.ts +50 -0
- package/gs/os/meta.json +1 -2
- package/gs/os/tempfile.gs.test.ts +85 -0
- package/gs/os/tempfile.gs.ts +71 -11
- package/gs/os/types_js.gs.ts +11 -11
- package/gs/path/filepath/match.test.ts +31 -12
- package/gs/path/filepath/match.ts +178 -3
- package/gs/path/filepath/path.test.ts +25 -0
- package/gs/path/filepath/path.ts +159 -5
- package/gs/path/path.ts +20 -5
- package/gs/reflect/index.ts +2 -1
- package/gs/reflect/map.test.ts +19 -0
- package/gs/reflect/map.ts +4 -0
- package/gs/reflect/type.ts +298 -29
- package/gs/reflect/typefor.test.ts +75 -0
- package/gs/runtime/debug/index.test.ts +24 -0
- package/gs/runtime/debug/index.ts +8 -0
- package/gs/runtime/runtime.test.ts +19 -0
- package/gs/runtime/runtime.ts +98 -3
- package/gs/slices/slices.test.ts +94 -0
- package/gs/slices/slices.ts +245 -5
- package/gs/sort/meta.json +7 -0
- package/gs/sort/slice.gs.ts +16 -7
- package/gs/sort/sort.gs.ts +16 -13
- package/gs/strings/builder.ts +4 -3
- package/gs/sync/atomic/type.gs.ts +13 -14
- package/gs/sync/meta.json +3 -1
- package/gs/sync/sync.test.ts +36 -0
- package/gs/sync/sync.ts +39 -0
- package/gs/syscall/constants.ts +39 -24
- package/gs/syscall/errors.ts +10 -0
- package/gs/syscall/fs.ts +195 -0
- package/gs/syscall/js/index.ts +458 -0
- package/gs/syscall/js/meta.json +4 -0
- package/gs/syscall/net.test.ts +85 -0
- package/gs/syscall/types.ts +56 -0
- package/gs/testing/index.ts +1 -0
- package/gs/testing/meta.json +5 -0
- package/gs/testing/testing.test.ts +90 -0
- package/gs/testing/testing.ts +382 -0
- package/gs/time/time.test.ts +106 -0
- package/gs/time/time.ts +278 -57
- package/gs/unicode/unicode.test.ts +25 -0
- package/gs/unicode/unicode.ts +119 -9
- package/gs/unicode/utf8/utf8.test.ts +13 -0
- package/gs/unicode/utf8/utf8.ts +28 -16
- package/gs/unique/index.ts +91 -0
- package/package.json +14 -13
- package/compiler/analysis.go +0 -3475
- package/compiler/analysis_test.go +0 -338
- package/compiler/assignment.go +0 -580
- package/compiler/builtin_test.go +0 -92
- package/compiler/code-writer.go +0 -115
- package/compiler/compiler_test.go +0 -149
- package/compiler/composite-lit.go +0 -779
- package/compiler/config_test.go +0 -62
- package/compiler/constraint.go +0 -86
- package/compiler/decl.go +0 -801
- package/compiler/expr-call-async.go +0 -188
- package/compiler/expr-call-builtins.go +0 -208
- package/compiler/expr-call-helpers.go +0 -382
- package/compiler/expr-call-make.go +0 -318
- package/compiler/expr-call-type-conversion.go +0 -520
- package/compiler/expr-call.go +0 -413
- package/compiler/expr-selector.go +0 -343
- package/compiler/expr-star.go +0 -82
- package/compiler/expr-type.go +0 -442
- package/compiler/expr-value.go +0 -89
- package/compiler/expr.go +0 -773
- package/compiler/field.go +0 -183
- package/compiler/gs_dependencies_test.go +0 -298
- package/compiler/lit.go +0 -322
- package/compiler/output.go +0 -72
- package/compiler/primitive.go +0 -149
- package/compiler/protobuf.go +0 -697
- package/compiler/sanitize.go +0 -100
- package/compiler/spec-struct.go +0 -995
- package/compiler/spec-value.go +0 -540
- package/compiler/spec.go +0 -725
- package/compiler/stmt-assign.go +0 -664
- package/compiler/stmt-for.go +0 -266
- package/compiler/stmt-range.go +0 -475
- package/compiler/stmt-select.go +0 -262
- package/compiler/stmt-type-switch.go +0 -147
- package/compiler/stmt.go +0 -1308
- package/compiler/type-assert.go +0 -386
- package/compiler/type-info.go +0 -156
- package/compiler/type-utils.go +0 -207
- package/compiler/type.go +0 -892
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"go/ast"
|
|
5
|
-
"go/types"
|
|
6
|
-
"strings"
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
// isCallExprAsync determines if a CallExpr represents an async function/method call
|
|
10
|
-
func (c *GoToTSCompiler) isCallExprAsync(exp *ast.CallExpr) bool {
|
|
11
|
-
switch fun := exp.Fun.(type) {
|
|
12
|
-
case *ast.Ident:
|
|
13
|
-
// Function call (e.g., func())
|
|
14
|
-
if obj := c.objectOfIdent(fun); obj != nil {
|
|
15
|
-
// Check if this is a known async function
|
|
16
|
-
if c.analysis.IsAsyncFunc(obj) {
|
|
17
|
-
return true
|
|
18
|
-
}
|
|
19
|
-
// Check if this is a variable that returns async values
|
|
20
|
-
// (e.g., indirect := sync.OnceValue(asyncFunc))
|
|
21
|
-
if c.analysis.IsAsyncReturningVar(obj) {
|
|
22
|
-
return true
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return false
|
|
26
|
-
|
|
27
|
-
case *ast.SelectorExpr:
|
|
28
|
-
// Method call (e.g., obj.method() or obj.field.method())
|
|
29
|
-
var obj types.Object
|
|
30
|
-
var objOk bool
|
|
31
|
-
|
|
32
|
-
// Handle different patterns of method receiver
|
|
33
|
-
switch x := fun.X.(type) {
|
|
34
|
-
case *ast.Ident:
|
|
35
|
-
// Direct identifier: obj.method()
|
|
36
|
-
obj = c.objectOfIdent(x)
|
|
37
|
-
objOk = obj != nil
|
|
38
|
-
|
|
39
|
-
case *ast.StarExpr:
|
|
40
|
-
// Pointer dereference: (*p).method() or p.method() where p is a pointer
|
|
41
|
-
if id, isIdent := x.X.(*ast.Ident); isIdent {
|
|
42
|
-
obj = c.objectOfIdent(id)
|
|
43
|
-
objOk = obj != nil
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
case *ast.SelectorExpr:
|
|
47
|
-
// Field access: obj.field.method()
|
|
48
|
-
// Get the type of the field access expression
|
|
49
|
-
if fieldType := c.pkg.TypesInfo.TypeOf(x); fieldType != nil {
|
|
50
|
-
objOk = true
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
case *ast.CallExpr:
|
|
54
|
-
// Method call on function result: funcCall().method()
|
|
55
|
-
// Get the type of the function call result
|
|
56
|
-
if callType := c.pkg.TypesInfo.TypeOf(x); callType != nil {
|
|
57
|
-
objOk = true
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
default:
|
|
61
|
-
objOk = false
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if !objOk {
|
|
65
|
-
return false
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Handle package-level function calls (e.g., time.Sleep)
|
|
69
|
-
if obj != nil {
|
|
70
|
-
if pkgName, isPkg := obj.(*types.PkgName); isPkg {
|
|
71
|
-
methodName := fun.Sel.Name
|
|
72
|
-
pkgPath := pkgName.Imported().Path()
|
|
73
|
-
return c.analysis.IsMethodAsync(pkgPath, "", methodName)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Get the type for method calls on objects
|
|
78
|
-
var targetType types.Type
|
|
79
|
-
|
|
80
|
-
if obj != nil {
|
|
81
|
-
// Direct variable case: obj.method()
|
|
82
|
-
if varObj, ok := obj.(*types.Var); ok {
|
|
83
|
-
targetType = varObj.Type()
|
|
84
|
-
} else {
|
|
85
|
-
return false
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
// Field access case: obj.field.method()
|
|
89
|
-
targetType = c.pkg.TypesInfo.TypeOf(fun.X)
|
|
90
|
-
if targetType == nil {
|
|
91
|
-
return false
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
methodName := fun.Sel.Name
|
|
96
|
-
|
|
97
|
-
// Check if target type is an interface
|
|
98
|
-
if interfaceType, isInterface := targetType.Underlying().(*types.Interface); isInterface {
|
|
99
|
-
return c.analysis.IsInterfaceMethodAsync(interfaceType, methodName)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Get the named type from the target type
|
|
103
|
-
var namedType *types.Named
|
|
104
|
-
var namedTypeOk bool
|
|
105
|
-
|
|
106
|
-
// Handle both direct named types and pointer to named types
|
|
107
|
-
switch t := targetType.(type) {
|
|
108
|
-
case *types.Named:
|
|
109
|
-
namedType, namedTypeOk = t, true
|
|
110
|
-
case *types.Pointer:
|
|
111
|
-
if nt, isNamed := t.Elem().(*types.Named); isNamed {
|
|
112
|
-
namedType, namedTypeOk = nt, true
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if !namedTypeOk {
|
|
117
|
-
return false
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
typeName := namedType.Obj().Name()
|
|
121
|
-
|
|
122
|
-
// Determine the package path for the method
|
|
123
|
-
var pkgPath string
|
|
124
|
-
typePkg := namedType.Obj().Pkg()
|
|
125
|
-
if typePkg != nil {
|
|
126
|
-
pkgPath = typePkg.Path()
|
|
127
|
-
} else {
|
|
128
|
-
pkgPath = c.pkg.Types.Path()
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return c.analysis.IsMethodAsync(pkgPath, typeName, methodName)
|
|
132
|
-
|
|
133
|
-
default:
|
|
134
|
-
return false
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// writeAsyncCallIfNeeded writes the await prefix for async function or method calls
|
|
139
|
-
// Returns true if await was written, false otherwise
|
|
140
|
-
func (c *GoToTSCompiler) writeAsyncCallIfNeeded(exp *ast.CallExpr) bool {
|
|
141
|
-
if c.isCallExprAsync(exp) {
|
|
142
|
-
c.tsw.WriteLiterally("await ")
|
|
143
|
-
return true
|
|
144
|
-
}
|
|
145
|
-
return false
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// addNonNullAssertion adds ! for function calls that might return null
|
|
149
|
-
func (c *GoToTSCompiler) addNonNullAssertion(expFun ast.Expr) {
|
|
150
|
-
if funType := c.pkg.TypesInfo.TypeOf(expFun); funType != nil {
|
|
151
|
-
if _, ok := funType.Underlying().(*types.Signature); ok {
|
|
152
|
-
// Check if this is a function parameter identifier that needs not-null assertion
|
|
153
|
-
if ident, isIdent := expFun.(*ast.Ident); isIdent {
|
|
154
|
-
// Check if this identifier is a function parameter
|
|
155
|
-
if obj := c.objectOfIdent(ident); obj != nil {
|
|
156
|
-
if _, isVar := obj.(*types.Var); isVar {
|
|
157
|
-
// This is a variable (including function parameters)
|
|
158
|
-
// Function parameters that are function types need ! assertion
|
|
159
|
-
c.tsw.WriteLiterally("!")
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
} else if selectorExpr, isSelectorExpr := expFun.(*ast.SelectorExpr); isSelectorExpr {
|
|
163
|
-
// Check if this is a field access that returns a function type
|
|
164
|
-
// e.g., s.step where step is a function-typed field
|
|
165
|
-
if selection := c.pkg.TypesInfo.Selections[selectorExpr]; selection != nil {
|
|
166
|
-
// This is a field or method selection
|
|
167
|
-
if selection.Kind() == types.FieldVal {
|
|
168
|
-
// It's a field - function-typed fields may be nil
|
|
169
|
-
c.tsw.WriteLiterally("!")
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
} else if _, isParenExpr := expFun.(*ast.ParenExpr); isParenExpr {
|
|
173
|
-
// Parenthesized function expressions often come from pointer dereferences
|
|
174
|
-
// like (*rel)(), which remain nullable in TypeScript.
|
|
175
|
-
c.tsw.WriteLiterally("!")
|
|
176
|
-
} else if _, isNamed := funType.(*types.Named); isNamed {
|
|
177
|
-
c.tsw.WriteLiterally("!")
|
|
178
|
-
}
|
|
179
|
-
} else {
|
|
180
|
-
// Check if the function type is nullable (e.g., func(...) | null)
|
|
181
|
-
// This handles cases where a function call returns a nullable function
|
|
182
|
-
funTypeStr := funType.String()
|
|
183
|
-
if strings.Contains(funTypeStr, "| null") || strings.Contains(funTypeStr, "null |") {
|
|
184
|
-
c.tsw.WriteLiterally("!")
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"fmt"
|
|
5
|
-
"go/ast"
|
|
6
|
-
"go/token"
|
|
7
|
-
|
|
8
|
-
"github.com/pkg/errors"
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
// builtinFunctions is the definitive list of Go builtin functions handled by the compiler
|
|
12
|
-
var builtinFunctions = map[string]bool{
|
|
13
|
-
"len": true,
|
|
14
|
-
"cap": true,
|
|
15
|
-
"make": true,
|
|
16
|
-
"new": true,
|
|
17
|
-
"append": true,
|
|
18
|
-
"copy": true,
|
|
19
|
-
"delete": true,
|
|
20
|
-
"complex": true,
|
|
21
|
-
"real": true,
|
|
22
|
-
"imag": true,
|
|
23
|
-
"close": true,
|
|
24
|
-
"panic": true,
|
|
25
|
-
"recover": true,
|
|
26
|
-
"print": true,
|
|
27
|
-
"println": true,
|
|
28
|
-
"min": true,
|
|
29
|
-
"max": true,
|
|
30
|
-
"clear": true,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// writeBuiltinFunction handles built-in Go functions
|
|
34
|
-
func (c *GoToTSCompiler) writeBuiltinFunction(exp *ast.CallExpr, funName string) (handled bool, err error) {
|
|
35
|
-
switch funName {
|
|
36
|
-
case "panic":
|
|
37
|
-
c.tsw.WriteLiterally("$.panic")
|
|
38
|
-
return true, nil
|
|
39
|
-
case "println":
|
|
40
|
-
c.tsw.WriteLiterally("$.println")
|
|
41
|
-
return true, nil
|
|
42
|
-
case "len":
|
|
43
|
-
if len(exp.Args) != 1 {
|
|
44
|
-
return true, errors.Errorf("unhandled len call with incorrect number of arguments: %d != 1", len(exp.Args))
|
|
45
|
-
}
|
|
46
|
-
c.tsw.WriteLiterally("$.len")
|
|
47
|
-
return true, nil
|
|
48
|
-
case "cap":
|
|
49
|
-
if len(exp.Args) != 1 {
|
|
50
|
-
return true, errors.Errorf("unhandled cap call with incorrect number of arguments: %d != 1", len(exp.Args))
|
|
51
|
-
}
|
|
52
|
-
c.tsw.WriteLiterally("$.cap")
|
|
53
|
-
return true, nil
|
|
54
|
-
case "new":
|
|
55
|
-
if len(exp.Args) != 1 {
|
|
56
|
-
return true, errors.Errorf("unhandled new call with incorrect number of arguments: %d != 1", len(exp.Args))
|
|
57
|
-
}
|
|
58
|
-
c.tsw.WriteLiterally("new ")
|
|
59
|
-
c.WriteTypeExpr(exp.Args[0]) // This should write the TypeScript type T_ts
|
|
60
|
-
c.tsw.WriteLiterally("()")
|
|
61
|
-
return true, nil
|
|
62
|
-
case "delete":
|
|
63
|
-
if len(exp.Args) != 2 {
|
|
64
|
-
return true, errors.Errorf("unhandled delete call with incorrect number of arguments: %d != 2", len(exp.Args))
|
|
65
|
-
}
|
|
66
|
-
c.tsw.WriteLiterally("$.deleteMapEntry")
|
|
67
|
-
return true, nil
|
|
68
|
-
case "copy":
|
|
69
|
-
if len(exp.Args) != 2 {
|
|
70
|
-
return true, errors.Errorf("unhandled copy call with incorrect number of arguments: %d != 2", len(exp.Args))
|
|
71
|
-
}
|
|
72
|
-
c.tsw.WriteLiterally("$.copy")
|
|
73
|
-
return true, nil
|
|
74
|
-
case "recover":
|
|
75
|
-
if len(exp.Args) != 0 {
|
|
76
|
-
return true, errors.Errorf("unhandled recover call with incorrect number of arguments: %d != 0", len(exp.Args))
|
|
77
|
-
}
|
|
78
|
-
c.tsw.WriteLiterally("$.recover")
|
|
79
|
-
return true, nil
|
|
80
|
-
case "make":
|
|
81
|
-
return true, c.WriteCallExprMake(exp)
|
|
82
|
-
case "string":
|
|
83
|
-
return true, c.writeStringConversion(exp)
|
|
84
|
-
case "close":
|
|
85
|
-
if len(exp.Args) != 1 {
|
|
86
|
-
return true, errors.New("unhandled close call with incorrect number of arguments")
|
|
87
|
-
}
|
|
88
|
-
if err := c.WriteValueExpr(exp.Args[0]); err != nil {
|
|
89
|
-
return true, fmt.Errorf("failed to write channel in close call: %w", err)
|
|
90
|
-
}
|
|
91
|
-
c.tsw.WriteLiterally(".close()")
|
|
92
|
-
return true, nil
|
|
93
|
-
case "append":
|
|
94
|
-
return true, c.writeAppendCall(exp)
|
|
95
|
-
case "min":
|
|
96
|
-
if len(exp.Args) < 1 {
|
|
97
|
-
return true, errors.New("unhandled min call with no arguments")
|
|
98
|
-
}
|
|
99
|
-
c.tsw.WriteLiterally("Math.min(")
|
|
100
|
-
for i, arg := range exp.Args {
|
|
101
|
-
if i > 0 {
|
|
102
|
-
c.tsw.WriteLiterally(", ")
|
|
103
|
-
}
|
|
104
|
-
if err := c.WriteValueExpr(arg); err != nil {
|
|
105
|
-
return true, fmt.Errorf("failed to write argument %d in min call: %w", i, err)
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
c.tsw.WriteLiterally(")")
|
|
109
|
-
return true, nil
|
|
110
|
-
case "max":
|
|
111
|
-
if len(exp.Args) < 1 {
|
|
112
|
-
return true, errors.New("unhandled max call with no arguments")
|
|
113
|
-
}
|
|
114
|
-
c.tsw.WriteLiterally("Math.max(")
|
|
115
|
-
for i, arg := range exp.Args {
|
|
116
|
-
if i > 0 {
|
|
117
|
-
c.tsw.WriteLiterally(", ")
|
|
118
|
-
}
|
|
119
|
-
if err := c.WriteValueExpr(arg); err != nil {
|
|
120
|
-
return true, fmt.Errorf("failed to write argument %d in max call: %w", i, err)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
c.tsw.WriteLiterally(")")
|
|
124
|
-
return true, nil
|
|
125
|
-
case "clear":
|
|
126
|
-
if len(exp.Args) != 1 {
|
|
127
|
-
return true, errors.Errorf("unhandled clear call with incorrect number of arguments: %d != 1", len(exp.Args))
|
|
128
|
-
}
|
|
129
|
-
c.tsw.WriteLiterally("$.clear(")
|
|
130
|
-
if err := c.WriteValueExpr(exp.Args[0]); err != nil {
|
|
131
|
-
return true, fmt.Errorf("failed to write argument in clear call: %w", err)
|
|
132
|
-
}
|
|
133
|
-
c.tsw.WriteLiterally(")")
|
|
134
|
-
return true, nil
|
|
135
|
-
case "byte":
|
|
136
|
-
if len(exp.Args) != 1 {
|
|
137
|
-
return true, errors.Errorf("unhandled byte call with incorrect number of arguments: %d != 1", len(exp.Args))
|
|
138
|
-
}
|
|
139
|
-
c.tsw.WriteLiterally("$.byte(")
|
|
140
|
-
if err := c.WriteValueExpr(exp.Args[0]); err != nil {
|
|
141
|
-
return true, fmt.Errorf("failed to write argument for byte() conversion: %w", err)
|
|
142
|
-
}
|
|
143
|
-
c.tsw.WriteLiterally(")")
|
|
144
|
-
return true, nil
|
|
145
|
-
case "int":
|
|
146
|
-
return true, c.writeIntConversion(exp)
|
|
147
|
-
default:
|
|
148
|
-
return false, nil
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// writeAppendCall handles append() function calls
|
|
153
|
-
func (c *GoToTSCompiler) writeAppendCall(exp *ast.CallExpr) error {
|
|
154
|
-
if len(exp.Args) < 1 {
|
|
155
|
-
return errors.New("unhandled append call with incorrect number of arguments")
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
c.tsw.WriteLiterally("$.append(")
|
|
159
|
-
// The first argument is the slice
|
|
160
|
-
if err := c.WriteValueExpr(exp.Args[0]); err != nil {
|
|
161
|
-
return fmt.Errorf("failed to write slice in append call: %w", err)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// The remaining arguments are the elements to append
|
|
165
|
-
elemsToAppend := exp.Args[1:]
|
|
166
|
-
for i, arg := range elemsToAppend {
|
|
167
|
-
if i > 0 || len(exp.Args) > 1 {
|
|
168
|
-
c.tsw.WriteLiterally(", ")
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Handle ellipsis (spread) for the last argument: append(slice, elems...)
|
|
172
|
-
// The ellipsis can only appear on the last argument, so check if this is the last element
|
|
173
|
-
isLastElement := i == len(elemsToAppend)-1
|
|
174
|
-
if exp.Ellipsis != token.NoPos && isLastElement {
|
|
175
|
-
// Check if the slice is []byte and the argument is a string
|
|
176
|
-
sliceType := c.pkg.TypesInfo.TypeOf(exp.Args[0])
|
|
177
|
-
argType := c.pkg.TypesInfo.TypeOf(arg)
|
|
178
|
-
|
|
179
|
-
if sliceType != nil && argType != nil {
|
|
180
|
-
if c.isByteSliceType(sliceType) && c.isStringType(argType) {
|
|
181
|
-
// Convert string to bytes: append([]byte, string...) -> $.append(slice, ...$.stringToBytes(string))
|
|
182
|
-
c.tsw.WriteLiterally("...$.stringToBytes(")
|
|
183
|
-
if err := c.WriteValueExpr(arg); err != nil {
|
|
184
|
-
return fmt.Errorf("failed to write string argument in append call: %w", err)
|
|
185
|
-
}
|
|
186
|
-
c.tsw.WriteLiterally(")")
|
|
187
|
-
continue
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// For other slice types with ellipsis, use spread operator
|
|
192
|
-
// append(slice, anotherSlice...) -> $.append(slice, ...(anotherSlice || []))
|
|
193
|
-
// The || [] handles the case where anotherSlice is null (nil in Go)
|
|
194
|
-
c.tsw.WriteLiterally("...(")
|
|
195
|
-
if err := c.WriteValueExpr(arg); err != nil {
|
|
196
|
-
return fmt.Errorf("failed to write spread argument in append call: %w", err)
|
|
197
|
-
}
|
|
198
|
-
c.tsw.WriteLiterally(" || [])")
|
|
199
|
-
continue
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
if err := c.WriteValueExpr(arg); err != nil {
|
|
203
|
-
return fmt.Errorf("failed to write argument %d in append call: %w", i+1, err)
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
c.tsw.WriteLiterally(")")
|
|
207
|
-
return nil
|
|
208
|
-
}
|