kumi 0.0.31 → 0.0.33

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.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/README.md +31 -99
  4. data/data/kernels/ruby/core/arithmetic.yaml +2 -2
  5. data/docs/COMPOSED_SCHEMAS.md +137 -0
  6. data/docs/SCHEMA_IMPORTS.md +275 -0
  7. data/docs/SYNTAX.md +48 -0
  8. data/golden/array_element/expected/schema_ruby.rb +2 -27
  9. data/golden/array_index/expected/nast.txt +6 -6
  10. data/golden/array_index/expected/schema_ruby.rb +4 -31
  11. data/golden/array_operations/expected/lir_06_const_prop.txt +4 -8
  12. data/golden/array_operations/expected/schema_javascript.mjs +4 -8
  13. data/golden/array_operations/expected/schema_ruby.rb +10 -43
  14. data/golden/cascade_logic/expected/lir_06_const_prop.txt +7 -14
  15. data/golden/cascade_logic/expected/schema_javascript.mjs +7 -14
  16. data/golden/cascade_logic/expected/schema_ruby.rb +11 -45
  17. data/golden/chained_fusion/expected/lir_06_const_prop.txt +8 -18
  18. data/golden/chained_fusion/expected/schema_javascript.mjs +8 -18
  19. data/golden/chained_fusion/expected/schema_ruby.rb +14 -53
  20. data/golden/decimal_explicit/expected/schema_ruby.rb +4 -31
  21. data/golden/element_arrays/expected/lir_06_const_prop.txt +5 -11
  22. data/golden/element_arrays/expected/schema_javascript.mjs +5 -11
  23. data/golden/element_arrays/expected/schema_ruby.rb +13 -50
  24. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +4 -31
  25. data/golden/example_xpto/expected/ast.txt +23 -0
  26. data/golden/example_xpto/expected/input_plan.txt +1 -0
  27. data/golden/example_xpto/expected/lir_00_unoptimized.txt +16 -0
  28. data/golden/example_xpto/expected/lir_01_hoist_scalar_references.txt +16 -0
  29. data/golden/example_xpto/expected/lir_02_inlined.txt +16 -0
  30. data/golden/example_xpto/expected/lir_03_cse.txt +16 -0
  31. data/golden/example_xpto/expected/lir_04_1_loop_fusion.txt +16 -0
  32. data/golden/example_xpto/expected/lir_04_loop_invcm.txt +16 -0
  33. data/golden/example_xpto/expected/lir_06_const_prop.txt +13 -0
  34. data/golden/example_xpto/expected/nast.txt +17 -0
  35. data/golden/example_xpto/expected/schema_javascript.mjs +13 -0
  36. data/golden/example_xpto/expected/schema_ruby.rb +13 -0
  37. data/golden/example_xpto/expected/snast.txt +17 -0
  38. data/golden/example_xpto/expected.json +4 -0
  39. data/golden/example_xpto/input.json +3 -0
  40. data/golden/example_xpto/schema.kumi +8 -0
  41. data/golden/function_overload/expected/schema_ruby.rb +2 -27
  42. data/golden/game_of_life/expected/lir_06_const_prop.txt +236 -287
  43. data/golden/game_of_life/expected/schema_javascript.mjs +32 -39
  44. data/golden/game_of_life/expected/schema_ruby.rb +34 -66
  45. data/golden/hash_keys/expected/lir_06_const_prop.txt +4 -10
  46. data/golden/hash_keys/expected/schema_javascript.mjs +6 -12
  47. data/golden/hash_keys/expected/schema_ruby.rb +8 -39
  48. data/golden/hash_value/expected/lir_06_const_prop.txt +3 -6
  49. data/golden/hash_value/expected/schema_javascript.mjs +3 -6
  50. data/golden/hash_value/expected/schema_ruby.rb +7 -37
  51. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +9 -18
  52. data/golden/hierarchical_complex/expected/schema_javascript.mjs +9 -18
  53. data/golden/hierarchical_complex/expected/schema_ruby.rb +14 -51
  54. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +2 -6
  55. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +2 -6
  56. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +7 -39
  57. data/golden/input_reference/expected/schema_ruby.rb +6 -35
  58. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +6 -14
  59. data/golden/interleaved_fusion/expected/schema_javascript.mjs +6 -14
  60. data/golden/interleaved_fusion/expected/schema_ruby.rb +11 -47
  61. data/golden/let_inline/expected/lir_06_const_prop.txt +1 -2
  62. data/golden/let_inline/expected/schema_javascript.mjs +1 -2
  63. data/golden/let_inline/expected/schema_ruby.rb +3 -29
  64. data/golden/loop_fusion/expected/lir_06_const_prop.txt +4 -10
  65. data/golden/loop_fusion/expected/schema_javascript.mjs +4 -10
  66. data/golden/loop_fusion/expected/schema_ruby.rb +8 -41
  67. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +3 -6
  68. data/golden/min_reduce_scope/expected/schema_javascript.mjs +3 -6
  69. data/golden/min_reduce_scope/expected/schema_ruby.rb +8 -39
  70. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +1 -2
  71. data/golden/mixed_dimensions/expected/schema_javascript.mjs +1 -2
  72. data/golden/mixed_dimensions/expected/schema_ruby.rb +5 -33
  73. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +9 -18
  74. data/golden/multirank_hoisting/expected/schema_javascript.mjs +9 -18
  75. data/golden/multirank_hoisting/expected/schema_ruby.rb +16 -55
  76. data/golden/nested_hash/expected/lir_06_const_prop.txt +1 -2
  77. data/golden/nested_hash/expected/schema_javascript.mjs +1 -2
  78. data/golden/nested_hash/expected/schema_ruby.rb +3 -29
  79. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -33
  80. data/golden/roll/expected/lir_06_const_prop.txt +8 -15
  81. data/golden/roll/expected/schema_javascript.mjs +8 -15
  82. data/golden/roll/expected/schema_ruby.rb +13 -48
  83. data/golden/schema_imports_broadcasting_with_imports/expected/ast.txt +26 -0
  84. data/golden/schema_imports_broadcasting_with_imports/expected/input_plan.txt +5 -0
  85. data/golden/schema_imports_broadcasting_with_imports/expected/lir_00_unoptimized.txt +20 -0
  86. data/golden/schema_imports_broadcasting_with_imports/expected/lir_01_hoist_scalar_references.txt +20 -0
  87. data/golden/schema_imports_broadcasting_with_imports/expected/lir_02_inlined.txt +22 -0
  88. data/golden/schema_imports_broadcasting_with_imports/expected/lir_03_cse.txt +21 -0
  89. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_1_loop_fusion.txt +21 -0
  90. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_loop_invcm.txt +21 -0
  91. data/golden/schema_imports_broadcasting_with_imports/expected/lir_06_const_prop.txt +21 -0
  92. data/golden/schema_imports_broadcasting_with_imports/expected/nast.txt +12 -0
  93. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +22 -0
  94. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +24 -0
  95. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +12 -0
  96. data/golden/schema_imports_broadcasting_with_imports/expected.json +4 -0
  97. data/golden/schema_imports_broadcasting_with_imports/input.json +7 -0
  98. data/golden/schema_imports_broadcasting_with_imports/schema.kumi +14 -0
  99. data/golden/schema_imports_complex_order_calc/expected/ast.txt +82 -0
  100. data/golden/schema_imports_complex_order_calc/expected/input_plan.txt +16 -0
  101. data/golden/schema_imports_complex_order_calc/expected/lir_00_unoptimized.txt +94 -0
  102. data/golden/schema_imports_complex_order_calc/expected/lir_01_hoist_scalar_references.txt +94 -0
  103. data/golden/schema_imports_complex_order_calc/expected/lir_02_inlined.txt +187 -0
  104. data/golden/schema_imports_complex_order_calc/expected/lir_03_cse.txt +131 -0
  105. data/golden/schema_imports_complex_order_calc/expected/lir_04_1_loop_fusion.txt +131 -0
  106. data/golden/schema_imports_complex_order_calc/expected/lir_04_loop_invcm.txt +131 -0
  107. data/golden/schema_imports_complex_order_calc/expected/lir_06_const_prop.txt +131 -0
  108. data/golden/schema_imports_complex_order_calc/expected/nast.txt +56 -0
  109. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +147 -0
  110. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +149 -0
  111. data/golden/schema_imports_complex_order_calc/expected/snast.txt +56 -0
  112. data/golden/schema_imports_complex_order_calc/expected.json +12 -0
  113. data/golden/schema_imports_complex_order_calc/input.json +20 -0
  114. data/golden/schema_imports_complex_order_calc/schema.kumi +33 -0
  115. data/golden/schema_imports_composed_order/expected/ast.txt +33 -0
  116. data/golden/schema_imports_composed_order/expected/input_plan.txt +3 -0
  117. data/golden/schema_imports_composed_order/expected/lir_00_unoptimized.txt +25 -0
  118. data/golden/schema_imports_composed_order/expected/lir_01_hoist_scalar_references.txt +25 -0
  119. data/golden/schema_imports_composed_order/expected/lir_02_inlined.txt +33 -0
  120. data/golden/schema_imports_composed_order/expected/lir_03_cse.txt +33 -0
  121. data/golden/schema_imports_composed_order/expected/lir_04_1_loop_fusion.txt +33 -0
  122. data/golden/schema_imports_composed_order/expected/lir_04_loop_invcm.txt +33 -0
  123. data/golden/schema_imports_composed_order/expected/lir_06_const_prop.txt +33 -0
  124. data/golden/schema_imports_composed_order/expected/nast.txt +25 -0
  125. data/golden/schema_imports_composed_order/expected/schema_javascript.mjs +35 -0
  126. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +33 -0
  127. data/golden/schema_imports_composed_order/expected/snast.txt +25 -0
  128. data/golden/schema_imports_composed_order/expected.json +6 -0
  129. data/golden/schema_imports_composed_order/input.json +5 -0
  130. data/golden/schema_imports_composed_order/schema.kumi +15 -0
  131. data/golden/schema_imports_discount_with_tax/expected/ast.txt +37 -0
  132. data/golden/schema_imports_discount_with_tax/expected/input_plan.txt +2 -0
  133. data/golden/schema_imports_discount_with_tax/expected/lir_00_unoptimized.txt +30 -0
  134. data/golden/schema_imports_discount_with_tax/expected/lir_01_hoist_scalar_references.txt +30 -0
  135. data/golden/schema_imports_discount_with_tax/expected/lir_02_inlined.txt +37 -0
  136. data/golden/schema_imports_discount_with_tax/expected/lir_03_cse.txt +34 -0
  137. data/golden/schema_imports_discount_with_tax/expected/lir_04_1_loop_fusion.txt +34 -0
  138. data/golden/schema_imports_discount_with_tax/expected/lir_04_loop_invcm.txt +34 -0
  139. data/golden/schema_imports_discount_with_tax/expected/lir_06_const_prop.txt +34 -0
  140. data/golden/schema_imports_discount_with_tax/expected/nast.txt +30 -0
  141. data/golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs +37 -0
  142. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +34 -0
  143. data/golden/schema_imports_discount_with_tax/expected/snast.txt +30 -0
  144. data/golden/schema_imports_discount_with_tax/expected.json +7 -0
  145. data/golden/schema_imports_discount_with_tax/input.json +4 -0
  146. data/golden/schema_imports_discount_with_tax/schema.kumi +15 -0
  147. data/golden/schema_imports_line_items/expected/ast.txt +35 -0
  148. data/golden/schema_imports_line_items/expected/input_plan.txt +8 -0
  149. data/golden/schema_imports_line_items/expected/lir_00_unoptimized.txt +19 -0
  150. data/golden/schema_imports_line_items/expected/lir_01_hoist_scalar_references.txt +19 -0
  151. data/golden/schema_imports_line_items/expected/lir_02_inlined.txt +24 -0
  152. data/golden/schema_imports_line_items/expected/lir_03_cse.txt +22 -0
  153. data/golden/schema_imports_line_items/expected/lir_04_1_loop_fusion.txt +22 -0
  154. data/golden/schema_imports_line_items/expected/lir_04_loop_invcm.txt +22 -0
  155. data/golden/schema_imports_line_items/expected/lir_06_const_prop.txt +22 -0
  156. data/golden/schema_imports_line_items/expected/nast.txt +19 -0
  157. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +23 -0
  158. data/golden/schema_imports_line_items/expected/schema_ruby.rb +22 -0
  159. data/golden/schema_imports_line_items/expected/snast.txt +19 -0
  160. data/golden/schema_imports_line_items/expected.json +5 -0
  161. data/golden/schema_imports_line_items/input.json +13 -0
  162. data/golden/schema_imports_line_items/schema.kumi +17 -0
  163. data/golden/schema_imports_multiple/expected/ast.txt +35 -0
  164. data/golden/schema_imports_multiple/expected/input_plan.txt +2 -0
  165. data/golden/schema_imports_multiple/expected/lir_00_unoptimized.txt +29 -0
  166. data/golden/schema_imports_multiple/expected/lir_01_hoist_scalar_references.txt +29 -0
  167. data/golden/schema_imports_multiple/expected/lir_02_inlined.txt +41 -0
  168. data/golden/schema_imports_multiple/expected/lir_03_cse.txt +37 -0
  169. data/golden/schema_imports_multiple/expected/lir_04_1_loop_fusion.txt +37 -0
  170. data/golden/schema_imports_multiple/expected/lir_04_loop_invcm.txt +37 -0
  171. data/golden/schema_imports_multiple/expected/lir_06_const_prop.txt +37 -0
  172. data/golden/schema_imports_multiple/expected/nast.txt +28 -0
  173. data/golden/schema_imports_multiple/expected/schema_javascript.mjs +40 -0
  174. data/golden/schema_imports_multiple/expected/schema_ruby.rb +37 -0
  175. data/golden/schema_imports_multiple/expected/snast.txt +28 -0
  176. data/golden/schema_imports_multiple/expected.json +7 -0
  177. data/golden/schema_imports_multiple/input.json +4 -0
  178. data/golden/schema_imports_multiple/schema.kumi +15 -0
  179. data/golden/schema_imports_nested_expressions/expected/ast.txt +31 -0
  180. data/golden/schema_imports_nested_expressions/expected/input_plan.txt +3 -0
  181. data/golden/schema_imports_nested_expressions/expected/lir_00_unoptimized.txt +22 -0
  182. data/golden/schema_imports_nested_expressions/expected/lir_01_hoist_scalar_references.txt +22 -0
  183. data/golden/schema_imports_nested_expressions/expected/lir_02_inlined.txt +32 -0
  184. data/golden/schema_imports_nested_expressions/expected/lir_03_cse.txt +32 -0
  185. data/golden/schema_imports_nested_expressions/expected/lir_04_1_loop_fusion.txt +32 -0
  186. data/golden/schema_imports_nested_expressions/expected/lir_04_loop_invcm.txt +32 -0
  187. data/golden/schema_imports_nested_expressions/expected/lir_06_const_prop.txt +28 -0
  188. data/golden/schema_imports_nested_expressions/expected/nast.txt +23 -0
  189. data/golden/schema_imports_nested_expressions/expected/schema_javascript.mjs +29 -0
  190. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +28 -0
  191. data/golden/schema_imports_nested_expressions/expected/snast.txt +23 -0
  192. data/golden/schema_imports_nested_expressions/expected.json +5 -0
  193. data/golden/schema_imports_nested_expressions/input.json +5 -0
  194. data/golden/schema_imports_nested_expressions/schema.kumi +13 -0
  195. data/golden/schema_imports_nested_with_reductions/expected/ast.txt +47 -0
  196. data/golden/schema_imports_nested_with_reductions/expected/input_plan.txt +12 -0
  197. data/golden/schema_imports_nested_with_reductions/expected/lir_00_unoptimized.txt +31 -0
  198. data/golden/schema_imports_nested_with_reductions/expected/lir_01_hoist_scalar_references.txt +31 -0
  199. data/golden/schema_imports_nested_with_reductions/expected/lir_02_inlined.txt +58 -0
  200. data/golden/schema_imports_nested_with_reductions/expected/lir_03_cse.txt +49 -0
  201. data/golden/schema_imports_nested_with_reductions/expected/lir_04_1_loop_fusion.txt +51 -0
  202. data/golden/schema_imports_nested_with_reductions/expected/lir_04_loop_invcm.txt +49 -0
  203. data/golden/schema_imports_nested_with_reductions/expected/lir_06_const_prop.txt +49 -0
  204. data/golden/schema_imports_nested_with_reductions/expected/nast.txt +23 -0
  205. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +49 -0
  206. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +52 -0
  207. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +23 -0
  208. data/golden/schema_imports_nested_with_reductions/expected.json +6 -0
  209. data/golden/schema_imports_nested_with_reductions/input.json +16 -0
  210. data/golden/schema_imports_nested_with_reductions/schema.kumi +23 -0
  211. data/golden/schema_imports_with_imports/expected/ast.txt +19 -0
  212. data/golden/schema_imports_with_imports/expected/input_plan.txt +1 -0
  213. data/golden/schema_imports_with_imports/expected/lir_00_unoptimized.txt +13 -0
  214. data/golden/schema_imports_with_imports/expected/lir_01_hoist_scalar_references.txt +13 -0
  215. data/golden/schema_imports_with_imports/expected/lir_02_inlined.txt +14 -0
  216. data/golden/schema_imports_with_imports/expected/lir_03_cse.txt +13 -0
  217. data/golden/schema_imports_with_imports/expected/lir_04_1_loop_fusion.txt +13 -0
  218. data/golden/schema_imports_with_imports/expected/lir_04_loop_invcm.txt +13 -0
  219. data/golden/schema_imports_with_imports/expected/lir_06_const_prop.txt +13 -0
  220. data/golden/schema_imports_with_imports/expected/nast.txt +13 -0
  221. data/golden/schema_imports_with_imports/expected/schema_javascript.mjs +13 -0
  222. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +13 -0
  223. data/golden/schema_imports_with_imports/expected/snast.txt +13 -0
  224. data/golden/schema_imports_with_imports/expected.json +4 -0
  225. data/golden/schema_imports_with_imports/input.json +3 -0
  226. data/golden/schema_imports_with_imports/schema.kumi +10 -0
  227. data/golden/shift/expected/lir_06_const_prop.txt +18 -30
  228. data/golden/shift/expected/schema_javascript.mjs +18 -30
  229. data/golden/shift/expected/schema_ruby.rb +25 -67
  230. data/golden/shift_2d/expected/lir_06_const_prop.txt +36 -60
  231. data/golden/shift_2d/expected/schema_javascript.mjs +36 -60
  232. data/golden/shift_2d/expected/schema_ruby.rb +49 -109
  233. data/golden/simple_math/expected/lir_06_const_prop.txt +3 -6
  234. data/golden/simple_math/expected/schema_javascript.mjs +3 -6
  235. data/golden/simple_math/expected/schema_ruby.rb +8 -39
  236. data/golden/streaming_basics/expected/lir_06_const_prop.txt +6 -12
  237. data/golden/streaming_basics/expected/schema_javascript.mjs +6 -12
  238. data/golden/streaming_basics/expected/schema_ruby.rb +14 -51
  239. data/golden/tuples/expected/lir_06_const_prop.txt +5 -22
  240. data/golden/tuples/expected/schema_javascript.mjs +5 -22
  241. data/golden/tuples/expected/schema_ruby.rb +11 -57
  242. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +4 -8
  243. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +4 -8
  244. data/golden/tuples_and_arrays/expected/schema_ruby.rb +9 -41
  245. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +94 -171
  246. data/golden/us_tax_2024/expected/schema_javascript.mjs +13 -21
  247. data/golden/us_tax_2024/expected/schema_ruby.rb +15 -48
  248. data/golden/with_constants/expected/lir_06_const_prop.txt +3 -8
  249. data/golden/with_constants/expected/schema_javascript.mjs +3 -8
  250. data/golden/with_constants/expected/schema_ruby.rb +5 -35
  251. data/lib/kumi/analyzer.rb +8 -7
  252. data/lib/kumi/configuration.rb +7 -6
  253. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +1 -1
  254. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +1 -1
  255. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +20 -0
  256. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +16 -7
  257. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +3 -35
  258. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +6 -0
  259. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +90 -0
  260. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +77 -36
  261. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +26 -11
  262. data/lib/kumi/core/analyzer/passes/name_indexer.rb +20 -2
  263. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +44 -0
  264. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +30 -0
  265. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -1
  266. data/lib/kumi/core/analyzer/passes/snast_pass.rb +15 -0
  267. data/lib/kumi/core/lir/build.rb +27 -0
  268. data/lib/kumi/core/lir/peephole.rb +164 -0
  269. data/lib/kumi/core/nast.rb +16 -0
  270. data/lib/kumi/core/ruby_parser/build_context.rb +3 -1
  271. data/lib/kumi/core/ruby_parser/parser.rb +1 -1
  272. data/lib/kumi/core/ruby_parser/schema_builder.rb +33 -3
  273. data/lib/kumi/dev/golden/result.rb +9 -3
  274. data/lib/kumi/dev/golden/runtime_test.rb +16 -1
  275. data/lib/kumi/dev/golden.rb +18 -20
  276. data/lib/kumi/dev/golden_schema_modules.rb +8 -0
  277. data/lib/kumi/dev/golden_schema_wrapper.rb +116 -0
  278. data/lib/kumi/dev/support/kumi_runner.mjs +18 -0
  279. data/lib/kumi/schema.rb +44 -2
  280. data/lib/kumi/support/lir_printer.rb +21 -5
  281. data/lib/kumi/support/nast_printer.rb +11 -0
  282. data/lib/kumi/support/s_expression_printer.rb +9 -0
  283. data/lib/kumi/support/snast_printer.rb +6 -0
  284. data/lib/kumi/syntax/import_call.rb +11 -0
  285. data/lib/kumi/syntax/import_declaration.rb +11 -0
  286. data/lib/kumi/syntax/root.rb +2 -2
  287. data/lib/kumi/test_shared_schemas/compound.rb +21 -0
  288. data/lib/kumi/test_shared_schemas/discount.rb +19 -0
  289. data/lib/kumi/test_shared_schemas/price.rb +19 -0
  290. data/lib/kumi/test_shared_schemas/subtotal.rb +22 -0
  291. data/lib/kumi/test_shared_schemas/tax.rb +18 -0
  292. data/lib/kumi/version.rb +1 -1
  293. data/lib/kumi.rb +19 -4
  294. metadata +176 -3
@@ -1,35 +1,6 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887bf0cbc2399dbe
3
- def self.from(input_data = nil)
4
- instance = Object.new
5
- instance.extend(self)
6
- instance.instance_variable_set(:@input, input_data)
7
- instance
8
- end
9
-
10
- def self.__kumi_executable__
11
- instance = Object.new
12
- instance.extend(self)
13
- instance
14
- end
15
-
16
- def update(input_data)
17
- @input = @input.merge(input_data)
18
- self
19
- end
20
-
21
- def [](name)
22
- case name
23
- when :total_payroll then _total_payroll
24
- when :manager_count then _manager_count
25
- when :senior_employee_count then _senior_employee_count
26
- when :max_salary then _max_salary
27
- when :department_summary then _department_summary
28
- else raise KeyError, "Unknown declaration"
29
- end
30
- end
31
-
32
- def _total_payroll(input = @input)
2
+ module Kumi::Compiled::KUMI_23126846b1af6f22cf75b03ec14ec5dcdce551d572089e8d9db65af63ba88bc5
3
+ def self._total_payroll(input)
33
4
  out = []
34
5
  t1 = input["departments"] || input[:departments]
35
6
  t1.each_with_index do |departments_el_2, departments_i_3|
@@ -45,19 +16,16 @@ module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887b
45
16
  out
46
17
  end
47
18
 
48
- def _manager_count(input = @input)
19
+ def self._manager_count(input)
49
20
  out = []
50
21
  t10 = input["departments"] || input[:departments]
51
- t18 = "manager"
52
- t20 = 1
53
- t21 = 0
54
22
  t10.each_with_index do |departments_el_11, departments_i_12|
55
23
  acc_13 = 0
56
24
  t14 = departments_el_11["employees"] || departments_el_11[:employees]
57
25
  t14.each_with_index do |employees_el_15, employees_i_16|
58
26
  t17 = employees_el_15["role"] || employees_el_15[:role]
59
- t19 = t17 == t18
60
- t22 = t19 ? t20 : t21
27
+ t19 = t17 == "manager"
28
+ t22 = t19 ? 1 : 0
61
29
  acc_13 += t22
62
30
  end
63
31
  t23 = acc_13
@@ -66,19 +34,16 @@ module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887b
66
34
  out
67
35
  end
68
36
 
69
- def _senior_employee_count(input = @input)
37
+ def self._senior_employee_count(input)
70
38
  out = []
71
39
  t24 = input["departments"] || input[:departments]
72
- t32 = "senior"
73
- t34 = 1
74
- t35 = 0
75
40
  t24.each_with_index do |departments_el_25, departments_i_26|
76
41
  acc_27 = 0
77
42
  t28 = departments_el_25["employees"] || departments_el_25[:employees]
78
43
  t28.each_with_index do |employees_el_29, employees_i_30|
79
44
  t31 = employees_el_29["role"] || employees_el_29[:role]
80
- t33 = t31 == t32
81
- t36 = t33 ? t34 : t35
45
+ t33 = t31 == "senior"
46
+ t36 = t33 ? 1 : 0
82
47
  acc_27 += t36
83
48
  end
84
49
  t37 = acc_27
@@ -87,7 +52,7 @@ module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887b
87
52
  out
88
53
  end
89
54
 
90
- def _max_salary(input = @input)
55
+ def self._max_salary(input)
91
56
  out = []
92
57
  t38 = input["departments"] || input[:departments]
93
58
  t38.each_with_index do |departments_el_39, departments_i_40|
@@ -104,13 +69,9 @@ module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887b
104
69
  out
105
70
  end
106
71
 
107
- def _department_summary(input = @input)
72
+ def self._department_summary(input)
108
73
  out = []
109
74
  t47 = input["departments"] || input[:departments]
110
- t71 = "manager"
111
- t73 = 1
112
- t74 = 0
113
- t84 = "senior"
114
75
  t47.each_with_index do |departments_el_48, departments_i_49|
115
76
  t50 = departments_el_48["name"] || departments_el_48[:name]
116
77
  acc58 = 0
@@ -122,13 +83,13 @@ module Kumi::Compiled::KUMI_849092b69396f8ec3e0f0deef2a98c2ace6d934d94bac9cc887b
122
83
  t62 = t60["salary"] || t60[:salary]
123
84
  acc58 += t62
124
85
  t70 = t60["role"] || t60[:role]
125
- t72 = t70 == t71
126
- t75 = t72 ? t73 : t74
86
+ t72 = t70 == "manager"
87
+ t75 = t72 ? 1 : 0
127
88
  acc66 += t75
128
89
  acc92 ||= t62
129
90
  acc92 = t62 if t62 > acc92
130
- t85 = t70 == t84
131
- t88 = t85 ? t73 : t74
91
+ t85 = t70 == "senior"
92
+ t88 = t85 ? 1 : 0
132
93
  acc79 += t88
133
94
  end
134
95
  t63 = acc58
@@ -1,40 +1,13 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_ae7ebcf0b663c16925a03a4c159b8dc50e8a35bbce4c7e8b4f67104d1072ee5f
3
- def self.from(input_data = nil)
4
- instance = Object.new
5
- instance.extend(self)
6
- instance.instance_variable_set(:@input, input_data)
7
- instance
8
- end
9
-
10
- def self.__kumi_executable__
11
- instance = Object.new
12
- instance.extend(self)
13
- instance
14
- end
15
-
16
- def update(input_data)
17
- @input = @input.merge(input_data)
18
- self
19
- end
20
-
21
- def [](name)
22
- case name
23
- when :subtotal then _subtotal
24
- when :tax_amount then _tax_amount
25
- when :total then _total
26
- else raise KeyError, "Unknown declaration"
27
- end
28
- end
29
-
30
- def _subtotal(input = @input)
2
+ module Kumi::Compiled::KUMI_06522413a1593058499b2c5334a96d6d790f61bd8cf66dca976bd03e097a65bd
3
+ def self._subtotal(input)
31
4
  t14 = input["unit_price"] || input[:unit_price]
32
5
  t15 = t14.is_a?(BigDecimal) ? t14 : BigDecimal(t14.to_s)
33
6
  t6 = input["quantity"] || input[:quantity]
34
7
  t15 * t6
35
8
  end
36
9
 
37
- def _tax_amount(input = @input)
10
+ def self._tax_amount(input)
38
11
  t19 = input["unit_price"] || input[:unit_price]
39
12
  t20 = t19.is_a?(BigDecimal) ? t19 : BigDecimal(t19.to_s)
40
13
  t17 = input["quantity"] || input[:quantity]
@@ -44,7 +17,7 @@ module Kumi::Compiled::KUMI_ae7ebcf0b663c16925a03a4c159b8dc50e8a35bbce4c7e8b4f67
44
17
  t18 * t22
45
18
  end
46
19
 
47
- def _total(input = @input)
20
+ def self._total(input)
48
21
  t26 = input["unit_price"] || input[:unit_price]
49
22
  t27 = t26.is_a?(BigDecimal) ? t26 : BigDecimal(t26.to_s)
50
23
  t24 = input["quantity"] || input[:quantity]
@@ -29,11 +29,10 @@
29
29
  )
30
30
  (Declaration cell_over_limit
31
31
  %t17 = load_input "cube" :: array
32
- %t24 = const 100 :: integer
33
32
  loop cube id=L7 in %t17 as el=%cube_el_18, idx=%cube_i_19
34
33
  loop layer id=L8 in %cube_el_18 as el=%layer_el_20, idx=%layer_i_21
35
34
  loop row id=L9 in %layer_el_20 as el=%row_el_22, idx=%row_i_23
36
- %t25 = call core.gt(%row_el_22, %t24) :: boolean
35
+ %t25 = call core.gt(%row_el_22, 100) :: boolean
37
36
  yield %t25
38
37
  end_loop
39
38
  end_loop
@@ -41,14 +40,12 @@
41
40
  )
42
41
  (Declaration cell_sum
43
42
  %t26 = load_input "cube" :: array
44
- %t56 = const 100 :: integer
45
- %t35 = const 0 :: integer
46
43
  loop cube id=L10 in %t26 as el=%cube_el_27, idx=%cube_i_28
47
44
  loop layer id=L11 in %cube_el_27 as el=%layer_el_29, idx=%layer_i_30
48
45
  %acc_31 = decl_acc :: integer
49
46
  loop row id=L12 in %layer_el_29 as el=%row_el_32, idx=%row_i_33
50
- %t57 = call core.gt(%row_el_32, %t56) :: boolean
51
- %t36 = select %t57, %row_el_32, %t35 :: integer
47
+ %t57 = call core.gt(%row_el_32, 100) :: boolean
48
+ %t36 = select %t57, %row_el_32, 0 :: integer
52
49
  %acc_31 = acc_add agg.sum(%acc_31, %t36) :: integer
53
50
  end_loop
54
51
  %t37 = acc_load %acc_31 :: integer
@@ -59,16 +56,13 @@
59
56
  (Declaration count_over_limit
60
57
  %acc_38 = decl_acc :: integer
61
58
  %t39 = load_input "cube" :: array
62
- %t59 = const 100 :: integer
63
- %t49 = const 1 :: integer
64
- %t50 = const 0 :: integer
65
59
  loop cube id=L13 in %t39 as el=%cube_el_40, idx=%cube_i_41
66
60
  %acc_42 = decl_acc :: integer
67
61
  loop layer id=L14 in %cube_el_40 as el=%layer_el_43, idx=%layer_i_44
68
62
  %acc_45 = decl_acc :: integer
69
63
  loop row id=L15 in %layer_el_43 as el=%row_el_46, idx=%row_i_47
70
- %t60 = call core.gt(%row_el_46, %t59) :: boolean
71
- %t51 = select %t60, %t49, %t50 :: integer
64
+ %t60 = call core.gt(%row_el_46, 100) :: boolean
65
+ %t51 = select %t60, 1, 0 :: integer
72
66
  %acc_45 = acc_add agg.sum(%acc_45, %t51) :: integer
73
67
  end_loop
74
68
  %t52 = acc_load %acc_45 :: integer
@@ -45,13 +45,12 @@ export function _cell(input) {
45
45
  export function _cell_over_limit(input) {
46
46
  let out = [];
47
47
  let t17 = input["cube"];
48
- const t24 = 100;
49
48
  t17.forEach((cube_el_18, cube_i_19) => {
50
49
  let out_1 = [];
51
50
  cube_el_18.forEach((layer_el_20, layer_i_21) => {
52
51
  let out_2 = [];
53
52
  layer_el_20.forEach((row_el_22, row_i_23) => {
54
- let t25 = row_el_22 > t24;
53
+ let t25 = row_el_22 > 100;
55
54
  out_2.push(t25);
56
55
  });
57
56
  out_1.push(out_2);
@@ -64,15 +63,13 @@ export function _cell_over_limit(input) {
64
63
  export function _cell_sum(input) {
65
64
  let out = [];
66
65
  let t26 = input["cube"];
67
- const t56 = 100;
68
- const t35 = 0;
69
66
  t26.forEach((cube_el_27, cube_i_28) => {
70
67
  let out_1 = [];
71
68
  cube_el_27.forEach((layer_el_29, layer_i_30) => {
72
69
  let acc_31 = 0;
73
70
  layer_el_29.forEach((row_el_32, row_i_33) => {
74
- let t57 = row_el_32 > t56;
75
- let t36 = t57 ? row_el_32 : t35;
71
+ let t57 = row_el_32 > 100;
72
+ let t36 = t57 ? row_el_32 : 0;
76
73
  acc_31 += t36;
77
74
  });
78
75
  out_1.push(acc_31);
@@ -85,16 +82,13 @@ export function _cell_sum(input) {
85
82
  export function _count_over_limit(input) {
86
83
  let acc_38 = 0;
87
84
  let t39 = input["cube"];
88
- const t59 = 100;
89
- const t49 = 1;
90
- const t50 = 0;
91
85
  t39.forEach((cube_el_40, cube_i_41) => {
92
86
  let acc_42 = 0;
93
87
  cube_el_40.forEach((layer_el_43, layer_i_44) => {
94
88
  let acc_45 = 0;
95
89
  layer_el_43.forEach((row_el_46, row_i_47) => {
96
- let t60 = row_el_46 > t59;
97
- let t51 = t60 ? t49 : t50;
90
+ let t60 = row_el_46 > 100;
91
+ let t51 = t60 ? 1 : 0;
98
92
  acc_45 += t51;
99
93
  });
100
94
  acc_42 += acc_45;
@@ -1,41 +1,10 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7ec19e8901c532
3
- def self.from(input_data = nil)
4
- instance = Object.new
5
- instance.extend(self)
6
- instance.instance_variable_set(:@input, input_data)
7
- instance
8
- end
9
-
10
- def self.__kumi_executable__
11
- instance = Object.new
12
- instance.extend(self)
13
- instance
14
- end
15
-
16
- def update(input_data)
17
- @input = @input.merge(input_data)
18
- self
19
- end
20
-
21
- def [](name)
22
- case name
23
- when :cube then _cube
24
- when :layer then _layer
25
- when :row then _row
26
- when :cell then _cell
27
- when :cell_over_limit then _cell_over_limit
28
- when :cell_sum then _cell_sum
29
- when :count_over_limit then _count_over_limit
30
- else raise KeyError, "Unknown declaration"
31
- end
32
- end
33
-
34
- def _cube(input = @input)
2
+ module Kumi::Compiled::KUMI_500e48e98df9614aa45c8a870517dc72e3e246ab7be3527f5d0ffab1863bc07e
3
+ def self._cube(input)
35
4
  input["cube"] || input[:cube]
36
5
  end
37
6
 
38
- def _layer(input = @input)
7
+ def self._layer(input)
39
8
  out = []
40
9
  t2 = input["cube"] || input[:cube]
41
10
  t2.each_with_index do |cube_el_3, cube_i_4|
@@ -44,7 +13,7 @@ module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7e
44
13
  out
45
14
  end
46
15
 
47
- def _row(input = @input)
16
+ def self._row(input)
48
17
  out = []
49
18
  t5 = input["cube"] || input[:cube]
50
19
  t5.each_with_index do |cube_el_6, cube_i_7|
@@ -57,7 +26,7 @@ module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7e
57
26
  out
58
27
  end
59
28
 
60
- def _cell(input = @input)
29
+ def self._cell(input)
61
30
  out = []
62
31
  t10 = input["cube"] || input[:cube]
63
32
  t10.each_with_index do |cube_el_11, cube_i_12|
@@ -74,16 +43,15 @@ module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7e
74
43
  out
75
44
  end
76
45
 
77
- def _cell_over_limit(input = @input)
46
+ def self._cell_over_limit(input)
78
47
  out = []
79
48
  t17 = input["cube"] || input[:cube]
80
- t24 = 100
81
49
  t17.each_with_index do |cube_el_18, cube_i_19|
82
50
  out_1 = []
83
51
  cube_el_18.each_with_index do |layer_el_20, layer_i_21|
84
52
  out_2 = []
85
53
  layer_el_20.each_with_index do |row_el_22, row_i_23|
86
- t25 = row_el_22 > t24
54
+ t25 = row_el_22 > 100
87
55
  out_2 << t25
88
56
  end
89
57
  out_1 << out_2
@@ -93,18 +61,16 @@ module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7e
93
61
  out
94
62
  end
95
63
 
96
- def _cell_sum(input = @input)
64
+ def self._cell_sum(input)
97
65
  out = []
98
66
  t26 = input["cube"] || input[:cube]
99
- t56 = 100
100
- t35 = 0
101
67
  t26.each_with_index do |cube_el_27, cube_i_28|
102
68
  out_1 = []
103
69
  cube_el_27.each_with_index do |layer_el_29, layer_i_30|
104
70
  acc_31 = 0
105
71
  layer_el_29.each_with_index do |row_el_32, row_i_33|
106
- t57 = row_el_32 > t56
107
- t36 = t57 ? row_el_32 : t35
72
+ t57 = row_el_32 > 100
73
+ t36 = t57 ? row_el_32 : 0
108
74
  acc_31 += t36
109
75
  end
110
76
  t37 = acc_31
@@ -115,19 +81,16 @@ module Kumi::Compiled::KUMI_401fa074a7fd129c705cf2357bd65dfaa8cff4ab7955a9a23d7e
115
81
  out
116
82
  end
117
83
 
118
- def _count_over_limit(input = @input)
84
+ def self._count_over_limit(input)
119
85
  acc_38 = 0
120
86
  t39 = input["cube"] || input[:cube]
121
- t59 = 100
122
- t49 = 1
123
- t50 = 0
124
87
  t39.each_with_index do |cube_el_40, cube_i_41|
125
88
  acc_42 = 0
126
89
  cube_el_40.each_with_index do |layer_el_43, layer_i_44|
127
90
  acc_45 = 0
128
91
  layer_el_43.each_with_index do |row_el_46, row_i_47|
129
- t60 = row_el_46 > t59
130
- t51 = t60 ? t49 : t50
92
+ t60 = row_el_46 > 100
93
+ t51 = t60 ? 1 : 0
131
94
  acc_45 += t51
132
95
  end
133
96
  t52 = acc_45
@@ -1,33 +1,6 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_80c4084bbdeb901911f5e3b0a931bdf8170ef074f23c693b9d337c8dd60f818d
3
- def self.from(input_data = nil)
4
- instance = Object.new
5
- instance.extend(self)
6
- instance.instance_variable_set(:@input, input_data)
7
- instance
8
- end
9
-
10
- def self.__kumi_executable__
11
- instance = Object.new
12
- instance.extend(self)
13
- instance
14
- end
15
-
16
- def update(input_data)
17
- @input = @input.merge(input_data)
18
- self
19
- end
20
-
21
- def [](name)
22
- case name
23
- when :regional_sales then _regional_sales
24
- when :total_sales then _total_sales
25
- when :adjusted_total then _adjusted_total
26
- else raise KeyError, "Unknown declaration"
27
- end
28
- end
29
-
30
- def _regional_sales(input = @input)
2
+ module Kumi::Compiled::KUMI_66b672a69c6018b50be95fdc43efa0d033f231c6bb754d6681e32f0de68f63b8
3
+ def self._regional_sales(input)
31
4
  out = []
32
5
  t1 = input["regions"] || input[:regions]
33
6
  t1.each_with_index do |regions_el_2, regions_i_3|
@@ -43,7 +16,7 @@ module Kumi::Compiled::KUMI_80c4084bbdeb901911f5e3b0a931bdf8170ef074f23c693b9d33
43
16
  out
44
17
  end
45
18
 
46
- def _total_sales(input = @input)
19
+ def self._total_sales(input)
47
20
  acc_10 = 0
48
21
  t11 = input["regions"] || input[:regions]
49
22
  t11.each_with_index do |regions_el_12, regions_i_13|
@@ -59,7 +32,7 @@ module Kumi::Compiled::KUMI_80c4084bbdeb901911f5e3b0a931bdf8170ef074f23c693b9d33
59
32
  acc_10
60
33
  end
61
34
 
62
- def _adjusted_total(input = @input)
35
+ def self._adjusted_total(input)
63
36
  acc28 = 0
64
37
  t29 = input["regions"] || input[:regions]
65
38
  t29.each_with_index do |t30, t31|
@@ -0,0 +1,23 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :x :integer)
4
+ ]
5
+ values: [
6
+ (ValueDeclaration :scaled
7
+ (CallExpression :multiply
8
+ (InputReference :x)
9
+ (Literal 10)
10
+ )
11
+ )
12
+ (ValueDeclaration :affine
13
+ (CallExpression :add
14
+ (CallExpression :multiply
15
+ (InputReference :x)
16
+ (Literal 10)
17
+ )
18
+ (Literal 5)
19
+ )
20
+ )
21
+ ]
22
+ traits: []
23
+ )
@@ -0,0 +1 @@
1
+ x: integer
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,16 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t2 = const 10 :: integer
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: integer
6
+ yield %t3
7
+ )
8
+ (Declaration affine
9
+ %t4 = load_input "x" :: integer
10
+ %t5 = const 10 :: integer
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: integer
12
+ %t7 = const 5 :: integer
13
+ %t8 = call core.add(%t6, %t7) :: integer
14
+ yield %t8
15
+ )
16
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration scaled
3
+ %t1 = load_input "x" :: integer
4
+ %t3 = call core.mul:numeric(%t1, 10) :: integer
5
+ yield %t3
6
+ )
7
+ (Declaration affine
8
+ %t4 = load_input "x" :: integer
9
+ %t6 = call core.mul:numeric(%t4, 10) :: integer
10
+ %t8 = call core.add(%t6, 5) :: integer
11
+ yield %t8
12
+ )
13
+ )
@@ -0,0 +1,17 @@
1
+ (NAST
2
+ (VALUE scaled
3
+ (Call :multiply
4
+ (InputRef [:x])
5
+ (Const 10)
6
+ )
7
+ )
8
+ (VALUE affine
9
+ (Call :add
10
+ (Call :multiply
11
+ (InputRef [:x])
12
+ (Const 10)
13
+ )
14
+ (Const 5)
15
+ )
16
+ )
17
+ )
@@ -0,0 +1,13 @@
1
+ export function _scaled(input) {
2
+ let t1 = input["x"];
3
+ let t3 = t1 * 10;
4
+ return t3;
5
+ }
6
+
7
+ export function _affine(input) {
8
+ let t4 = input["x"];
9
+ let t6 = t4 * 10;
10
+ let t8 = t6 + 5;
11
+ return t8;
12
+ }
13
+
@@ -0,0 +1,13 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_258f33c7f1c2ff232ede3b27da1338b635afb8f3ad97c453028b12f20598d7b6
3
+ def self._scaled(input)
4
+ t1 = input["x"] || input[:x]
5
+ t1 * 10
6
+ end
7
+
8
+ def self._affine(input)
9
+ t4 = input["x"] || input[:x]
10
+ t6 = t4 * 10
11
+ t6 + 5
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ (SNAST
2
+ (VALUE scaled
3
+ (Call :core.mul:numeric
4
+ (InputRef x key_chain=[]) :: [] -> integer
5
+ (Const 10) :: [] -> integer
6
+ ) :: [] -> integer
7
+ ) :: [] -> integer
8
+ (VALUE affine
9
+ (Call :core.add
10
+ (Call :core.mul:numeric
11
+ (InputRef x key_chain=[]) :: [] -> integer
12
+ (Const 10) :: [] -> integer
13
+ ) :: [] -> integer
14
+ (Const 5) :: [] -> integer
15
+ ) :: [] -> integer
16
+ ) :: [] -> integer
17
+ )
@@ -0,0 +1,4 @@
1
+ {
2
+ "scaled": 30,
3
+ "affine": 35
4
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "x": 3
3
+ }