@fraczak/k 6.3.3 → 6.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/DOCS/CODECS.md +258 -0
- package/DOCS/DICTIONARY.md +1172 -0
- package/DOCS/KIR_SPECIALIZATION_DESIGN.md +51 -46
- package/DOCS/KIR_V1.md +221 -0
- package/DOCS/KVM_EXECUTION_MODEL.md +56 -19
- package/DOCS/OBJECT_FILE_AND_PATTERN.md +2 -1
- package/DOCS/PROFILING_AND_TRACING.md +196 -0
- package/DOCS/REPL.md +61 -4
- package/DOCS/WEB_REPL_REQUIREMENTS.md +135 -0
- package/DOCS/dependency-graph.md +144 -0
- package/Examples/arithmetics.k +51 -48
- package/Examples/bnat.k +1 -1
- package/Examples/buda.k +44 -0
- package/Examples/ieee.k +300 -8671
- package/Examples/poly.k +67 -0
- package/README.md +68 -19
- package/augmentation.mjs +9 -7
- package/backend-api.mjs +11 -2
- package/backends/arm64/README.md +104 -0
- package/backends/arm64/bin/k-arm64-compile.mjs +101 -0
- package/backends/arm64/bin/k-arm64-run.mjs +58 -0
- package/backends/arm64/bin/k-arm64.mjs +88 -0
- package/backends/arm64/scripts/run-tests.mjs +41 -0
- package/backends/arm64/src/arm64.mjs +229 -0
- package/backends/arm64/src/cli.mjs +155 -0
- package/backends/arm64/src/kvm2arm64.mjs +906 -0
- package/backends/arm64/src/runtime.c +728 -0
- package/backends/arm64/tests/integration.sh +112 -0
- package/backends/arm64/tests/test-arm64.mjs +240 -0
- package/backends/llvm/README.md +135 -0
- package/backends/llvm/bin/k-llvm-build.mjs +71 -0
- package/backends/llvm/bin/k-llvm-compile.mjs +68 -0
- package/backends/llvm/bin/k-llvm-jit.mjs +160 -0
- package/backends/llvm/bin/k-llvm-run.mjs +90 -0
- package/backends/llvm/runtime/krt.c +1508 -0
- package/backends/llvm/runtime/krt.h +109 -0
- package/backends/llvm/scripts/conformance.mjs +76 -0
- package/backends/llvm/scripts/run-tests.mjs +28 -0
- package/backends/llvm/src/executable.mjs +562 -0
- package/backends/llvm/src/kvm2llvm.mjs +998 -0
- package/backends/llvm/src/llvm.mjs +1092 -0
- package/backends/llvm/tests/composition-driver.c +22 -0
- package/backends/llvm/tests/identity-driver.c +27 -0
- package/backends/llvm/tests/integration.sh +153 -0
- package/backends/llvm/tests/perf-support.mjs +735 -0
- package/backends/llvm/tests/product-driver.c +23 -0
- package/backends/llvm/tests/projection-driver.c +19 -0
- package/backends/llvm/tests/relation-driver.c +29 -0
- package/backends/llvm/tests/test-llvm.mjs +240 -0
- package/backends/llvm/tests/union-driver.c +31 -0
- package/backends/llvm/tests/variant-driver.c +19 -0
- package/backends/llvm/tests/variant-projection-driver.c +21 -0
- package/backends/wasm/DOCS/USE-WEB-ASSEMBLY.md +233 -0
- package/backends/wasm/README.md +97 -0
- package/backends/wasm/TECHNICAL-DEBT.md +60 -0
- package/backends/wasm/bin/k-wasm-compile.mjs +50 -0
- package/backends/wasm/bin/k-wasm-run.mjs +140 -0
- package/backends/wasm/bin/k-wasm.mjs +49 -0
- package/backends/wasm/demo_ieee.mjs +319 -0
- package/backends/wasm/runtime.wat +102 -0
- package/backends/wasm/scripts/run-tests.mjs +41 -0
- package/backends/wasm/src/cli.mjs +133 -0
- package/backends/wasm/src/kvm2wasm.mjs +661 -0
- package/backends/wasm/src/wasm.mjs +1010 -0
- package/backends/wasm/tests/integration.sh +182 -0
- package/backends/wasm/tests/perf-support.mjs +336 -0
- package/backends/wasm/tests/test-wasm.mjs +617 -0
- package/browser/repl-browser.mjs +1584 -0
- package/browser/shims/assert.mjs +19 -0
- package/browser/shims/buffer.mjs +224 -0
- package/browser/shims/crypto.mjs +103 -0
- package/browser/shims/fs.mjs +159 -0
- package/browser/shims/os.mjs +17 -0
- package/browser/shims/path.mjs +54 -0
- package/browser/shims/process.mjs +44 -0
- package/browser/shims/readline.mjs +11 -0
- package/browser/shims/url.mjs +12 -0
- package/browser/vfs-data.mjs +19 -0
- package/codecs/README.md +3 -0
- package/codecs/runtime/show-value.mjs +2 -2
- package/conformance/helper-reuse/case.json +8 -0
- package/conformance/helper-reuse/expected.kv +1 -0
- package/conformance/helper-reuse/input.kv +1 -0
- package/conformance/helper-reuse/program.k +2 -0
- package/conformance/identity/case.json +8 -0
- package/conformance/identity/expected.kv +1 -0
- package/conformance/identity/input.kv +1 -0
- package/conformance/identity/program.k +1 -0
- package/conformance/product-projection/case.json +8 -0
- package/conformance/product-projection/expected.kv +1 -0
- package/conformance/product-projection/input.kv +1 -0
- package/conformance/product-projection/program.k +1 -0
- package/conformance/run.mjs +149 -0
- package/conformance/variant-construction/case.json +8 -0
- package/conformance/variant-construction/expected.kv +1 -0
- package/conformance/variant-construction/input.kv +1 -0
- package/conformance/variant-construction/program.k +1 -0
- package/harness/adapters/arm64.mjs +105 -0
- package/harness/adapters/kvm.mjs +144 -0
- package/harness/adapters/llvm.mjs +118 -0
- package/harness/adapters/native.mjs +77 -0
- package/harness/adapters/wasm.mjs +169 -0
- package/harness/backend.mjs +95 -0
- package/harness/cli.mjs +130 -0
- package/harness/format.mjs +95 -0
- package/harness/index.mjs +25 -0
- package/harness/persistent.mjs +121 -0
- package/harness/registry.mjs +44 -0
- package/harness/suite.mjs +257 -0
- package/harness/suites/poly.mjs +156 -0
- package/harness/trace.mjs +50 -0
- package/harness/util.mjs +92 -0
- package/intrinsics.mjs +41 -0
- package/kir.mjs +399 -0
- package/kvm.mjs +585 -81
- package/objects/README.md +37 -3
- package/objects/compile.mjs +15 -22
- package/objects/inspect.mjs +96 -0
- package/objects/validate.mjs +415 -0
- package/package.json +51 -19
- package/repl-codecs.mjs +105 -6
- package/repl.mjs +335 -49
- package/run.mjs +2 -7
- package/scripts/benchmark.mjs +406 -22
- package/scripts/build-repl-html.mjs +1784 -0
- package/scripts/perf-ieee.mjs +586 -0
- package/scripts/perf-int.mjs +531 -0
- package/scripts/perf-poly.mjs +945 -0
- package/scripts/render-benchmark.mjs +12 -8
- package/scripts/run-tests.mjs +6 -0
- package/tests/integration.sh +19 -2
- package/tests/test-arithmetics.mjs +54 -0
- package/tests/test-ieee-arithmetic.mjs +4 -0
- package/tests/test-kir.mjs +85 -0
- package/tests/test-kvm-polymorphic.mjs +278 -0
- package/tests/test-kvm.mjs +25 -6
- package/tests/test-poly.mjs +129 -0
- package/tests/test-repl-html.mjs +303 -0
- package/tests/test-repl.mjs +144 -1
- package/tests/test-validate-object.mjs +40 -0
- package/a.klib +0 -1
- package/a.kvm +0 -142676
- package/a.wasm +0 -0
- package/benchmark-results.html +0 -532
- package/benchmark-results.json +0 -480
- package/k-vscode/.vscode/launch.json +0 -14
- package/k-vscode/README.md +0 -75
- package/k-vscode/extension.js +0 -273
- package/k-vscode/language-configuration.json +0 -42
- package/k-vscode/package.json +0 -79
- package/k-vscode/snippets/k.json +0 -92
- package/k-vscode/syntaxes/k.tmLanguage.json +0 -599
- package/k-vscode/test/background-ranges.test.js +0 -50
- package/k-vscode/themes/k-contrast-color-theme.json +0 -104
- package/scripts/git-hooks/pre-commit +0 -10
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include "krt.h"
|
|
2
|
+
|
|
3
|
+
extern k_result k_main(k_rt *rt, k_value *input);
|
|
4
|
+
|
|
5
|
+
int main(void) {
|
|
6
|
+
k_rt *rt = k_rt_new();
|
|
7
|
+
if (rt == NULL) return 1;
|
|
8
|
+
|
|
9
|
+
k_value *unit = k_unit(rt);
|
|
10
|
+
k_value *inner = k_product(rt, 1);
|
|
11
|
+
k_product_set(inner, "y", unit);
|
|
12
|
+
|
|
13
|
+
k_value *input = k_product(rt, 1);
|
|
14
|
+
k_product_set(input, "x", inner);
|
|
15
|
+
|
|
16
|
+
k_result result = k_main(rt, input);
|
|
17
|
+
if (result.status != K_STATUS_OK) return 2;
|
|
18
|
+
if (result.value != unit) return 3;
|
|
19
|
+
|
|
20
|
+
k_rt_free(rt);
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include "krt.h"
|
|
2
|
+
|
|
3
|
+
#include <string.h>
|
|
4
|
+
|
|
5
|
+
extern k_result k_main(k_rt *rt, k_value *input);
|
|
6
|
+
|
|
7
|
+
int main(void) {
|
|
8
|
+
k_rt *rt = k_rt_new();
|
|
9
|
+
if (rt == NULL) return 1;
|
|
10
|
+
|
|
11
|
+
k_value *unit = k_unit(rt);
|
|
12
|
+
k_result result = k_main(rt, unit);
|
|
13
|
+
if (result.status != K_STATUS_OK) return 2;
|
|
14
|
+
if (result.value != unit) return 3;
|
|
15
|
+
|
|
16
|
+
k_value *product = k_product(rt, 1);
|
|
17
|
+
k_product_set(product, "x", unit);
|
|
18
|
+
if (k_product_get(product, "x") != unit) return 4;
|
|
19
|
+
|
|
20
|
+
k_value *variant = k_variant(rt, "tag", product);
|
|
21
|
+
if (strcmp(k_variant_tag(variant), "tag") != 0) return 5;
|
|
22
|
+
if (k_variant_payload(variant) != product) return 6;
|
|
23
|
+
if (!k_equal(unit, unit)) return 7;
|
|
24
|
+
|
|
25
|
+
k_rt_free(rt);
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
TMP_DIR=`mktemp -d`
|
|
5
|
+
trap 'rm -rf "$TMP_DIR"' EXIT
|
|
6
|
+
|
|
7
|
+
command -v clang >/dev/null || {
|
|
8
|
+
echo "clang is required for k-llvm integration tests" >&2
|
|
9
|
+
exit 1
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
node ../../objects/compile.mjs '()' "$TMP_DIR/id.ko"
|
|
13
|
+
printf '[["open-product",[]]]' > "$TMP_DIR/input.pattern.json"
|
|
14
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/input.pattern.json" "$TMP_DIR/id.ko" "$TMP_DIR/id.ll"
|
|
15
|
+
grep -q '@k_llvm_metadata' "$TMP_DIR/id.ll"
|
|
16
|
+
grep -q 'define %k_result @k_main' "$TMP_DIR/id.ll"
|
|
17
|
+
|
|
18
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/identity-driver.c "$TMP_DIR/id.ll" -o "$TMP_DIR/id"
|
|
19
|
+
"$TMP_DIR/id"
|
|
20
|
+
|
|
21
|
+
node ../../objects/compile.mjs '.x' "$TMP_DIR/projection.ko"
|
|
22
|
+
printf '[["closed-product",[["x",1]]],["closed-product",[]]]' > "$TMP_DIR/projection.pattern.json"
|
|
23
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/projection.pattern.json" "$TMP_DIR/projection.ko" "$TMP_DIR/projection.ll"
|
|
24
|
+
grep -q 'product_fields_ptr' "$TMP_DIR/projection.ll"
|
|
25
|
+
! grep -q 'call ptr @k_product_get_at' "$TMP_DIR/projection.ll"
|
|
26
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/projection-driver.c "$TMP_DIR/projection.ll" -o "$TMP_DIR/projection"
|
|
27
|
+
"$TMP_DIR/projection"
|
|
28
|
+
|
|
29
|
+
node ../../objects/compile.mjs '{ .x fieldA, .y fieldB }' "$TMP_DIR/product.ko"
|
|
30
|
+
printf '[["closed-product",[["x",1],["y",2]]],["closed-product",[["valA",1]]],["closed-product",[["valB",2]]]]' > "$TMP_DIR/product.pattern.json"
|
|
31
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/product.pattern.json" "$TMP_DIR/product.ko" "$TMP_DIR/product.ll"
|
|
32
|
+
grep -q 'store i32 1, ptr %i32_slot' "$TMP_DIR/product.ll"
|
|
33
|
+
grep -q 'store ptr %product_fields' "$TMP_DIR/product.ll"
|
|
34
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/product-driver.c "$TMP_DIR/product.ll" -o "$TMP_DIR/product"
|
|
35
|
+
"$TMP_DIR/product"
|
|
36
|
+
|
|
37
|
+
node ../../objects/compile.mjs '|tag' "$TMP_DIR/variant.ko"
|
|
38
|
+
printf '[["closed-product",[]]]' > "$TMP_DIR/variant.pattern.json"
|
|
39
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/variant.pattern.json" "$TMP_DIR/variant.ko" "$TMP_DIR/variant.ll"
|
|
40
|
+
grep -q 'call ptr @k_rt_alloc' "$TMP_DIR/variant.ll"
|
|
41
|
+
grep -q 'store i32 2, ptr %i32_slot' "$TMP_DIR/variant.ll"
|
|
42
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/variant-driver.c "$TMP_DIR/variant.ll" -o "$TMP_DIR/variant"
|
|
43
|
+
"$TMP_DIR/variant"
|
|
44
|
+
|
|
45
|
+
node ../../objects/compile.mjs '/tag' "$TMP_DIR/variant-projection.ko"
|
|
46
|
+
printf '[["closed-union",[["tag",1]]],["closed-product",[]]]' > "$TMP_DIR/variant-projection.pattern.json"
|
|
47
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/variant-projection.pattern.json" "$TMP_DIR/variant-projection.ko" "$TMP_DIR/variant-projection.ll"
|
|
48
|
+
grep -q 'tag_byte_ptr' "$TMP_DIR/variant-projection.ll"
|
|
49
|
+
grep -q 'payload_slot' "$TMP_DIR/variant-projection.ll"
|
|
50
|
+
! grep -q 'call i32 @k_variant_tag_matches' "$TMP_DIR/variant-projection.ll"
|
|
51
|
+
! grep -q 'call ptr @k_variant_payload' "$TMP_DIR/variant-projection.ll"
|
|
52
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/variant-projection-driver.c "$TMP_DIR/variant-projection.ll" -o "$TMP_DIR/variant-projection"
|
|
53
|
+
"$TMP_DIR/variant-projection"
|
|
54
|
+
|
|
55
|
+
node ../../objects/compile.mjs '(.x .y)' "$TMP_DIR/composition.ko"
|
|
56
|
+
printf '[["closed-product",[["x",1]]],["closed-product",[["y",2]]],["closed-product",[]]]' > "$TMP_DIR/composition.pattern.json"
|
|
57
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/composition.pattern.json" "$TMP_DIR/composition.ko" "$TMP_DIR/composition.ll"
|
|
58
|
+
grep -q 'product_fields_ptr' "$TMP_DIR/composition.ll"
|
|
59
|
+
! grep -q 'call ptr @k_product_get_at' "$TMP_DIR/composition.ll"
|
|
60
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/composition-driver.c "$TMP_DIR/composition.ll" -o "$TMP_DIR/composition"
|
|
61
|
+
"$TMP_DIR/composition"
|
|
62
|
+
|
|
63
|
+
node ../../objects/compile.mjs 'pick = .x; {.a pick left, .b pick right}' "$TMP_DIR/relation.ko"
|
|
64
|
+
printf '[["open-product",[["a",1],["b",2]]],["open-product",[["x",3]]],["open-product",[["x",4]]],["closed-product",[]],["closed-product",[]]]' > "$TMP_DIR/relation.pattern.json"
|
|
65
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/relation.pattern.json" "$TMP_DIR/relation.ko" "$TMP_DIR/relation.ll"
|
|
66
|
+
grep -q 'define internal %k_result @k_rel_pick' "$TMP_DIR/relation.ll"
|
|
67
|
+
grep -q 'call %k_result @k_rel_pick' "$TMP_DIR/relation.ll"
|
|
68
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/relation-driver.c "$TMP_DIR/relation.ll" -o "$TMP_DIR/relation"
|
|
69
|
+
"$TMP_DIR/relation"
|
|
70
|
+
|
|
71
|
+
node ../../objects/compile.mjs '< /x |left, /y |right >' "$TMP_DIR/union.ko"
|
|
72
|
+
printf '[["closed-union",[["x",1],["y",2]]],["closed-product",[]],["closed-product",[]]]' > "$TMP_DIR/union.pattern.json"
|
|
73
|
+
node ./bin/k-llvm-compile.mjs --input-pattern "$TMP_DIR/union.pattern.json" "$TMP_DIR/union.ko" "$TMP_DIR/union.ll"
|
|
74
|
+
grep -q 'define internal %k_result @k_union_arm_0' "$TMP_DIR/union.ll"
|
|
75
|
+
grep -q 'call %k_result @k_union_arm_1' "$TMP_DIR/union.ll"
|
|
76
|
+
clang -Wno-override-module -Iruntime runtime/krt.c tests/union-driver.c "$TMP_DIR/union.ll" -o "$TMP_DIR/union"
|
|
77
|
+
"$TMP_DIR/union"
|
|
78
|
+
|
|
79
|
+
node ./bin/k-llvm-compile.mjs --help | grep -q 'Compile a k .ko/.klib object'
|
|
80
|
+
|
|
81
|
+
node ./bin/k-llvm-build.mjs --help | grep -q 'binary k pattern+value envelope'
|
|
82
|
+
|
|
83
|
+
node ./bin/k-llvm-jit.mjs --help | grep -q 'stdin binary envelope'
|
|
84
|
+
|
|
85
|
+
node ./bin/k-llvm-run.mjs --help | grep -q 'Compile and execute a k .ko/.klib object'
|
|
86
|
+
|
|
87
|
+
node ../../objects/compile.mjs '.x' "$TMP_DIR/run.ko"
|
|
88
|
+
printf '{"x":"left","y":"right"}' > "$TMP_DIR/run-input.kv"
|
|
89
|
+
printf '"left"' > "$TMP_DIR/run-expected.kv"
|
|
90
|
+
node ./bin/k-llvm-run.mjs --expect "$TMP_DIR/run-expected.kv" "$TMP_DIR/run.ko" "$TMP_DIR/run-input.kv" | grep -qx 'OK'
|
|
91
|
+
node ./bin/k-llvm-run.mjs "$TMP_DIR/run.ko" "$TMP_DIR/run-input.kv" | grep -qx '"left"'
|
|
92
|
+
|
|
93
|
+
node ../../objects/compile.mjs '{ .x fieldA, .y fieldB }' "$TMP_DIR/run-product.ko"
|
|
94
|
+
printf '{"x":"left","y":"right"}' > "$TMP_DIR/run-product-input.kv"
|
|
95
|
+
node ./bin/k-llvm-run.mjs "$TMP_DIR/run-product.ko" "$TMP_DIR/run-product-input.kv" | grep -qx '{"fieldA":"left","fieldB":"right"}'
|
|
96
|
+
|
|
97
|
+
printf '[["closed-product",[["x",1],["y",3]]],["open-union",[["left",2]]],["closed-product",[]],["open-union",[["right",2]]]]' > "$TMP_DIR/run-envelope.pattern.json"
|
|
98
|
+
node ./bin/k-llvm-build.mjs --input-pattern "$TMP_DIR/run-envelope.pattern.json" "$TMP_DIR/run.ko" "$TMP_DIR/run-exe"
|
|
99
|
+
printf '{"x":"left","y":"right"}' \
|
|
100
|
+
| node ../../codecs/k-parse.mjs \
|
|
101
|
+
| "$TMP_DIR/run-exe" \
|
|
102
|
+
| node ../../codecs/k-print.mjs \
|
|
103
|
+
| grep -qx '"left"'
|
|
104
|
+
|
|
105
|
+
printf '{"x":"left"}' | node ../../codecs/k-parse.mjs | "$TMP_DIR/run-exe" && exit 1 || test "$?" -eq 5
|
|
106
|
+
|
|
107
|
+
printf '[["open-union",[["left",1],["right",1]]],["closed-product",[]]]' > "$TMP_DIR/identity-variant.pattern.json"
|
|
108
|
+
node ./bin/k-llvm-build.mjs --input-pattern "$TMP_DIR/identity-variant.pattern.json" "$TMP_DIR/id.ko" "$TMP_DIR/id-exe"
|
|
109
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const pattern = [[\"open-union\",[[\"left\",1],[\"right\",1]]],[\"closed-product\",[]]]; stdout.write(encodeToWire(Value.variant(\"left\", Value.product({}), pattern), pattern));" \
|
|
110
|
+
| "$TMP_DIR/id-exe" \
|
|
111
|
+
| node --input-type=module -e "import { stdin } from 'node:process'; import { decodeWire } from '../../codecs/runtime/prefix-codec.mjs'; const chunks = []; stdin.on('data', (chunk) => chunks.push(chunk)); stdin.on('end', () => console.log(JSON.stringify(decodeWire(Buffer.concat(chunks)).pattern)));" \
|
|
112
|
+
| grep -Fqx '[["open-union",[["left",1],["right",1]]],["closed-product",[]]]'
|
|
113
|
+
|
|
114
|
+
printf '[["closed-union",[["+",1],["-",1]]],["closed-union",[["0",1],["1",1],["_",2]]],["closed-product",[]]]' > "$TMP_DIR/identity-int.pattern.json"
|
|
115
|
+
node ./bin/k-llvm-build.mjs --input-pattern "$TMP_DIR/identity-int.pattern.json" "$TMP_DIR/id.ko" "$TMP_DIR/id-int-exe"
|
|
116
|
+
printf '2' \
|
|
117
|
+
| node ../../codecs/int.mjs --parse \
|
|
118
|
+
| "$TMP_DIR/id-int-exe" \
|
|
119
|
+
| node ../../codecs/int.mjs --print \
|
|
120
|
+
| grep -qx '2'
|
|
121
|
+
|
|
122
|
+
node --input-type=module -e "import assert from 'node:assert/strict'; import { spawn } from 'node:child_process'; import { encodeToWire, decodeWire } from '../../codecs/runtime/prefix-codec.mjs'; import { parse, INT_PATTERN } from '../../codecs/int.mjs'; const input = encodeToWire(parse('2'), INT_PATTERN); const header = Buffer.alloc(4); header.writeUInt32BE(input.length); const child = spawn(process.argv[1], ['--server']); const chunks = []; const stderr = []; child.stdout.on('data', (chunk) => chunks.push(chunk)); child.stderr.on('data', (chunk) => stderr.push(chunk)); child.stdin.end(Buffer.concat([header, input])); const status = await new Promise((resolve, reject) => { child.on('error', reject); child.on('close', resolve); }); assert.equal(status, 0, Buffer.concat(stderr).toString('utf8')); const output = Buffer.concat(chunks); const length = output.readUInt32BE(0); assert.equal(output.length, 4 + length); assert.deepEqual(decodeWire(output.subarray(4)).value.toJSON(), parse('2').toJSON());" "$TMP_DIR/id-int-exe"
|
|
123
|
+
|
|
124
|
+
printf '{"x":"left","y":"right"}' \
|
|
125
|
+
| node ../../codecs/k-parse.mjs \
|
|
126
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/run.ko" \
|
|
127
|
+
| node ../../codecs/k-print.mjs \
|
|
128
|
+
| grep -qx '"left"'
|
|
129
|
+
|
|
130
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const pattern = [[\"open-union\",[[\"left\",1],[\"right\",1]]],[\"closed-product\",[]]]; stdout.write(encodeToWire(Value.variant(\"left\", Value.product({}), pattern), pattern));" \
|
|
131
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/id.ko" \
|
|
132
|
+
| node --input-type=module -e "import { stdin } from 'node:process'; import { decodeWire } from '../../codecs/runtime/prefix-codec.mjs'; const chunks = []; stdin.on('data', (chunk) => chunks.push(chunk)); stdin.on('end', () => console.log(JSON.stringify(decodeWire(Buffer.concat(chunks)).pattern)));" \
|
|
133
|
+
| grep -Fqx '[["open-union",[["left",1],["right",1]]],["closed-product",[]]]'
|
|
134
|
+
|
|
135
|
+
node ../../objects/compile.mjs '/"ह" |"😀"' "$TMP_DIR/unicode-variant.ko"
|
|
136
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const pattern = [[\"closed-union\", [[\"ह\", 1]]], [\"closed-product\", []]]; stdout.write(encodeToWire(Value.variant('ह', Value.product({}), pattern), pattern));" \
|
|
137
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/unicode-variant.ko" \
|
|
138
|
+
| node ../../codecs/k-print.mjs \
|
|
139
|
+
| grep -qx '"😀"'
|
|
140
|
+
|
|
141
|
+
node ../../objects/compile.mjs '/"a\u0000b" |"nul-ok"' "$TMP_DIR/nul-variant.ko"
|
|
142
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const tag = 'a\u0000b'; const pattern = [[\"closed-union\", [[tag, 1]]], [\"closed-product\", []]]; stdout.write(encodeToWire(Value.variant(tag, Value.product({}), pattern), pattern));" \
|
|
143
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/nul-variant.ko" \
|
|
144
|
+
| node ../../codecs/k-print.mjs \
|
|
145
|
+
| grep -qx '"nul-ok"'
|
|
146
|
+
|
|
147
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const labels = ['a', 'é', 'ह', '\uE000', '😀', '𠀀', 'a\u0000b']; const pattern = [[\"closed-product\", labels.map((label) => [label, 1])], [\"closed-product\", []]]; const value = Value.product(Object.fromEntries(labels.map((label) => [label, Value.product({})])), pattern); stdout.write(encodeToWire(value, pattern));" \
|
|
148
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/id.ko" \
|
|
149
|
+
| node --input-type=module -e "import assert from 'node:assert/strict'; import { stdin } from 'node:process'; import { decodeWire } from '../../codecs/runtime/prefix-codec.mjs'; const chunks = []; for await (const chunk of stdin) chunks.push(chunk); const labels = ['a', 'é', 'ह', '\uE000', '😀', '𠀀', 'a\u0000b']; const { pattern } = decodeWire(Buffer.concat(chunks)); assert.equal(pattern[0][0], 'closed-product'); assert.deepEqual(new Set(pattern[0][1].map(([label]) => label)), new Set(labels));"
|
|
150
|
+
|
|
151
|
+
node --input-type=module -e "import { stdout } from 'node:process'; import { encodeToWire } from '../../codecs/runtime/prefix-codec.mjs'; import { Value } from '../../Value.mjs'; const labels = ['a', 'é', 'ह', '\uE000', '😀', '𠀀', 'a\u0000b']; const pattern = [[\"open-union\", labels.map((label) => [label, 1])], [\"closed-product\", []]]; stdout.write(encodeToWire(Value.variant('a\u0000b', Value.product({}), pattern), pattern));" \
|
|
152
|
+
| node ./bin/k-llvm-jit.mjs --cache-dir "$TMP_DIR/jit-cache" "$TMP_DIR/id.ko" \
|
|
153
|
+
| node --input-type=module -e "import assert from 'node:assert/strict'; import { stdin } from 'node:process'; import { decodeWire } from '../../codecs/runtime/prefix-codec.mjs'; const chunks = []; for await (const chunk of stdin) chunks.push(chunk); const labels = ['a', 'é', 'ह', '\uE000', '😀', '𠀀', 'a\u0000b']; const { pattern, value } = decodeWire(Buffer.concat(chunks)); assert.equal(pattern[0][0], 'open-union'); assert.deepEqual(new Set(pattern[0][1].map(([label]) => label)), new Set(labels)); assert.equal(value.tag, 'a\u0000b');"
|