kumi 0.0.18 → 0.0.19
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -1
- data/.ruby-version +1 -0
- data/CHANGELOG.md +25 -0
- data/CLAUDE.md +26 -139
- data/README.md +143 -372
- data/data/functions/agg/boolean.yaml +14 -0
- data/data/functions/agg/numeric.yaml +80 -0
- data/data/functions/agg/string.yaml +8 -0
- data/data/functions/core/arithmetic.yaml +50 -0
- data/data/functions/core/boolean.yaml +18 -0
- data/data/functions/core/comparison.yaml +42 -0
- data/data/functions/core/constructor.yaml +32 -0
- data/data/functions/core/select.yaml +7 -0
- data/data/functions/core/stencil.yaml +21 -0
- data/data/functions/core/string.yaml +19 -0
- data/data/kernels/javascript/agg/boolean.yaml +12 -0
- data/data/kernels/javascript/agg/numeric.yaml +27 -0
- data/data/kernels/javascript/agg/string.yaml +5 -0
- data/data/kernels/javascript/core/arithmetic.yaml +32 -0
- data/data/kernels/javascript/core/boolean.yaml +12 -0
- data/data/kernels/javascript/core/comparison.yaml +24 -0
- data/data/kernels/javascript/core/constructor.yaml +15 -0
- data/data/kernels/javascript/core/select.yaml +7 -0
- data/data/kernels/javascript/core/string.yaml +12 -0
- data/data/kernels/ruby/agg/boolean.yaml +18 -0
- data/data/kernels/ruby/agg/numeric.yaml +29 -0
- data/data/kernels/ruby/agg/string.yaml +5 -0
- data/data/kernels/ruby/core/arithmetic.yaml +38 -0
- data/data/kernels/ruby/core/boolean.yaml +15 -0
- data/data/kernels/ruby/core/comparison.yaml +30 -0
- data/data/kernels/ruby/core/constructor.yaml +17 -0
- data/data/kernels/ruby/core/select.yaml +4 -0
- data/data/kernels/ruby/core/string.yaml +15 -0
- data/debug_ordering.rb +52 -0
- data/docs/FORM_SCHEMA.md +85 -0
- data/docs/OUTPUT_SCHEMA.md +69 -0
- data/docs/SYNTAX.md +626 -373
- data/golden/array_element/expected/ast.txt +21 -0
- data/golden/array_element/expected/input_plan.txt +5 -0
- data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
- data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
- data/golden/array_element/expected/lir_02_inlined.txt +13 -0
- data/golden/array_element/expected/lir_03_cse.txt +13 -0
- data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
- data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
- data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
- data/golden/array_element/expected/nast.txt +7 -0
- data/golden/array_element/expected/schema_javascript.mjs +13 -0
- data/golden/array_element/expected/schema_ruby.rb +41 -0
- data/golden/array_element/expected/snast.txt +7 -0
- data/golden/array_element/expected.json +5 -0
- data/golden/array_element/input.json +9 -0
- data/golden/array_element/schema.kumi +11 -0
- data/golden/array_index/expected/ast.txt +59 -0
- data/golden/array_index/expected/input_plan.txt +5 -0
- data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
- data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
- data/golden/array_index/expected/lir_02_inlined.txt +42 -0
- data/golden/array_index/expected/lir_03_cse.txt +40 -0
- data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
- data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
- data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
- data/golden/array_index/expected/nast.txt +33 -0
- data/golden/array_index/expected/schema_javascript.mjs +46 -0
- data/golden/array_index/expected/schema_ruby.rb +75 -0
- data/golden/array_index/expected/snast.txt +33 -0
- data/golden/array_index/expected.json +5 -0
- data/golden/array_index/input.json +1 -0
- data/golden/array_index/schema.kumi +19 -0
- data/golden/array_operations/expected/ast.txt +50 -0
- data/golden/array_operations/expected/input_plan.txt +10 -0
- data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
- data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
- data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
- data/golden/array_operations/expected/lir_03_cse.txt +47 -0
- data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
- data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
- data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
- data/golden/array_operations/expected/nast.txt +32 -0
- data/golden/array_operations/expected/schema_javascript.mjs +60 -0
- data/golden/array_operations/expected/schema_ruby.rb +91 -0
- data/golden/array_operations/expected/snast.txt +32 -0
- data/golden/array_operations/expected.json +27 -0
- data/golden/array_operations/input.json +8 -0
- data/golden/array_operations/schema.kumi +12 -10
- data/golden/cascade_logic/expected/ast.txt +37 -0
- data/golden/cascade_logic/expected/input_plan.txt +2 -0
- data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
- data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
- data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
- data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
- data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
- data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
- data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
- data/golden/cascade_logic/expected/nast.txt +32 -0
- data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
- data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
- data/golden/cascade_logic/expected/snast.txt +32 -0
- data/golden/cascade_logic/expected.json +5 -0
- data/golden/cascade_logic/input.json +4 -0
- data/golden/cascade_logic/schema.kumi +1 -3
- data/golden/chained_fusion/expected/ast.txt +57 -0
- data/golden/chained_fusion/expected/input_plan.txt +13 -0
- data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
- data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
- data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
- data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
- data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
- data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
- data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
- data/golden/chained_fusion/expected/nast.txt +55 -0
- data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
- data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
- data/golden/chained_fusion/expected/snast.txt +55 -0
- data/golden/chained_fusion/expected.json +45 -0
- data/golden/chained_fusion/input.json +51 -0
- data/golden/chained_fusion/schema.kumi +52 -0
- data/golden/element_arrays/expected/ast.txt +55 -0
- data/golden/element_arrays/expected/input_plan.txt +7 -0
- data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
- data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
- data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
- data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
- data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
- data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
- data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
- data/golden/element_arrays/expected/nast.txt +42 -0
- data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
- data/golden/element_arrays/expected/schema_ruby.rb +141 -0
- data/golden/element_arrays/expected/snast.txt +42 -0
- data/golden/element_arrays/expected.json +55 -0
- data/golden/element_arrays/input.json +12 -0
- data/golden/element_arrays/schema.kumi +21 -0
- data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
- data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
- data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
- data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
- data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
- data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
- data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
- data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
- data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
- data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
- data/golden/empty_and_null_inputs/expected.json +8 -0
- data/golden/empty_and_null_inputs/input.json +16 -0
- data/golden/empty_and_null_inputs/schema.kumi +30 -0
- data/golden/game_of_life/expected/ast.txt +118 -0
- data/golden/game_of_life/expected/input_plan.txt +5 -0
- data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
- data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
- data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
- data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
- data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
- data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
- data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
- data/golden/game_of_life/expected/nast.txt +104 -0
- data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
- data/golden/game_of_life/expected/schema_ruby.rb +125 -0
- data/golden/game_of_life/expected/snast.txt +104 -0
- data/golden/game_of_life/expected.json +3 -0
- data/golden/game_of_life/input.json +8 -0
- data/golden/game_of_life/schema.kumi +33 -0
- data/golden/hash_keys/expected/ast.txt +29 -0
- data/golden/hash_keys/expected/input_plan.txt +2 -0
- data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
- data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
- data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
- data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
- data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
- data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
- data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
- data/golden/hash_keys/expected/nast.txt +46 -0
- data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
- data/golden/hash_keys/expected/schema_ruby.rb +61 -0
- data/golden/hash_keys/expected/snast.txt +46 -0
- data/golden/hash_keys/expected.json +20 -0
- data/golden/hash_keys/input.json +4 -0
- data/golden/hash_keys/schema.kumi +14 -0
- data/golden/hash_value/expected/ast.txt +37 -0
- data/golden/hash_value/expected/input_plan.txt +7 -0
- data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
- data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
- data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
- data/golden/hash_value/expected/lir_03_cse.txt +33 -0
- data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
- data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
- data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
- data/golden/hash_value/expected/nast.txt +25 -0
- data/golden/hash_value/expected/schema_javascript.mjs +46 -0
- data/golden/hash_value/expected/schema_ruby.rb +75 -0
- data/golden/hash_value/expected/snast.txt +25 -0
- data/golden/hash_value/expected.json +19 -0
- data/golden/hash_value/input.json +12 -0
- data/golden/hash_value/schema.kumi +19 -0
- data/golden/hierarchical_complex/expected/ast.txt +85 -0
- data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
- data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
- data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
- data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
- data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
- data/golden/hierarchical_complex/expected/nast.txt +49 -0
- data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
- data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
- data/golden/hierarchical_complex/expected/snast.txt +49 -0
- data/golden/hierarchical_complex/expected.json +34 -0
- data/golden/hierarchical_complex/input.json +26 -0
- data/golden/hierarchical_complex/schema.kumi +38 -0
- data/golden/input_reference/expected/ast.txt +46 -0
- data/golden/input_reference/expected/input_plan.txt +15 -0
- data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
- data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
- data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
- data/golden/input_reference/expected/lir_03_cse.txt +39 -0
- data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
- data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
- data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
- data/golden/input_reference/expected/nast.txt +21 -0
- data/golden/input_reference/expected/schema_javascript.mjs +45 -0
- data/golden/input_reference/expected/schema_ruby.rb +74 -0
- data/golden/input_reference/expected/snast.txt +21 -0
- data/golden/input_reference/expected.json +7 -0
- data/golden/input_reference/input.json +11 -0
- data/golden/input_reference/schema.kumi +22 -0
- data/golden/interleaved_fusion/expected/ast.txt +51 -0
- data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
- data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
- data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
- data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
- data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
- data/golden/interleaved_fusion/expected/nast.txt +41 -0
- data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
- data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
- data/golden/interleaved_fusion/expected/snast.txt +41 -0
- data/golden/interleaved_fusion/expected.json +37 -0
- data/golden/interleaved_fusion/input.json +26 -0
- data/golden/interleaved_fusion/schema.kumi +57 -0
- data/golden/let_inline/expected/ast.txt +33 -0
- data/golden/let_inline/expected/input_plan.txt +2 -0
- data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
- data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
- data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
- data/golden/let_inline/expected/lir_03_cse.txt +30 -0
- data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
- data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
- data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
- data/golden/let_inline/expected/nast.txt +26 -0
- data/golden/let_inline/expected/schema_javascript.mjs +11 -0
- data/golden/let_inline/expected/schema_ruby.rb +37 -0
- data/golden/let_inline/expected/snast.txt +26 -0
- data/golden/let_inline/expected.json +1 -0
- data/golden/let_inline/input.json +1 -0
- data/golden/let_inline/schema.kumi +11 -0
- data/golden/loop_fusion/expected/ast.txt +44 -0
- data/golden/loop_fusion/expected/input_plan.txt +13 -0
- data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
- data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
- data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
- data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
- data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
- data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
- data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
- data/golden/loop_fusion/expected/nast.txt +32 -0
- data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
- data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
- data/golden/loop_fusion/expected/snast.txt +32 -0
- data/golden/loop_fusion/expected.json +30 -0
- data/golden/loop_fusion/input.json +28 -0
- data/golden/loop_fusion/schema.kumi +32 -0
- data/golden/min_reduce_scope/expected/ast.txt +49 -0
- data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
- data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
- data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
- data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
- data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
- data/golden/min_reduce_scope/expected/nast.txt +29 -0
- data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
- data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
- data/golden/min_reduce_scope/expected/snast.txt +29 -0
- data/golden/min_reduce_scope/expected.json +9 -0
- data/golden/min_reduce_scope/input.json +18 -0
- data/golden/min_reduce_scope/schema.kumi +25 -0
- data/golden/mixed_dimensions/expected/ast.txt +54 -0
- data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
- data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
- data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
- data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
- data/golden/mixed_dimensions/expected/nast.txt +22 -0
- data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
- data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
- data/golden/mixed_dimensions/expected/snast.txt +22 -0
- data/golden/mixed_dimensions/expected.json +6 -0
- data/golden/mixed_dimensions/input.json +22 -0
- data/golden/mixed_dimensions/schema.kumi +35 -0
- data/golden/multirank_hoisting/expected/ast.txt +72 -0
- data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
- data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
- data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
- data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
- data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
- data/golden/multirank_hoisting/expected/nast.txt +39 -0
- data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
- data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
- data/golden/multirank_hoisting/expected/snast.txt +39 -0
- data/golden/multirank_hoisting/expected.json +15 -0
- data/golden/multirank_hoisting/input.json +19 -0
- data/golden/multirank_hoisting/schema.kumi +38 -0
- data/golden/nested_hash/expected/ast.txt +22 -0
- data/golden/nested_hash/expected/input_plan.txt +5 -0
- data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
- data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
- data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
- data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
- data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
- data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
- data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
- data/golden/nested_hash/expected/nast.txt +8 -0
- data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
- data/golden/nested_hash/expected/schema_ruby.rb +35 -0
- data/golden/nested_hash/expected/snast.txt +8 -0
- data/golden/nested_hash/expected.json +3 -0
- data/golden/nested_hash/input.json +7 -0
- data/golden/nested_hash/schema.kumi +11 -0
- data/golden/reduction_broadcast/expected/ast.txt +49 -0
- data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
- data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
- data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
- data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
- data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
- data/golden/reduction_broadcast/expected/nast.txt +24 -0
- data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
- data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
- data/golden/reduction_broadcast/expected/snast.txt +24 -0
- data/golden/reduction_broadcast/expected.json +25 -0
- data/golden/reduction_broadcast/input.json +19 -0
- data/golden/reduction_broadcast/schema.kumi +34 -0
- data/golden/roll/expected/ast.txt +36 -0
- data/golden/roll/expected/input_plan.txt +3 -0
- data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
- data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
- data/golden/roll/expected/lir_02_inlined.txt +56 -0
- data/golden/roll/expected/lir_03_cse.txt +55 -0
- data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
- data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
- data/golden/roll/expected/lir_06_const_prop.txt +55 -0
- data/golden/roll/expected/nast.txt +26 -0
- data/golden/roll/expected/schema_javascript.mjs +65 -0
- data/golden/roll/expected/schema_ruby.rb +95 -0
- data/golden/roll/expected/snast.txt +26 -0
- data/golden/roll/expected.json +6 -0
- data/golden/roll/input.json +1 -0
- data/golden/roll/schema.kumi +13 -0
- data/golden/shift/expected/ast.txt +48 -0
- data/golden/shift/expected/input_plan.txt +3 -0
- data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
- data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
- data/golden/shift/expected/lir_02_inlined.txt +96 -0
- data/golden/shift/expected/lir_03_cse.txt +90 -0
- data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
- data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
- data/golden/shift/expected/lir_06_const_prop.txt +90 -0
- data/golden/shift/expected/nast.txt +38 -0
- data/golden/shift/expected/schema_javascript.mjs +106 -0
- data/golden/shift/expected/schema_ruby.rb +138 -0
- data/golden/shift/expected/snast.txt +38 -0
- data/golden/shift/expected.json +8 -0
- data/golden/shift/input.json +1 -0
- data/golden/shift/schema.kumi +15 -0
- data/golden/shift_2d/expected/ast.txt +88 -0
- data/golden/shift_2d/expected/input_plan.txt +5 -0
- data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
- data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
- data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
- data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
- data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
- data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
- data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
- data/golden/shift_2d/expected/nast.txt +74 -0
- data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
- data/golden/shift_2d/expected/schema_ruby.rb +358 -0
- data/golden/shift_2d/expected/snast.txt +74 -0
- data/golden/shift_2d/expected.json +15 -0
- data/golden/shift_2d/input.json +14 -0
- data/golden/shift_2d/schema.kumi +25 -0
- data/golden/simple_math/expected/ast.txt +40 -0
- data/golden/simple_math/expected/input_plan.txt +2 -0
- data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
- data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
- data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
- data/golden/simple_math/expected/lir_03_cse.txt +31 -0
- data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
- data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
- data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
- data/golden/simple_math/expected/nast.txt +33 -0
- data/golden/simple_math/expected/schema_javascript.mjs +33 -0
- data/golden/simple_math/expected/schema_ruby.rb +59 -0
- data/golden/simple_math/expected/snast.txt +33 -0
- data/golden/simple_math/expected.json +1 -0
- data/golden/simple_math/input.json +4 -0
- data/golden/simple_math/schema.kumi +2 -1
- data/golden/streaming_basics/expected/ast.txt +64 -0
- data/golden/streaming_basics/expected/input_plan.txt +8 -0
- data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
- data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
- data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
- data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
- data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
- data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
- data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
- data/golden/streaming_basics/expected/nast.txt +48 -0
- data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
- data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
- data/golden/streaming_basics/expected/snast.txt +48 -0
- data/golden/streaming_basics/expected.json +10 -0
- data/golden/streaming_basics/input.json +8 -0
- data/golden/streaming_basics/schema.kumi +24 -0
- data/golden/tuples/expected/ast.txt +48 -0
- data/golden/tuples/expected/input_plan.txt +1 -0
- data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
- data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
- data/golden/tuples/expected/lir_02_inlined.txt +48 -0
- data/golden/tuples/expected/lir_03_cse.txt +48 -0
- data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
- data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
- data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
- data/golden/tuples/expected/nast.txt +42 -0
- data/golden/tuples/expected/schema_javascript.mjs +51 -0
- data/golden/tuples/expected/schema_ruby.rb +77 -0
- data/golden/tuples/expected/snast.txt +42 -0
- data/golden/tuples/expected.json +7 -0
- data/golden/tuples/input.json +3 -0
- data/golden/tuples/schema.kumi +11 -0
- data/golden/tuples_and_arrays/expected/ast.txt +44 -0
- data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
- data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
- data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
- data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
- data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
- data/golden/tuples_and_arrays/expected/nast.txt +28 -0
- data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
- data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
- data/golden/tuples_and_arrays/expected/snast.txt +28 -0
- data/golden/tuples_and_arrays/expected.json +18 -0
- data/golden/tuples_and_arrays/input.json +7 -0
- data/golden/tuples_and_arrays/schema.kumi +38 -0
- data/golden/with_constants/expected/ast.txt +28 -0
- data/golden/with_constants/expected/input_plan.txt +2 -0
- data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
- data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
- data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
- data/golden/with_constants/expected/lir_03_cse.txt +17 -0
- data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
- data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
- data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
- data/golden/with_constants/expected/nast.txt +21 -0
- data/golden/with_constants/expected/schema_javascript.mjs +18 -0
- data/golden/with_constants/expected/schema_ruby.rb +44 -0
- data/golden/with_constants/expected/snast.txt +15 -0
- data/golden/with_constants/schema.kumi +10 -0
- data/lib/kumi/analyzer.rb +76 -24
- data/lib/kumi/configuration.rb +60 -0
- data/lib/kumi/core/analyzer/binder.rb +121 -0
- data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
- data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
- data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
- data/lib/kumi/core/analyzer/debug.rb +14 -16
- data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
- data/lib/kumi/core/analyzer/folder.rb +94 -0
- data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
- data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
- data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
- data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
- data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
- data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
- data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
- data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
- data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
- data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
- data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
- data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
- data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
- data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
- data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
- data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
- data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
- data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
- data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
- data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
- data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
- data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
- data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
- data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
- data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
- data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
- data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
- data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
- data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
- data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
- data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
- data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
- data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
- data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
- data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
- data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
- data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
- data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
- data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
- data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
- data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
- data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
- data/lib/kumi/core/analyzer/plans.rb +12 -0
- data/lib/kumi/core/analyzer/state_serde.rb +4 -4
- data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
- data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
- data/lib/kumi/core/compiler/access_codegen.rb +1 -1
- data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
- data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
- data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
- data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
- data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
- data/lib/kumi/core/compiler/access_planner.rb +42 -4
- data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
- data/lib/kumi/core/explain.rb +18 -11
- data/lib/kumi/core/functions/loader.rb +47 -0
- data/lib/kumi/core/functions/model.rb +10 -0
- data/lib/kumi/core/functions/type_rules.rb +108 -0
- data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
- data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
- data/lib/kumi/core/ir.rb +6 -2
- data/lib/kumi/core/irv2/builder.rb +48 -0
- data/lib/kumi/core/irv2/declaration.rb +28 -0
- data/lib/kumi/core/irv2/module.rb +108 -0
- data/lib/kumi/core/irv2/value.rb +28 -0
- data/lib/kumi/core/lir/analyze.rb +64 -0
- data/lib/kumi/core/lir/build.rb +363 -0
- data/lib/kumi/core/lir/emit.rb +62 -0
- data/lib/kumi/core/lir/structs/instruction.rb +44 -0
- data/lib/kumi/core/lir/structs/literal.rb +14 -0
- data/lib/kumi/core/lir/structs/stamp.rb +13 -0
- data/lib/kumi/core/lir/support/error.rb +9 -0
- data/lib/kumi/core/lir/support/ids.rb +34 -0
- data/lib/kumi/core/lir/validate.rb +74 -0
- data/lib/kumi/core/lir.rb +34 -0
- data/lib/kumi/core/nast.rb +216 -0
- data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
- data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
- data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
- data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
- data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
- data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
- data/lib/kumi/core/types/builder.rb +2 -2
- data/lib/kumi/core/types/normalizer.rb +2 -0
- data/lib/kumi/core/types/validator.rb +10 -3
- data/lib/kumi/core/types.rb +7 -0
- data/lib/kumi/dev/codegen.rb +194 -0
- data/lib/kumi/dev/golden/generator.rb +105 -0
- data/lib/kumi/dev/golden/reporter.rb +160 -0
- data/lib/kumi/dev/golden/representation.rb +45 -0
- data/lib/kumi/dev/golden/result.rb +98 -0
- data/lib/kumi/dev/golden/runtime_test.rb +93 -0
- data/lib/kumi/dev/golden/suite.rb +131 -0
- data/lib/kumi/dev/golden/verifier.rb +76 -0
- data/lib/kumi/dev/golden.rb +75 -0
- data/lib/kumi/dev/ir.rb +4 -4
- data/lib/kumi/dev/parse.rb +1 -1
- data/lib/kumi/dev/pretty_printer.rb +229 -0
- data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
- data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
- data/lib/kumi/dev/profile_aggregator.rb +36 -38
- data/lib/kumi/dev/profile_runner.rb +19 -23
- data/lib/kumi/dev/runner.rb +12 -22
- data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
- data/lib/kumi/dev.rb +3 -3
- data/lib/kumi/frontends/ruby.rb +12 -12
- data/lib/kumi/frontends/text.rb +26 -21
- data/lib/kumi/frontends.rb +6 -8
- data/lib/kumi/kernel_registry.rb +59 -0
- data/lib/kumi/pack/builder.rb +229 -0
- data/lib/kumi/pack.rb +15 -0
- data/lib/kumi/registry_v2/loader.rb +81 -0
- data/lib/kumi/registry_v2.rb +118 -0
- data/lib/kumi/schema.rb +83 -43
- data/lib/kumi/support/diff.rb +3 -2
- data/lib/kumi/support/ir_render.rb +1 -1
- data/lib/kumi/support/lir_printer.rb +143 -0
- data/lib/kumi/support/nast_printer.rb +93 -0
- data/lib/kumi/support/s_expression_printer.rb +5 -4
- data/lib/kumi/support/snast_printer.rb +111 -0
- data/lib/kumi/syntax/call_expression.rb +1 -1
- data/lib/kumi/syntax/input_declaration.rb +2 -2
- data/lib/kumi/syntax/node.rb +4 -12
- data/lib/kumi/syntax/root.rb +10 -0
- data/lib/kumi/syntax/trait_declaration.rb +1 -0
- data/lib/kumi/syntax/value_declaration.rb +1 -0
- data/lib/kumi/version.rb +1 -1
- data/lib/kumi.rb +47 -5
- metadata +571 -54
- data/docs/AST.md +0 -133
- data/docs/DSL.md +0 -154
- data/docs/FUNCTIONS.md +0 -176
- data/docs/VECTOR_SEMANTICS.md +0 -286
- data/docs/compiler_design_principles.md +0 -86
- data/docs/dev/analyzer-debug.md +0 -52
- data/docs/dev/parse-command.md +0 -64
- data/docs/dev/vm-profiling.md +0 -95
- data/docs/development/README.md +0 -120
- data/docs/development/error-reporting.md +0 -361
- data/docs/features/README.md +0 -58
- data/docs/features/analysis-type-inference.md +0 -42
- data/docs/features/analysis-unsat-detection.md +0 -71
- data/docs/features/hierarchical-broadcasting.md +0 -415
- data/docs/features/input-declaration-system.md +0 -58
- data/docs/features/performance.md +0 -14
- data/docs/features/s-expression-printer.md +0 -77
- data/docs/schema_metadata/broadcasts.md +0 -53
- data/docs/schema_metadata/cascades.md +0 -45
- data/docs/schema_metadata/declarations.md +0 -54
- data/docs/schema_metadata/dependencies.md +0 -57
- data/docs/schema_metadata/evaluation_order.md +0 -29
- data/docs/schema_metadata/examples.md +0 -95
- data/docs/schema_metadata/inferred_types.md +0 -46
- data/docs/schema_metadata/inputs.md +0 -86
- data/docs/schema_metadata.md +0 -108
- data/golden/mixed_nesting/schema.kumi +0 -42
- data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
- data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
- data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
- data/lib/kumi/core/function_registry/function_builder.rb +0 -184
- data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
- data/lib/kumi/core/function_registry/math_functions.rb +0 -74
- data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
- data/lib/kumi/core/function_registry/string_functions.rb +0 -57
- data/lib/kumi/core/function_registry/type_functions.rb +0 -53
- data/lib/kumi/core/function_registry.rb +0 -176
- data/lib/kumi/registry.rb +0 -32
- data/lib/kumi/runtime/executable.rb +0 -135
- data/lib/kumi/runtime/run.rb +0 -105
- data/performance_results.txt +0 -63
- data/scripts/analyze_broadcast_methods.rb +0 -68
- data/scripts/analyze_cascade_methods.rb +0 -74
- data/scripts/check_broadcasting_coverage.rb +0 -51
- data/scripts/find_dead_code.rb +0 -114
- data/scripts/generate_function_docs.rb +0 -71
- data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -1,361 +0,0 @@
|
|
1
|
-
# Error Reporting Standards
|
2
|
-
|
3
|
-
This guide provides comprehensive standards for error reporting in Kumi, ensuring consistent, localized error messages throughout the system.
|
4
|
-
|
5
|
-
## Overview
|
6
|
-
|
7
|
-
Kumi uses a unified error reporting interface that:
|
8
|
-
- Provides consistent location information (file:line:column)
|
9
|
-
- Categorizes errors by type (syntax, semantic, type, runtime)
|
10
|
-
- Supports both immediate raising and error accumulation patterns
|
11
|
-
- Maintains backward compatibility with existing tests
|
12
|
-
- Enables enhanced error messages with suggestions and context
|
13
|
-
|
14
|
-
## Core Interface Components
|
15
|
-
|
16
|
-
### ErrorReporter Module
|
17
|
-
Central error reporting functionality with standardized error entries:
|
18
|
-
|
19
|
-
```ruby
|
20
|
-
# Create structured error entry
|
21
|
-
entry = ErrorReporter.create_error(
|
22
|
-
"Error message",
|
23
|
-
location: node.loc,
|
24
|
-
type: :semantic,
|
25
|
-
context: { additional: "info" }
|
26
|
-
)
|
27
|
-
|
28
|
-
# Add error to accumulator
|
29
|
-
ErrorReporter.add_error(errors, "message", location: node.loc)
|
30
|
-
|
31
|
-
# Immediately raise error
|
32
|
-
ErrorReporter.raise_error("message", location: node.loc, error_class: Errors::SyntaxError)
|
33
|
-
```
|
34
|
-
|
35
|
-
### ErrorReporting Mixin
|
36
|
-
Convenient methods for classes that need error reporting:
|
37
|
-
|
38
|
-
```ruby
|
39
|
-
class MyClass
|
40
|
-
include ErrorReporting
|
41
|
-
|
42
|
-
def process
|
43
|
-
# Accumulated errors (analyzer pattern)
|
44
|
-
report_error(errors, "message", location: node.loc, type: :semantic)
|
45
|
-
|
46
|
-
# Immediate errors (parser pattern)
|
47
|
-
raise_localized_error("message", location: node.loc, error_class: Errors::SyntaxError)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
```
|
51
|
-
|
52
|
-
## Implementation Patterns
|
53
|
-
|
54
|
-
### Parser Classes (Immediate Errors)
|
55
|
-
Parser classes should raise errors immediately when encountered:
|
56
|
-
|
57
|
-
```ruby
|
58
|
-
class DslBuilderContext
|
59
|
-
include ErrorReporting
|
60
|
-
|
61
|
-
def validate_name(name, type, location)
|
62
|
-
return if name.is_a?(Symbol)
|
63
|
-
|
64
|
-
raise_syntax_error(
|
65
|
-
"The name for '#{type}' must be a Symbol, got #{name.class}",
|
66
|
-
location: location
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
def raise_error(message, location)
|
71
|
-
# Legacy method - delegates to new interface
|
72
|
-
raise_syntax_error(message, location: location)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
```
|
76
|
-
|
77
|
-
### Analyzer Passes (Accumulated Errors)
|
78
|
-
Analyzer passes should accumulate errors and report them at the end:
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
class MyAnalyzerPass < PassBase
|
82
|
-
def run(errors)
|
83
|
-
each_decl do |decl|
|
84
|
-
validate_declaration(decl, errors)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
def validate_declaration(decl, errors)
|
91
|
-
# New error reporting method
|
92
|
-
report_error(
|
93
|
-
errors,
|
94
|
-
"Validation failed for #{decl.name}",
|
95
|
-
location: decl.loc,
|
96
|
-
type: :semantic
|
97
|
-
)
|
98
|
-
|
99
|
-
# Legacy method (backward compatible)
|
100
|
-
add_error(errors, decl.loc, "Legacy format message")
|
101
|
-
end
|
102
|
-
end
|
103
|
-
```
|
104
|
-
|
105
|
-
## Location Resolution Best Practices
|
106
|
-
|
107
|
-
### Always Provide Location When Available
|
108
|
-
```ruby
|
109
|
-
# Good: Specific node location
|
110
|
-
report_error(errors, "Type mismatch", location: node.loc)
|
111
|
-
|
112
|
-
# Acceptable: Fallback location
|
113
|
-
report_error(errors, "Cycle detected", location: first_node&.loc || :cycle)
|
114
|
-
|
115
|
-
# Avoid: No location information
|
116
|
-
report_error(errors, "Error occurred", location: nil)
|
117
|
-
```
|
118
|
-
|
119
|
-
### Complex Error Location Resolution
|
120
|
-
For errors that span multiple nodes or are contextual:
|
121
|
-
|
122
|
-
```ruby
|
123
|
-
def report_cycle(cycle_path, errors)
|
124
|
-
# Find first declaration in cycle for location context
|
125
|
-
first_decl = find_declaration_by_name(cycle_path.first)
|
126
|
-
location = first_decl&.loc || :cycle
|
127
|
-
|
128
|
-
report_error(
|
129
|
-
errors,
|
130
|
-
"cycle detected: #{cycle_path.join(' → ')}",
|
131
|
-
location: location,
|
132
|
-
type: :semantic
|
133
|
-
)
|
134
|
-
end
|
135
|
-
|
136
|
-
def find_declaration_by_name(name)
|
137
|
-
return nil unless schema
|
138
|
-
|
139
|
-
schema.attributes.find { |attr| attr.name == name } ||
|
140
|
-
schema.traits.find { |trait| trait.name == name }
|
141
|
-
end
|
142
|
-
```
|
143
|
-
|
144
|
-
### Location Fallbacks
|
145
|
-
When AST location is not available, use meaningful symbolic locations:
|
146
|
-
|
147
|
-
```ruby
|
148
|
-
# Cycle detection
|
149
|
-
location = node.loc || :cycle
|
150
|
-
|
151
|
-
# Type inference failures
|
152
|
-
location = decl.loc || :type_inference
|
153
|
-
|
154
|
-
# Cross-reference resolution
|
155
|
-
location = ref_node.loc || :reference_resolution
|
156
|
-
```
|
157
|
-
|
158
|
-
## Error Categorization
|
159
|
-
|
160
|
-
### Error Types
|
161
|
-
- `:syntax` - Parse-time structural errors
|
162
|
-
- `:semantic` - Analysis-time logical errors
|
163
|
-
- `:type` - Type system violations
|
164
|
-
- `:runtime` - Execution-time failures
|
165
|
-
|
166
|
-
### Type-specific Methods
|
167
|
-
```ruby
|
168
|
-
# Syntax errors (parser)
|
169
|
-
report_syntax_error(errors, "Invalid syntax", location: loc)
|
170
|
-
raise_syntax_error("Invalid syntax", location: loc)
|
171
|
-
|
172
|
-
# Semantic errors (analyzer)
|
173
|
-
report_semantic_error(errors, "Logic error", location: loc)
|
174
|
-
|
175
|
-
# Type errors (type checker)
|
176
|
-
report_type_error(errors, "Type mismatch", location: loc)
|
177
|
-
```
|
178
|
-
|
179
|
-
## Enhanced Error Messages
|
180
|
-
|
181
|
-
### Basic Enhanced Errors
|
182
|
-
```ruby
|
183
|
-
report_enhanced_error(
|
184
|
-
errors,
|
185
|
-
"undefined reference to `missing_field`",
|
186
|
-
location: node.loc,
|
187
|
-
similar_names: ["missing_value", "missing_data"],
|
188
|
-
suggestions: [
|
189
|
-
"Check spelling of field name",
|
190
|
-
"Ensure field is declared in input block"
|
191
|
-
]
|
192
|
-
)
|
193
|
-
```
|
194
|
-
|
195
|
-
### Context-rich Errors
|
196
|
-
```ruby
|
197
|
-
report_error(
|
198
|
-
errors,
|
199
|
-
"Type mismatch in function call",
|
200
|
-
location: call_node.loc,
|
201
|
-
type: :type,
|
202
|
-
context: {
|
203
|
-
function: call_node.fn_name,
|
204
|
-
expected_type: expected,
|
205
|
-
actual_type: actual,
|
206
|
-
argument_position: position
|
207
|
-
}
|
208
|
-
)
|
209
|
-
```
|
210
|
-
|
211
|
-
## Backward Compatibility
|
212
|
-
|
213
|
-
### Legacy Format Support
|
214
|
-
The system supports both legacy `[location, message]` arrays and new `ErrorEntry` objects:
|
215
|
-
|
216
|
-
```ruby
|
217
|
-
# Analyzer.format_errors handles both formats
|
218
|
-
def format_errors(errors)
|
219
|
-
errors.map do |error|
|
220
|
-
case error
|
221
|
-
when ErrorReporter::ErrorEntry
|
222
|
-
error.to_s # New format: "at file.rb:10:5: message"
|
223
|
-
when Array
|
224
|
-
loc, msg = error
|
225
|
-
"at #{loc || '?'}: #{msg}" # Legacy format
|
226
|
-
end
|
227
|
-
end.join("\n")
|
228
|
-
end
|
229
|
-
```
|
230
|
-
|
231
|
-
### Migration Strategy
|
232
|
-
1. **New code**: Use new error reporting methods (`report_error`, `raise_localized_error`)
|
233
|
-
2. **Existing code**: No changes required - `add_error` method maintained for compatibility
|
234
|
-
3. **Enhanced features**: Migrate to new methods to access suggestions, context, and categorization
|
235
|
-
|
236
|
-
## Testing Error Reporting
|
237
|
-
|
238
|
-
### Error Location Testing
|
239
|
-
```ruby
|
240
|
-
RSpec.describe "Error Location Verification" do
|
241
|
-
it "reports errors at correct locations" do
|
242
|
-
schema_code = <<~RUBY
|
243
|
-
Kumi.schema do
|
244
|
-
input { integer :age }
|
245
|
-
trait :adult, (input.age >= 18)
|
246
|
-
trait :adult, (input.age >= 21) # Line 4: Duplicate
|
247
|
-
end
|
248
|
-
RUBY
|
249
|
-
|
250
|
-
begin
|
251
|
-
eval(schema_code, binding, "test.rb", 1)
|
252
|
-
rescue Kumi::Errors::SemanticError => e
|
253
|
-
expect(e.message).to include("test.rb:4")
|
254
|
-
expect(e.message).to include("duplicated definition")
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
```
|
259
|
-
|
260
|
-
### Error Quality Testing
|
261
|
-
```ruby
|
262
|
-
it "provides comprehensive error information" do
|
263
|
-
error = expect_semantic_error do
|
264
|
-
schema do
|
265
|
-
input { string :name }
|
266
|
-
value :result, fn(:add, input.name, 5)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
expect(error.message).to include("add") # Function name
|
271
|
-
expect(error.message).to include("string") # Actual type
|
272
|
-
expect(error.message).to include("expects") # Clear expectation
|
273
|
-
expect(error.message).to match(/:\d+:/) # Line number
|
274
|
-
end
|
275
|
-
```
|
276
|
-
|
277
|
-
### Edge Case Testing
|
278
|
-
Use `spec/integration/potential_breakage_spec.rb` patterns:
|
279
|
-
|
280
|
-
```ruby
|
281
|
-
it "detects edge case that should break" do
|
282
|
-
expect do
|
283
|
-
schema do
|
284
|
-
input { integer :x }
|
285
|
-
# Edge case that might not be caught
|
286
|
-
value :result, some_edge_case_construct
|
287
|
-
end
|
288
|
-
end.to raise_error(Kumi::Errors::SemanticError)
|
289
|
-
end
|
290
|
-
```
|
291
|
-
|
292
|
-
## Performance Considerations
|
293
|
-
|
294
|
-
### Error Object Creation
|
295
|
-
- ErrorEntry objects are lightweight structs
|
296
|
-
- Location formatting is lazy (only when `to_s` is called)
|
297
|
-
- Context information is stored efficiently in hashes
|
298
|
-
|
299
|
-
### Batch Error Processing
|
300
|
-
For analyzer passes processing many nodes:
|
301
|
-
|
302
|
-
```ruby
|
303
|
-
def run(errors)
|
304
|
-
# Batch process nodes to minimize error object creation
|
305
|
-
invalid_nodes = collect_invalid_nodes
|
306
|
-
|
307
|
-
invalid_nodes.each do |node|
|
308
|
-
report_error(errors, "Invalid: #{node.name}", location: node.loc)
|
309
|
-
end
|
310
|
-
end
|
311
|
-
```
|
312
|
-
|
313
|
-
## Common Patterns and Anti-patterns
|
314
|
-
|
315
|
-
### ✅ Good Patterns
|
316
|
-
```ruby
|
317
|
-
# Clear, specific error messages
|
318
|
-
report_error(errors, "argument 1 of `fn(:add)` expects float, got string", location: arg.loc)
|
319
|
-
|
320
|
-
# Proper location resolution
|
321
|
-
location = node.loc || fallback_location_for_context
|
322
|
-
|
323
|
-
# Type-appropriate error categorization
|
324
|
-
report_type_error(errors, "type mismatch", location: node.loc)
|
325
|
-
```
|
326
|
-
|
327
|
-
### ❌ Anti-patterns
|
328
|
-
```ruby
|
329
|
-
# Vague error messages
|
330
|
-
report_error(errors, "error", location: node.loc)
|
331
|
-
|
332
|
-
# Missing location information
|
333
|
-
report_error(errors, "something failed", location: nil)
|
334
|
-
|
335
|
-
# Wrong error categorization
|
336
|
-
report_syntax_error(errors, "type mismatch", location: node.loc) # Should be type error
|
337
|
-
```
|
338
|
-
|
339
|
-
## Error Message Guidelines
|
340
|
-
|
341
|
-
### Message Format
|
342
|
-
- Start with lowercase (automatic capitalization in display)
|
343
|
-
- Be specific about what failed and why
|
344
|
-
- Include relevant context (function names, types, values)
|
345
|
-
- Avoid technical jargon in user-facing messages
|
346
|
-
|
347
|
-
### Examples
|
348
|
-
```ruby
|
349
|
-
# Good messages
|
350
|
-
"argument 1 of `fn(:add)` expects float, got input field `name` of declared type string"
|
351
|
-
"duplicated definition `adult`"
|
352
|
-
"undefined reference to `missing_field`"
|
353
|
-
"cycle detected: a → b → a"
|
354
|
-
|
355
|
-
# Messages to improve
|
356
|
-
"validation failed"
|
357
|
-
"error in processing"
|
358
|
-
"something went wrong"
|
359
|
-
```
|
360
|
-
|
361
|
-
This error reporting system ensures that users get clear, actionable feedback about issues in their Kumi schemas, with precise location information to help them fix problems quickly.
|
data/docs/features/README.md
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# Features
|
2
|
-
|
3
|
-
## Core Features
|
4
|
-
|
5
|
-
### [Unsatisfiability Detection](analysis-unsat-detection.md)
|
6
|
-
Analyzes rule combinations to detect logical impossibilities across dependency chains.
|
7
|
-
|
8
|
-
- Detects impossible combinations at compile-time
|
9
|
-
- Validates domain constraints
|
10
|
-
- Reports multiple errors
|
11
|
-
|
12
|
-
### [Type Inference](analysis-type-inference.md)
|
13
|
-
Determines types from expressions and propagates them through dependencies.
|
14
|
-
|
15
|
-
- Infers types from literals and function calls
|
16
|
-
- Propagates types through dependency graph
|
17
|
-
- Validates function arguments
|
18
|
-
|
19
|
-
### [Input Declarations](input-declaration-system.md)
|
20
|
-
Defines expected inputs with types and constraints.
|
21
|
-
|
22
|
-
- Type-specific declaration methods
|
23
|
-
- Domain validation at runtime
|
24
|
-
- Separates input metadata from business logic
|
25
|
-
|
26
|
-
### [Hierarchical Broadcasting](hierarchical-broadcasting.md)
|
27
|
-
Automatic vectorization over hierarchical data structures with dual access modes.
|
28
|
-
|
29
|
-
- Object access for structured business data
|
30
|
-
- Element access for multi-dimensional arrays
|
31
|
-
- Mixed access modes in same schema
|
32
|
-
|
33
|
-
### [Performance](performance.md)
|
34
|
-
Processes large schemas.
|
35
|
-
|
36
|
-
- Result caching
|
37
|
-
- Selective evaluation
|
38
|
-
|
39
|
-
### [S-Expression Printer](s-expression-printer.md)
|
40
|
-
Debug and inspect AST structures with readable S-expression notation output.
|
41
|
-
|
42
|
-
- Visitor pattern implementation for all node types
|
43
|
-
- Proper indentation and hierarchical structure
|
44
|
-
- Useful for debugging schema parsing and AST analysis
|
45
|
-
|
46
|
-
### [JavaScript Transpiler](javascript-transpiler.md)
|
47
|
-
Transpiles compiled schemas to standalone JavaScript code.
|
48
|
-
|
49
|
-
- Generates bundles with only required functions
|
50
|
-
- Supports CommonJS and browser environments
|
51
|
-
- Maintains identical behavior across platforms
|
52
|
-
|
53
|
-
## Integration
|
54
|
-
|
55
|
-
- Type inference uses input declarations
|
56
|
-
- Unsatisfiability detection uses type information for validation
|
57
|
-
- Cascade mutual exclusion integrates with dependency analysis and cycle detection
|
58
|
-
- Performance optimizations apply to all analysis passes
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# Type Inference
|
2
|
-
|
3
|
-
Infers types from expressions and propagates them through dependency chains for compile-time type checking.
|
4
|
-
|
5
|
-
## Type Inference Rules
|
6
|
-
|
7
|
-
**Literals:**
|
8
|
-
- `42` → `:integer`
|
9
|
-
- `3.14` → `:float`
|
10
|
-
- `"hello"` → `:string`
|
11
|
-
- `true` → `:boolean`
|
12
|
-
- `[1, 2, 3]` → `{ array: :integer }`
|
13
|
-
|
14
|
-
**Operations:**
|
15
|
-
- Integer arithmetic → `:integer`
|
16
|
-
- Mixed numeric operations → `:numeric`
|
17
|
-
- Comparisons → `:boolean`
|
18
|
-
|
19
|
-
**Functions:**
|
20
|
-
- Return types defined in function registry
|
21
|
-
- Arguments validated against parameter types
|
22
|
-
|
23
|
-
## Error Detection
|
24
|
-
|
25
|
-
**Type mismatches:**
|
26
|
-
```
|
27
|
-
TypeError: argument 2 of addition expects numeric, got input field `age` of declared type integer,
|
28
|
-
but argument 1 is input field `customer_name` of declared type string
|
29
|
-
```
|
30
|
-
|
31
|
-
**Function validation:**
|
32
|
-
- Arity validation (correct number of arguments)
|
33
|
-
- Type compatibility validation
|
34
|
-
- Unknown function detection
|
35
|
-
|
36
|
-
## Inference Process
|
37
|
-
|
38
|
-
- Processes declarations in topological order to resolve dependencies
|
39
|
-
- Literal types determined from values
|
40
|
-
- Function return types from function registry
|
41
|
-
- Array types unified from element types
|
42
|
-
- Cascade types inferred from result expressions
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# Unsatisfiability Detection
|
2
|
-
|
3
|
-
Analyzes logical relationships across dependency chains to detect impossible rule combinations at compile time.
|
4
|
-
|
5
|
-
## Example: Credit Card Approval System
|
6
|
-
|
7
|
-
This schema contains impossible rule combinations:
|
8
|
-
|
9
|
-
```ruby
|
10
|
-
module CreditCardApproval
|
11
|
-
extend Kumi::Schema
|
12
|
-
|
13
|
-
schema do
|
14
|
-
input do
|
15
|
-
integer :annual_income
|
16
|
-
integer :monthly_debt
|
17
|
-
integer :credit_score, domain: 300..850
|
18
|
-
string :employment_type, domain: %w[full_time part_time contract self_employed]
|
19
|
-
end
|
20
|
-
|
21
|
-
# Financial calculations
|
22
|
-
value :monthly_income, input.annual_income / 12
|
23
|
-
value :available_monthly, monthly_income - input.monthly_debt
|
24
|
-
value :credit_limit_base, input.annual_income * 0.3
|
25
|
-
value :score_multiplier, (input.credit_score - 600) * 0.01
|
26
|
-
value :final_credit_limit, credit_limit_base * score_multiplier
|
27
|
-
value :employment_stability_factor,
|
28
|
-
input.employment_type == "full_time" ? 1.0 :
|
29
|
-
input.employment_type == "part_time" ? 0.7 :
|
30
|
-
input.employment_type == "contract" ? 0.5 : 0.3
|
31
|
-
|
32
|
-
# Business rules
|
33
|
-
trait :stable_income, (input.annual_income >= 60_000)
|
34
|
-
trait :good_credit, (input.credit_score >= 700)
|
35
|
-
trait :high_available_income, (available_monthly >= 4_000)
|
36
|
-
trait :premium_limit_qualified, (final_credit_limit >= 50_000)
|
37
|
-
trait :stable_employment, (input.employment_type == "full_time")
|
38
|
-
trait :high_stability_factor, (employment_stability_factor >= 0.8)
|
39
|
-
trait :excellent_credit, (input.credit_score == 900)
|
40
|
-
|
41
|
-
# Approval tiers - which combinations are impossible?
|
42
|
-
value :approval_tier do
|
43
|
-
on stable_income,good_credit,premium_limit_qualified, "platinum_tier"
|
44
|
-
on stable_employment,high_stability_factor, "executive_tier"
|
45
|
-
on excellent_credit,good_credit, "perfect_score_tier"
|
46
|
-
on stable_income,good_credit, "standard_tier"
|
47
|
-
base "manual_review"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
```
|
52
|
-
|
53
|
-
**Detected errors:**
|
54
|
-
|
55
|
-
```
|
56
|
-
SemanticError:
|
57
|
-
conjunction `excellent_credit AND good_credit` is impossible
|
58
|
-
conjunction `excellent_credit` is impossible
|
59
|
-
```
|
60
|
-
|
61
|
-
**Root cause:**
|
62
|
-
- `excellent_credit` requires `credit_score == 900`
|
63
|
-
- Input domain constrains `credit_score` to `300..850`
|
64
|
-
- Any cascade condition using `excellent_credit` becomes impossible
|
65
|
-
|
66
|
-
## Detection Mechanisms
|
67
|
-
|
68
|
-
- Domain constraint violations: `field == value` where value is outside declared domain
|
69
|
-
- Cascade condition analysis: each `on` condition checked independently
|
70
|
-
- OR expression handling: impossible only if both sides are impossible
|
71
|
-
- Cross-variable mathematical constraint analysis
|