semantifold 0.2.0 → 0.3.0
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 +37 -12
- package/build/index.js +2 -2
- package/build/src/acceptance.d.ts +10 -0
- package/build/src/acceptance.d.ts.map +1 -1
- package/build/src/acceptance.js +24 -5
- package/build/src/backends/c-runtime.d.ts +3 -0
- package/build/src/backends/c-runtime.d.ts.map +1 -0
- package/build/src/backends/c-runtime.js +151 -0
- package/build/src/backends/c-validation.d.ts +12 -0
- package/build/src/backends/c-validation.d.ts.map +1 -0
- package/build/src/backends/c-validation.js +85 -0
- package/build/src/backends/c.d.ts +31 -0
- package/build/src/backends/c.d.ts.map +1 -0
- package/build/src/backends/c.js +308 -0
- package/build/src/backends/cpp-runtime.d.ts +3 -0
- package/build/src/backends/cpp-runtime.d.ts.map +1 -0
- package/build/src/backends/cpp-runtime.js +99 -0
- package/build/src/backends/cpp-validation.d.ts +9 -0
- package/build/src/backends/cpp-validation.d.ts.map +1 -0
- package/build/src/backends/cpp-validation.js +74 -0
- package/build/src/backends/cpp.d.ts +16 -0
- package/build/src/backends/cpp.d.ts.map +1 -0
- package/build/src/backends/cpp.js +285 -0
- package/build/src/backends/csharp.d.ts +20 -0
- package/build/src/backends/csharp.d.ts.map +1 -0
- package/build/src/backends/csharp.js +259 -0
- package/build/src/backends/go.d.ts +20 -0
- package/build/src/backends/go.d.ts.map +1 -0
- package/build/src/backends/go.js +374 -0
- package/build/src/backends/identifiers.d.ts +12 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +71 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +9 -1
- package/build/src/backends/native-validation.d.ts +9 -0
- package/build/src/backends/native-validation.d.ts.map +1 -0
- package/build/src/backends/native-validation.js +59 -0
- package/build/src/backends/ordered-expressions.d.ts +74 -0
- package/build/src/backends/ordered-expressions.d.ts.map +1 -0
- package/build/src/backends/ordered-expressions.js +159 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +7 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +59 -14
- package/build/src/frontends/c-parser.d.ts +20 -0
- package/build/src/frontends/c-parser.d.ts.map +1 -0
- package/build/src/frontends/c-parser.js +14 -0
- package/build/src/frontends/c.d.ts +220 -0
- package/build/src/frontends/c.d.ts.map +1 -0
- package/build/src/frontends/c.js +750 -0
- package/build/src/frontends/cpp-parser.d.ts +11 -0
- package/build/src/frontends/cpp-parser.d.ts.map +1 -0
- package/build/src/frontends/cpp-parser.js +15 -0
- package/build/src/frontends/cpp.d.ts +227 -0
- package/build/src/frontends/cpp.d.ts.map +1 -0
- package/build/src/frontends/cpp.js +784 -0
- package/build/src/frontends/csharp.d.ts +14 -0
- package/build/src/frontends/csharp.d.ts.map +1 -0
- package/build/src/frontends/csharp.js +708 -0
- package/build/src/frontends/go.d.ts +15 -0
- package/build/src/frontends/go.d.ts.map +1 -0
- package/build/src/frontends/go.js +712 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +16 -1
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +51 -2
- package/build/src/mapping.js +2 -2
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +4 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +3 -3
- package/build/src/subprocess.d.ts +10 -1
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +29 -3
- package/build/src/toolchains.d.ts +24 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +6 -2
- package/docs/architecture.md +20 -6
- package/docs/c.md +60 -0
- package/docs/cpp.md +61 -0
- package/docs/goals.md +4 -2
- package/docs/language-support.md +27 -8
- package/docs/parser-qualification.md +153 -4
- package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
- package/docs/source-maps.md +11 -5
- package/docs/standard-library-portability.md +190 -0
- package/docs/testing.md +113 -4
- package/index.js +1 -1
- package/node_modules/node-addon-api/LICENSE.md +9 -0
- package/node_modules/node-addon-api/README.md +95 -0
- package/node_modules/node-addon-api/common.gypi +21 -0
- package/node_modules/node-addon-api/except.gypi +25 -0
- package/node_modules/node-addon-api/index.js +14 -0
- package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/node_modules/node-addon-api/napi-inl.h +7250 -0
- package/node_modules/node-addon-api/napi.h +3463 -0
- package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/node_modules/node-addon-api/node_api.gyp +9 -0
- package/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +21 -0
- package/node_modules/node-addon-api/package.json +481 -0
- package/node_modules/node-addon-api/tools/README.md +73 -0
- package/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
- package/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/tree-sitter/binding.gyp +88 -0
- package/node_modules/tree-sitter/index.js +950 -0
- package/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/tree-sitter/src/language.cc +105 -0
- package/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/tree-sitter/src/parser.cc +332 -0
- package/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/tree-sitter/src/query.cc +425 -0
- package/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/package.json +21 -5
- package/src/acceptance.js +25 -4
- package/src/backends/c-runtime.js +151 -0
- package/src/backends/c-validation.js +83 -0
- package/src/backends/c.js +308 -0
- package/src/backends/cpp-runtime.js +99 -0
- package/src/backends/cpp-validation.js +70 -0
- package/src/backends/cpp.js +285 -0
- package/src/backends/csharp.js +270 -0
- package/src/backends/go.js +383 -0
- package/src/backends/identifiers.js +72 -1
- package/src/backends/index.js +7 -0
- package/src/backends/native-validation.js +64 -0
- package/src/backends/ordered-expressions.js +161 -0
- package/src/backends/scalars.js +7 -1
- package/src/backends/shared.js +56 -12
- package/src/frontends/c-parser.js +17 -0
- package/src/frontends/c.js +780 -0
- package/src/frontends/cpp-parser.js +18 -0
- package/src/frontends/cpp.js +816 -0
- package/src/frontends/csharp.js +759 -0
- package/src/frontends/go.js +770 -0
- package/src/frontends/scalars.js +15 -0
- package/src/language-registry.js +52 -1
- package/src/mapping.js +1 -1
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +2 -2
- package/src/subprocess.js +31 -2
- package/src/toolchains.js +5 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#ifndef TREE_SITTER_WASM_H_
|
|
2
|
+
#define TREE_SITTER_WASM_H_
|
|
3
|
+
|
|
4
|
+
#ifdef __cplusplus
|
|
5
|
+
extern "C" {
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#include "tree_sitter/api.h"
|
|
9
|
+
#include "./parser.h"
|
|
10
|
+
|
|
11
|
+
bool ts_wasm_store_start(TSWasmStore *self, TSLexer *lexer, const TSLanguage *language);
|
|
12
|
+
void ts_wasm_store_reset(TSWasmStore *self);
|
|
13
|
+
bool ts_wasm_store_has_error(const TSWasmStore *self);
|
|
14
|
+
|
|
15
|
+
bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state);
|
|
16
|
+
bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state);
|
|
17
|
+
|
|
18
|
+
uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self);
|
|
19
|
+
void ts_wasm_store_call_scanner_destroy(TSWasmStore *self, uint32_t scanner_address);
|
|
20
|
+
bool ts_wasm_store_call_scanner_scan(TSWasmStore *self, uint32_t scanner_address, uint32_t valid_tokens_ix);
|
|
21
|
+
uint32_t ts_wasm_store_call_scanner_serialize(TSWasmStore *self, uint32_t scanner_address, char *buffer);
|
|
22
|
+
void ts_wasm_store_call_scanner_deserialize(TSWasmStore *self, uint32_t scanner, const char *buffer, unsigned length);
|
|
23
|
+
|
|
24
|
+
void ts_wasm_language_retain(const TSLanguage *self);
|
|
25
|
+
void ts_wasm_language_release(const TSLanguage *self);
|
|
26
|
+
|
|
27
|
+
#ifdef __cplusplus
|
|
28
|
+
}
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#endif // TREE_SITTER_WASM_H_
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semantifold",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Language-neutral semantic code analysis, transformation, generation, and execution toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|
|
@@ -20,14 +20,19 @@
|
|
|
20
20
|
"src/**",
|
|
21
21
|
"tsconfig.json"
|
|
22
22
|
],
|
|
23
|
+
"workspaces": [
|
|
24
|
+
"packages/tree-sitter-legacy"
|
|
25
|
+
],
|
|
23
26
|
"scripts": {
|
|
24
27
|
"all-checks": "npm run lint && npm test",
|
|
25
|
-
"build": "node scripts/clean-build.js && tsc",
|
|
28
|
+
"build": "node scripts/clean-build.js && tsc && npm run build --workspace=semantifold-tree-sitter-legacy-workspace",
|
|
26
29
|
"eslint": "eslint --max-warnings 0 .",
|
|
27
|
-
"lint": "npm run eslint && npm run typecheck",
|
|
28
|
-
"prepack": "npm run build",
|
|
30
|
+
"lint": "npm run verify:legacy-runtime && npm run eslint && npm run typecheck",
|
|
31
|
+
"prepack": "npm run verify:legacy-runtime && npm run build",
|
|
32
|
+
"pretest": "npm run verify:legacy-runtime && npm run build --workspace=semantifold-tree-sitter-legacy-workspace",
|
|
29
33
|
"test": "velocious-test spec",
|
|
30
|
-
"typecheck": "tsc --noEmit"
|
|
34
|
+
"typecheck": "tsc --noEmit && npm run typecheck --workspace=semantifold-tree-sitter-legacy-workspace",
|
|
35
|
+
"verify:legacy-runtime": "node scripts/verify-legacy-runtime.js"
|
|
31
36
|
},
|
|
32
37
|
"engines": {
|
|
33
38
|
"node": ">=24"
|
|
@@ -52,9 +57,19 @@
|
|
|
52
57
|
"@ruby/prism": "^1.9.0",
|
|
53
58
|
"comment-parser": "^1.4.1",
|
|
54
59
|
"php-parser": "^3.7.0",
|
|
60
|
+
"semantifold-tree-sitter-legacy-internal": "file:packages/tree-sitter-legacy/runtime",
|
|
55
61
|
"tree-sitter": "0.25.1",
|
|
62
|
+
"tree-sitter-c-sharp": "0.23.5",
|
|
63
|
+
"tree-sitter-go": "0.25.0",
|
|
56
64
|
"tree-sitter-python": "0.25.0"
|
|
57
65
|
},
|
|
66
|
+
"bundleDependencies": [
|
|
67
|
+
"semantifold-tree-sitter-legacy-internal",
|
|
68
|
+
"tree-sitter"
|
|
69
|
+
],
|
|
70
|
+
"acceptDependencies": {
|
|
71
|
+
"semantifold-tree-sitter-legacy-internal": "0.1.0"
|
|
72
|
+
},
|
|
58
73
|
"devDependencies": {
|
|
59
74
|
"@eslint/js": "^10.0.1",
|
|
60
75
|
"@types/node": "^24.3.0",
|
|
@@ -65,6 +80,7 @@
|
|
|
65
80
|
"eslint-plugin-jsdoc-inline-type-casts": "https://github.com/kaspernj/eslint-plugin-jsdoc-inline-type-casts/archive/441b6c5ca335a115a75d9f050134357ddb0a61d1.tar.gz",
|
|
66
81
|
"eslint-plugin-jsdoc-tag-lines": "^1.0.1",
|
|
67
82
|
"globals": "^17.0.0",
|
|
83
|
+
"semantifold-tree-sitter-legacy-workspace": "0.1.0",
|
|
68
84
|
"typescript": "^7.0.0",
|
|
69
85
|
"yaml": "^2.9.0"
|
|
70
86
|
}
|
package/src/acceptance.js
CHANGED
|
@@ -14,7 +14,7 @@ const acceptanceMaxBuffer = 16 * 1024 * 1024
|
|
|
14
14
|
const launchErrorCodes = new Set([
|
|
15
15
|
"E2BIG", "EACCES", "EAGAIN", "ELOOP", "EMFILE", "ENAMETOOLONG", "ENFILE", "ENOENT", "ENOEXEC", "ENOMEM", "ENOTDIR", "ENOTSUP", "EPERM", "ETXTBSY"
|
|
16
16
|
])
|
|
17
|
-
const orderedStages = Object.freeze(["parse", "generate", "compile", "link", "validate", "instantiate", "execute"])
|
|
17
|
+
const orderedStages = Object.freeze(["parse", "generate", "restore", "compile", "link", "validate", "instantiate", "execute"])
|
|
18
18
|
const stageIndexes = new Map(orderedStages.map((stage, index) => [stage, index]))
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -28,6 +28,26 @@ const stageIndexes = new Map(orderedStages.map((stage, index) => [stage, index])
|
|
|
28
28
|
* @returns {Promise<import("./semantic/types.js").AcceptanceResult>} Captured results after cleanup.
|
|
29
29
|
*/
|
|
30
30
|
export async function runAcceptanceStages(input) {
|
|
31
|
+
return await runAcceptanceStagesWithDependencies(input, rm)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Creates an acceptance runner with instance-owned cleanup behavior.
|
|
36
|
+
* @param {object} dependencies - Internal runner dependencies.
|
|
37
|
+
* @param {typeof rm} dependencies.removeDirectory - Isolated-directory removal operation.
|
|
38
|
+
* @returns {typeof runAcceptanceStages} Acceptance runner.
|
|
39
|
+
*/
|
|
40
|
+
export function createAcceptanceRunner({removeDirectory}) {
|
|
41
|
+
return async (input) => await runAcceptanceStagesWithDependencies(input, removeDirectory)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Runs acceptance with exact instance-owned dependencies.
|
|
46
|
+
* @param {Parameters<typeof runAcceptanceStages>[0]} input - Acceptance request.
|
|
47
|
+
* @param {typeof rm} removeDirectory - Isolated-directory removal operation.
|
|
48
|
+
* @returns {ReturnType<typeof runAcceptanceStages>} Captured results after cleanup.
|
|
49
|
+
*/
|
|
50
|
+
async function runAcceptanceStagesWithDependencies(input, removeDirectory) {
|
|
31
51
|
if (!isPlainObject(input)) invalidRunner("Acceptance requires a request object.", "acceptance")
|
|
32
52
|
const artifacts = /** @type {import("./semantic/types.js").GeneratedArtifactSet} */ (input.artifacts)
|
|
33
53
|
const environment = /** @type {Readonly<Record<string, string | undefined>>} */ (
|
|
@@ -84,7 +104,7 @@ export async function runAcceptanceStages(input) {
|
|
|
84
104
|
let cleanupFailed = false
|
|
85
105
|
|
|
86
106
|
try {
|
|
87
|
-
await removeAcceptanceDirectory(directory, request.target)
|
|
107
|
+
await removeAcceptanceDirectory(directory, request.target, removeDirectory)
|
|
88
108
|
} catch (error) {
|
|
89
109
|
cleanupFailed = true
|
|
90
110
|
cleanupFailure = error
|
|
@@ -300,11 +320,12 @@ function isPlainObject(value) {
|
|
|
300
320
|
* Removes the isolated acceptance directory with a normalized failure.
|
|
301
321
|
* @param {string} directory - Exact temporary directory.
|
|
302
322
|
* @param {string} target - Acceptance target.
|
|
323
|
+
* @param {typeof rm} removeDirectory - Instance-owned removal operation.
|
|
303
324
|
* @returns {Promise<void>} Cleanup completion.
|
|
304
325
|
*/
|
|
305
|
-
async function removeAcceptanceDirectory(directory, target) {
|
|
326
|
+
async function removeAcceptanceDirectory(directory, target, removeDirectory) {
|
|
306
327
|
try {
|
|
307
|
-
await
|
|
328
|
+
await removeDirectory(directory, {force: true, recursive: true})
|
|
308
329
|
} catch (error) {
|
|
309
330
|
throw new SemantifoldDiagnostic({
|
|
310
331
|
cause: error instanceof Error ? error : undefined,
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/** Canonical C17 support header; native ownership never enters semantic IR. */
|
|
4
|
+
export const cRuntimeHeader = `#ifndef SEMANTIFOLD_RUNTIME_H
|
|
5
|
+
#define SEMANTIFOLD_RUNTIME_H
|
|
6
|
+
|
|
7
|
+
#include <stdbool.h>
|
|
8
|
+
#include <stddef.h>
|
|
9
|
+
#include <stdint.h>
|
|
10
|
+
#include <limits.h>
|
|
11
|
+
#include <stdio.h>
|
|
12
|
+
#include <stdlib.h>
|
|
13
|
+
#include <string.h>
|
|
14
|
+
|
|
15
|
+
_Static_assert(CHAR_BIT == 8, "Semantifold requires eight-bit bytes");
|
|
16
|
+
_Static_assert(sizeof(int64_t) == 8, "Semantifold requires exact int64_t");
|
|
17
|
+
_Static_assert(sizeof(size_t) == 8 && PTRDIFF_MAX == INT64_MAX, "Semantifold requires the qualified 64-bit ABI");
|
|
18
|
+
|
|
19
|
+
typedef struct {
|
|
20
|
+
const unsigned char *data;
|
|
21
|
+
size_t length;
|
|
22
|
+
} SemantifoldString;
|
|
23
|
+
|
|
24
|
+
#define SEMANTIFOLD_STRING(literal) ((SemantifoldString){(const unsigned char *)(literal), sizeof(literal) - 1})
|
|
25
|
+
|
|
26
|
+
typedef struct SemantifoldAllocation {
|
|
27
|
+
struct SemantifoldAllocation *next;
|
|
28
|
+
unsigned char data[];
|
|
29
|
+
} SemantifoldAllocation;
|
|
30
|
+
|
|
31
|
+
_Static_assert(sizeof(SemantifoldAllocation) == 8, "Semantifold requires the qualified arena metadata size");
|
|
32
|
+
|
|
33
|
+
static SemantifoldAllocation *semantifold_arena = NULL;
|
|
34
|
+
static size_t semantifold_arena_bytes = 0;
|
|
35
|
+
|
|
36
|
+
static inline void semantifold_cleanup(void) {
|
|
37
|
+
while (semantifold_arena != NULL) {
|
|
38
|
+
SemantifoldAllocation *allocation = semantifold_arena;
|
|
39
|
+
semantifold_arena = allocation->next;
|
|
40
|
+
free(allocation);
|
|
41
|
+
}
|
|
42
|
+
semantifold_arena_bytes = 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_Noreturn static inline void semantifold_fatal(const char *message, size_t length) {
|
|
46
|
+
semantifold_cleanup();
|
|
47
|
+
(void)fwrite(message, 1, length, stderr);
|
|
48
|
+
exit(70);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static inline int64_t semantifold_integer_add(int64_t left, int64_t right) {
|
|
52
|
+
int64_t result;
|
|
53
|
+
if (__builtin_add_overflow(left, right, &result)) {
|
|
54
|
+
semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static inline int64_t semantifold_integer_subtract(int64_t left, int64_t right) {
|
|
60
|
+
int64_t result;
|
|
61
|
+
if (__builtin_sub_overflow(left, right, &result)) {
|
|
62
|
+
semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static inline int64_t semantifold_integer_multiply(int64_t left, int64_t right) {
|
|
68
|
+
int64_t result;
|
|
69
|
+
if (__builtin_mul_overflow(left, right, &result)) {
|
|
70
|
+
semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static inline int64_t semantifold_integer_negate(int64_t value) {
|
|
76
|
+
return semantifold_integer_subtract(INT64_C(0), value);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static inline size_t semantifold_allocation_size(size_t left, size_t right) {
|
|
80
|
+
const size_t maximum = (size_t)PTRDIFF_MAX;
|
|
81
|
+
if (left > maximum || right > maximum - left ||
|
|
82
|
+
left + right > maximum - sizeof(SemantifoldAllocation)) {
|
|
83
|
+
semantifold_fatal("semantifold: allocation size\\n", sizeof("semantifold: allocation size\\n") - 1);
|
|
84
|
+
}
|
|
85
|
+
const size_t size = sizeof(SemantifoldAllocation) + left + right;
|
|
86
|
+
if (semantifold_arena_bytes > maximum - size) {
|
|
87
|
+
semantifold_fatal("semantifold: allocation size\\n", sizeof("semantifold: allocation size\\n") - 1);
|
|
88
|
+
}
|
|
89
|
+
return size;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static inline SemantifoldString semantifold_string_concat(SemantifoldString left, SemantifoldString right) {
|
|
93
|
+
const size_t size = semantifold_allocation_size(left.length, right.length);
|
|
94
|
+
SemantifoldAllocation *allocation = malloc(size);
|
|
95
|
+
if (allocation == NULL) {
|
|
96
|
+
semantifold_fatal("semantifold: allocation failure\\n", sizeof("semantifold: allocation failure\\n") - 1);
|
|
97
|
+
}
|
|
98
|
+
allocation->next = semantifold_arena;
|
|
99
|
+
semantifold_arena = allocation;
|
|
100
|
+
semantifold_arena_bytes += size;
|
|
101
|
+
if (left.length != 0) (void)memcpy(allocation->data, left.data, left.length);
|
|
102
|
+
if (right.length != 0) (void)memcpy(allocation->data + left.length, right.data, right.length);
|
|
103
|
+
return (SemantifoldString){allocation->data, left.length + right.length};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static inline bool semantifold_string_equal(SemantifoldString left, SemantifoldString right) {
|
|
107
|
+
return left.length == right.length && (left.length == 0 || memcmp(left.data, right.data, left.length) == 0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
static inline bool semantifold_string_not_equal(SemantifoldString left, SemantifoldString right) {
|
|
111
|
+
return !semantifold_string_equal(left, right);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static inline void semantifold_write(const unsigned char *data, size_t length) {
|
|
115
|
+
if (length != 0 && fwrite(data, 1, length, stdout) != length) {
|
|
116
|
+
semantifold_fatal("semantifold: output failure\\n", sizeof("semantifold: output failure\\n") - 1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
static inline void semantifold_newline(void) {
|
|
121
|
+
semantifold_write((const unsigned char *)"\\n", 1);
|
|
122
|
+
if (fflush(stdout) != 0) semantifold_fatal("semantifold: output failure\\n", sizeof("semantifold: output failure\\n") - 1);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static inline void semantifold_print_string(SemantifoldString value) {
|
|
126
|
+
semantifold_write(value.data, value.length);
|
|
127
|
+
semantifold_newline();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
static inline void semantifold_print_boolean(bool value) {
|
|
131
|
+
if (value) semantifold_write((const unsigned char *)"true", 4);
|
|
132
|
+
else semantifold_write((const unsigned char *)"false", 5);
|
|
133
|
+
semantifold_newline();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
static inline void semantifold_print_integer(int64_t value) {
|
|
137
|
+
unsigned char digits[20];
|
|
138
|
+
size_t position = sizeof(digits);
|
|
139
|
+
uint64_t magnitude = (uint64_t)value;
|
|
140
|
+
if (value < 0) magnitude = UINT64_C(0) - magnitude;
|
|
141
|
+
do {
|
|
142
|
+
digits[--position] = (unsigned char)(UINT64_C(48) + magnitude % UINT64_C(10));
|
|
143
|
+
magnitude /= UINT64_C(10);
|
|
144
|
+
} while (magnitude != 0);
|
|
145
|
+
if (value < 0) digits[--position] = (unsigned char)45;
|
|
146
|
+
semantifold_write(digits + position, sizeof(digits) - position);
|
|
147
|
+
semantifold_newline();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
#endif
|
|
151
|
+
`
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {unsupportedCapability} from "../diagnostic.js"
|
|
4
|
+
|
|
5
|
+
/** @typedef {import("../semantic/types.js").SemanticModule} SemanticModule */
|
|
6
|
+
/** @typedef {import("../semantic/types.js").Expression} Expression */
|
|
7
|
+
/** @typedef {import("../semantic/types.js").SourceLocation} SourceLocation */
|
|
8
|
+
|
|
9
|
+
const maximumObjectBytes = 9223372036854775807n
|
|
10
|
+
/** Maximum UTF-16 input accepted by the unchanged qualified legacy parser. */
|
|
11
|
+
export const maximumCSourceLength = 32767
|
|
12
|
+
const allocationMetadataBytes = 8n
|
|
13
|
+
/**
|
|
14
|
+
* Rejects compile-time-known object and arena sizes; unknown runtime lengths remain checked in C.
|
|
15
|
+
* @param {SemanticModule} module - Shape/type-validated module.
|
|
16
|
+
* @returns {void}
|
|
17
|
+
*/
|
|
18
|
+
export function validateCMemory(module) {
|
|
19
|
+
/**
|
|
20
|
+
* Checks one expression and its known byte lengths without folding the IR.
|
|
21
|
+
* @param {Expression} expression - Semantic expression.
|
|
22
|
+
* @param {Map<string, bigint | undefined>} lengths - Visible immutable or assigned lengths.
|
|
23
|
+
* @param {{bytes: bigint}} arena - Known minimum allocations in this lexical path.
|
|
24
|
+
* @returns {bigint | undefined} Known UTF-8 byte length.
|
|
25
|
+
*/
|
|
26
|
+
function size(expression, lengths, arena) {
|
|
27
|
+
if (expression.kind == "StringLiteral") {
|
|
28
|
+
const bytes = BigInt(Buffer.byteLength(expression.value, "utf8"))
|
|
29
|
+
|
|
30
|
+
if (bytes > 4095n) unsupportedCapability("c", "UTF-8 literal exceeds the strict C17 4095-byte translation limit", expression.location)
|
|
31
|
+
return bytes
|
|
32
|
+
}
|
|
33
|
+
if (expression.kind == "IdentifierExpression") return lengths.get(expression.name)
|
|
34
|
+
if (expression.kind == "CallExpression") {
|
|
35
|
+
for (const argument of expression.arguments) size(argument, lengths, arena)
|
|
36
|
+
} else if (expression.kind == "UnaryExpression") size(expression.operand, lengths, arena)
|
|
37
|
+
else if (expression.kind == "BinaryExpression") {
|
|
38
|
+
const left = size(expression.left, lengths, arena)
|
|
39
|
+
const right = size(expression.right, lengths, arena)
|
|
40
|
+
|
|
41
|
+
if (expression.operation == "StringConcat") {
|
|
42
|
+
const minimum = (left ?? 0n) + (right ?? 0n)
|
|
43
|
+
|
|
44
|
+
arena.bytes += allocationMetadataBytes + minimum
|
|
45
|
+
if (minimum > maximumObjectBytes - allocationMetadataBytes || arena.bytes > maximumObjectBytes) {
|
|
46
|
+
unsupportedCapability("c", "known immutable slice or module arena size exceeds PTRDIFF_MAX", expression.location)
|
|
47
|
+
}
|
|
48
|
+
return left === undefined || right === undefined ? undefined : left + right
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return undefined
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Propagates known local descriptor sizes through straight-line code and both branch paths.
|
|
56
|
+
* @param {import("../semantic/types.js").Block} block - Semantic block.
|
|
57
|
+
* @param {Map<string, bigint | undefined>} inherited - Visible known lengths.
|
|
58
|
+
* @param {{bytes: bigint}} arena - Known path allocation size.
|
|
59
|
+
* @returns {Map<string, bigint | undefined>} Outgoing known lengths.
|
|
60
|
+
*/
|
|
61
|
+
function visit(block, inherited, arena) {
|
|
62
|
+
const lengths = new Map(inherited)
|
|
63
|
+
|
|
64
|
+
for (const statement of block.statements) {
|
|
65
|
+
if (statement.kind == "LocalDeclaration") lengths.set(statement.name, size(statement.initializer, lengths, arena))
|
|
66
|
+
else if (statement.kind == "AssignmentStatement") lengths.set(statement.target.name, size(statement.expression, lengths, arena))
|
|
67
|
+
else if (statement.kind == "IfStatement") {
|
|
68
|
+
size(statement.condition, lengths, arena)
|
|
69
|
+
const leftArena = {bytes: arena.bytes}
|
|
70
|
+
const rightArena = {bytes: arena.bytes}
|
|
71
|
+
const left = visit(statement.consequent, lengths, leftArena)
|
|
72
|
+
const right = statement.alternate ? visit(statement.alternate, lengths, rightArena) : lengths
|
|
73
|
+
|
|
74
|
+
for (const name of lengths.keys()) lengths.set(name, left.get(name) === right.get(name) ? left.get(name) : undefined)
|
|
75
|
+
arena.bytes = leftArena.bytes < rightArena.bytes ? leftArena.bytes : rightArena.bytes
|
|
76
|
+
} else size(statement.expression, lengths, arena)
|
|
77
|
+
}
|
|
78
|
+
return lengths
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
for (const declaration of module.functions) visit(declaration.body, new Map(), {bytes: 0n})
|
|
82
|
+
visit(module.entryPoint.body, new Map(), {bytes: 0n})
|
|
83
|
+
}
|