kumi 0.0.30 → 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
@@ -0,0 +1,58 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration total_before_tax
11
+ %acc_6 = decl_acc :: integer
12
+ %t7 = load_input "orders" :: array
13
+ loop orders id=L2 in %t7 as el=%orders_el_8, idx=%orders_i_9
14
+ %t17 = load_input "orders" :: array
15
+ %t18 = load_field orders_el_8["items"] :: array
16
+ %t19 = importschemacall %t18 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
17
+ %acc_6 = acc_add agg.sum(%acc_6, %t19) :: integer
18
+ end_loop
19
+ %t11 = acc_load %acc_6 :: integer
20
+ yield %t11
21
+ )
22
+ (Declaration tax_for_all
23
+ %acc21 = decl_acc :: integer
24
+ %t22 = load_input "orders" :: array
25
+ loop orders id=L3 in %t22 as el=%t23, idx=%t24
26
+ %t27 = load_input "orders" :: array
27
+ %t28 = load_field t23["items"] :: array
28
+ %t29 = importschemacall %t28 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
29
+ %acc21 = acc_add agg.sum(%acc21, %t29) :: integer
30
+ end_loop
31
+ %t26 = acc_load %acc21 :: integer
32
+ %t13 = importschemacall %t26 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
33
+ yield %t13
34
+ )
35
+ (Declaration grand_total
36
+ %acc31 = decl_acc :: integer
37
+ %t32 = load_input "orders" :: array
38
+ loop orders id=L4 in %t32 as el=%t33, idx=%t34
39
+ %t37 = load_input "orders" :: array
40
+ %t38 = load_field t33["items"] :: array
41
+ %t39 = importschemacall %t38 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
42
+ %acc31 = acc_add agg.sum(%acc31, %t39) :: integer
43
+ end_loop
44
+ %t36 = acc_load %acc31 :: integer
45
+ %acc43 = decl_acc :: integer
46
+ %t44 = load_input "orders" :: array
47
+ loop orders id=L5 in %t44 as el=%t45, idx=%t46
48
+ %t49 = load_input "orders" :: array
49
+ %t50 = load_field t45["items"] :: array
50
+ %t51 = importschemacall %t50 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
51
+ %acc43 = acc_add agg.sum(%acc43, %t51) :: integer
52
+ end_loop
53
+ %t48 = acc_load %acc43 :: integer
54
+ %t41 = importschemacall %t48 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
55
+ %t16 = call core.add(%t36, %t41) :: float
56
+ yield %t16
57
+ )
58
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration total_before_tax
11
+ %acc_6 = decl_acc :: integer
12
+ %t7 = load_input "orders" :: array
13
+ loop orders id=L2 in %t7 as el=%orders_el_8, idx=%orders_i_9
14
+ %t18 = load_field orders_el_8["items"] :: array
15
+ %t19 = importschemacall %t18 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
16
+ %acc_6 = acc_add agg.sum(%acc_6, %t19) :: integer
17
+ end_loop
18
+ %t11 = acc_load %acc_6 :: integer
19
+ yield %t11
20
+ )
21
+ (Declaration tax_for_all
22
+ %acc21 = decl_acc :: integer
23
+ %t22 = load_input "orders" :: array
24
+ loop orders id=L3 in %t22 as el=%t23, idx=%t24
25
+ %t28 = load_field t23["items"] :: array
26
+ %t29 = importschemacall %t28 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
27
+ %acc21 = acc_add agg.sum(%acc21, %t29) :: integer
28
+ end_loop
29
+ %t26 = acc_load %acc21 :: integer
30
+ %t13 = importschemacall %t26 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
31
+ yield %t13
32
+ )
33
+ (Declaration grand_total
34
+ %acc31 = decl_acc :: integer
35
+ %t32 = load_input "orders" :: array
36
+ %acc43 = decl_acc :: integer
37
+ loop orders id=L4 in %t32 as el=%t33, idx=%t34
38
+ %t38 = load_field t33["items"] :: array
39
+ %t39 = importschemacall %t38 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
40
+ %acc31 = acc_add agg.sum(%acc31, %t39) :: integer
41
+ %acc43 = acc_add agg.sum(%acc43, %t39) :: integer
42
+ end_loop
43
+ %t36 = acc_load %acc31 :: integer
44
+ %t48 = acc_load %acc43 :: integer
45
+ %t41 = importschemacall %t48 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
46
+ %t16 = call core.add(%t36, %t41) :: float
47
+ yield %t16
48
+ )
49
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration total_before_tax
11
+ %acc_6 = decl_acc :: integer
12
+ %t7 = load_input "orders" :: array
13
+ loop orders id=L2 in %t7 as el=%orders_el_8, idx=%orders_i_9
14
+ %t18 = load_field orders_el_8["items"] :: array
15
+ %t19 = importschemacall %t18 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
16
+ %acc_6 = acc_add agg.sum(%acc_6, %t19) :: integer
17
+ end_loop
18
+ %t11 = acc_load %acc_6 :: integer
19
+ yield %t11
20
+ )
21
+ (Declaration tax_for_all
22
+ %acc21 = decl_acc :: integer
23
+ %t22 = load_input "orders" :: array
24
+ loop orders id=L3 in %t22 as el=%t23, idx=%t24
25
+ %t28 = load_field t23["items"] :: array
26
+ %t29 = importschemacall %t28 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
27
+ %acc21 = acc_add agg.sum(%acc21, %t29) :: integer
28
+ end_loop
29
+ %t26 = acc_load %acc21 :: integer
30
+ %t13 = importschemacall %t26 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
31
+ yield %t13
32
+ )
33
+ (Declaration grand_total
34
+ %acc31 = decl_acc :: integer
35
+ %t32 = load_input "orders" :: array
36
+ %acc43 = decl_acc :: integer
37
+ loop orders id=L4 in %t32 as el=%t33, idx=%t34
38
+ %t38 = load_field t33["items"] :: array
39
+ %t39 = importschemacall %t38 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
40
+ %acc31 = acc_add agg.sum(%acc31, %t39) :: integer
41
+ %t50 = load_field t33["items"] :: array
42
+ %t51 = importschemacall %t50 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
43
+ %acc43 = acc_add agg.sum(%acc43, %t51) :: integer
44
+ end_loop
45
+ %t36 = acc_load %acc31 :: integer
46
+ %t48 = acc_load %acc43 :: integer
47
+ %t41 = importschemacall %t48 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
48
+ %t16 = call core.add(%t36, %t41) :: float
49
+ yield %t16
50
+ )
51
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration total_before_tax
11
+ %acc_6 = decl_acc :: integer
12
+ %t7 = load_input "orders" :: array
13
+ loop orders id=L2 in %t7 as el=%orders_el_8, idx=%orders_i_9
14
+ %t18 = load_field orders_el_8["items"] :: array
15
+ %t19 = importschemacall %t18 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
16
+ %acc_6 = acc_add agg.sum(%acc_6, %t19) :: integer
17
+ end_loop
18
+ %t11 = acc_load %acc_6 :: integer
19
+ yield %t11
20
+ )
21
+ (Declaration tax_for_all
22
+ %acc21 = decl_acc :: integer
23
+ %t22 = load_input "orders" :: array
24
+ loop orders id=L3 in %t22 as el=%t23, idx=%t24
25
+ %t28 = load_field t23["items"] :: array
26
+ %t29 = importschemacall %t28 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
27
+ %acc21 = acc_add agg.sum(%acc21, %t29) :: integer
28
+ end_loop
29
+ %t26 = acc_load %acc21 :: integer
30
+ %t13 = importschemacall %t26 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
31
+ yield %t13
32
+ )
33
+ (Declaration grand_total
34
+ %acc31 = decl_acc :: integer
35
+ %t32 = load_input "orders" :: array
36
+ %acc43 = decl_acc :: integer
37
+ loop orders id=L4 in %t32 as el=%t33, idx=%t34
38
+ %t38 = load_field t33["items"] :: array
39
+ %t39 = importschemacall %t38 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
40
+ %acc31 = acc_add agg.sum(%acc31, %t39) :: integer
41
+ %acc43 = acc_add agg.sum(%acc43, %t39) :: integer
42
+ end_loop
43
+ %t36 = acc_load %acc31 :: integer
44
+ %t48 = acc_load %acc43 :: integer
45
+ %t41 = importschemacall %t48 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
46
+ %t16 = call core.add(%t36, %t41) :: float
47
+ yield %t16
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration total_before_tax
11
+ %acc_6 = decl_acc :: integer
12
+ %t7 = load_input "orders" :: array
13
+ loop orders id=L2 in %t7 as el=%orders_el_8, idx=%orders_i_9
14
+ %t18 = load_field orders_el_8["items"] :: array
15
+ %t19 = importschemacall %t18 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
16
+ %acc_6 = acc_add agg.sum(%acc_6, %t19) :: integer
17
+ end_loop
18
+ %t11 = acc_load %acc_6 :: integer
19
+ yield %t11
20
+ )
21
+ (Declaration tax_for_all
22
+ %acc21 = decl_acc :: integer
23
+ %t22 = load_input "orders" :: array
24
+ loop orders id=L3 in %t22 as el=%t23, idx=%t24
25
+ %t28 = load_field t23["items"] :: array
26
+ %t29 = importschemacall %t28 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
27
+ %acc21 = acc_add agg.sum(%acc21, %t29) :: integer
28
+ end_loop
29
+ %t26 = acc_load %acc21 :: integer
30
+ %t13 = importschemacall %t26 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
31
+ yield %t13
32
+ )
33
+ (Declaration grand_total
34
+ %acc31 = decl_acc :: integer
35
+ %t32 = load_input "orders" :: array
36
+ %acc43 = decl_acc :: integer
37
+ loop orders id=L4 in %t32 as el=%t33, idx=%t34
38
+ %t38 = load_field t33["items"] :: array
39
+ %t39 = importschemacall %t38 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
40
+ %acc31 = acc_add agg.sum(%acc31, %t39) :: integer
41
+ %acc43 = acc_add agg.sum(%acc43, %t39) :: integer
42
+ end_loop
43
+ %t36 = acc_load %acc31 :: integer
44
+ %t48 = acc_load %acc43 :: integer
45
+ %t41 = importschemacall %t48 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
46
+ %t16 = call core.add(%t36, %t41) :: float
47
+ yield %t16
48
+ )
49
+ )
@@ -0,0 +1,23 @@
1
+ (NAST
2
+ (VALUE order_subtotals
3
+ (ImportCall :subtotal
4
+ (items (InputRef [:orders, :order, :items]))
5
+ )
6
+ )
7
+ (VALUE total_before_tax
8
+ (Call :sum
9
+ (Ref order_subtotals)
10
+ )
11
+ )
12
+ (VALUE tax_for_all
13
+ (ImportCall :tax
14
+ (amount (Ref total_before_tax))
15
+ )
16
+ )
17
+ (VALUE grand_total
18
+ (Call :add
19
+ (Ref total_before_tax)
20
+ (Ref tax_for_all)
21
+ )
22
+ )
23
+ )
@@ -0,0 +1,49 @@
1
+ export function _order_subtotals(input) {
2
+ let out = [];
3
+ let t1 = input["orders"];
4
+ t1.forEach((orders_el_2, orders_i_3) => {
5
+ let t4 = orders_el_2["items"];
6
+ let t5 = Kumi.TestSharedSchemas.Subtotal.from({'items': t4})._subtotal;
7
+ out.push(t5);
8
+ });
9
+ return out;
10
+ }
11
+
12
+ export function _total_before_tax(input) {
13
+ let acc_6 = 0;
14
+ let t7 = input["orders"];
15
+ t7.forEach((orders_el_8, orders_i_9) => {
16
+ let t18 = orders_el_8["items"];
17
+ let t19 = Kumi.TestSharedSchemas.Subtotal.from({'items': t18})._subtotal;
18
+ acc_6 += t19;
19
+ });
20
+ return acc_6;
21
+ }
22
+
23
+ export function _tax_for_all(input) {
24
+ let acc21 = 0;
25
+ let t22 = input["orders"];
26
+ t22.forEach((t23, t24) => {
27
+ let t28 = t23["items"];
28
+ let t29 = Kumi.TestSharedSchemas.Subtotal.from({'items': t28})._subtotal;
29
+ acc21 += t29;
30
+ });
31
+ let t13 = Kumi.TestSharedSchemas.Tax.from({'amount': acc21})._tax;
32
+ return t13;
33
+ }
34
+
35
+ export function _grand_total(input) {
36
+ let acc31 = 0;
37
+ let t32 = input["orders"];
38
+ let acc43 = 0;
39
+ t32.forEach((t33, t34) => {
40
+ let t38 = t33["items"];
41
+ let t39 = Kumi.TestSharedSchemas.Subtotal.from({'items': t38})._subtotal;
42
+ acc31 += t39;
43
+ acc43 += t39;
44
+ });
45
+ let t41 = Kumi.TestSharedSchemas.Tax.from({'amount': acc43})._tax;
46
+ let t16 = acc31 + t41;
47
+ return t16;
48
+ }
49
+
@@ -0,0 +1,52 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_74ec580a26866eae33665ff6d21bc0deac9b3466ec2066c2c777a8ee86f941b4
3
+ def self._order_subtotals(input)
4
+ out = []
5
+ t1 = input["orders"] || input[:orders]
6
+ t1.each_with_index do |orders_el_2, orders_i_3|
7
+ t4 = orders_el_2["items"] || orders_el_2[:items]
8
+ t5 = Kumi::TestSharedSchemas::Subtotal._subtotal({"items" => t4})
9
+ out << t5
10
+ end
11
+ out
12
+ end
13
+
14
+ def self._total_before_tax(input)
15
+ acc_6 = 0
16
+ t7 = input["orders"] || input[:orders]
17
+ t7.each_with_index do |orders_el_8, orders_i_9|
18
+ t18 = orders_el_8["items"] || orders_el_8[:items]
19
+ t19 = Kumi::TestSharedSchemas::Subtotal._subtotal({"items" => t18})
20
+ acc_6 += t19
21
+ end
22
+ acc_6
23
+ end
24
+
25
+ def self._tax_for_all(input)
26
+ acc21 = 0
27
+ t22 = input["orders"] || input[:orders]
28
+ t22.each_with_index do |t23, t24|
29
+ t28 = t23["items"] || t23[:items]
30
+ t29 = Kumi::TestSharedSchemas::Subtotal._subtotal({"items" => t28})
31
+ acc21 += t29
32
+ end
33
+ t26 = acc21
34
+ Kumi::TestSharedSchemas::Tax._tax({"amount" => t26})
35
+ end
36
+
37
+ def self._grand_total(input)
38
+ acc31 = 0
39
+ t32 = input["orders"] || input[:orders]
40
+ acc43 = 0
41
+ t32.each_with_index do |t33, t34|
42
+ t38 = t33["items"] || t33[:items]
43
+ t39 = Kumi::TestSharedSchemas::Subtotal._subtotal({"items" => t38})
44
+ acc31 += t39
45
+ acc43 += t39
46
+ end
47
+ t36 = acc31
48
+ t48 = acc43
49
+ t41 = Kumi::TestSharedSchemas::Tax._tax({"amount" => t48})
50
+ t36 + t41
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ (SNAST
2
+ (VALUE order_subtotals
3
+ (ImportCall :subtotal
4
+ (items (InputRef orders.order.items key_chain=[]) :: [orders] -> array)
5
+ ) :: [orders] -> integer
6
+ ) :: [orders] -> integer
7
+ (VALUE total_before_tax
8
+ (Reduce :agg.sum over [orders]
9
+ (Ref order_subtotals) :: [orders] -> integer
10
+ ) :: [] -> integer
11
+ ) :: [] -> integer
12
+ (VALUE tax_for_all
13
+ (ImportCall :tax
14
+ (amount (Ref total_before_tax) :: [] -> integer)
15
+ ) :: [] -> float
16
+ ) :: [] -> float
17
+ (VALUE grand_total
18
+ (Call :core.add
19
+ (Ref total_before_tax) :: [] -> integer
20
+ (Ref tax_for_all) :: [] -> float
21
+ ) :: [] -> float
22
+ ) :: [] -> float
23
+ )
@@ -0,0 +1,6 @@
1
+ {
2
+ "order_subtotals": [130, 75],
3
+ "total_before_tax": 205,
4
+ "tax_for_all": 30.75,
5
+ "grand_total": 235.75
6
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "tax_rate_override": 0.15,
3
+ "orders": [
4
+ {
5
+ "items": [
6
+ {"quantity": 2, "unit_price": 50},
7
+ {"quantity": 1, "unit_price": 30}
8
+ ]
9
+ },
10
+ {
11
+ "items": [
12
+ {"quantity": 3, "unit_price": 25}
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,23 @@
1
+ schema do
2
+ import :tax, from: Kumi::TestSharedSchemas::Tax
3
+ import :subtotal, from: Kumi::TestSharedSchemas::Subtotal
4
+
5
+ input do
6
+ decimal :tax_rate_override
7
+ array :orders do
8
+ hash :order do
9
+ array :items do
10
+ hash :item do
11
+ integer :quantity
12
+ integer :unit_price
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ value :order_subtotals, subtotal(items: input.orders.order.items)
20
+ value :total_before_tax, fn(:sum, order_subtotals)
21
+ value :tax_for_all, tax(amount: total_before_tax)
22
+ value :grand_total, total_before_tax + tax_for_all
23
+ end
@@ -0,0 +1,19 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :amount :decimal)
4
+ ]
5
+ values: [
6
+ (ValueDeclaration :tax_result
7
+ (ImportCall :tax
8
+ (amount (InputReference :amount))
9
+ )
10
+ )
11
+ (ValueDeclaration :total
12
+ (CallExpression :add
13
+ (InputReference :amount)
14
+ (DeclarationReference :tax_result)
15
+ )
16
+ )
17
+ ]
18
+ traits: []
19
+ )
@@ -0,0 +1 @@
1
+ amount: decimal
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t4 = load_decl tax_result :: float
10
+ %t5 = call core.add(%t3, %t4) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t4 = load_decl tax_result :: float
10
+ %t5 = call core.add(%t3, %t4) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,14 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t6 = load_input "amount" :: decimal
10
+ %t7 = importschemacall %t6 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
11
+ %t5 = call core.add(%t3, %t7) :: float
12
+ yield %t5
13
+ )
14
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t7 = importschemacall %t3 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
10
+ %t5 = call core.add(%t3, %t7) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t7 = importschemacall %t3 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
10
+ %t5 = call core.add(%t3, %t7) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t7 = importschemacall %t3 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
10
+ %t5 = call core.add(%t3, %t7) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ (LIR
2
+ (Declaration tax_result
3
+ %t1 = load_input "amount" :: decimal
4
+ %t2 = importschemacall %t1 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
5
+ yield %t2
6
+ )
7
+ (Declaration total
8
+ %t3 = load_input "amount" :: decimal
9
+ %t7 = importschemacall %t3 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
10
+ %t5 = call core.add(%t3, %t7) :: float
11
+ yield %t5
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ (NAST
2
+ (VALUE tax_result
3
+ (ImportCall :tax
4
+ (amount (InputRef [:amount]))
5
+ )
6
+ )
7
+ (VALUE total
8
+ (Call :add
9
+ (InputRef [:amount])
10
+ (Ref tax_result)
11
+ )
12
+ )
13
+ )
@@ -0,0 +1,13 @@
1
+ export function _tax_result(input) {
2
+ let t1 = input["amount"];
3
+ let t2 = Kumi.TestSharedSchemas.Tax.from({'amount': t1})._tax;
4
+ return t2;
5
+ }
6
+
7
+ export function _total(input) {
8
+ let t3 = input["amount"];
9
+ let t7 = Kumi.TestSharedSchemas.Tax.from({'amount': t3})._tax;
10
+ let t5 = t3 + t7;
11
+ return t5;
12
+ }
13
+
@@ -0,0 +1,13 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_8a7542676f62b0df3ad4174768bfef26a5dab02a1c0d34328d430d2e9121c623
3
+ def self._tax_result(input)
4
+ t1 = input["amount"] || input[:amount]
5
+ Kumi::TestSharedSchemas::Tax._tax({"amount" => t1})
6
+ end
7
+
8
+ def self._total(input)
9
+ t3 = input["amount"] || input[:amount]
10
+ t7 = Kumi::TestSharedSchemas::Tax._tax({"amount" => t3})
11
+ t3 + t7
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ (SNAST
2
+ (VALUE tax_result
3
+ (ImportCall :tax
4
+ (amount (InputRef amount key_chain=[]) :: [] -> decimal)
5
+ ) :: [] -> float
6
+ ) :: [] -> float
7
+ (VALUE total
8
+ (Call :core.add
9
+ (InputRef amount key_chain=[]) :: [] -> decimal
10
+ (Ref tax_result) :: [] -> float
11
+ ) :: [] -> float
12
+ ) :: [] -> float
13
+ )
@@ -0,0 +1,4 @@
1
+ {
2
+ "tax_result": 15,
3
+ "total": 115
4
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "amount": 100
3
+ }