semantifold 0.3.0 → 0.4.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 +58 -15
- package/build/index.d.ts +48 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +57 -8
- package/build/src/artifact-path.d.ts +23 -1
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +45 -3
- package/build/src/artifacts.d.ts.map +1 -1
- package/build/src/artifacts.js +66 -1
- package/build/src/backends/c-validation.d.ts.map +1 -1
- package/build/src/backends/c-validation.js +7 -3
- package/build/src/backends/cpp-validation.d.ts.map +1 -1
- package/build/src/backends/cpp-validation.js +7 -3
- package/build/src/backends/csharp.js +7 -1
- package/build/src/backends/dart-runtime.d.ts +2 -0
- package/build/src/backends/dart-runtime.d.ts.map +1 -0
- package/build/src/backends/dart-runtime.js +41 -0
- package/build/src/backends/dart.d.ts +20 -0
- package/build/src/backends/dart.d.ts.map +1 -0
- package/build/src/backends/dart.js +321 -0
- package/build/src/backends/effects.d.ts +60 -0
- package/build/src/backends/effects.d.ts.map +1 -0
- package/build/src/backends/effects.js +746 -0
- package/build/src/backends/go.js +18 -4
- package/build/src/backends/identifiers.d.ts +36 -4
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +154 -10
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +27 -4
- package/build/src/backends/ios.d.ts +68 -0
- package/build/src/backends/ios.d.ts.map +1 -0
- package/build/src/backends/ios.js +1503 -0
- package/build/src/backends/java.d.ts.map +1 -1
- package/build/src/backends/java.js +429 -36
- package/build/src/backends/javascript.d.ts +6 -0
- package/build/src/backends/javascript.d.ts.map +1 -1
- package/build/src/backends/javascript.js +380 -24
- package/build/src/backends/kotlin-runtime.d.ts +3 -0
- package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
- package/build/src/backends/kotlin-runtime.js +29 -0
- package/build/src/backends/kotlin.d.ts +23 -0
- package/build/src/backends/kotlin.d.ts.map +1 -0
- package/build/src/backends/kotlin.js +136 -0
- package/build/src/backends/native-validation.d.ts +2 -2
- package/build/src/backends/native-validation.d.ts.map +1 -1
- package/build/src/backends/native-validation.js +2 -2
- package/build/src/backends/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +39 -7
- package/build/src/backends/php-stdlib-support.d.ts +19 -0
- package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
- package/build/src/backends/php-stdlib-support.js +227 -0
- package/build/src/backends/php.d.ts.map +1 -1
- package/build/src/backends/php.js +448 -33
- package/build/src/backends/program.d.ts +81 -0
- package/build/src/backends/program.d.ts.map +1 -0
- package/build/src/backends/program.js +1308 -0
- package/build/src/backends/python.js +7 -1
- package/build/src/backends/ruby.d.ts.map +1 -1
- package/build/src/backends/ruby.js +310 -24
- package/build/src/backends/rust-runtime.d.ts +7 -0
- package/build/src/backends/rust-runtime.d.ts.map +1 -0
- package/build/src/backends/rust-runtime.js +32 -0
- package/build/src/backends/rust-validation.d.ts +9 -0
- package/build/src/backends/rust-validation.d.ts.map +1 -0
- package/build/src/backends/rust-validation.js +78 -0
- package/build/src/backends/rust.d.ts +24 -0
- package/build/src/backends/rust.d.ts.map +1 -0
- package/build/src/backends/rust.js +344 -0
- package/build/src/backends/scalars.d.ts +14 -6
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +167 -17
- package/build/src/backends/shared.d.ts +23 -4
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +2158 -62
- package/build/src/backends/stdlib-support.d.ts +14 -0
- package/build/src/backends/stdlib-support.d.ts.map +1 -0
- package/build/src/backends/stdlib-support.js +237 -0
- package/build/src/backends/swift-runtime.d.ts +3 -0
- package/build/src/backends/swift-runtime.d.ts.map +1 -0
- package/build/src/backends/swift-runtime.js +14 -0
- package/build/src/backends/swift.d.ts +8 -0
- package/build/src/backends/swift.d.ts.map +1 -0
- package/build/src/backends/swift.js +127 -0
- package/build/src/backends/typescript.d.ts.map +1 -1
- package/build/src/backends/typescript.js +344 -24
- package/build/src/backends/wasm.d.ts +43 -0
- package/build/src/backends/wasm.d.ts.map +1 -0
- package/build/src/backends/wasm.js +2164 -0
- package/build/src/backends/writer.d.ts +235 -4
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +468 -3
- package/build/src/diagnostic.d.ts +4 -3
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +5 -3
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +5 -3
- package/build/src/frontends/cpp.d.ts.map +1 -1
- package/build/src/frontends/cpp.js +5 -3
- package/build/src/frontends/csharp.d.ts.map +1 -1
- package/build/src/frontends/csharp.js +7 -3
- package/build/src/frontends/dart.d.ts +10 -0
- package/build/src/frontends/dart.d.ts.map +1 -0
- package/build/src/frontends/dart.js +913 -0
- package/build/src/frontends/index.d.ts +3 -1
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +15 -5
- package/build/src/frontends/java.d.ts +110 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +1725 -70
- package/build/src/frontends/javascript-typescript.d.ts +69 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +1825 -93
- package/build/src/frontends/kotlin.d.ts +10 -0
- package/build/src/frontends/kotlin.d.ts.map +1 -0
- package/build/src/frontends/kotlin.js +685 -0
- package/build/src/frontends/php.d.ts +118 -1
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +1583 -76
- package/build/src/frontends/program.d.ts +74 -0
- package/build/src/frontends/program.d.ts.map +1 -0
- package/build/src/frontends/program.js +989 -0
- package/build/src/frontends/ruby.d.ts +68 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +1446 -101
- package/build/src/frontends/rust-parser.d.ts +11 -0
- package/build/src/frontends/rust-parser.d.ts.map +1 -0
- package/build/src/frontends/rust-parser.js +15 -0
- package/build/src/frontends/rust.d.ts +14 -0
- package/build/src/frontends/rust.d.ts.map +1 -0
- package/build/src/frontends/rust.js +715 -0
- package/build/src/frontends/scalars.d.ts +10 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +28 -2
- package/build/src/frontends/swift.d.ts +10 -0
- package/build/src/frontends/swift.d.ts.map +1 -0
- package/build/src/frontends/swift.js +860 -0
- package/build/src/frontends/types.d.ts +186 -0
- package/build/src/frontends/types.d.ts.map +1 -0
- package/build/src/frontends/types.js +634 -0
- package/build/src/language-registry.d.ts +46 -4
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +167 -13
- package/build/src/mapping.d.ts +2 -2
- package/build/src/mapping.d.ts.map +1 -1
- package/build/src/mapping.js +31 -10
- package/build/src/semantic/capabilities.d.ts +66 -0
- package/build/src/semantic/capabilities.d.ts.map +1 -0
- package/build/src/semantic/capabilities.js +649 -0
- package/build/src/semantic/effects.d.ts +26 -0
- package/build/src/semantic/effects.d.ts.map +1 -0
- package/build/src/semantic/effects.js +764 -0
- package/build/src/semantic/generics.d.ts +23 -0
- package/build/src/semantic/generics.d.ts.map +1 -0
- package/build/src/semantic/generics.js +61 -0
- package/build/src/semantic/lifetime.d.ts +37 -0
- package/build/src/semantic/lifetime.d.ts.map +1 -0
- package/build/src/semantic/lifetime.js +527 -0
- package/build/src/semantic/provenance.d.ts +9 -2
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +462 -20
- package/build/src/semantic/scalars.d.ts +11 -0
- package/build/src/semantic/scalars.d.ts.map +1 -1
- package/build/src/semantic/scalars.js +16 -1
- package/build/src/semantic/stdlib.d.ts +254 -0
- package/build/src/semantic/stdlib.d.ts.map +1 -0
- package/build/src/semantic/stdlib.js +880 -0
- package/build/src/semantic/types.d.ts +2952 -202
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +688 -15
- package/build/src/semantic/validate.d.ts +85 -5
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +2576 -98
- package/build/src/stdlib-facades.d.ts +304 -0
- package/build/src/stdlib-facades.d.ts.map +1 -0
- package/build/src/stdlib-facades.js +1167 -0
- package/build/src/stdlib-negotiation.d.ts +69 -0
- package/build/src/stdlib-negotiation.d.ts.map +1 -0
- package/build/src/stdlib-negotiation.js +403 -0
- package/build/src/stdlib-providers.d.ts +72 -0
- package/build/src/stdlib-providers.d.ts.map +1 -0
- package/build/src/stdlib-providers.js +339 -0
- package/build/src/toolchains.d.ts +55 -1
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +15 -4
- package/docs/architecture.md +45 -13
- package/docs/dart.md +60 -0
- package/docs/goals.md +3 -3
- package/docs/ios.md +121 -0
- package/docs/kotlin.md +42 -0
- package/docs/language-support.md +231 -26
- package/docs/multi-file-modules.md +52 -0
- package/docs/parser-qualification.md +121 -8
- package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
- package/docs/rust.md +88 -0
- package/docs/source-maps.md +15 -7
- package/docs/standard-library-portability.md +39 -8
- package/docs/swift.md +44 -0
- package/docs/testing.md +366 -4
- package/docs/webassembly.md +52 -0
- package/index.js +63 -8
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
- package/package.json +5 -2
- package/src/artifact-path.js +47 -2
- package/src/artifacts.js +67 -0
- package/src/backends/c-validation.js +6 -1
- package/src/backends/cpp-validation.js +6 -1
- package/src/backends/csharp.js +3 -0
- package/src/backends/dart-runtime.js +41 -0
- package/src/backends/dart.js +326 -0
- package/src/backends/effects.js +705 -0
- package/src/backends/go.js +14 -2
- package/src/backends/identifiers.js +160 -9
- package/src/backends/index.js +27 -2
- package/src/backends/ios.js +1612 -0
- package/src/backends/java.js +454 -36
- package/src/backends/javascript.js +389 -23
- package/src/backends/kotlin-runtime.js +29 -0
- package/src/backends/kotlin.js +141 -0
- package/src/backends/native-validation.js +1 -1
- package/src/backends/ordered-expressions.js +40 -6
- package/src/backends/php-stdlib-support.js +239 -0
- package/src/backends/php.js +469 -32
- package/src/backends/program.js +1407 -0
- package/src/backends/python.js +3 -0
- package/src/backends/ruby.js +326 -23
- package/src/backends/rust-runtime.js +34 -0
- package/src/backends/rust-validation.js +75 -0
- package/src/backends/rust.js +335 -0
- package/src/backends/scalars.js +141 -16
- package/src/backends/shared.js +2304 -124
- package/src/backends/stdlib-support.js +234 -0
- package/src/backends/swift-runtime.js +14 -0
- package/src/backends/swift.js +132 -0
- package/src/backends/typescript.js +349 -23
- package/src/backends/wasm.js +2208 -0
- package/src/backends/writer.js +520 -2
- package/src/diagnostic.js +4 -2
- package/src/frontends/c.js +4 -2
- package/src/frontends/cpp.js +4 -2
- package/src/frontends/csharp.js +4 -2
- package/src/frontends/dart.js +963 -0
- package/src/frontends/index.js +14 -4
- package/src/frontends/java.js +1977 -69
- package/src/frontends/javascript-typescript.js +2046 -102
- package/src/frontends/kotlin.js +713 -0
- package/src/frontends/php.js +1725 -79
- package/src/frontends/program.js +1062 -0
- package/src/frontends/ruby.js +1624 -98
- package/src/frontends/rust-parser.js +18 -0
- package/src/frontends/rust.js +714 -0
- package/src/frontends/scalars.js +31 -1
- package/src/frontends/swift.js +893 -0
- package/src/frontends/types.js +750 -0
- package/src/language-registry.js +172 -12
- package/src/mapping.js +33 -9
- package/src/semantic/capabilities.js +671 -0
- package/src/semantic/effects.js +737 -0
- package/src/semantic/generics.js +58 -0
- package/src/semantic/lifetime.js +517 -0
- package/src/semantic/provenance.js +412 -19
- package/src/semantic/scalars.js +17 -0
- package/src/semantic/stdlib.js +921 -0
- package/src/semantic/types.js +765 -14
- package/src/semantic/validate.js +2934 -209
- package/src/stdlib-facades.js +1211 -0
- package/src/stdlib-negotiation.js +446 -0
- package/src/stdlib-providers.js +377 -0
- package/src/toolchains.js +16 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Exact target-only checked arithmetic support for Semantifold safe integers. */
|
|
2
|
+
export declare const kotlinRuntime = "private const val SEMANTIFOLD_MAX_SAFE_INTEGER: Long = 9007199254740991L\nprivate const val SEMANTIFOLD_MIN_SAFE_INTEGER: Long = -9007199254740991L\n\nprivate fun semantifold_integer(value: Long): Long {\n if (value < SEMANTIFOLD_MIN_SAFE_INTEGER || value > SEMANTIFOLD_MAX_SAFE_INTEGER) {\n throw ArithmeticException(\"Semantifold safe integer overflow\")\n }\n return value\n}\n\nprivate fun semantifold_integer_add(left: Long, right: Long): Long {\n return semantifold_integer(Math.addExact(left, right))\n}\n\nprivate fun semantifold_integer_subtract(left: Long, right: Long): Long {\n return semantifold_integer(Math.subtractExact(left, right))\n}\n\nprivate fun semantifold_integer_multiply(left: Long, right: Long): Long {\n return semantifold_integer(Math.multiplyExact(left, right))\n}\n\nprivate fun semantifold_integer_negate(value: Long): Long {\n return semantifold_integer(Math.negateExact(value))\n}\n";
|
|
3
|
+
//# sourceMappingURL=kotlin-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kotlin-runtime.d.ts","sourceRoot":"","sources":["../../../src/backends/kotlin-runtime.js"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,aAAa,m6BAyBzB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/** Exact target-only checked arithmetic support for Semantifold safe integers. */
|
|
3
|
+
export const kotlinRuntime = `private const val SEMANTIFOLD_MAX_SAFE_INTEGER: Long = 9007199254740991L
|
|
4
|
+
private const val SEMANTIFOLD_MIN_SAFE_INTEGER: Long = -9007199254740991L
|
|
5
|
+
|
|
6
|
+
private fun semantifold_integer(value: Long): Long {
|
|
7
|
+
if (value < SEMANTIFOLD_MIN_SAFE_INTEGER || value > SEMANTIFOLD_MAX_SAFE_INTEGER) {
|
|
8
|
+
throw ArithmeticException("Semantifold safe integer overflow")
|
|
9
|
+
}
|
|
10
|
+
return value
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
private fun semantifold_integer_add(left: Long, right: Long): Long {
|
|
14
|
+
return semantifold_integer(Math.addExact(left, right))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
private fun semantifold_integer_subtract(left: Long, right: Long): Long {
|
|
18
|
+
return semantifold_integer(Math.subtractExact(left, right))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private fun semantifold_integer_multiply(left: Long, right: Long): Long {
|
|
22
|
+
return semantifold_integer(Math.multiplyExact(left, right))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private fun semantifold_integer_negate(value: Long): Long {
|
|
26
|
+
return semantifold_integer(Math.negateExact(value))
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia290bGluLXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMva290bGluLXJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QjVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEV4YWN0IHRhcmdldC1vbmx5IGNoZWNrZWQgYXJpdGhtZXRpYyBzdXBwb3J0IGZvciBTZW1hbnRpZm9sZCBzYWZlIGludGVnZXJzLiAqL1xuZXhwb3J0IGNvbnN0IGtvdGxpblJ1bnRpbWUgPSBgcHJpdmF0ZSBjb25zdCB2YWwgU0VNQU5USUZPTERfTUFYX1NBRkVfSU5URUdFUjogTG9uZyA9IDkwMDcxOTkyNTQ3NDA5OTFMXG5wcml2YXRlIGNvbnN0IHZhbCBTRU1BTlRJRk9MRF9NSU5fU0FGRV9JTlRFR0VSOiBMb25nID0gLTkwMDcxOTkyNTQ3NDA5OTFMXG5cbnByaXZhdGUgZnVuIHNlbWFudGlmb2xkX2ludGVnZXIodmFsdWU6IExvbmcpOiBMb25nIHtcbiAgaWYgKHZhbHVlIDwgU0VNQU5USUZPTERfTUlOX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA+IFNFTUFOVElGT0xEX01BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICB0aHJvdyBBcml0aG1ldGljRXhjZXB0aW9uKFwiU2VtYW50aWZvbGQgc2FmZSBpbnRlZ2VyIG92ZXJmbG93XCIpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbnByaXZhdGUgZnVuIHNlbWFudGlmb2xkX2ludGVnZXJfYWRkKGxlZnQ6IExvbmcsIHJpZ2h0OiBMb25nKTogTG9uZyB7XG4gIHJldHVybiBzZW1hbnRpZm9sZF9pbnRlZ2VyKE1hdGguYWRkRXhhY3QobGVmdCwgcmlnaHQpKVxufVxuXG5wcml2YXRlIGZ1biBzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0KGxlZnQ6IExvbmcsIHJpZ2h0OiBMb25nKTogTG9uZyB7XG4gIHJldHVybiBzZW1hbnRpZm9sZF9pbnRlZ2VyKE1hdGguc3VidHJhY3RFeGFjdChsZWZ0LCByaWdodCkpXG59XG5cbnByaXZhdGUgZnVuIHNlbWFudGlmb2xkX2ludGVnZXJfbXVsdGlwbHkobGVmdDogTG9uZywgcmlnaHQ6IExvbmcpOiBMb25nIHtcbiAgcmV0dXJuIHNlbWFudGlmb2xkX2ludGVnZXIoTWF0aC5tdWx0aXBseUV4YWN0KGxlZnQsIHJpZ2h0KSlcbn1cblxucHJpdmF0ZSBmdW4gc2VtYW50aWZvbGRfaW50ZWdlcl9uZWdhdGUodmFsdWU6IExvbmcpOiBMb25nIHtcbiAgcmV0dXJuIHNlbWFudGlmb2xkX2ludGVnZXIoTWF0aC5uZWdhdGVFeGFjdCh2YWx1ZSkpXG59XG5gXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const kotlinArtifactMetadata: Readonly<{
|
|
2
|
+
compiler: Readonly<{
|
|
3
|
+
apiVersion: "2.4";
|
|
4
|
+
arguments: readonly string[];
|
|
5
|
+
jvmTarget: "25";
|
|
6
|
+
languageVersion: "2.4";
|
|
7
|
+
output: "Program.jar";
|
|
8
|
+
toolchain: "kotlinc";
|
|
9
|
+
version: "2.4.20";
|
|
10
|
+
}>;
|
|
11
|
+
run: Readonly<{
|
|
12
|
+
arguments: readonly string[];
|
|
13
|
+
toolchain: "java25";
|
|
14
|
+
version: "25.0.4+7";
|
|
15
|
+
}>;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Emits one deterministic Kotlin/JVM program through the source-aware writer.
|
|
19
|
+
* @param {import("../semantic/types.js").SemanticModule} module - Validated semantic module.
|
|
20
|
+
* @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateKotlin(module: import("../semantic/types.js").SemanticModule, writer: import("./writer.js").SourceWriter): void;
|
|
23
|
+
//# sourceMappingURL=kotlin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kotlin.d.ts","sourceRoot":"","sources":["../../../src/backends/kotlin.js"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAYjC,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAH1B,OAAO,sBAAsB,EAAE,cAGL,EAAE,MAAM,EAFlC,OAAO,aAAa,EAAE,YAEY,QA+B5C"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { emitExpression } from "./shared.js";
|
|
3
|
+
import { emitScalarType } from "./scalars.js";
|
|
4
|
+
import { kotlinRuntime } from "./kotlin-runtime.js";
|
|
5
|
+
export const kotlinArtifactMetadata = Object.freeze({
|
|
6
|
+
compiler: Object.freeze({
|
|
7
|
+
apiVersion: "2.4",
|
|
8
|
+
arguments: Object.freeze(["-language-version", "2.4", "-api-version", "2.4", "-jvm-target", "25", "-Werror",
|
|
9
|
+
"-include-runtime", "Program.kt", "-d", "Program.jar"]),
|
|
10
|
+
jvmTarget: "25",
|
|
11
|
+
languageVersion: "2.4",
|
|
12
|
+
output: "Program.jar",
|
|
13
|
+
toolchain: "kotlinc",
|
|
14
|
+
version: "2.4.20"
|
|
15
|
+
}),
|
|
16
|
+
run: Object.freeze({ arguments: Object.freeze(["-jar", "Program.jar"]), toolchain: "java25", version: "25.0.4+7" })
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Emits one deterministic Kotlin/JVM program through the source-aware writer.
|
|
20
|
+
* @param {import("../semantic/types.js").SemanticModule} module - Validated semantic module.
|
|
21
|
+
* @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
|
|
22
|
+
*/
|
|
23
|
+
export function generateKotlin(module, writer) {
|
|
24
|
+
writer.synthetic(kotlinRuntime, "Checked Kotlin/JVM safe-integer support", [module], [""]);
|
|
25
|
+
module.functions.forEach((declaration, functionIndex) => {
|
|
26
|
+
const path = `/functions/${functionIndex}`;
|
|
27
|
+
writer.synthetic("\n", "declaration separator", [declaration], [path]);
|
|
28
|
+
writer.mapped("fun", { mappingKind: "anchor", node: declaration, path });
|
|
29
|
+
writer.synthetic(" ", "declaration spacing", [declaration], [path]);
|
|
30
|
+
writer.mapped(declaration.name, { mappingKind: "exact", node: declaration, path, role: "name" });
|
|
31
|
+
writer.synthetic("(", "function parameter scaffold", [declaration], [path]);
|
|
32
|
+
declaration.parameters.forEach((parameter, parameterIndex) => {
|
|
33
|
+
const parameterPath = `${path}/parameters/${parameterIndex}`;
|
|
34
|
+
if (parameterIndex)
|
|
35
|
+
writer.synthetic(", ", "parameter separator", [parameter], [parameterPath]);
|
|
36
|
+
writer.mapped(parameter.name, { mappingKind: "exact", node: parameter, path: parameterPath, role: "name" });
|
|
37
|
+
writer.synthetic(": ", "parameter annotation scaffold", [parameter], [parameterPath]);
|
|
38
|
+
writer.mapped(emitScalarType("kotlin", parameter.type), { mappingKind: "exact", node: parameter.type,
|
|
39
|
+
path: `${parameterPath}/type`, role: "type" });
|
|
40
|
+
});
|
|
41
|
+
writer.synthetic("): ", "function return scaffold", [declaration], [path]);
|
|
42
|
+
writer.mapped(emitScalarType("kotlin", declaration.returnType), { mappingKind: "exact", node: declaration.returnType,
|
|
43
|
+
path: `${path}/returnType`, role: "type" });
|
|
44
|
+
writer.synthetic(" {\n", "Kotlin function body scaffold", [declaration], [path]);
|
|
45
|
+
emitBlock(writer, declaration.body, " ", `${path}/body`);
|
|
46
|
+
writer.synthetic("}\n", "Kotlin function body scaffold", [declaration], [path]);
|
|
47
|
+
});
|
|
48
|
+
writer.synthetic("\nfun main() {\n", "Kotlin generated main scaffold", [module.entryPoint], ["/entryPoint"]);
|
|
49
|
+
emitBlock(writer, module.entryPoint.body, " ", "/entryPoint/body");
|
|
50
|
+
writer.synthetic("}\n", "Kotlin generated main scaffold", [module.entryPoint], ["/entryPoint"]);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Emits one Kotlin statement block.
|
|
54
|
+
* @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
|
|
55
|
+
* @param {import("../semantic/types.js").Block} block - Semantic block.
|
|
56
|
+
* @param {string} indent - Current indentation.
|
|
57
|
+
* @param {string} path - Semantic block path.
|
|
58
|
+
* @returns {void}
|
|
59
|
+
*/
|
|
60
|
+
function emitBlock(writer, block, indent, path) {
|
|
61
|
+
block.statements.forEach((statement, index) => emitStatement(writer, statement, indent, `${path}/statements/${index}`));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Emits one Kotlin statement.
|
|
65
|
+
* @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
|
|
66
|
+
* @param {import("../semantic/types.js").Statement} statement - Semantic statement.
|
|
67
|
+
* @param {string} indent - Current indentation.
|
|
68
|
+
* @param {string} path - Semantic statement path.
|
|
69
|
+
* @returns {void}
|
|
70
|
+
*/
|
|
71
|
+
function emitStatement(writer, statement, indent, path) {
|
|
72
|
+
writer.synthetic(indent, "indentation", [statement], [path]);
|
|
73
|
+
if (statement.kind == "LocalDeclaration") {
|
|
74
|
+
writer.mapped(statement.mutable ? "var" : "val", { mappingKind: "anchor", node: statement, path });
|
|
75
|
+
writer.synthetic(" ", "declaration spacing", [statement], [path]);
|
|
76
|
+
writer.mapped(statement.name, { mappingKind: "exact", node: statement, path, role: "name" });
|
|
77
|
+
writer.synthetic(": ", "local annotation scaffold", [statement], [path]);
|
|
78
|
+
writer.mapped(emitScalarType("kotlin", statement.type), { mappingKind: "exact", node: statement.type,
|
|
79
|
+
path: `${path}/type`, role: "type" });
|
|
80
|
+
writer.synthetic(" ", "assignment spacing", [statement], [path]);
|
|
81
|
+
writer.mapped("=", { mappingKind: "exact", node: statement, path, role: "operator" });
|
|
82
|
+
writer.synthetic(" ", "assignment spacing", [statement], [path]);
|
|
83
|
+
emitExpression(writer, statement.initializer, `${path}/initializer`, "kotlin", identity);
|
|
84
|
+
writer.synthetic("\n", "line break", [statement], [path]);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (statement.kind == "AssignmentStatement") {
|
|
88
|
+
writer.mapped(statement.target.name, { mappingKind: "exact", node: statement.target, path: `${path}/target`, role: "name" });
|
|
89
|
+
writer.synthetic(" ", "assignment spacing", [statement], [path]);
|
|
90
|
+
writer.mapped("=", { mappingKind: "exact", node: statement, path, role: "operator" });
|
|
91
|
+
writer.synthetic(" ", "assignment spacing", [statement], [path]);
|
|
92
|
+
emitExpression(writer, statement.expression, `${path}/expression`, "kotlin", identity);
|
|
93
|
+
writer.synthetic("\n", "line break", [statement], [path]);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (statement.kind == "ExpressionStatement")
|
|
97
|
+
throw new TypeError("Kotlin Task 005 expression statement reached emission.");
|
|
98
|
+
if (statement.kind == "ReturnStatement") {
|
|
99
|
+
if (!statement.expression)
|
|
100
|
+
throw new TypeError("Kotlin bare return reached emission.");
|
|
101
|
+
writer.mapped("return", { mappingKind: "anchor", node: statement, path });
|
|
102
|
+
writer.synthetic(" ", "return spacing", [statement], [path]);
|
|
103
|
+
emitExpression(writer, statement.expression, `${path}/expression`, "kotlin", identity);
|
|
104
|
+
writer.synthetic("\n", "line break", [statement], [path]);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (statement.kind == "PrintStatement") {
|
|
108
|
+
writer.synthetic("println(", "Kotlin println plumbing", [statement], [path]);
|
|
109
|
+
emitExpression(writer, statement.expression, `${path}/expression`, "kotlin", identity);
|
|
110
|
+
writer.synthetic(")\n", "Kotlin println plumbing", [statement], [path]);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (statement.kind != "IfStatement")
|
|
114
|
+
throw new TypeError("Unsupported Kotlin statement reached emission.");
|
|
115
|
+
writer.mapped("if", { mappingKind: "anchor", node: statement, path });
|
|
116
|
+
writer.synthetic(" (", "Kotlin conditional scaffold", [statement], [path]);
|
|
117
|
+
emitExpression(writer, statement.condition, `${path}/condition`, "kotlin", identity);
|
|
118
|
+
writer.synthetic(") {\n", "Kotlin conditional scaffold", [statement.consequent], [`${path}/consequent`]);
|
|
119
|
+
emitBlock(writer, statement.consequent, `${indent} `, `${path}/consequent`);
|
|
120
|
+
writer.synthetic(`${indent}}`, "Kotlin conditional scaffold", [statement.consequent], [`${path}/consequent`]);
|
|
121
|
+
if (statement.alternate) {
|
|
122
|
+
writer.synthetic(" else {\n", "Kotlin alternate scaffold", [statement.alternate], [`${path}/alternate`]);
|
|
123
|
+
emitBlock(writer, statement.alternate, `${indent} `, `${path}/alternate`);
|
|
124
|
+
writer.synthetic(`${indent}}`, "Kotlin alternate scaffold", [statement.alternate], [`${path}/alternate`]);
|
|
125
|
+
}
|
|
126
|
+
writer.synthetic("\n", "line break", [statement], [path]);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Preserves an emitted Kotlin identifier.
|
|
130
|
+
* @param {string} name - Identifier spelling.
|
|
131
|
+
* @returns {string} Unchanged spelling.
|
|
132
|
+
*/
|
|
133
|
+
function identity(name) {
|
|
134
|
+
return name;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia290bGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2tvdGxpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUVqRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xELFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTO1lBQ3pHLGtCQUFrQixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekQsU0FBUyxFQUFFLElBQUk7UUFDZixlQUFlLEVBQUUsS0FBSztRQUN0QixNQUFNLEVBQUUsYUFBYTtRQUNyQixTQUFTLEVBQUUsU0FBUztRQUNwQixPQUFPLEVBQUUsUUFBUTtLQUNsQixDQUFDO0lBQ0YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDO0NBQ2xILENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzNDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLHlDQUF5QyxF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WUFBWSxDQUFDLENBQUMsQ0FBQTtRQUN4RyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLDJCQUEyQixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDM0csQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQUk7SUFDcEIsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZW1pdEV4cHJlc3Npb259IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7a290bGluUnVudGltZX0gZnJvbSBcIi4va290bGluLXJ1bnRpbWUuanNcIlxuXG5leHBvcnQgY29uc3Qga290bGluQXJ0aWZhY3RNZXRhZGF0YSA9IE9iamVjdC5mcmVlemUoe1xuICBjb21waWxlcjogT2JqZWN0LmZyZWV6ZSh7XG4gICAgYXBpVmVyc2lvbjogXCIyLjRcIixcbiAgICBhcmd1bWVudHM6IE9iamVjdC5mcmVlemUoW1wiLWxhbmd1YWdlLXZlcnNpb25cIiwgXCIyLjRcIiwgXCItYXBpLXZlcnNpb25cIiwgXCIyLjRcIiwgXCItanZtLXRhcmdldFwiLCBcIjI1XCIsIFwiLVdlcnJvclwiLFxuICAgICAgXCItaW5jbHVkZS1ydW50aW1lXCIsIFwiUHJvZ3JhbS5rdFwiLCBcIi1kXCIsIFwiUHJvZ3JhbS5qYXJcIl0pLFxuICAgIGp2bVRhcmdldDogXCIyNVwiLFxuICAgIGxhbmd1YWdlVmVyc2lvbjogXCIyLjRcIixcbiAgICBvdXRwdXQ6IFwiUHJvZ3JhbS5qYXJcIixcbiAgICB0b29sY2hhaW46IFwia290bGluY1wiLFxuICAgIHZlcnNpb246IFwiMi40LjIwXCJcbiAgfSksXG4gIHJ1bjogT2JqZWN0LmZyZWV6ZSh7YXJndW1lbnRzOiBPYmplY3QuZnJlZXplKFtcIi1qYXJcIiwgXCJQcm9ncmFtLmphclwiXSksIHRvb2xjaGFpbjogXCJqYXZhMjVcIiwgdmVyc2lvbjogXCIyNS4wLjQrN1wifSlcbn0pXG5cbi8qKlxuICogRW1pdHMgb25lIGRldGVybWluaXN0aWMgS290bGluL0pWTSBwcm9ncmFtIHRocm91Z2ggdGhlIHNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUtvdGxpbihtb2R1bGUsIHdyaXRlcikge1xuICB3cml0ZXIuc3ludGhldGljKGtvdGxpblJ1bnRpbWUsIFwiQ2hlY2tlZCBLb3RsaW4vSlZNIHNhZmUtaW50ZWdlciBzdXBwb3J0XCIsIFttb2R1bGVdLCBbXCJcIl0pXG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgZnVuY3Rpb25JbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcImZ1blwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJmdW5jdGlvbiBwYXJhbWV0ZXIgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyLCBwYXJhbWV0ZXJJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gXG5cbiAgICAgIGlmIChwYXJhbWV0ZXJJbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwicGFyYW1ldGVyIHNlcGFyYXRvclwiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIjogXCIsIFwicGFyYW1ldGVyIGFubm90YXRpb24gc2NhZmZvbGRcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJrb3RsaW5cIiwgcGFyYW1ldGVyLnR5cGUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLnR5cGUsXG4gICAgICAgIHBhdGg6IGAke3BhcmFtZXRlclBhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKTogXCIsIFwiZnVuY3Rpb24gcmV0dXJuIHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwia290bGluXCIsIGRlY2xhcmF0aW9uLnJldHVyblR5cGUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAgIHBhdGg6IGAke3BhdGh9L3JldHVyblR5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiB7XFxuXCIsIFwiS290bGluIGZ1bmN0aW9uIGJvZHkgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICBcIiwgYCR7cGF0aH0vYm9keWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIn1cXG5cIiwgXCJLb3RsaW4gZnVuY3Rpb24gYm9keSBzY2FmZm9sZFwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIH0pXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbmZ1biBtYWluKCkge1xcblwiLCBcIktvdGxpbiBnZW5lcmF0ZWQgbWFpbiBzY2FmZm9sZFwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIgIFwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIn1cXG5cIiwgXCJLb3RsaW4gZ2VuZXJhdGVkIG1haW4gc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG59XG5cbi8qKlxuICogRW1pdHMgb25lIEtvdGxpbiBzdGF0ZW1lbnQgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IC0gQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gU2VtYW50aWMgYmxvY2sgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0QmxvY2sod3JpdGVyLCBibG9jaywgaW5kZW50LCBwYXRoKSB7XG4gIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCkpXG59XG5cbi8qKlxuICogRW1pdHMgb25lIEtvdGxpbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBzdGF0ZW1lbnQgLSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IC0gQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gU2VtYW50aWMgc3RhdGVtZW50IHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm11dGFibGUgPyBcInZhclwiIDogXCJ2YWxcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJsb2NhbCBhbm5vdGF0aW9uIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImtvdGxpblwiLCBzdGF0ZW1lbnQudHlwZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSxcbiAgICAgIHBhdGg6IGAke3BhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgXCJrb3RsaW5cIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC50YXJnZXQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50YXJnZXQsIHBhdGg6IGAke3BhdGh9L3RhcmdldGAsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJrb3RsaW5cIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLb3RsaW4gVGFzayAwMDUgZXhwcmVzc2lvbiBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXN0YXRlbWVudC5leHByZXNzaW9uKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiS290bGluIGJhcmUgcmV0dXJuIHJlYWNoZWQgZW1pc3Npb24uXCIpXG4gICAgd3JpdGVyLm1hcHBlZChcInJldHVyblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJyZXR1cm4gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwicHJpbnRsbihcIiwgXCJLb3RsaW4gcHJpbnRsbiBwbHVtYmluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKVxcblwiLCBcIktvdGxpbiBwcmludGxuIHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kICE9IFwiSWZTdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIEtvdGxpbiBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgd3JpdGVyLm1hcHBlZChcImlmXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAoXCIsIFwiS290bGluIGNvbmRpdGlvbmFsIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgXCJrb3RsaW5cIiwgaWRlbnRpdHkpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpIHtcXG5cIiwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmNvbnNlcXVlbnQsIGAke2luZGVudH0gIGAsIGAke3BhdGh9L2NvbnNlcXVlbnRgKVxuICB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH19YCwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIGVsc2Uge1xcblwiLCBcIktvdGxpbiBhbHRlcm5hdGUgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5hbHRlcm5hdGVdLCBbYCR7cGF0aH0vYWx0ZXJuYXRlYF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYClcbiAgICB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH19YCwgXCJLb3RsaW4gYWx0ZXJuYXRlIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnQuYWx0ZXJuYXRlXSwgW2Ake3BhdGh9L2FsdGVybmF0ZWBdKVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGFuIGVtaXR0ZWQgS290bGluIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cbiJdfQ==
|
|
@@ -2,8 +2,8 @@ export type SourceLocation = import("../semantic/types.js").SourceLocation;
|
|
|
2
2
|
/**
|
|
3
3
|
* Bounds a native occurrence plan and rejects cycles before recursive shared validation.
|
|
4
4
|
* @param {unknown} module - Untrusted backend request.
|
|
5
|
-
* @param {"c" | "cpp"} [language] -
|
|
5
|
+
* @param {"c" | "cpp" | "kotlin" | "rust" | "swift" | "wasm"} [language] - Backend diagnostic language.
|
|
6
6
|
* @returns {void}
|
|
7
7
|
*/
|
|
8
|
-
export declare function validateNativeGraph(module: unknown, language?: "c" | "cpp"): void;
|
|
8
|
+
export declare function validateNativeGraph(module: unknown, language?: "c" | "cpp" | "kotlin" | "rust" | "swift" | "wasm"): void;
|
|
9
9
|
//# sourceMappingURL=native-validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/native-validation.js"],"names":[],"mappings":"AAII,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AAK3E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAJ/B,OAI+B,EAAE,QAAQ,AAHjD,CACA,EADQ,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"native-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/native-validation.js"],"names":[],"mappings":"AAII,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AAK3E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAJ/B,OAI+B,EAAE,QAAQ,AAHjD,CACA,EADQ,GAAG,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAGG,GAF7C,IAAI,CAqChB"}
|
|
@@ -6,7 +6,7 @@ const semanticEdges = new Set(["functions", "entryPoint", "body", "parameters",
|
|
|
6
6
|
/**
|
|
7
7
|
* Bounds a native occurrence plan and rejects cycles before recursive shared validation.
|
|
8
8
|
* @param {unknown} module - Untrusted backend request.
|
|
9
|
-
* @param {"c" | "cpp"} [language] -
|
|
9
|
+
* @param {"c" | "cpp" | "kotlin" | "rust" | "swift" | "wasm"} [language] - Backend diagnostic language.
|
|
10
10
|
* @returns {void}
|
|
11
11
|
*/
|
|
12
12
|
export function validateNativeGraph(module, language = "c") {
|
|
@@ -56,4 +56,4 @@ function validLocation(location) {
|
|
|
56
56
|
location.end.offset >= location.start.offset && location.end.line >= location.start.line &&
|
|
57
57
|
(location.end.line != location.start.line || location.end.column >= location.start.column));
|
|
58
58
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLXZhbGlkYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvbmF0aXZlLXZhbGlkYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELDhFQUE4RTtBQUU5RSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVc7SUFDckgsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQUVySDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLEdBQUc7SUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXpCOzs7OztPQUtHO0lBQ0gsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO1lBQUUsT0FBTyxDQUFDLENBQUE7UUFDaEQsTUFBTSxRQUFRLEdBQUcsMENBQTBDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDNUUsTUFBTSxJQUFJLEdBQUcsOEJBQThCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxJQUFJLFVBQVUs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a1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2VMb2NhdGlvbiAqL1xuXG5jb25zdCBzZW1hbnRpY0VkZ2VzID0gbmV3IFNldChbXCJmdW5jdGlvbnNcIiwgXCJlbnRyeVBvaW50XCIsIFwiYm9keVwiLCBcInBhcmFtZXRlcnNcIiwgXCJyZXR1cm5UeXBlXCIsIFwic3RhdGVtZW50c1wiLCBcImNvbmRpdGlvblwiLFxuICBcImNvbnNlcXVlbnRcIiwgXCJhbHRlcm5hdGVcIiwgXCJ0eXBlXCIsIFwidGFyZ2V0XCIsIFwiaW5pdGlhbGl6ZXJcIiwgXCJleHByZXNzaW9uXCIsIFwib3BlcmFuZFwiLCBcImxlZnRcIiwgXCJyaWdodFwiLCBcImFyZ3VtZW50c1wiXSlcblxuLyoqXG4gKiBCb3VuZHMgYSBuYXRpdmUgb2NjdXJyZW5jZSBwbGFuIGFuZCByZWplY3RzIGN5Y2xlcyBiZWZvcmUgcmVjdXJzaXZlIHNoYXJlZCB2YWxpZGF0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBtb2R1bGUgLSBVbnRydXN0ZWQgYmFja2VuZCByZXF1ZXN0LlxuICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCIgfCBcImtvdGxpblwiIHwgXCJydXN0XCIgfCBcInN3aWZ0XCIgfCBcIndhc21cIn0gW2xhbmd1YWdlXSAtIEJhY2tlbmQgZGlhZ25vc3RpYyBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVOYXRpdmVHcmFwaChtb2R1bGUsIGxhbmd1YWdlID0gXCJjXCIpIHtcbiAgY29uc3QgYWN0aXZlID0gbmV3IFNldCgpXG4gIGNvbnN0IHdlaWdodHMgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogQ291bnRzIGV4cGFuZGVkIHNlbWFudGljIG9jY3VycmVuY2VzIHdoaWxlIG1lbW9pemluZyBzaGFyZWQgb2JqZWN0cy5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBzZW1hbnRpYyB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIC0gVHJhdmVyc2FsIGRlcHRoLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBCb3VuZGVkIGV4cGFuZGVkIHdlaWdodC5cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KHZhbHVlLCBkZXB0aCkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiAwXG4gICAgY29uc3QgbG9jYXRpb24gPSAvKiogQHR5cGUge3tsb2NhdGlvbj86IFNvdXJjZUxvY2F0aW9ufX0gKi8gKHZhbHVlKS5sb2NhdGlvblxuICAgIGNvbnN0IGtpbmQgPSAvKiogQHR5cGUge3traW5kPzogc3RyaW5nfX0gKi8gKHZhbHVlKS5raW5kXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIChraW5kICE9IFwiVHlwZVJlZmVyZW5jZVwiIHx8IFwibG9jYXRpb25cIiBpbiB2YWx1ZSkgJiYgIXZhbGlkTG9jYXRpb24obG9jYXRpb24pKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHNlbWFudGljIGxvY2F0aW9uXCIsIHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiA1MTIgfHwgYWN0aXZlLmhhcyh2YWx1ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgb3IgZXhjZXNzaXZlbHkgbmVzdGVkIHNlbWFudGljIGdyYXBoXCIsIGxvY2F0aW9uKVxuICAgIGlmICh3ZWlnaHRzLmhhcyh2YWx1ZSkpIHJldHVybiB3ZWlnaHRzLmdldCh2YWx1ZSlcbiAgICBhY3RpdmUuYWRkKHZhbHVlKVxuICAgIGxldCBzaXplID0gMVxuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5maWx0ZXIoKFtrZXldKSA9PiBzZW1hbnRpY0VkZ2VzLmhhcyhrZXkpKS5tYXAoKFssIGNoaWxkXSkgPT4gY2hpbGQpXG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBzaXplICs9IHZpc2l0KGNoaWxkLCBkZXB0aCArIDEpXG4gICAgICBpZiAoc2l6ZSA+IDk5OTk5OSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImV4cGFuZGVkIG5hdGl2ZSBvY2N1cnJlbmNlIHBsYW4gZXhjZWVkcyBzaXgtZGlnaXQgY2FwYWNpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGFjdGl2ZS5kZWxldGUodmFsdWUpXG4gICAgd2VpZ2h0cy5zZXQodmFsdWUsIHNpemUpXG4gICAgcmV0dXJuIHNpemVcbiAgfVxuXG4gIHZpc2l0KG1vZHVsZSwgMClcbn1cblxuLyoqXG4gKiBDaGVja3MgcmVxdWlyZWQgc2VtYW50aWMgY29vcmRpbmF0ZXMgYmVmb3JlIHRoZSBwcm92ZW5hbmNlIHdyaXRlciByZWFkcyB0aGVtLlxuICogQHBhcmFtIHtTb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBDYW5kaWRhdGUgb3JpZ2luLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgaXQgaXMgYSBjb21wbGV0ZSBvcmRlcmVkIFVURi0xNiByYW5nZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRMb2NhdGlvbihsb2NhdGlvbikge1xuICByZXR1cm4gQm9vbGVhbihsb2NhdGlvbiAmJiB0eXBlb2YgbG9jYXRpb24uZmlsZW5hbWUgPT0gXCJzdHJpbmdcIiAmJiBsb2NhdGlvbi5maWxlbmFtZS5sZW5ndGggPiAwICYmXG4gICAgW2xvY2F0aW9uLnN0YXJ0LCBsb2NhdGlvbi5lbmRdLmV2ZXJ5KChwb2ludCkgPT4gcG9pbnQgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIocG9pbnQub2Zmc2V0KSAmJiBwb2ludC5vZmZzZXQgPj0gMCAmJlxuICAgICAgTnVtYmVyLmlzU2FmZUludGVnZXIocG9pbnQubGluZSkgJiYgcG9pbnQubGluZSA+PSAxICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKHBvaW50LmNvbHVtbikgJiYgcG9pbnQuY29sdW1uID49IDEpICYmXG4gICAgbG9jYXRpb24uZW5kLm9mZnNldCA+PSBsb2NhdGlvbi5zdGFydC5vZmZzZXQgJiYgbG9jYXRpb24uZW5kLmxpbmUgPj0gbG9jYXRpb24uc3RhcnQubGluZSAmJlxuICAgIChsb2NhdGlvbi5lbmQubGluZSAhPSBsb2NhdGlvbi5zdGFydC5saW5lIHx8IGxvY2F0aW9uLmVuZC5jb2x1bW4gPj0gbG9jYXRpb24uc3RhcnQuY29sdW1uKSlcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ordered-expressions.d.ts","sourceRoot":"","sources":["../../../src/backends/ordered-expressions.js"],"names":[],"mappings":"AAKI,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAA2D,MAAM,GAAvD,OAAO,sBAAsB,EAAE,gBAAgB,CAAQ;AACjE,YAA+E,YAAY,GAAjF;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAc;AAC3F,YAAwF,WAAW,GAAzF;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;CAAC,CAAa;AACnG,YAAwD,SAAS,GAAvD,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAW;AAJrE,sEAAsE;AACtE,wEAAwE;AACxE,kGAAkG;AAClG,0GAA0G;AAC1G,wEAAwE;AAExE,sFAAsF;AACtF,qBAAa,wBAAwB;IAO5B,QAAQ;IACR,SAAS;
|
|
1
|
+
{"version":3,"file":"ordered-expressions.d.ts","sourceRoot":"","sources":["../../../src/backends/ordered-expressions.js"],"names":[],"mappings":"AAKI,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAA2D,MAAM,GAAvD,OAAO,sBAAsB,EAAE,gBAAgB,CAAQ;AACjE,YAA+E,YAAY,GAAjF;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAc;AAC3F,YAAwF,WAAW,GAAzF;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;CAAC,CAAa;AACnG,YAAwD,SAAS,GAAvD,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAW;AAJrE,sEAAsE;AACtE,wEAAwE;AACxE,kGAAkG;AAClG,0GAA0G;AAC1G,wEAAwE;AAExE,sFAAsF;AACtF,qBAAa,wBAAwB;IAO5B,QAAQ;IACR,SAAS;IAIT,aAAa;IAXpB;;;;OAIG;IACH,YAAY,MAAM,EAHP,OAAO,sBAAsB,EAAE,cAGxB,EAAE,QAAQ,AAFzB,CACF,EADU,GAAG,GAAG,KAEiB,EAOjC;IAED;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAJJ,UAII,EAAE,QAAQ,EAHd,GAAG,CAAC,MAAM,EAAE,MAAM,CAGJ,GAFZ,MAAM,CAclB;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,UAAU,EANJ,UAMI,EAAE,IAAI,EALV,MAKU,EAAE,QAAQ,EAJpB,GAAG,CAAC,MAAM,EAAE,MAAM,CAIE,EAAE,KAAK,EAH3B,WAAW,EAGgB,GAFzB,YAAY,CA6BxB;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAHR,UAGQ,GAFN,MAAM,CAKlB;CACF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAHjC,OAAO,sBAAsB,EAAE,SAGE,GAF/B,MAAM,CAclB;AAiBG,YAAmE,aAAa,GAAtE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAC,CAAe;AAApF,uFAAuF;AACvF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAJ5B,OAAO,sBAAsB,EAAE,cAIH,EAAE,QAAQ,AAH9C,CACA,EADQ,GAAG,GAAG,KAGsC,GAF1C,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CA4CtC"}
|
|
@@ -15,7 +15,10 @@ export class OrderedExpressionPlanner {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor(module, language = "c") {
|
|
17
17
|
this.language = language;
|
|
18
|
-
this.functions = new Map(module.functions.map((declaration) => [
|
|
18
|
+
this.functions = new Map(module.functions.map((declaration) => [
|
|
19
|
+
declaration.name,
|
|
20
|
+
scalarName(declaration.returnType, language, declaration.location)
|
|
21
|
+
]));
|
|
19
22
|
this.nextTemporary = 1;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
@@ -33,6 +36,9 @@ export class OrderedExpressionPlanner {
|
|
|
33
36
|
return "string";
|
|
34
37
|
if (expression.kind == "UnaryExpression" || expression.kind == "BinaryExpression")
|
|
35
38
|
return expression.type;
|
|
39
|
+
if (expression.kind != "CallExpression" && expression.kind != "IdentifierExpression") {
|
|
40
|
+
return unsupportedCapability(this.language, "collection expression reached native scalar planning", expression.location);
|
|
41
|
+
}
|
|
36
42
|
const type = expression.kind == "CallExpression" ? this.functions.get(expression.callee) : bindings.get(expression.name);
|
|
37
43
|
if (!type)
|
|
38
44
|
return unsupportedCapability(this.language, "unresolved expression type", expression.location);
|
|
@@ -92,9 +98,15 @@ export class OrderedExpressionPlanner {
|
|
|
92
98
|
* @returns {string} Stable SHA-256 profile signature.
|
|
93
99
|
*/
|
|
94
100
|
export function statementSignature(statement) {
|
|
95
|
-
const consumer = statement.kind == "LocalDeclaration" ? [statement.kind, statement.name,
|
|
101
|
+
const consumer = statement.kind == "LocalDeclaration" ? [statement.kind, statement.name,
|
|
102
|
+
scalarName(statement.type, "c", statement.location), statement.mutable] :
|
|
96
103
|
statement.kind == "AssignmentStatement" ? [statement.kind, statement.target.name] : [statement.kind];
|
|
97
|
-
const expression = statement.kind == "IfStatement" ? statement.condition :
|
|
104
|
+
const expression = statement.kind == "IfStatement" ? statement.condition :
|
|
105
|
+
statement.kind == "LocalDeclaration" ? statement.initializer :
|
|
106
|
+
statement.kind == "AssignmentStatement" || statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" ? statement.expression :
|
|
107
|
+
statement.kind == "ReturnStatement" ? statement.expression : undefined;
|
|
108
|
+
if (!expression)
|
|
109
|
+
throw new TypeError("Bare return reached native statement signature planning.");
|
|
98
110
|
return createHash("sha256").update(JSON.stringify([consumer, expressionSignature(expression)])).digest("hex");
|
|
99
111
|
}
|
|
100
112
|
/**
|
|
@@ -111,6 +123,8 @@ function expressionSignature(expression) {
|
|
|
111
123
|
return [expression.kind, expression.callee, ...expression.arguments.map(expressionSignature)];
|
|
112
124
|
if (expression.kind == "UnaryExpression")
|
|
113
125
|
return [expression.kind, expression.operation, expression.type, expressionSignature(expression.operand)];
|
|
126
|
+
if (expression.kind != "BinaryExpression")
|
|
127
|
+
return [expression.kind];
|
|
114
128
|
return [expression.kind, expression.operation, expression.type, expressionSignature(expression.left), expressionSignature(expression.right)];
|
|
115
129
|
}
|
|
116
130
|
/** @typedef {{id: string, steps: PlannedStep[], value: PlannedValue}} StatementPlan */
|
|
@@ -136,15 +150,20 @@ export function planNativeModule(module, language = "c") {
|
|
|
136
150
|
block.statements.forEach((statement, index) => {
|
|
137
151
|
const statementPath = `${path}/statements/${index}`;
|
|
138
152
|
const field = statement.kind == "IfStatement" ? "condition" : statement.kind == "LocalDeclaration" ? "initializer" : "expression";
|
|
139
|
-
const expression = statement.kind == "IfStatement" ? statement.condition :
|
|
153
|
+
const expression = statement.kind == "IfStatement" ? statement.condition :
|
|
154
|
+
statement.kind == "LocalDeclaration" ? statement.initializer :
|
|
155
|
+
statement.kind == "AssignmentStatement" || statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" ? statement.expression :
|
|
156
|
+
statement.kind == "ReturnStatement" ? statement.expression : undefined;
|
|
140
157
|
/** @type {PlannedStep[]} */
|
|
141
158
|
const steps = [];
|
|
159
|
+
if (!expression)
|
|
160
|
+
throw new TypeError("Bare return reached native expression planning.");
|
|
142
161
|
const value = planner.plan(expression, `${statementPath}/${field}`, bindings, steps);
|
|
143
162
|
if (plans.size >= 999999)
|
|
144
163
|
unsupportedCapability(language, "ordered statement limit", statement.location);
|
|
145
164
|
plans.set(statementPath, { id: String(plans.size + 1).padStart(6, "0"), steps, value });
|
|
146
165
|
if (statement.kind == "LocalDeclaration")
|
|
147
|
-
bindings.set(statement.name, statement.type.
|
|
166
|
+
bindings.set(statement.name, scalarName(statement.type, language, statement.location));
|
|
148
167
|
if (statement.kind == "IfStatement") {
|
|
149
168
|
visit(statement.consequent, `${statementPath}/consequent`, bindings);
|
|
150
169
|
if (statement.alternate)
|
|
@@ -152,8 +171,21 @@ export function planNativeModule(module, language = "c") {
|
|
|
152
171
|
}
|
|
153
172
|
});
|
|
154
173
|
}
|
|
155
|
-
module.functions.forEach((declaration, index) => visit(declaration.body, `/functions/${index}/body`, new Map(declaration.parameters.map((parameter) => [parameter.name, parameter.type.
|
|
174
|
+
module.functions.forEach((declaration, index) => visit(declaration.body, `/functions/${index}/body`, new Map(declaration.parameters.map((parameter) => [parameter.name, scalarName(parameter.type, language, parameter.location)]))));
|
|
156
175
|
visit(module.entryPoint.body, "/entryPoint/body", new Map());
|
|
157
176
|
return plans;
|
|
158
177
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1leHByZXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9vcmRlcmVkLWV4cHJlc3Npb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsa0dBQWtHO0FBQ2xHLDBHQUEwRztBQUMxRyx3RUFBd0U7QUFFeEUsc0ZBQXNGO0FBQ3RGLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNILFlBQVksTUFBTSxFQUFFLFFBQVEsR0FBRyxHQUFHO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoSCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVE7UUFDdkIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtZQUFFLE9BQU8sU0FBUyxDQUFBO1FBQ3pELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUN6RCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZUFBZTtZQUFFLE9BQU8sUUFBUSxDQUFBO1FBQ3ZELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsSUFBSSxVQUFV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LGNBQWMsS0FBSyxPQUFPLEVBQ2pHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdGLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gRXhwcmVzc2lvbiAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSBTY2FsYXIgKi9cbi8qKiBAdHlwZWRlZiB7e2V4cHJlc3Npb246IEV4cHJlc3Npb24sIHBhdGg6IHN0cmluZywgdHlwZTogU2NhbGFyLCBuYW1lPzogc3RyaW5nfX0gUGxhbm5lZFZhbHVlICovXG4vKiogQHR5cGVkZWYge3tyZXN1bHQ6IFBsYW5uZWRWYWx1ZSwgb3BlcmFuZHM6IFBsYW5uZWRWYWx1ZVtdLCByaWdodFN0ZXBzPzogUGxhbm5lZFN0ZXBbXX19IFBsYW5uZWRTdGVwICovXG4vKiogQHR5cGVkZWYge0FycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBTaWduYXR1cmU+fSBTaWduYXR1cmUgKi9cblxuLyoqIFByaXZhdGUgb2NjdXJyZW5jZS1iYXNlZCBuYXRpdmUgZXhwcmVzc2lvbiBzZXF1ZW5jZXI7IGl0IG5ldmVyIHJld3JpdGVzIHRoZSBJUi4gKi9cbmV4cG9ydCBjbGFzcyBPcmRlcmVkRXhwcmVzc2lvblBsYW5uZXIge1xuICAvKipcbiAgICogSW5kZXhlcyBhbHJlYWR5IHZhbGlkYXRlZCBjYWxsYWJsZSByZXR1cm4gdHlwZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBtb2R1bGUuXG4gICAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBbbGFuZ3VhZ2VdIC0gT3duaW5nIGJhY2tlbmQgZGlhZ25vc3RpYyBsYW5ndWFnZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZHVsZSwgbGFuZ3VhZ2UgPSBcImNcIikge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVxuICAgIHRoaXMuZnVuY3Rpb25zID0gbmV3IE1hcChtb2R1bGUuZnVuY3Rpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLm5hbWVdKSlcbiAgICB0aGlzLm5leHRUZW1wb3JhcnkgPSAxXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW4gZXhwcmVzc2lvbiB0eXBlIGZyb20gdGhlIHZhbGlkYXRlZCBsZXhpY2FsIGVudmlyb25tZW50LlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIFNjYWxhcj59IGJpbmRpbmdzIC0gTGV4aWNhbCBzY2FsYXIgdHlwZXMuXG4gICAqIEByZXR1cm5zIHtTY2FsYXJ9IEV4YWN0IHNlbWFudGljIHJlc3VsdCB0eXBlLlxuICAgKi9cbiAgdHlwZShleHByZXNzaW9uLCBiaW5kaW5ncykge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSByZXR1cm4gXCJpbnRlZ2VyXCJcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikgcmV0dXJuIFwiYm9vbGVhblwiXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikgcmV0dXJuIFwic3RyaW5nXCJcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi50eXBlXG4gICAgY29uc3QgdHlwZSA9IGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIgPyB0aGlzLmZ1bmN0aW9ucy5nZXQoZXhwcmVzc2lvbi5jYWxsZWUpIDogYmluZGluZ3MuZ2V0KGV4cHJlc3Npb24ubmFtZSlcblxuICAgIGlmICghdHlwZSkgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSh0aGlzLmxhbmd1YWdlLCBcInVucmVzb2x2ZWQgZXhwcmVzc2lvbiB0eXBlXCIsIGV4cHJlc3Npb24ubG9jYXRpb24pXG4gICAgcmV0dXJuIHR5cGVcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGFucyBvbmUgZXhwcmVzc2lvbiBpbiBzZW1hbnRpYyBvcmRlciwga2VlcGluZyB0aGUgc2hvcnQtY2lyY3VpdCBSSFMgY29uZGl0aW9uYWwuXG4gICAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIE9yaWdpbmFsIG9jY3VycmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIFNjYWxhcj59IGJpbmRpbmdzIC0gTGV4aWNhbCB0eXBlcy5cbiAgICogQHBhcmFtIHtQbGFubmVkU3RlcFtdfSBzdGVwcyAtIEVuY2xvc2luZyBvcmRlcmVkIHByZWx1ZGUuXG4gICAqIEByZXR1cm5zIHtQbGFubmVkVmFsdWV9IFB1cmUgZmluYWwgdmFsdWUuXG4gICAqL1xuICBwbGFuKGV4cHJlc3Npb24sIHBhdGgsIGJpbmRpbmdzLCBzdGVwcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtleHByZXNzaW9uLCBwYXRoLCB0eXBlOiB0aGlzLnR5cGUoZXhwcmVzc2lvbiwgYmluZGluZ3MpfVxuXG4gICAgaWYgKCFbXCJDYWxsRXhwcmVzc2lvblwiLCBcIlVuYXJ5RXhwcmVzc2lvblwiLCBcIkJpbmFyeUV4cHJlc3Npb25cIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5raW5kKSkgcmV0dXJuIHJlc3VsdFxuICAgIGNvbnN0IG9wZXJhbmRzID0gW11cbiAgICAvKiogQHR5cGUge1BsYW5uZWRTdGVwW10gfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IHJpZ2h0U3RlcHNcblxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGJpbmRpbmdzLCBzdGVwcykpXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICAgIG9wZXJhbmRzLnB1c2godGhpcy5wbGFuKGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGJpbmRpbmdzLCBzdGVwcykpXG4gICAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuQW5kXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuT3JcIikge1xuICAgICAgICBjb25zdCBwbGFubmVkID0gey4uLnJlc3VsdCwgbmFtZTogdGhpcy5hbGxvY2F0ZShleHByZXNzaW9uKX1cblxuICAgICAgICByaWdodFN0ZXBzID0gW11cbiAgICAgICAgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBiaW5kaW5ncywgcmlnaHRTdGVwcykpXG4gICAgICAgIHN0ZXBzLnB1c2goe29wZXJhbmRzLCByZXN1bHQ6IHBsYW5uZWQsIHJpZ2h0U3RlcHN9KVxuICAgICAgICByZXR1cm4gcGxhbm5lZFxuICAgICAgfVxuICAgICAgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBiaW5kaW5ncywgc3RlcHMpKVxuICAgIH1cbiAgICBjb25zdCBwbGFubmVkID0gey4uLnJlc3VsdCwgbmFtZTogdGhpcy5hbGxvY2F0ZShleHByZXNzaW9uKX1cblxuICAgIHN0ZXBzLnB1c2goe29wZXJhbmRzLCByZXN1bHQ6IHBsYW5uZWR9KVxuICAgIHJldHVybiBwbGFubmVkXG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIG9uZSBib3VuZGVkIGRldGVybWluaXN0aWMgb2NjdXJyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBSZWxhdGVkIGV4cHJlc3Npb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJlc2VydmVkIHRlbXBvcmFyeSBuYW1lLlxuICAgKi9cbiAgYWxsb2NhdGUoZXhwcmVzc2lvbikge1xuICAgIGlmICh0aGlzLm5leHRUZW1wb3JhcnkgPiA5OTk5OTkpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkodGhpcy5sYW5ndWFnZSwgXCJvcmRlcmVkLWV4cHJlc3Npb24gb2NjdXJyZW5jZSBsaW1pdFwiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIHJldHVybiBgc2VtYW50aWZvbGRfb3JkZXJlZF8ke1N0cmluZyh0aGlzLm5leHRUZW1wb3JhcnkrKykucGFkU3RhcnQoNiwgXCIwXCIpfWBcbiAgfVxufVxuXG4vKipcbiAqIEJpbmRzIGEgcmVnaW9uIG1hcmtlciB0byBpdHMgc2VtYW50aWMgY29uc3VtZXIgYW5kIGV4cHJlc3Npb24sIGluZGVwZW5kZW50bHkgb2YgbG9jYXRpb25zLlxuICogVGhlIGRpZ2VzdCBkZXRlY3RzIGVkaXRzOyBzdHJ1Y3R1cmFsIENTVCB2YWxpZGF0aW9uIHJlbWFpbnMgbWFuZGF0b3J5IGFuZCBhdXRob3JpdGF0aXZlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFJlY29uc3RydWN0ZWQgb3Igb3JpZ2luYWwgc3RhdGVtZW50LlxuICogQHJldHVybnMge3N0cmluZ30gU3RhYmxlIFNIQS0yNTYgcHJvZmlsZSBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTaWduYXR1cmUoc3RhdGVtZW50KSB7XG4gIGNvbnN0IGNvbnN1bWVyID0gc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBbc3RhdGVtZW50LmtpbmQsIHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQudHlwZS5uYW1lLCBzdGF0ZW1lbnQubXV0YWJsZV0gOlxuICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5raW5kLCBzdGF0ZW1lbnQudGFyZ2V0Lm5hbWVdIDogW3N0YXRlbWVudC5raW5kXVxuICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6IHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDogc3RhdGVtZW50LmV4cHJlc3Npb25cblxuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoW2NvbnN1bWVyLCBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24pXSkpLmRpZ2VzdChcImhleFwiKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgb25seSB0aGUgY2xvc2VkIHNlbWFudGljIGV4cHJlc3Npb24gZmllbGRzLlxuICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICogQHJldHVybnMge1NpZ25hdHVyZX0gU2lnbmF0dXJlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ubmFtZV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLnZhbHVlXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24uY2FsbGVlLCAuLi5leHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoZXhwcmVzc2lvblNpZ25hdHVyZSldXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ub3BlcmF0aW9uLCBleHByZXNzaW9uLnR5cGUsIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5vcGVyYW5kKV1cbiAgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ub3BlcmF0aW9uLCBleHByZXNzaW9uLnR5cGUsIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5sZWZ0KSwgZXhwcmVzc2lvblNpZ25hdHVyZShleHByZXNzaW9uLnJpZ2h0KV1cbn1cblxuLyoqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZywgc3RlcHM6IFBsYW5uZWRTdGVwW10sIHZhbHVlOiBQbGFubmVkVmFsdWV9fSBTdGF0ZW1lbnRQbGFuICovXG4vKipcbiAqIFBsYW5zIGV2ZXJ5IG9jY3VycmVuY2UgYmVmb3JlIGNvbnN0cnVjdGluZyBhIHdyaXRlciBvciBleHBvc2luZyBlaXRoZXIgYXJ0aWZhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgbW9kdWxlLlxuICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCJ9IFtsYW5ndWFnZV0gLSBOYXRpdmUgZGlhZ25vc3RpYyBvd25lci5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBTdGF0ZW1lbnRQbGFuPn0gUGxhbnMgaW5kZXhlZCBieSBzZW1hbnRpYyBvY2N1cnJlbmNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbGFuTmF0aXZlTW9kdWxlKG1vZHVsZSwgbGFuZ3VhZ2UgPSBcImNcIikge1xuICBjb25zdCBwbGFubmVyID0gbmV3IE9yZGVyZWRFeHByZXNzaW9uUGxhbm5lcihtb2R1bGUsIGxhbmd1YWdlKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFN0YXRlbWVudFBsYW4+fSAqL1xuICBjb25zdCBwbGFucyA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBQbGFucyBvbmUgbGV4aWNhbCBibG9jayB3aXRoIGluZGVwZW5kZW50IGJyYW5jaCBlbnZpcm9ubWVudHMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVHlwZU5hbWU+fSBpbmhlcml0ZWQgLSBWaXNpYmxlIHR5cGVzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KGJsb2NrLCBwYXRoLCBpbmhlcml0ZWQpIHtcbiAgICBjb25zdCBiaW5kaW5ncyA9IG5ldyBNYXAoaW5oZXJpdGVkKVxuXG4gICAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRQYXRoID0gYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWBcbiAgICAgIGNvbnN0IGZpZWxkID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gXCJjb25kaXRpb25cIiA6IHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gXCJpbml0aWFsaXplclwiIDogXCJleHByZXNzaW9uXCJcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDogc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOiBzdGF0ZW1lbnQuZXhwcmVzc2lvblxuICAgICAgLyoqIEB0eXBlIHtQbGFubmVkU3RlcFtdfSAqL1xuICAgICAgY29uc3Qgc3RlcHMgPSBbXVxuICAgICAgY29uc3QgdmFsdWUgPSBwbGFubmVyLnBsYW4oZXhwcmVzc2lvbiwgYCR7c3RhdGVtZW50UGF0aH0vJHtmaWVsZH1gLCBiaW5kaW5ncywgc3RlcHMpXG5cbiAgICAgIGlmIChwbGFucy5zaXplID49IDk5OTk5OSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQgc3RhdGVtZW50IGxpbWl0XCIsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIHBsYW5zLnNldChzdGF0ZW1lbnRQYXRoLCB7aWQ6IFN0cmluZyhwbGFucy5zaXplICsgMSkucGFkU3RhcnQoNiwgXCIwXCIpLCBzdGVwcywgdmFsdWV9KVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSBiaW5kaW5ncy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVudC50eXBlLm5hbWUpXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtzdGF0ZW1lbnRQYXRofS9jb25zZXF1ZW50YCwgYmluZGluZ3MpXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdChzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBgJHtzdGF0ZW1lbnRQYXRofS9hbHRlcm5hdGVgLCBiaW5kaW5ncylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHZpc2l0KGRlY2xhcmF0aW9uLmJvZHksIGAvZnVuY3Rpb25zLyR7aW5kZXh9L2JvZHlgLFxuICAgIG5ldyBNYXAoZGVjbGFyYXRpb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZS5uYW1lXSkpKSlcbiAgdmlzaXQobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIvZW50cnlQb2ludC9ib2R5XCIsIG5ldyBNYXAoKSlcbiAgcmV0dXJuIHBsYW5zXG59XG4iXX0=
|
|
178
|
+
/**
|
|
179
|
+
* Narrows a type after non-cohort collection rejection.
|
|
180
|
+
* @param {import("../semantic/types.js").SemanticFunctionReturnType} type - Semantic type.
|
|
181
|
+
* @param {"c" | "cpp"} language - Diagnostic language.
|
|
182
|
+
* @param {import("../semantic/types.js").SourceLocation} location - Owning location.
|
|
183
|
+
* @returns {Scalar} Scalar name.
|
|
184
|
+
*/
|
|
185
|
+
function scalarName(type, language, location) {
|
|
186
|
+
if (type.kind != "TypeReference" || type.name == "void") {
|
|
187
|
+
return unsupportedCapability(language, "collection or void type reached native scalar planning", location);
|
|
188
|
+
}
|
|
189
|
+
return type.name;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1leHByZXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9vcmRlcmVkLWV4cHJlc3Npb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsa0dBQWtHO0FBQ2xHLDBHQUEwRztBQUMxRyx3RUFBd0U7QUFFeEUsc0ZBQXNGO0FBQ3RGLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNILFlBQVksTUFBTSxFQUFFLFFBQVEsR0FBRyxHQUFHO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJO1lBQ2hCLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUMsQ0FBQyxDQUFBO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRO1FBQ3ZCLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUN6RCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDekQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWU7WUFBRSxPQUFPLFFBQVEsQ0FBQTtRQUN2RCxJQUFJ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T0FBTyxFQUNqRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRO0lBQzFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx3REFBd0QsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVHlwZU5hbWV9IFNjYWxhciAqL1xuLyoqIEB0eXBlZGVmIHt7ZXhwcmVzc2lvbjogRXhwcmVzc2lvbiwgcGF0aDogc3RyaW5nLCB0eXBlOiBTY2FsYXIsIG5hbWU/OiBzdHJpbmd9fSBQbGFubmVkVmFsdWUgKi9cbi8qKiBAdHlwZWRlZiB7e3Jlc3VsdDogUGxhbm5lZFZhbHVlLCBvcGVyYW5kczogUGxhbm5lZFZhbHVlW10sIHJpZ2h0U3RlcHM/OiBQbGFubmVkU3RlcFtdfX0gUGxhbm5lZFN0ZXAgKi9cbi8qKiBAdHlwZWRlZiB7QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFNpZ25hdHVyZT59IFNpZ25hdHVyZSAqL1xuXG4vKiogUHJpdmF0ZSBvY2N1cnJlbmNlLWJhc2VkIG5hdGl2ZSBleHByZXNzaW9uIHNlcXVlbmNlcjsgaXQgbmV2ZXIgcmV3cml0ZXMgdGhlIElSLiAqL1xuZXhwb3J0IGNsYXNzIE9yZGVyZWRFeHByZXNzaW9uUGxhbm5lciB7XG4gIC8qKlxuICAgKiBJbmRleGVzIGFscmVhZHkgdmFsaWRhdGVkIGNhbGxhYmxlIHJldHVybiB0eXBlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAgICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCJ9IFtsYW5ndWFnZV0gLSBPd25pbmcgYmFja2VuZCBkaWFnbm9zdGljIGxhbmd1YWdlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kdWxlLCBsYW5ndWFnZSA9IFwiY1wiKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlXG4gICAgdGhpcy5mdW5jdGlvbnMgPSBuZXcgTWFwKG1vZHVsZS5mdW5jdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gW1xuICAgICAgZGVjbGFyYXRpb24ubmFtZSxcbiAgICAgIHNjYWxhck5hbWUoZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgbGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIF0pKVxuICAgIHRoaXMubmV4dFRlbXBvcmFyeSA9IDFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBleHByZXNzaW9uIHR5cGUgZnJvbSB0aGUgdmFsaWRhdGVkIGxleGljYWwgZW52aXJvbm1lbnQuXG4gICAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgU2NhbGFyPn0gYmluZGluZ3MgLSBMZXhpY2FsIHNjYWxhciB0eXBlcy5cbiAgICogQHJldHVybnMge1NjYWxhcn0gRXhhY3Qgc2VtYW50aWMgcmVzdWx0IHR5cGUuXG4gICAqL1xuICB0eXBlKGV4cHJlc3Npb24sIGJpbmRpbmdzKSB7XG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHJldHVybiBcImludGVnZXJcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gXCJib29sZWFuXCJcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gXCJzdHJpbmdcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLnR5cGVcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBleHByZXNzaW9uIHJlYWNoZWQgbmF0aXZlIHNjYWxhciBwbGFubmluZ1wiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCB0eXBlID0gZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiA/IHRoaXMuZnVuY3Rpb25zLmdldChleHByZXNzaW9uLmNhbGxlZSkgOiBiaW5kaW5ncy5nZXQoZXhwcmVzc2lvbi5uYW1lKVxuXG4gICAgaWYgKCF0eXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwidW5yZXNvbHZlZCBleHByZXNzaW9uIHR5cGVcIiwgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYW5zIG9uZSBleHByZXNzaW9uIGluIHNlbWFudGljIG9yZGVyLCBrZWVwaW5nIHRoZSBzaG9ydC1jaXJjdWl0IFJIUyBjb25kaXRpb25hbC5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gT3JpZ2luYWwgb2NjdXJyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPY2N1cnJlbmNlIHBhdGguXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgU2NhbGFyPn0gYmluZGluZ3MgLSBMZXhpY2FsIHR5cGVzLlxuICAgKiBAcGFyYW0ge1BsYW5uZWRTdGVwW119IHN0ZXBzIC0gRW5jbG9zaW5nIG9yZGVyZWQgcHJlbHVkZS5cbiAgICogQHJldHVybnMge1BsYW5uZWRWYWx1ZX0gUHVyZSBmaW5hbCB2YWx1ZS5cbiAgICovXG4gIHBsYW4oZXhwcmVzc2lvbiwgcGF0aCwgYmluZGluZ3MsIHN0ZXBzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge2V4cHJlc3Npb24sIHBhdGgsIHR5cGU6IHRoaXMudHlwZShleHByZXNzaW9uLCBiaW5kaW5ncyl9XG5cbiAgICBpZiAoIVtcIkNhbGxFeHByZXNzaW9uXCIsIFwiVW5hcnlFeHByZXNzaW9uXCIsIFwiQmluYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhleHByZXNzaW9uLmtpbmQpKSByZXR1cm4gcmVzdWx0XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbXVxuICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXSB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcmlnaHRTdGVwc1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBiaW5kaW5ncywgc3RlcHMpKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5BbmRcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5PclwiKSB7XG4gICAgICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgICAgIHJpZ2h0U3RlcHMgPSBbXVxuICAgICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCByaWdodFN0ZXBzKSlcbiAgICAgICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZCwgcmlnaHRTdGVwc30pXG4gICAgICAgIHJldHVybiBwbGFubmVkXG4gICAgICB9XG4gICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCBzdGVwcykpXG4gICAgfVxuICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZH0pXG4gICAgcmV0dXJuIHBsYW5uZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZXMgb25lIGJvdW5kZWQgZGV0ZXJtaW5pc3RpYyBvY2N1cnJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFJlbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmVzZXJ2ZWQgdGVtcG9yYXJ5IG5hbWUuXG4gICAqL1xuICBhbGxvY2F0ZShleHByZXNzaW9uKSB7XG4gICAgaWYgKHRoaXMubmV4dFRlbXBvcmFyeSA+IDk5OTk5OSkgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSh0aGlzLmxhbmd1YWdlLCBcIm9yZGVyZWQtZXhwcmVzc2lvbiBvY2N1cnJlbmNlIGxpbWl0XCIsIGV4cHJlc3Npb24ubG9jYXRpb24pXG4gICAgcmV0dXJuIGBzZW1hbnRpZm9sZF9vcmRlcmVkXyR7U3RyaW5nKHRoaXMubmV4dFRlbXBvcmFyeSsrKS5wYWRTdGFydCg2LCBcIjBcIil9YFxuICB9XG59XG5cbi8qKlxuICogQmluZHMgYSByZWdpb24gbWFya2VyIHRvIGl0cyBzZW1hbnRpYyBjb25zdW1lciBhbmQgZXhwcmVzc2lvbiwgaW5kZXBlbmRlbnRseSBvZiBsb2NhdGlvbnMuXG4gKiBUaGUgZGlnZXN0IGRldGVjdHMgZWRpdHM7IHN0cnVjdHVyYWwgQ1NUIHZhbGlkYXRpb24gcmVtYWlucyBtYW5kYXRvcnkgYW5kIGF1dGhvcml0YXRpdmUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gUmVjb25zdHJ1Y3RlZCBvciBvcmlnaW5hbCBzdGF0ZW1lbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgU0hBLTI1NiBwcm9maWxlIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFNpZ25hdHVyZShzdGF0ZW1lbnQpIHtcbiAgY29uc3QgY29uc3VtZXIgPSBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFtzdGF0ZW1lbnQua2luZCwgc3RhdGVtZW50Lm5hbWUsXG4gICAgc2NhbGFyTmFtZShzdGF0ZW1lbnQudHlwZSwgXCJjXCIsIHN0YXRlbWVudC5sb2NhdGlvbiksIHN0YXRlbWVudC5tdXRhYmxlXSA6XG4gICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmtpbmQsIHN0YXRlbWVudC50YXJnZXQubmFtZV0gOiBbc3RhdGVtZW50LmtpbmRdXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6IHVuZGVmaW5lZFxuXG4gIGlmICghZXhwcmVzc2lvbikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhcmUgcmV0dXJuIHJlYWNoZWQgbmF0aXZlIHN0YXRlbWVudCBzaWduYXR1cmUgcGxhbm5pbmcuXCIpXG5cbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKEpTT04uc3RyaW5naWZ5KFtjb25zdW1lciwgZXhwcmVzc2lvblNpZ25hdHVyZShleHByZXNzaW9uKV0pKS5kaWdlc3QoXCJoZXhcIilcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIG9ubHkgdGhlIGNsb3NlZCBzZW1hbnRpYyBleHByZXNzaW9uIGZpZWxkcy5cbiAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZS5cbiAqIEByZXR1cm5zIHtTaWduYXR1cmV9IFNpZ25hdHVyZSBkYXRhLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm5hbWVdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gW2V4cHJlc3Npb24ua2luZCwgZXhwcmVzc2lvbi52YWx1ZV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLmNhbGxlZSwgLi4uZXhwcmVzc2lvbi5hcmd1bWVudHMubWFwKGV4cHJlc3Npb25TaWduYXR1cmUpXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm9wZXJhdGlvbiwgZXhwcmVzc2lvbi50eXBlLCBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24ub3BlcmFuZCldXG4gIGlmIChleHByZXNzaW9uLmtpbmQgIT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kXVxuXG4gIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm9wZXJhdGlvbiwgZXhwcmVzc2lvbi50eXBlLCBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24ubGVmdCksIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5yaWdodCldXG59XG5cbi8qKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmcsIHN0ZXBzOiBQbGFubmVkU3RlcFtdLCB2YWx1ZTogUGxhbm5lZFZhbHVlfX0gU3RhdGVtZW50UGxhbiAqL1xuLyoqXG4gKiBQbGFucyBldmVyeSBvY2N1cnJlbmNlIGJlZm9yZSBjb25zdHJ1Y3RpbmcgYSB3cml0ZXIgb3IgZXhwb3NpbmcgZWl0aGVyIGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBbbGFuZ3VhZ2VdIC0gTmF0aXZlIGRpYWdub3N0aWMgb3duZXIuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgU3RhdGVtZW50UGxhbj59IFBsYW5zIGluZGV4ZWQgYnkgc2VtYW50aWMgb2NjdXJyZW5jZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhbk5hdGl2ZU1vZHVsZShtb2R1bGUsIGxhbmd1YWdlID0gXCJjXCIpIHtcbiAgY29uc3QgcGxhbm5lciA9IG5ldyBPcmRlcmVkRXhwcmVzc2lvblBsYW5uZXIobW9kdWxlLCBsYW5ndWFnZSlcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBTdGF0ZW1lbnRQbGFuPn0gKi9cbiAgY29uc3QgcGxhbnMgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogUGxhbnMgb25lIGxleGljYWwgYmxvY2sgd2l0aCBpbmRlcGVuZGVudCBicmFuY2ggZW52aXJvbm1lbnRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9jY3VycmVuY2UgcGF0aC5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSB0eXBlcy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgcGF0aCwgaW5oZXJpdGVkKSB7XG4gICAgY29uc3QgYmluZGluZ3MgPSBuZXcgTWFwKGluaGVyaXRlZClcblxuICAgIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50UGF0aCA9IGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gXG4gICAgICBjb25zdCBmaWVsZCA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IFwiY29uZGl0aW9uXCIgOiBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFwiaW5pdGlhbGl6ZXJcIiA6IFwiZXhwcmVzc2lvblwiXG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOiB1bmRlZmluZWRcbiAgICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXX0gKi9cbiAgICAgIGNvbnN0IHN0ZXBzID0gW11cblxuICAgICAgaWYgKCFleHByZXNzaW9uKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFyZSByZXR1cm4gcmVhY2hlZCBuYXRpdmUgZXhwcmVzc2lvbiBwbGFubmluZy5cIilcbiAgICAgIGNvbnN0IHZhbHVlID0gcGxhbm5lci5wbGFuKGV4cHJlc3Npb24sIGAke3N0YXRlbWVudFBhdGh9LyR7ZmllbGR9YCwgYmluZGluZ3MsIHN0ZXBzKVxuXG4gICAgICBpZiAocGxhbnMuc2l6ZSA+PSA5OTk5OTkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkIHN0YXRlbWVudCBsaW1pdFwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICBwbGFucy5zZXQoc3RhdGVtZW50UGF0aCwge2lkOiBTdHJpbmcocGxhbnMuc2l6ZSArIDEpLnBhZFN0YXJ0KDYsIFwiMFwiKSwgc3RlcHMsIHZhbHVlfSlcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikgYmluZGluZ3Muc2V0KHN0YXRlbWVudC5uYW1lLCBzY2FsYXJOYW1lKHN0YXRlbWVudC50eXBlLCBsYW5ndWFnZSwgc3RhdGVtZW50LmxvY2F0aW9uKSlcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXQoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGAke3N0YXRlbWVudFBhdGh9L2NvbnNlcXVlbnRgLCBiaW5kaW5ncylcbiAgICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHZpc2l0KHN0YXRlbWVudC5hbHRlcm5hdGUsIGAke3N0YXRlbWVudFBhdGh9L2FsdGVybmF0ZWAsIGJpbmRpbmdzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbmRleCkgPT4gdmlzaXQoZGVjbGFyYXRpb24uYm9keSwgYC9mdW5jdGlvbnMvJHtpbmRleH0vYm9keWAsXG4gICAgbmV3IE1hcChkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHNjYWxhck5hbWUocGFyYW1ldGVyLnR5cGUsIGxhbmd1YWdlLCBwYXJhbWV0ZXIubG9jYXRpb24pXSkpKSlcbiAgdmlzaXQobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIvZW50cnlQb2ludC9ib2R5XCIsIG5ldyBNYXAoKSlcbiAgcmV0dXJuIHBsYW5zXG59XG5cbi8qKlxuICogTmFycm93cyBhIHR5cGUgYWZ0ZXIgbm9uLWNvaG9ydCBjb2xsZWN0aW9uIHJlamVjdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCJ9IGxhbmd1YWdlIC0gRGlhZ25vc3RpYyBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge1NjYWxhcn0gU2NhbGFyIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHNjYWxhck5hbWUodHlwZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKSB7XG4gIGlmICh0eXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwgdHlwZS5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb2xsZWN0aW9uIG9yIHZvaWQgdHlwZSByZWFjaGVkIG5hdGl2ZSBzY2FsYXIgcGxhbm5pbmdcIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gdHlwZS5uYW1lXG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type PhpNativeSeam = {
|
|
2
|
+
close?: string;
|
|
3
|
+
connect?: string;
|
|
4
|
+
eof?: string;
|
|
5
|
+
read?: string;
|
|
6
|
+
setup?: string;
|
|
7
|
+
write?: string;
|
|
8
|
+
};
|
|
9
|
+
/** @typedef {{close?: string, connect?: string, eof?: string, read?: string, setup?: string, write?: string}} PhpNativeSeam */
|
|
10
|
+
/**
|
|
11
|
+
* Generates one isolated PHP provider artifact for the Task 037 canonical module.
|
|
12
|
+
* The optional native seam is generator-internal and exists only for real-runtime provider tests.
|
|
13
|
+
* @param {string} module - Exact canonical module identity.
|
|
14
|
+
* @param {readonly string[]} operations - Reachable operations for this provider.
|
|
15
|
+
* @param {PhpNativeSeam} [seam] - Protected test-owned native call names.
|
|
16
|
+
* @returns {string} Complete PHP provider source.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateTask037PhpProviderContent(module: string, operations: readonly string[], seam?: PhpNativeSeam): string;
|
|
19
|
+
//# sourceMappingURL=php-stdlib-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-stdlib-support.d.ts","sourceRoot":"","sources":["../../../src/backends/php-stdlib-support.js"],"names":[],"mappings":"AAQI,YAA2G,aAAa,GAA9G;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAe;AAA5H,+HAA+H;AAE/H;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAL7C,MAK6C,EAAE,UAAU,EAJzD,SAAS,MAAM,EAI0C,EAAE,IAAI,AAHvE,CACA,EADQ,aAGoE,GAFlE,MAAM,CAiBlB"}
|