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
|
@@ -0,0 +1,686 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js'
|
|
2
|
+
|
|
3
|
+
export type Token = number
|
|
4
|
+
export type Pos = number
|
|
5
|
+
|
|
6
|
+
export const ILLEGAL: Token = 0
|
|
7
|
+
export const EOF: Token = 1
|
|
8
|
+
export const COMMENT: Token = 2
|
|
9
|
+
const literal_beg: Token = 3
|
|
10
|
+
export const IDENT: Token = 4
|
|
11
|
+
export const INT: Token = 5
|
|
12
|
+
export const FLOAT: Token = 6
|
|
13
|
+
export const IMAG: Token = 7
|
|
14
|
+
export const CHAR: Token = 8
|
|
15
|
+
export const STRING: Token = 9
|
|
16
|
+
const literal_end: Token = 10
|
|
17
|
+
const operator_beg: Token = 11
|
|
18
|
+
export const ADD: Token = 12
|
|
19
|
+
export const SUB: Token = 13
|
|
20
|
+
export const MUL: Token = 14
|
|
21
|
+
export const QUO: Token = 15
|
|
22
|
+
export const REM: Token = 16
|
|
23
|
+
export const AND: Token = 17
|
|
24
|
+
export const OR: Token = 18
|
|
25
|
+
export const XOR: Token = 19
|
|
26
|
+
export const SHL: Token = 20
|
|
27
|
+
export const SHR: Token = 21
|
|
28
|
+
export const AND_NOT: Token = 22
|
|
29
|
+
export const ADD_ASSIGN: Token = 23
|
|
30
|
+
export const SUB_ASSIGN: Token = 24
|
|
31
|
+
export const MUL_ASSIGN: Token = 25
|
|
32
|
+
export const QUO_ASSIGN: Token = 26
|
|
33
|
+
export const REM_ASSIGN: Token = 27
|
|
34
|
+
export const AND_ASSIGN: Token = 28
|
|
35
|
+
export const OR_ASSIGN: Token = 29
|
|
36
|
+
export const XOR_ASSIGN: Token = 30
|
|
37
|
+
export const SHL_ASSIGN: Token = 31
|
|
38
|
+
export const SHR_ASSIGN: Token = 32
|
|
39
|
+
export const AND_NOT_ASSIGN: Token = 33
|
|
40
|
+
export const LAND: Token = 34
|
|
41
|
+
export const LOR: Token = 35
|
|
42
|
+
export const ARROW: Token = 36
|
|
43
|
+
export const INC: Token = 37
|
|
44
|
+
export const DEC: Token = 38
|
|
45
|
+
export const EQL: Token = 39
|
|
46
|
+
export const LSS: Token = 40
|
|
47
|
+
export const GTR: Token = 41
|
|
48
|
+
export const ASSIGN: Token = 42
|
|
49
|
+
export const NOT: Token = 43
|
|
50
|
+
export const NEQ: Token = 44
|
|
51
|
+
export const LEQ: Token = 45
|
|
52
|
+
export const GEQ: Token = 46
|
|
53
|
+
export const DEFINE: Token = 47
|
|
54
|
+
export const ELLIPSIS: Token = 48
|
|
55
|
+
export const LPAREN: Token = 49
|
|
56
|
+
export const LBRACK: Token = 50
|
|
57
|
+
export const LBRACE: Token = 51
|
|
58
|
+
export const COMMA: Token = 52
|
|
59
|
+
export const PERIOD: Token = 53
|
|
60
|
+
export const RPAREN: Token = 54
|
|
61
|
+
export const RBRACK: Token = 55
|
|
62
|
+
export const RBRACE: Token = 56
|
|
63
|
+
export const SEMICOLON: Token = 57
|
|
64
|
+
export const COLON: Token = 58
|
|
65
|
+
const operator_end: Token = 59
|
|
66
|
+
const keyword_beg: Token = 60
|
|
67
|
+
export const BREAK: Token = 61
|
|
68
|
+
export const CASE: Token = 62
|
|
69
|
+
export const CHAN: Token = 63
|
|
70
|
+
export const CONST: Token = 64
|
|
71
|
+
export const CONTINUE: Token = 65
|
|
72
|
+
export const DEFAULT: Token = 66
|
|
73
|
+
export const DEFER: Token = 67
|
|
74
|
+
export const ELSE: Token = 68
|
|
75
|
+
export const FALLTHROUGH: Token = 69
|
|
76
|
+
export const FOR: Token = 70
|
|
77
|
+
export const FUNC: Token = 71
|
|
78
|
+
export const GO: Token = 72
|
|
79
|
+
export const GOTO: Token = 73
|
|
80
|
+
export const IF: Token = 74
|
|
81
|
+
export const IMPORT: Token = 75
|
|
82
|
+
export const INTERFACE: Token = 76
|
|
83
|
+
export const MAP: Token = 77
|
|
84
|
+
export const PACKAGE: Token = 78
|
|
85
|
+
export const RANGE: Token = 79
|
|
86
|
+
export const RETURN: Token = 80
|
|
87
|
+
export const SELECT: Token = 81
|
|
88
|
+
export const STRUCT: Token = 82
|
|
89
|
+
export const SWITCH: Token = 83
|
|
90
|
+
export const TYPE: Token = 84
|
|
91
|
+
export const VAR: Token = 85
|
|
92
|
+
const keyword_end: Token = 86
|
|
93
|
+
export const TILDE: Token = 88
|
|
94
|
+
|
|
95
|
+
export const LowestPrec = 0
|
|
96
|
+
export const UnaryPrec = 6
|
|
97
|
+
export const HighestPrec = 7
|
|
98
|
+
export const NoPos: Pos = 0
|
|
99
|
+
|
|
100
|
+
const tokenStrings = new Map<Token, string>([
|
|
101
|
+
[ILLEGAL, 'ILLEGAL'],
|
|
102
|
+
[EOF, 'EOF'],
|
|
103
|
+
[COMMENT, 'COMMENT'],
|
|
104
|
+
[IDENT, 'IDENT'],
|
|
105
|
+
[INT, 'INT'],
|
|
106
|
+
[FLOAT, 'FLOAT'],
|
|
107
|
+
[IMAG, 'IMAG'],
|
|
108
|
+
[CHAR, 'CHAR'],
|
|
109
|
+
[STRING, 'STRING'],
|
|
110
|
+
[ADD, '+'],
|
|
111
|
+
[SUB, '-'],
|
|
112
|
+
[MUL, '*'],
|
|
113
|
+
[QUO, '/'],
|
|
114
|
+
[REM, '%'],
|
|
115
|
+
[AND, '&'],
|
|
116
|
+
[OR, '|'],
|
|
117
|
+
[XOR, '^'],
|
|
118
|
+
[SHL, '<<'],
|
|
119
|
+
[SHR, '>>'],
|
|
120
|
+
[AND_NOT, '&^'],
|
|
121
|
+
[ADD_ASSIGN, '+='],
|
|
122
|
+
[SUB_ASSIGN, '-='],
|
|
123
|
+
[MUL_ASSIGN, '*='],
|
|
124
|
+
[QUO_ASSIGN, '/='],
|
|
125
|
+
[REM_ASSIGN, '%='],
|
|
126
|
+
[AND_ASSIGN, '&='],
|
|
127
|
+
[OR_ASSIGN, '|='],
|
|
128
|
+
[XOR_ASSIGN, '^='],
|
|
129
|
+
[SHL_ASSIGN, '<<='],
|
|
130
|
+
[SHR_ASSIGN, '>>='],
|
|
131
|
+
[AND_NOT_ASSIGN, '&^='],
|
|
132
|
+
[LAND, '&&'],
|
|
133
|
+
[LOR, '||'],
|
|
134
|
+
[ARROW, '<-'],
|
|
135
|
+
[INC, '++'],
|
|
136
|
+
[DEC, '--'],
|
|
137
|
+
[EQL, '=='],
|
|
138
|
+
[LSS, '<'],
|
|
139
|
+
[GTR, '>'],
|
|
140
|
+
[ASSIGN, '='],
|
|
141
|
+
[NOT, '!'],
|
|
142
|
+
[NEQ, '!='],
|
|
143
|
+
[LEQ, '<='],
|
|
144
|
+
[GEQ, '>='],
|
|
145
|
+
[DEFINE, ':='],
|
|
146
|
+
[ELLIPSIS, '...'],
|
|
147
|
+
[LPAREN, '('],
|
|
148
|
+
[LBRACK, '['],
|
|
149
|
+
[LBRACE, '{'],
|
|
150
|
+
[COMMA, ','],
|
|
151
|
+
[PERIOD, '.'],
|
|
152
|
+
[RPAREN, ')'],
|
|
153
|
+
[RBRACK, ']'],
|
|
154
|
+
[RBRACE, '}'],
|
|
155
|
+
[SEMICOLON, ';'],
|
|
156
|
+
[COLON, ':'],
|
|
157
|
+
[BREAK, 'break'],
|
|
158
|
+
[CASE, 'case'],
|
|
159
|
+
[CHAN, 'chan'],
|
|
160
|
+
[CONST, 'const'],
|
|
161
|
+
[CONTINUE, 'continue'],
|
|
162
|
+
[DEFAULT, 'default'],
|
|
163
|
+
[DEFER, 'defer'],
|
|
164
|
+
[ELSE, 'else'],
|
|
165
|
+
[FALLTHROUGH, 'fallthrough'],
|
|
166
|
+
[FOR, 'for'],
|
|
167
|
+
[FUNC, 'func'],
|
|
168
|
+
[GO, 'go'],
|
|
169
|
+
[GOTO, 'goto'],
|
|
170
|
+
[IF, 'if'],
|
|
171
|
+
[IMPORT, 'import'],
|
|
172
|
+
[INTERFACE, 'interface'],
|
|
173
|
+
[MAP, 'map'],
|
|
174
|
+
[PACKAGE, 'package'],
|
|
175
|
+
[RANGE, 'range'],
|
|
176
|
+
[RETURN, 'return'],
|
|
177
|
+
[SELECT, 'select'],
|
|
178
|
+
[STRUCT, 'struct'],
|
|
179
|
+
[SWITCH, 'switch'],
|
|
180
|
+
[TYPE, 'type'],
|
|
181
|
+
[VAR, 'var'],
|
|
182
|
+
[TILDE, '~'],
|
|
183
|
+
])
|
|
184
|
+
|
|
185
|
+
const keywords = new Map<string, Token>()
|
|
186
|
+
for (let tok = keyword_beg + 1; tok < keyword_end; tok++) {
|
|
187
|
+
keywords.set(tokenStrings.get(tok)!, tok)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
type lineInfo = {
|
|
191
|
+
Offset: number
|
|
192
|
+
Filename: string
|
|
193
|
+
Line: number
|
|
194
|
+
Column: number
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export class Position {
|
|
198
|
+
public get Filename(): string {
|
|
199
|
+
return this._fields.Filename.value
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public set Filename(value: string) {
|
|
203
|
+
this._fields.Filename.value = value
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public get Offset(): number {
|
|
207
|
+
return this._fields.Offset.value
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
public set Offset(value: number) {
|
|
211
|
+
this._fields.Offset.value = value
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
public get Line(): number {
|
|
215
|
+
return this._fields.Line.value
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public set Line(value: number) {
|
|
219
|
+
this._fields.Line.value = value
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
public get Column(): number {
|
|
223
|
+
return this._fields.Column.value
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
public set Column(value: number) {
|
|
227
|
+
this._fields.Column.value = value
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
public _fields: {
|
|
231
|
+
Filename: $.VarRef<string>
|
|
232
|
+
Offset: $.VarRef<number>
|
|
233
|
+
Line: $.VarRef<number>
|
|
234
|
+
Column: $.VarRef<number>
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
constructor(
|
|
238
|
+
init?: Partial<{
|
|
239
|
+
Filename: string
|
|
240
|
+
Offset: number
|
|
241
|
+
Line: number
|
|
242
|
+
Column: number
|
|
243
|
+
}>,
|
|
244
|
+
) {
|
|
245
|
+
this._fields = {
|
|
246
|
+
Filename: $.varRef(init?.Filename ?? ''),
|
|
247
|
+
Offset: $.varRef(init?.Offset ?? 0),
|
|
248
|
+
Line: $.varRef(init?.Line ?? 0),
|
|
249
|
+
Column: $.varRef(init?.Column ?? 0),
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
public clone(): Position {
|
|
254
|
+
return $.markAsStructValue(
|
|
255
|
+
new Position({
|
|
256
|
+
Filename: this.Filename,
|
|
257
|
+
Offset: this.Offset,
|
|
258
|
+
Line: this.Line,
|
|
259
|
+
Column: this.Column,
|
|
260
|
+
}),
|
|
261
|
+
)
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
public IsValid(): boolean {
|
|
265
|
+
return Position_IsValid(this)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
public String(): string {
|
|
269
|
+
return Position_String(this)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
static __typeInfo = $.registerStructType(
|
|
273
|
+
'go/token.Position',
|
|
274
|
+
new Position(),
|
|
275
|
+
[
|
|
276
|
+
{
|
|
277
|
+
name: 'IsValid',
|
|
278
|
+
args: [],
|
|
279
|
+
returns: [{ type: { kind: $.TypeKind.Basic, name: 'bool' } }],
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
name: 'String',
|
|
283
|
+
args: [],
|
|
284
|
+
returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
Position,
|
|
288
|
+
{
|
|
289
|
+
Filename: { kind: $.TypeKind.Basic, name: 'string' },
|
|
290
|
+
Offset: { kind: $.TypeKind.Basic, name: 'int' },
|
|
291
|
+
Line: { kind: $.TypeKind.Basic, name: 'int' },
|
|
292
|
+
Column: { kind: $.TypeKind.Basic, name: 'int' },
|
|
293
|
+
},
|
|
294
|
+
)
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export function Position_IsValid(pos: Position): boolean {
|
|
298
|
+
return pos.Line > 0
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export function Position_String(pos: Position): string {
|
|
302
|
+
let text = pos.Filename
|
|
303
|
+
if (!Position_IsValid(pos)) {
|
|
304
|
+
return text === '' ? '-' : text
|
|
305
|
+
}
|
|
306
|
+
if (text !== '') {
|
|
307
|
+
text += ':'
|
|
308
|
+
}
|
|
309
|
+
text += `${pos.Line}`
|
|
310
|
+
if (pos.Column > 0) {
|
|
311
|
+
text += `:${pos.Column}`
|
|
312
|
+
}
|
|
313
|
+
return text
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
export class File {
|
|
317
|
+
private nameValue: string
|
|
318
|
+
private baseValue: number
|
|
319
|
+
private sizeValue: number
|
|
320
|
+
private linesValue: number[]
|
|
321
|
+
private infosValue: lineInfo[]
|
|
322
|
+
|
|
323
|
+
constructor(
|
|
324
|
+
init?: Partial<{
|
|
325
|
+
name: string
|
|
326
|
+
base: number
|
|
327
|
+
size: number
|
|
328
|
+
lines: number[]
|
|
329
|
+
infos: lineInfo[]
|
|
330
|
+
}>,
|
|
331
|
+
) {
|
|
332
|
+
this.nameValue = init?.name ?? ''
|
|
333
|
+
this.baseValue = init?.base ?? 0
|
|
334
|
+
this.sizeValue = init?.size ?? 0
|
|
335
|
+
this.linesValue = init?.lines?.slice() ?? [0]
|
|
336
|
+
this.infosValue = init?.infos?.slice() ?? []
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
public clone(): File {
|
|
340
|
+
return new File({
|
|
341
|
+
name: this.nameValue,
|
|
342
|
+
base: this.baseValue,
|
|
343
|
+
size: this.sizeValue,
|
|
344
|
+
lines: this.linesValue,
|
|
345
|
+
infos: this.infosValue,
|
|
346
|
+
})
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
public Name(): string {
|
|
350
|
+
return this.nameValue
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
public Base(): number {
|
|
354
|
+
return this.baseValue
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
public Size(): number {
|
|
358
|
+
return this.sizeValue
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
public End(): Pos {
|
|
362
|
+
return this.baseValue + this.sizeValue
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
public LineCount(): number {
|
|
366
|
+
return this.linesValue.length
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
public AddLine(offset: number): void {
|
|
370
|
+
const last = this.linesValue[this.linesValue.length - 1]
|
|
371
|
+
if ((this.linesValue.length === 0 || last < offset) && offset < this.sizeValue) {
|
|
372
|
+
this.linesValue.push(offset)
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
public MergeLine(line: number): void {
|
|
377
|
+
if (line < 1 || line >= this.linesValue.length) {
|
|
378
|
+
$.panic(`invalid line number ${line}`)
|
|
379
|
+
}
|
|
380
|
+
this.linesValue.splice(line, 1)
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
public Lines(): $.Slice<number> {
|
|
384
|
+
return $.arrayToSlice(this.linesValue.slice())
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
public SetLines(lines: $.Slice<number>): boolean {
|
|
388
|
+
const next = $.asArray(lines)
|
|
389
|
+
for (let i = 0; i < next.length; i++) {
|
|
390
|
+
if ((i > 0 && next[i] <= next[i - 1]) || this.sizeValue <= next[i]) {
|
|
391
|
+
return false
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
this.linesValue = next.slice()
|
|
395
|
+
return true
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
public SetLinesForContent(content: $.Slice<number>): void {
|
|
399
|
+
const lines: number[] = []
|
|
400
|
+
let line = 0
|
|
401
|
+
for (let offset = 0; offset < $.len(content); offset++) {
|
|
402
|
+
if (line >= 0) {
|
|
403
|
+
lines.push(line)
|
|
404
|
+
}
|
|
405
|
+
line = -1
|
|
406
|
+
if (content![offset] === 10) {
|
|
407
|
+
line = offset + 1
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
this.linesValue = lines
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
public LineStart(line: number): Pos {
|
|
414
|
+
if (line < 1 || line > this.linesValue.length) {
|
|
415
|
+
$.panic(`invalid line number ${line}`)
|
|
416
|
+
}
|
|
417
|
+
return this.baseValue + this.linesValue[line - 1]
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
public AddLineInfo(offset: number, filename: string, line: number): void {
|
|
421
|
+
this.AddLineColumnInfo(offset, filename, line, 1)
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
public AddLineColumnInfo(
|
|
425
|
+
offset: number,
|
|
426
|
+
filename: string,
|
|
427
|
+
line: number,
|
|
428
|
+
column: number,
|
|
429
|
+
): void {
|
|
430
|
+
const last = this.infosValue[this.infosValue.length - 1]
|
|
431
|
+
if ((this.infosValue.length === 0 || last.Offset < offset) && offset < this.sizeValue) {
|
|
432
|
+
this.infosValue.push({ Offset: offset, Filename: filename, Line: line, Column: column })
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
public Pos(offset: number): Pos {
|
|
437
|
+
return this.baseValue + this.fixOffset(offset)
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
public Offset(pos: Pos): number {
|
|
441
|
+
return this.fixOffset(pos - this.baseValue)
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
public Line(pos: Pos): number {
|
|
445
|
+
return this.Position(pos).Line
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
public PositionFor(pos: Pos, adjusted: boolean): Position {
|
|
449
|
+
if (pos === NoPos) {
|
|
450
|
+
return new Position()
|
|
451
|
+
}
|
|
452
|
+
return this.position(pos, adjusted)
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
public Position(pos: Pos): Position {
|
|
456
|
+
return this.PositionFor(pos, true)
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
private fixOffset(offset: number): number {
|
|
460
|
+
if (offset < 0) {
|
|
461
|
+
return 0
|
|
462
|
+
}
|
|
463
|
+
if (offset > this.sizeValue) {
|
|
464
|
+
return this.sizeValue
|
|
465
|
+
}
|
|
466
|
+
return offset
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
private position(pos: Pos, adjusted: boolean): Position {
|
|
470
|
+
const offset = this.fixOffset(pos - this.baseValue)
|
|
471
|
+
let filename = this.nameValue
|
|
472
|
+
let line = 0
|
|
473
|
+
let column = 0
|
|
474
|
+
const lineIndex = searchInts(this.linesValue, offset)
|
|
475
|
+
if (lineIndex >= 0) {
|
|
476
|
+
line = lineIndex + 1
|
|
477
|
+
column = offset - this.linesValue[lineIndex] + 1
|
|
478
|
+
}
|
|
479
|
+
if (adjusted && this.infosValue.length > 0) {
|
|
480
|
+
const infoIndex = searchLineInfos(this.infosValue, offset)
|
|
481
|
+
if (infoIndex >= 0) {
|
|
482
|
+
const info = this.infosValue[infoIndex]
|
|
483
|
+
filename = info.Filename
|
|
484
|
+
const baseLineIndex = searchInts(this.linesValue, info.Offset)
|
|
485
|
+
if (baseLineIndex >= 0) {
|
|
486
|
+
const delta = line - (baseLineIndex + 1)
|
|
487
|
+
line = info.Line + delta
|
|
488
|
+
if (info.Column === 0) {
|
|
489
|
+
column = 0
|
|
490
|
+
} else if (delta === 0) {
|
|
491
|
+
column = info.Column + (offset - info.Offset)
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return $.markAsStructValue(
|
|
497
|
+
new Position({
|
|
498
|
+
Filename: filename,
|
|
499
|
+
Offset: offset,
|
|
500
|
+
Line: line,
|
|
501
|
+
Column: column,
|
|
502
|
+
}),
|
|
503
|
+
)
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
export class FileSet {
|
|
508
|
+
private baseValue: number
|
|
509
|
+
private files: File[]
|
|
510
|
+
|
|
511
|
+
constructor(init?: Partial<{ base: number; files: File[] }>) {
|
|
512
|
+
this.baseValue = init?.base ?? 1
|
|
513
|
+
this.files = init?.files?.slice() ?? []
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
public clone(): FileSet {
|
|
517
|
+
return new FileSet({
|
|
518
|
+
base: this.baseValue,
|
|
519
|
+
files: this.files,
|
|
520
|
+
})
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
public Base(): number {
|
|
524
|
+
return this.baseValue
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
public AddFile(filename: string, base: number, size: number): File {
|
|
528
|
+
if (base < 0) {
|
|
529
|
+
base = this.baseValue
|
|
530
|
+
}
|
|
531
|
+
if (base < this.baseValue) {
|
|
532
|
+
$.panic(`invalid base ${base}`)
|
|
533
|
+
}
|
|
534
|
+
if (size < 0) {
|
|
535
|
+
$.panic(`invalid size ${size}`)
|
|
536
|
+
}
|
|
537
|
+
const file = new File({ name: filename, base, size })
|
|
538
|
+
this.files.push(file)
|
|
539
|
+
this.files.sort((left, right) => left.Base() - right.Base())
|
|
540
|
+
this.baseValue = base + size + 1
|
|
541
|
+
return file
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
public AddExistingFiles(...files: File[]): void {
|
|
545
|
+
for (const file of files) {
|
|
546
|
+
if (file != null && !this.files.includes(file)) {
|
|
547
|
+
this.files.push(file)
|
|
548
|
+
this.baseValue = Math.max(this.baseValue, file.Base() + file.Size() + 1)
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
this.files.sort((left, right) => left.Base() - right.Base())
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
public RemoveFile(file: File): void {
|
|
555
|
+
this.files = this.files.filter((candidate) => candidate !== file)
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
public Iterate(yieldFile: (file: File) => boolean): void {
|
|
559
|
+
for (const file of this.files.slice()) {
|
|
560
|
+
if (!yieldFile(file)) {
|
|
561
|
+
return
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
public File(pos: Pos): File | null {
|
|
567
|
+
if (pos === NoPos) {
|
|
568
|
+
return null
|
|
569
|
+
}
|
|
570
|
+
return this.files.find((file) => file.Base() <= pos && pos <= file.End()) ?? null
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
public PositionFor(pos: Pos, adjusted: boolean): Position {
|
|
574
|
+
const file = this.File(pos)
|
|
575
|
+
if (file === null) {
|
|
576
|
+
return new Position()
|
|
577
|
+
}
|
|
578
|
+
return file.PositionFor(pos, adjusted)
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
public Position(pos: Pos): Position {
|
|
582
|
+
return this.PositionFor(pos, true)
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
export function NewFileSet(): FileSet {
|
|
587
|
+
return new FileSet()
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
export function Pos_IsValid(pos: Pos): boolean {
|
|
591
|
+
return pos !== NoPos
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
export function Token_String(tok: Token): string {
|
|
595
|
+
return tokenStrings.get(tok) ?? `token(${tok})`
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
export function Token_Precedence(tok: Token): number {
|
|
599
|
+
switch (tok) {
|
|
600
|
+
case LOR:
|
|
601
|
+
return 1
|
|
602
|
+
case LAND:
|
|
603
|
+
return 2
|
|
604
|
+
case EQL:
|
|
605
|
+
case NEQ:
|
|
606
|
+
case LSS:
|
|
607
|
+
case LEQ:
|
|
608
|
+
case GTR:
|
|
609
|
+
case GEQ:
|
|
610
|
+
return 3
|
|
611
|
+
case ADD:
|
|
612
|
+
case SUB:
|
|
613
|
+
case OR:
|
|
614
|
+
case XOR:
|
|
615
|
+
return 4
|
|
616
|
+
case MUL:
|
|
617
|
+
case QUO:
|
|
618
|
+
case REM:
|
|
619
|
+
case SHL:
|
|
620
|
+
case SHR:
|
|
621
|
+
case AND:
|
|
622
|
+
case AND_NOT:
|
|
623
|
+
return 5
|
|
624
|
+
default:
|
|
625
|
+
return LowestPrec
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
export function Token_IsLiteral(tok: Token): boolean {
|
|
630
|
+
return literal_beg < tok && tok < literal_end
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
export function Token_IsOperator(tok: Token): boolean {
|
|
634
|
+
return (operator_beg < tok && tok < operator_end) || tok === TILDE
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
export function Token_IsKeyword(tok: Token): boolean {
|
|
638
|
+
return keyword_beg < tok && tok < keyword_end
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
export function Lookup(ident: string): Token {
|
|
642
|
+
return keywords.get(ident) ?? IDENT
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
export function IsExported(name: string): boolean {
|
|
646
|
+
return /^\p{Lu}/u.test(name)
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
export function IsKeyword(name: string): boolean {
|
|
650
|
+
return keywords.has(name)
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
export function IsIdentifier(name: string): boolean {
|
|
654
|
+
if (name === '' || IsKeyword(name)) {
|
|
655
|
+
return false
|
|
656
|
+
}
|
|
657
|
+
return /^[$_\p{L}][$_\p{L}\p{N}]*$/u.test(name)
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
function searchInts(values: number[], offset: number): number {
|
|
661
|
+
let low = 0
|
|
662
|
+
let high = values.length
|
|
663
|
+
while (low < high) {
|
|
664
|
+
const mid = Math.floor((low + high) / 2)
|
|
665
|
+
if (values[mid] > offset) {
|
|
666
|
+
high = mid
|
|
667
|
+
} else {
|
|
668
|
+
low = mid + 1
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return low - 1
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
function searchLineInfos(values: lineInfo[], offset: number): number {
|
|
675
|
+
let low = 0
|
|
676
|
+
let high = values.length
|
|
677
|
+
while (low < high) {
|
|
678
|
+
const mid = Math.floor((low + high) / 2)
|
|
679
|
+
if (values[mid].Offset > offset) {
|
|
680
|
+
high = mid
|
|
681
|
+
} else {
|
|
682
|
+
low = mid + 1
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
return low - 1
|
|
686
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Escape,
|
|
5
|
+
EscapeNonString,
|
|
6
|
+
EscapeToResultNonString,
|
|
7
|
+
NoEscape,
|
|
8
|
+
} from './index.js'
|
|
9
|
+
|
|
10
|
+
describe('internal/abi escape intrinsics', () => {
|
|
11
|
+
test('return identity values in the JavaScript target', () => {
|
|
12
|
+
const value = { id: 1 }
|
|
13
|
+
expect(Escape(value)).toBe(value)
|
|
14
|
+
expect(NoEscape(value)).toBe(value)
|
|
15
|
+
expect(EscapeToResultNonString(value)).toBe(value)
|
|
16
|
+
expect(EscapeNonString(value)).toBeUndefined()
|
|
17
|
+
})
|
|
18
|
+
})
|
package/gs/internal/abi/index.ts
CHANGED
|
@@ -26,6 +26,20 @@ export class IntArgRegBitmap {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
export function NoEscape<T>(p: T): T {
|
|
30
|
+
return p
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function Escape<T>(x: T): T {
|
|
34
|
+
return x
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function EscapeNonString<T>(_v: T): void {}
|
|
38
|
+
|
|
39
|
+
export function EscapeToResultNonString<T>(v: T): T {
|
|
40
|
+
return v
|
|
41
|
+
}
|
|
42
|
+
|
|
29
43
|
// FuncPCABI0 returns the entry PC of the function f for ABI0
|
|
30
44
|
export function FuncPCABI0(_f: any): number {
|
|
31
45
|
return 0 // Placeholder
|