@eagleoutice/flowr 1.5.2 → 2.0.1

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 (570) hide show
  1. package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
  2. package/abstract-interpretation/handler/binop/binop.js +4 -2
  3. package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
  4. package/abstract-interpretation/handler/binop/operators.js +14 -28
  5. package/abstract-interpretation/processor.d.ts +3 -2
  6. package/abstract-interpretation/processor.js +2 -2
  7. package/benchmark/slicer.d.ts +101 -0
  8. package/benchmark/slicer.js +214 -0
  9. package/benchmark/stats/print.d.ts +7 -0
  10. package/benchmark/stats/print.js +151 -0
  11. package/benchmark/stats/stats.d.ts +42 -0
  12. package/benchmark/stats/stats.js +6 -0
  13. package/benchmark/stopwatch.d.ts +35 -0
  14. package/benchmark/stopwatch.js +79 -0
  15. package/benchmark/summarizer/data.d.ts +54 -0
  16. package/benchmark/summarizer/first-phase/input.d.ts +3 -0
  17. package/benchmark/summarizer/first-phase/input.js +76 -0
  18. package/benchmark/summarizer/first-phase/process.d.ts +11 -0
  19. package/benchmark/summarizer/first-phase/process.js +205 -0
  20. package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
  21. package/benchmark/summarizer/second-phase/graph.js +54 -0
  22. package/benchmark/summarizer/second-phase/process.d.ts +6 -0
  23. package/benchmark/summarizer/second-phase/process.js +127 -0
  24. package/benchmark/summarizer/summarizer.d.ts +31 -0
  25. package/benchmark/summarizer/summarizer.js +58 -0
  26. package/cli/benchmark-app.d.ts +10 -0
  27. package/cli/benchmark-app.js +67 -0
  28. package/cli/benchmark-helper-app.d.ts +9 -0
  29. package/cli/benchmark-helper-app.js +69 -0
  30. package/cli/common/features.d.ts +3 -0
  31. package/cli/common/features.js +30 -0
  32. package/cli/common/options.d.ts +20 -0
  33. package/cli/common/options.js +85 -0
  34. package/cli/common/script.d.ts +21 -0
  35. package/cli/common/script.js +61 -0
  36. package/cli/common/scripts-info.d.ts +25 -0
  37. package/cli/common/scripts-info.js +83 -0
  38. package/cli/export-quads-app.d.ts +7 -0
  39. package/cli/export-quads-app.js +43 -0
  40. package/cli/flowr.d.ts +29 -0
  41. package/cli/flowr.js +141 -0
  42. package/cli/repl/commands/cfg.d.ts +3 -0
  43. package/cli/repl/commands/cfg.js +37 -0
  44. package/cli/repl/commands/commands.d.ts +13 -0
  45. package/cli/repl/commands/commands.js +142 -0
  46. package/cli/repl/commands/dataflow.d.ts +3 -0
  47. package/cli/repl/commands/dataflow.js +34 -0
  48. package/cli/repl/commands/execute.d.ts +4 -0
  49. package/cli/repl/commands/execute.js +27 -0
  50. package/cli/repl/commands/main.d.ts +39 -0
  51. package/cli/repl/commands/main.js +14 -0
  52. package/cli/repl/commands/normalize.d.ts +3 -0
  53. package/cli/repl/commands/normalize.js +34 -0
  54. package/cli/repl/commands/parse.d.ts +2 -0
  55. package/cli/repl/commands/parse.js +110 -0
  56. package/cli/repl/commands/quit.d.ts +2 -0
  57. package/cli/repl/commands/quit.js +15 -0
  58. package/cli/repl/commands/version.d.ts +16 -0
  59. package/cli/repl/commands/version.js +28 -0
  60. package/cli/repl/core.d.ts +36 -0
  61. package/cli/repl/core.js +174 -0
  62. package/cli/repl/execute.d.ts +28 -0
  63. package/cli/repl/execute.js +79 -0
  64. package/cli/repl/print-version.d.ts +2 -0
  65. package/cli/repl/print-version.js +10 -0
  66. package/cli/repl/prompt.d.ts +2 -0
  67. package/cli/repl/prompt.js +9 -0
  68. package/cli/repl/server/connection.d.ts +21 -0
  69. package/cli/repl/server/connection.js +218 -0
  70. package/cli/repl/server/messages/analysis.d.ts +72 -0
  71. package/cli/repl/server/messages/analysis.js +21 -0
  72. package/cli/repl/server/messages/error.d.ts +11 -0
  73. package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
  74. package/cli/repl/server/messages/hello.d.ts +20 -0
  75. package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
  76. package/cli/repl/server/messages/messages.d.ts +35 -0
  77. package/cli/repl/server/messages/messages.js +40 -0
  78. package/cli/repl/server/messages/repl.d.ts +33 -0
  79. package/cli/repl/server/messages/repl.js +37 -0
  80. package/cli/repl/server/messages/slice.d.ts +26 -0
  81. package/cli/repl/server/messages/slice.js +37 -0
  82. package/cli/repl/server/net.d.ts +49 -0
  83. package/cli/repl/server/net.js +63 -0
  84. package/cli/repl/server/send.d.ts +4 -0
  85. package/cli/repl/server/send.js +18 -0
  86. package/cli/repl/server/server.d.ts +20 -0
  87. package/cli/repl/server/server.js +66 -0
  88. package/cli/repl/server/validate.d.ts +15 -0
  89. package/cli/repl/server/validate.js +34 -0
  90. package/cli/slicer-app.d.ts +11 -0
  91. package/cli/slicer-app.js +83 -0
  92. package/cli/statistics-app.d.ts +11 -0
  93. package/cli/statistics-app.js +99 -0
  94. package/cli/statistics-helper-app.d.ts +11 -0
  95. package/cli/statistics-helper-app.js +87 -0
  96. package/cli/summarizer-app.d.ts +18 -0
  97. package/cli/summarizer-app.js +66 -0
  98. package/core/pipeline-executor.d.ts +154 -0
  99. package/core/pipeline-executor.js +221 -0
  100. package/core/print/dataflow-printer.d.ts +3 -4
  101. package/core/print/dataflow-printer.js +5 -5
  102. package/core/print/normalize-printer.d.ts +1 -1
  103. package/core/print/normalize-printer.js +3 -3
  104. package/core/print/parse-printer.js +3 -3
  105. package/core/print/print.d.ts +13 -4
  106. package/core/print/print.js +13 -2
  107. package/core/print/slice-diff-ansi.d.ts +3 -2
  108. package/core/print/slice-diff-ansi.js +4 -4
  109. package/core/steps/all/core/00-parse.d.ts +28 -0
  110. package/core/steps/all/core/00-parse.js +24 -0
  111. package/core/steps/all/core/10-normalize.d.ts +29 -0
  112. package/core/steps/all/core/10-normalize.js +26 -0
  113. package/core/steps/all/core/20-dataflow.d.ts +27 -0
  114. package/core/steps/all/core/20-dataflow.js +29 -0
  115. package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
  116. package/core/steps/all/static-slicing/00-slice.js +21 -0
  117. package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
  118. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  119. package/core/steps/pipeline/create-pipeline.d.ts +6 -0
  120. package/core/steps/pipeline/create-pipeline.js +130 -0
  121. package/core/steps/pipeline/default-pipelines.d.ts +251 -0
  122. package/core/steps/pipeline/default-pipelines.js +18 -0
  123. package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
  124. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  125. package/core/steps/pipeline/pipeline.d.ts +60 -0
  126. package/core/steps/pipeline/pipeline.js +28 -0
  127. package/core/steps/pipeline-step.d.ts +85 -0
  128. package/core/steps/pipeline-step.js +8 -0
  129. package/dataflow/environments/append.d.ts +4 -4
  130. package/dataflow/environments/append.js +4 -4
  131. package/dataflow/environments/built-in.d.ts +25 -0
  132. package/dataflow/environments/built-in.js +123 -0
  133. package/dataflow/environments/clone.d.ts +2 -0
  134. package/dataflow/environments/clone.js +23 -0
  135. package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
  136. package/dataflow/environments/define.js +51 -0
  137. package/dataflow/environments/diff.d.ts +6 -0
  138. package/dataflow/environments/diff.js +85 -0
  139. package/dataflow/environments/environment.d.ts +10 -43
  140. package/dataflow/environments/environment.js +32 -138
  141. package/dataflow/environments/identifier.d.ts +31 -0
  142. package/dataflow/environments/identifier.js +3 -0
  143. package/dataflow/environments/overwrite.d.ts +4 -4
  144. package/dataflow/environments/overwrite.js +9 -22
  145. package/dataflow/environments/resolve-by-name.d.ts +7 -6
  146. package/dataflow/environments/resolve-by-name.js +35 -19
  147. package/dataflow/environments/scoping.js +1 -4
  148. package/dataflow/extractor.d.ts +6 -6
  149. package/dataflow/extractor.js +47 -57
  150. package/dataflow/graph/diff.d.ts +24 -7
  151. package/dataflow/graph/diff.js +114 -74
  152. package/dataflow/graph/edge.d.ts +66 -20
  153. package/dataflow/graph/edge.js +73 -27
  154. package/dataflow/graph/graph.d.ts +53 -29
  155. package/dataflow/graph/graph.js +84 -89
  156. package/dataflow/graph/quads.js +2 -2
  157. package/dataflow/graph/vertex.d.ts +37 -34
  158. package/dataflow/info.d.ts +49 -0
  159. package/dataflow/info.js +29 -0
  160. package/dataflow/internal/linker.d.ts +11 -10
  161. package/dataflow/internal/linker.js +64 -90
  162. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
  163. package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
  164. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
  165. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
  166. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
  167. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
  168. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
  169. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
  170. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
  171. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
  172. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
  173. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
  174. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
  175. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
  176. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
  177. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
  178. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
  179. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
  180. package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
  181. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
  182. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
  183. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
  184. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
  185. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
  186. package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
  187. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
  188. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
  189. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
  190. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
  191. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
  192. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
  193. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
  194. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
  195. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
  196. package/dataflow/internal/process/functions/call/common.d.ts +35 -0
  197. package/dataflow/internal/process/functions/call/common.js +70 -0
  198. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
  199. package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
  200. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
  201. package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
  202. package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
  203. package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
  204. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
  205. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
  206. package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
  207. package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
  208. package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
  209. package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
  210. package/dataflow/internal/process/process-named-call.d.ts +6 -0
  211. package/dataflow/internal/process/process-named-call.js +17 -0
  212. package/dataflow/internal/process/process-symbol.d.ts +5 -0
  213. package/dataflow/internal/process/process-symbol.js +26 -0
  214. package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
  215. package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
  216. package/dataflow/internal/process/process-value.d.ts +4 -0
  217. package/dataflow/internal/process/process-value.js +22 -0
  218. package/dataflow/logger.d.ts +1 -0
  219. package/dataflow/logger.js +6 -0
  220. package/dataflow/processor.d.ts +18 -13
  221. package/dataflow/processor.js +1 -1
  222. package/package.json +48 -85
  223. package/r-bridge/data/data.d.ts +603 -0
  224. package/r-bridge/data/data.js +753 -0
  225. package/r-bridge/data/get.d.ts +19 -0
  226. package/r-bridge/data/get.js +51 -0
  227. package/r-bridge/data/print.d.ts +1 -0
  228. package/r-bridge/data/print.js +58 -0
  229. package/r-bridge/data/types.d.ts +33 -0
  230. package/r-bridge/data/types.js +3 -0
  231. package/r-bridge/init.d.ts +3 -0
  232. package/r-bridge/init.js +22 -0
  233. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  234. package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
  235. package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
  236. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
  237. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
  238. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
  239. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
  240. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
  241. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
  242. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
  243. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
  244. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
  245. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
  246. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
  247. package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
  248. package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
  249. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
  250. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
  251. package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
  252. package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
  253. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
  254. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
  255. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
  256. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
  257. package/r-bridge/lang-4.x/ast/model/type.js +13 -6
  258. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
  259. package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
  260. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
  261. package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
  262. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
  263. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
  264. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
  265. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
  266. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
  267. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
  268. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
  269. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
  270. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
  271. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
  272. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
  273. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
  274. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
  275. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
  276. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
  277. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
  278. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
  279. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
  280. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
  281. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
  282. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
  283. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
  284. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
  285. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
  286. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
  287. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
  288. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
  289. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
  290. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
  291. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
  292. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
  293. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
  294. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
  295. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
  296. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
  298. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
  299. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
  300. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
  301. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
  302. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
  303. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
  304. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
  305. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
  306. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
  307. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
  308. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
  309. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
  310. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
  311. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
  312. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
  313. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
  314. package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
  315. package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
  316. package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
  317. package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
  318. package/r-bridge/retriever.d.ts +5 -5
  319. package/r-bridge/retriever.js +11 -24
  320. package/r-bridge/shell-executor.d.ts +0 -1
  321. package/r-bridge/shell-executor.js +7 -12
  322. package/r-bridge/shell.d.ts +14 -12
  323. package/r-bridge/shell.js +50 -45
  324. package/reconstruct/reconstruct.d.ts +4 -2
  325. package/reconstruct/reconstruct.js +193 -185
  326. package/slicing/criterion/collect-all.d.ts +4 -3
  327. package/slicing/criterion/collect-all.js +5 -1
  328. package/slicing/criterion/filters/all-variables.js +14 -22
  329. package/slicing/criterion/parse.d.ts +4 -2
  330. package/slicing/criterion/parse.js +13 -11
  331. package/slicing/static/fingerprint.d.ts +5 -0
  332. package/slicing/static/fingerprint.js +17 -0
  333. package/slicing/static/slice-call.d.ts +10 -0
  334. package/slicing/static/slice-call.js +86 -0
  335. package/slicing/static/slicer-types.d.ts +33 -0
  336. package/slicing/static/slicer-types.js +3 -0
  337. package/slicing/static/static-slicer.d.ts +6 -24
  338. package/slicing/static/static-slicer.js +54 -155
  339. package/slicing/static/visiting-queue.d.ts +23 -0
  340. package/slicing/static/visiting-queue.js +53 -0
  341. package/statistics/features/common-syntax-probability.d.ts +29 -0
  342. package/statistics/features/common-syntax-probability.js +159 -0
  343. package/statistics/features/feature.d.ts +182 -0
  344. package/statistics/features/feature.js +39 -0
  345. package/statistics/features/post-processing.d.ts +12 -0
  346. package/statistics/features/post-processing.js +21 -0
  347. package/statistics/features/supported/assignments/assignments.d.ts +12 -0
  348. package/statistics/features/supported/assignments/assignments.js +55 -0
  349. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  350. package/statistics/features/supported/assignments/post-process.js +124 -0
  351. package/statistics/features/supported/comments/comments.d.ts +18 -0
  352. package/statistics/features/supported/comments/comments.js +133 -0
  353. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  354. package/statistics/features/supported/comments/post-process.js +49 -0
  355. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  356. package/statistics/features/supported/control-flow/control-flow.js +68 -0
  357. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  358. package/statistics/features/supported/control-flow/post-process.js +64 -0
  359. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  360. package/statistics/features/supported/data-access/data-access.js +120 -0
  361. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  362. package/statistics/features/supported/data-access/post-process.js +106 -0
  363. package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
  364. package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
  365. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  366. package/statistics/features/supported/defined-functions/post-process.js +169 -0
  367. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  368. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  369. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  370. package/statistics/features/supported/expression-list/post-process.js +43 -0
  371. package/statistics/features/supported/loops/loops.d.ts +20 -0
  372. package/statistics/features/supported/loops/loops.js +79 -0
  373. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  374. package/statistics/features/supported/loops/post-process.js +71 -0
  375. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  376. package/statistics/features/supported/used-functions/post-process.js +178 -0
  377. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  378. package/statistics/features/supported/used-functions/used-functions.js +97 -0
  379. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  380. package/statistics/features/supported/used-packages/post-process.js +120 -0
  381. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  382. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  383. package/statistics/features/supported/values/post-process.d.ts +3 -0
  384. package/statistics/features/supported/values/post-process.js +71 -0
  385. package/statistics/features/supported/values/values.d.ts +14 -0
  386. package/statistics/features/supported/values/values.js +101 -0
  387. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  388. package/statistics/features/supported/variables/post-process.js +121 -0
  389. package/statistics/features/supported/variables/variables.d.ts +15 -0
  390. package/statistics/features/supported/variables/variables.js +60 -0
  391. package/statistics/meta-statistics.d.ts +33 -0
  392. package/statistics/meta-statistics.js +17 -0
  393. package/statistics/output/file-provider.d.ts +37 -0
  394. package/statistics/output/file-provider.js +97 -0
  395. package/statistics/output/print-stats.d.ts +17 -0
  396. package/statistics/output/print-stats.js +69 -0
  397. package/statistics/output/statistics-file.d.ts +37 -0
  398. package/statistics/output/statistics-file.js +69 -0
  399. package/statistics/statistics.d.ts +28 -0
  400. package/statistics/statistics.js +108 -0
  401. package/statistics/summarizer/auto-detect.d.ts +2 -0
  402. package/statistics/summarizer/auto-detect.js +32 -0
  403. package/statistics/summarizer/first-phase/process.d.ts +6 -0
  404. package/statistics/summarizer/first-phase/process.js +81 -0
  405. package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
  406. package/statistics/summarizer/post-process/clusterer.js +43 -0
  407. package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
  408. package/statistics/summarizer/post-process/file-based-count.js +49 -0
  409. package/statistics/summarizer/post-process/histogram.d.ts +59 -0
  410. package/statistics/summarizer/post-process/histogram.js +128 -0
  411. package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
  412. package/statistics/summarizer/post-process/post-process-output.js +105 -0
  413. package/statistics/summarizer/second-phase/process.d.ts +11 -0
  414. package/statistics/summarizer/second-phase/process.js +116 -0
  415. package/statistics/summarizer/summarizer.d.ts +35 -0
  416. package/statistics/summarizer/summarizer.js +135 -0
  417. package/util/ansi.d.ts +2 -2
  418. package/util/ansi.js +2 -2
  419. package/util/arrays.d.ts +11 -1
  420. package/util/arrays.js +34 -1
  421. package/util/assert.d.ts +1 -0
  422. package/util/assert.js +5 -1
  423. package/util/cfg/cfg.d.ts +3 -2
  424. package/util/cfg/cfg.js +17 -28
  425. package/util/cfg/visitor.d.ts +1 -1
  426. package/util/defaultmap.d.ts +1 -1
  427. package/util/defaultmap.js +1 -1
  428. package/util/diff.d.ts +4 -4
  429. package/util/files.d.ts +2 -2
  430. package/util/files.js +1 -1
  431. package/util/log.d.ts +1 -0
  432. package/util/log.js +7 -1
  433. package/util/logic.d.ts +1 -0
  434. package/util/logic.js +3 -0
  435. package/util/mermaid/ast.d.ts +1 -1
  436. package/util/mermaid/ast.js +2 -2
  437. package/util/mermaid/cfg.d.ts +1 -1
  438. package/util/mermaid/dfg.d.ts +34 -8
  439. package/util/mermaid/dfg.js +99 -70
  440. package/util/mermaid/mermaid.d.ts +1 -1
  441. package/util/mermaid/mermaid.js +6 -7
  442. package/util/objects.js +4 -0
  443. package/util/quads.d.ts +3 -3
  444. package/util/quads.js +0 -1
  445. package/util/range.d.ts +27 -14
  446. package/util/range.js +31 -27
  447. package/util/version.js +1 -1
  448. package/core/index.d.ts +0 -4
  449. package/core/index.js +0 -23
  450. package/core/input.d.ts +0 -42
  451. package/core/output.d.ts +0 -15
  452. package/core/slicer.d.ts +0 -124
  453. package/core/slicer.js +0 -227
  454. package/core/steps.d.ts +0 -508
  455. package/core/steps.js +0 -100
  456. package/dataflow/environments/index.d.ts +0 -7
  457. package/dataflow/environments/index.js +0 -23
  458. package/dataflow/environments/register.js +0 -40
  459. package/dataflow/environments/scopes.d.ts +0 -6
  460. package/dataflow/environments/scopes.js +0 -6
  461. package/dataflow/graph/index.d.ts +0 -4
  462. package/dataflow/graph/index.js +0 -21
  463. package/dataflow/index.d.ts +0 -5
  464. package/dataflow/index.js +0 -24
  465. package/dataflow/internal/info.d.ts +0 -21
  466. package/dataflow/internal/info.js +0 -16
  467. package/dataflow/internal/process/access.d.ts +0 -4
  468. package/dataflow/internal/process/access.js +0 -53
  469. package/dataflow/internal/process/expression-list.d.ts +0 -8
  470. package/dataflow/internal/process/expression-list.js +0 -144
  471. package/dataflow/internal/process/functions/argument.d.ts +0 -8
  472. package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
  473. package/dataflow/internal/process/functions/exit-points.js +0 -121
  474. package/dataflow/internal/process/functions/function-call.d.ts +0 -5
  475. package/dataflow/internal/process/functions/function-call.js +0 -105
  476. package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
  477. package/dataflow/internal/process/functions/function-definition.js +0 -176
  478. package/dataflow/internal/process/functions/source.d.ts +0 -8
  479. package/dataflow/internal/process/functions/source.js +0 -81
  480. package/dataflow/internal/process/if-then-else.d.ts +0 -4
  481. package/dataflow/internal/process/if-then-else.js +0 -56
  482. package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
  483. package/dataflow/internal/process/loops/for-loop.js +0 -54
  484. package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
  485. package/dataflow/internal/process/loops/repeat-loop.js +0 -21
  486. package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
  487. package/dataflow/internal/process/loops/while-loop.js +0 -31
  488. package/dataflow/internal/process/operators/assignment.d.ts +0 -4
  489. package/dataflow/internal/process/operators/assignment.js +0 -129
  490. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
  491. package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
  492. package/dataflow/internal/process/operators/pipe.d.ts +0 -4
  493. package/dataflow/internal/process/operators/pipe.js +0 -46
  494. package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
  495. package/dataflow/internal/process/operators/unary-op.js +0 -10
  496. package/dataflow/internal/process/symbol.d.ts +0 -4
  497. package/dataflow/internal/process/symbol.js +0 -21
  498. package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
  499. package/dataflow/internal/process/uninteresting-leaf.js +0 -9
  500. package/index.d.ts +0 -4
  501. package/index.js +0 -21
  502. package/r-bridge/index.d.ts +0 -11
  503. package/r-bridge/index.js +0 -28
  504. package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
  505. package/r-bridge/lang-4.x/ast/index.js +0 -22
  506. package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
  507. package/r-bridge/lang-4.x/ast/model/index.js +0 -23
  508. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
  509. package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
  510. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
  511. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
  512. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
  513. package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
  514. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
  515. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
  516. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
  517. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
  518. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
  519. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
  520. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
  521. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
  522. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
  523. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
  524. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
  525. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
  526. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
  527. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
  528. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
  529. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
  530. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
  531. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
  532. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
  533. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
  534. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
  535. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
  536. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
  537. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
  538. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
  539. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
  540. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
  541. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
  542. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
  543. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
  544. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
  545. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
  546. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
  547. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
  548. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
  549. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
  550. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
  551. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
  552. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
  553. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
  554. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
  555. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
  556. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
  557. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
  558. package/r-bridge/lang-4.x/index.d.ts +0 -2
  559. package/r-bridge/lang-4.x/index.js +0 -19
  560. package/slicing/criterion/filters/index.d.ts +0 -1
  561. package/slicing/criterion/filters/index.js +0 -18
  562. package/slicing/criterion/index.d.ts +0 -3
  563. package/slicing/criterion/index.js +0 -20
  564. package/slicing/index.d.ts +0 -3
  565. package/slicing/index.js +0 -20
  566. package/slicing/static/index.d.ts +0 -1
  567. package/slicing/static/index.js +0 -18
  568. package/util/mermaid/index.d.ts +0 -3
  569. package/util/mermaid/index.js +0 -20
  570. /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
@@ -1,67 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Operators = exports.AssignmentsRAst = exports.Assignments = exports.ModelFormulaOperatorsRAst = exports.ModelFormulaOperators = exports.LogicalOperatorsRAst = exports.LogicalOperators = exports.ComparisonOperatorsRAst = exports.ComparisonOperators = exports.ArithmeticOperatorsRAst = exports.ArithmeticOperators = exports.OperatorDatabase = void 0;
3
+ exports.UnaryOperatorsInRAst = exports.OperatorsInRAst = exports.Operators = exports.OperatorDatabase = void 0;
4
4
  /* eslint-disable */
5
5
  exports.OperatorDatabase = {
6
6
  /* model formulae */
7
- '~': { name: 'model formulae', stringUsedInRAst: "~" /* RawRType.Tilde */, stringUsedInternally: '~', flavorInRAst: 'model formula', flavor: 'model formula', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
7
+ '~': { name: 'model formulae', stringUsedInRAst: "~" /* RawRType.Tilde */, stringUsedInternally: '~', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'model-formula', 'function-calls'] },
8
8
  /* arithmetic */
9
- '+': { name: 'addition or unary +', stringUsedInRAst: "+" /* RawRType.Plus */, stringUsedInternally: '+', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
10
- '-': { name: 'subtraction or unary -', stringUsedInRAst: "-" /* RawRType.Minus */, stringUsedInternally: '-', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
11
- '*': { name: 'multiplication', stringUsedInRAst: "*" /* RawRType.Times */, stringUsedInternally: '*', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
12
- '/': { name: 'division', stringUsedInRAst: "/" /* RawRType.Div */, stringUsedInternally: '/', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
13
- '^': { name: 'exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '^', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
9
+ '+': { name: 'addition or unary +', stringUsedInRAst: "+" /* RawRType.Plus */, stringUsedInternally: '+', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['function-calls'] },
10
+ '-': { name: 'subtraction or unary -', stringUsedInRAst: "-" /* RawRType.Minus */, stringUsedInternally: '-', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['function-calls'] },
11
+ '*': { name: 'multiplication', stringUsedInRAst: "*" /* RawRType.Times */, stringUsedInternally: '*', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
12
+ '/': { name: 'division', stringUsedInRAst: "/" /* RawRType.Div */, stringUsedInternally: '/', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
13
+ '^': { name: 'exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '^', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
14
14
  /* no error, R uses ^ to represent ** in the AST */
15
- '**': { name: 'alternative exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '**', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
16
- '%%': { name: 'modulus', stringUsedInRAst: '%%', stringUsedInternally: '%%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
17
- '%/%': { name: 'integer division', stringUsedInRAst: '%/%', stringUsedInternally: '%/%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
18
- '%*%': { name: 'matrix product', stringUsedInRAst: '%*%', stringUsedInternally: '%*%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
19
- '%o%': { name: 'outer product', stringUsedInRAst: '%o%', stringUsedInternally: '%o%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
20
- '%x%': { name: 'kronecker product', stringUsedInRAst: '%x%', stringUsedInternally: '%x%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
15
+ '**': { name: 'alternative exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '**', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
16
+ '%%': { name: 'modulus', stringUsedInRAst: '%%', stringUsedInternally: '%%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
17
+ '%/%': { name: 'integer division', stringUsedInRAst: '%/%', stringUsedInternally: '%/%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
18
+ '%*%': { name: 'matrix product', stringUsedInRAst: '%*%', stringUsedInternally: '%*%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
19
+ '%o%': { name: 'outer product', stringUsedInRAst: '%o%', stringUsedInternally: '%o%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
20
+ '%x%': { name: 'kronecker product', stringUsedInRAst: '%x%', stringUsedInternally: '%x%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
21
21
  /* comparison */
22
- '==': { name: 'equal to', stringUsedInRAst: "EQ" /* RawRType.Eq */, stringUsedInternally: '==', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
23
- '!=': { name: 'not equal to', stringUsedInRAst: "NE" /* RawRType.Ne */, stringUsedInternally: '!=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
24
- '>': { name: 'greater than', stringUsedInRAst: "GT" /* RawRType.Gt */, stringUsedInternally: '>', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
25
- '>=': { name: 'greater than or equal to', stringUsedInRAst: "GE" /* RawRType.Ge */, stringUsedInternally: '>=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
26
- '<': { name: 'less than', stringUsedInRAst: "LT" /* RawRType.Lt */, stringUsedInternally: '<', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
27
- '<=': { name: 'less than or equal to', stringUsedInRAst: "LE" /* RawRType.Le */, stringUsedInternally: '<=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
22
+ '==': { name: 'equal to', stringUsedInRAst: "EQ" /* RawRType.Eq */, stringUsedInternally: '==', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
23
+ '!=': { name: 'not equal to', stringUsedInRAst: "NE" /* RawRType.Ne */, stringUsedInternally: '!=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
24
+ '>': { name: 'greater than', stringUsedInRAst: "GT" /* RawRType.Gt */, stringUsedInternally: '>', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
25
+ '>=': { name: 'greater than or equal to', stringUsedInRAst: "GE" /* RawRType.Ge */, stringUsedInternally: '>=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
26
+ '<': { name: 'less than', stringUsedInRAst: "LT" /* RawRType.Lt */, stringUsedInternally: '<', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
27
+ '<=': { name: 'less than or equal to', stringUsedInRAst: "LE" /* RawRType.Le */, stringUsedInternally: '<=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
28
28
  /* logical */
29
- '&': { name: 'logical and (vectorized)', stringUsedInRAst: "AND" /* RawRType.And */, stringUsedInternally: '&', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
30
- '&&': { name: 'logical and (non-vectorized)', stringUsedInRAst: "AND2" /* RawRType.And2 */, stringUsedInternally: '&&', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
31
- '|': { name: 'logical or (vectorized)', stringUsedInRAst: "OR" /* RawRType.Or */, stringUsedInternally: '|', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
32
- '||': { name: 'logical or (not-vectorized)', stringUsedInRAst: "OR2" /* RawRType.Or2 */, stringUsedInternally: '||', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
33
- '!': { name: 'unary not', stringUsedInRAst: "!" /* RawRType.Exclamation */, stringUsedInternally: '!', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation' },
34
- '%in%': { name: 'matching operator', stringUsedInRAst: '%in%', stringUsedInternally: '%in%', flavorInRAst: 'special', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
29
+ '&': { name: 'logical and (vectorized)', stringUsedInRAst: "AND" /* RawRType.And */, stringUsedInternally: '&', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
30
+ '&&': { name: 'logical and (non-vectorized)', stringUsedInRAst: "AND2" /* RawRType.And2 */, stringUsedInternally: '&&', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
31
+ '|': { name: 'logical or (vectorized)', stringUsedInRAst: "OR" /* RawRType.Or */, stringUsedInternally: '|', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
32
+ '||': { name: 'logical or (not-vectorized)', stringUsedInRAst: "OR2" /* RawRType.Or2 */, stringUsedInternally: '||', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
33
+ '!': { name: 'unary not', stringUsedInRAst: "!" /* RawRType.Exclamation */, stringUsedInternally: '!', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation', capabilities: ['unary-operator', 'function-calls'] },
34
+ '%in%': { name: 'matching operator', stringUsedInRAst: '%in%', stringUsedInternally: '%in%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
35
35
  /* assignment */
36
- '<-': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<-', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
37
- ':=': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: ':=', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
38
- '<<-': { name: 'left global assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<<-', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
39
- '->': { name: 'right assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
40
- '->>': { name: 'right global assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->>', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
41
- '=': { name: 'equal assignment', stringUsedInRAst: "EQ_ASSIGN" /* RawRType.EqualAssign */, stringUsedInternally: '=', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
36
+ '<-': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<-', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-left-assignment', 'function-calls'] },
37
+ ':=': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: ':=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-equal-assignment', 'function-calls'] },
38
+ '<<-': { name: 'left global assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<<-', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'super-left-assignment', 'function-calls'] },
39
+ '->': { name: 'right assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-right-assignment', 'function-calls'] },
40
+ '->>': { name: 'right global assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->>', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'super-right-assignment', 'function-calls'] },
41
+ '=': { name: 'equal assignment', stringUsedInRAst: "EQ_ASSIGN" /* RawRType.EqualAssign */, stringUsedInternally: '=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-equal-assignment', 'function-calls'] },
42
42
  /* others */
43
43
  /* maybe introduce custom in-r-ast flavor for these? we consider it arithmetic, as it works on numbers => if we change this we have to create custom tests! (with arithmetic, there is the automatic test set) */
44
- ':': { name: 'sequence operator', stringUsedInRAst: ":" /* RawRType.Colon */, stringUsedInternally: ':', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
45
- '?': { name: 'question', stringUsedInRAst: "?" /* RawRType.Question */, stringUsedInternally: '?', flavorInRAst: 'special', flavor: 'logical', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation' }
44
+ ':': { name: 'sequence operator', stringUsedInRAst: ":" /* RawRType.Colon */, stringUsedInternally: ':', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'built-in-sequencing'] },
45
+ '?': { name: 'question', stringUsedInRAst: "?" /* RawRType.Question */, stringUsedInternally: '?', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation', capabilities: ['unary-operator', 'built-in-help'] }
46
46
  };
47
47
  /* eslint-enable */
48
48
  function buildOperatorRAstCollection(operators) {
49
49
  return new Set(operators.map(op => exports.OperatorDatabase[op].stringUsedInRAst));
50
50
  }
51
- exports.ArithmeticOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'arithmetic');
51
+ exports.Operators = Object.keys(exports.OperatorDatabase);
52
52
  // '**' will be treated as '^'
53
- exports.ArithmeticOperatorsRAst = buildOperatorRAstCollection(exports.ArithmeticOperators);
54
- exports.ComparisonOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'comparison');
55
- exports.ComparisonOperatorsRAst = buildOperatorRAstCollection(exports.ComparisonOperators);
56
- exports.LogicalOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'logical');
57
- exports.LogicalOperatorsRAst = buildOperatorRAstCollection(exports.LogicalOperators);
58
- exports.ModelFormulaOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'model formula');
59
- exports.ModelFormulaOperatorsRAst = buildOperatorRAstCollection(exports.ModelFormulaOperators);
60
- exports.Assignments = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'assignment');
61
- exports.AssignmentsRAst = buildOperatorRAstCollection(exports.Assignments);
62
- exports.Operators = [
63
- ...exports.ArithmeticOperators,
64
- ...exports.ComparisonOperators,
65
- ...exports.LogicalOperators,
66
- ];
53
+ exports.OperatorsInRAst = buildOperatorRAstCollection(exports.Operators);
54
+ exports.UnaryOperatorsInRAst = buildOperatorRAstCollection(exports.Operators.filter(op => exports.OperatorDatabase[op].arity !== 2 /* OperatorArity.Binary */));
67
55
  //# sourceMappingURL=operators.js.map
@@ -13,10 +13,8 @@ import type { SourceRange } from '../../../../../util/range';
13
13
  import { BiMap } from '../../../../../util/bimap';
14
14
  import type { MergeableRecord } from '../../../../../util/objects';
15
15
  import { RoleInParent } from './role';
16
- /** The type of the id assigned to each node. Branded to avoid problematic usages with other string types. */
17
- export type NodeId = string & {
18
- __brand?: 'node-id';
19
- };
16
+ import type { NodeId } from './node-id';
17
+ import type { RDelimiter } from '../nodes/info/r-delimiter';
20
18
  /**
21
19
  * A function that given an RNode returns a (guaranteed) unique id for it
22
20
  * @param data - the node to generate an id for
@@ -27,27 +25,33 @@ export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
27
25
  /**
28
26
  * The simplest id generator which just increments a number on each call.
29
27
  */
30
- export declare function deterministicCountingIdGenerator(start?: number): () => NodeId;
28
+ export declare function deterministicCountingIdGenerator(id?: number): () => NodeId;
31
29
  export declare function sourcedDeterministicCountingIdGenerator(path: string, location: SourceRange, start?: number): () => NodeId;
32
30
  /**
33
31
  * Generates the location id, used by {@link deterministicLocationIdGenerator}.
34
32
  *
35
33
  * @param data - the node to generate an id for, must have location information
36
34
  */
37
- export declare function nodeToLocationId<OtherInfo>(data: RNode<OtherInfo>): NodeId;
35
+ export declare function nodeToLocationId<OtherInfo>(data: RNode<OtherInfo> | RDelimiter): NodeId;
38
36
  /**
39
37
  * Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
40
- * If a node has no location information, it will be assigned a unique counter value.
38
+ * If a node has no location information, it will be assigned a unique counter-value.
41
39
  *
42
- * @param start - the start value for the counter in case nodes do not have a location information
40
+ * @param start - the start value for the counter, in case nodes do not have location information
43
41
  */
44
42
  export declare function deterministicLocationIdGenerator<OtherInfo>(start?: number): IdGenerator<OtherInfo>;
45
43
  export interface ParentContextInfo extends MergeableRecord {
46
44
  role: RoleInParent;
47
45
  /**
48
- * 0-based index of the child in the parent (code semantics, e.g., for an if-then-else, the condition will be 0, the then-case 1, ...)
46
+ * The depth of the node in the AST
49
47
  *
50
- * The index is adaptive, that means that if the name of an argument exists, it will have the index 0, and the value the index 1.
48
+ * The root node has a depth of 0, its children a depth of 1, and so on.
49
+ */
50
+ depth: number;
51
+ /**
52
+ * 0-based index of the child in the parent (code semantics, e.g., for an if-then-else, the condition will be 0, the then-case will be 1, ...)
53
+ *
54
+ * The index is adaptive, that means that if the name of an argument exists, it will have index 0, and the value will have index 1.
51
55
  * But if the argument is unnamed, its value will get the index 0 instead.
52
56
  */
53
57
  index: number;
@@ -59,16 +63,16 @@ export interface ParentInformation extends ParentContextInfo {
59
63
  parent: NodeId | undefined;
60
64
  }
61
65
  export type RNodeWithParent<OtherInfo = NoInfo> = RNode<OtherInfo & ParentInformation>;
62
- export type DecoratedAstMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherInfo>>;
66
+ export type AstIdMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherInfo>>;
63
67
  /**
64
68
  * Contains the normalized AST as a doubly linked tree
65
69
  * and a map from ids to nodes so that parent links can be chased easily.
66
70
  */
67
- export interface NormalizedAst<OtherInfo = ParentInformation> {
71
+ export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<OtherInfo & ParentInformation>> {
68
72
  /** Bidirectional mapping of ids to the corresponding nodes and the other way */
69
- idMap: DecoratedAstMap<OtherInfo>;
73
+ idMap: AstIdMap<OtherInfo>;
70
74
  /** The root of the AST with parent information */
71
- ast: RNodeWithParent<OtherInfo>;
75
+ ast: Node;
72
76
  }
73
77
  /**
74
78
  * Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
@@ -78,6 +82,6 @@ export interface NormalizedAst<OtherInfo = ParentInformation> {
78
82
  *
79
83
  * @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
80
84
  *
81
- * @returns A {@link DecoratedAst | decorated AST} based on the input and the id provider.
85
+ * @returns A decorated AST based on the input and the id provider.
82
86
  */
83
87
  export declare function decorateAst<OtherInfo = NoInfo>(ast: RNode<OtherInfo>, getId?: IdGenerator<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
@@ -13,13 +13,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.decorateAst = exports.deterministicLocationIdGenerator = exports.nodeToLocationId = exports.sourcedDeterministicCountingIdGenerator = exports.deterministicCountingIdGenerator = void 0;
14
14
  const assert_1 = require("../../../../../util/assert");
15
15
  const bimap_1 = require("../../../../../util/bimap");
16
- const fold_1 = require("./fold");
16
+ const stateful_fold_1 = require("./stateful-fold");
17
+ const r_function_call_1 = require("../nodes/r-function-call");
17
18
  /**
18
19
  * The simplest id generator which just increments a number on each call.
19
20
  */
20
- function deterministicCountingIdGenerator(start = 0) {
21
- let id = start;
22
- return () => `${id++}`;
21
+ function deterministicCountingIdGenerator(id = 0) {
22
+ return () => id++;
23
23
  }
24
24
  exports.deterministicCountingIdGenerator = deterministicCountingIdGenerator;
25
25
  function sourcedDeterministicCountingIdGenerator(path, location, start = 0) {
@@ -27,8 +27,8 @@ function sourcedDeterministicCountingIdGenerator(path, location, start = 0) {
27
27
  return () => `${path}-${loc2Id(location)}-${id++}`;
28
28
  }
29
29
  exports.sourcedDeterministicCountingIdGenerator = sourcedDeterministicCountingIdGenerator;
30
- function loc2Id(loc) {
31
- return `${loc.start.line}:${loc.start.column}-${loc.end.line}:${loc.end.column}`;
30
+ function loc2Id([sl, sc, el, ec]) {
31
+ return `${sl}:${sc}-${el}:${ec}`;
32
32
  }
33
33
  /**
34
34
  * Generates the location id, used by {@link deterministicLocationIdGenerator}.
@@ -43,16 +43,19 @@ function nodeToLocationId(data) {
43
43
  exports.nodeToLocationId = nodeToLocationId;
44
44
  /**
45
45
  * Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
46
- * If a node has no location information, it will be assigned a unique counter value.
46
+ * If a node has no location information, it will be assigned a unique counter-value.
47
47
  *
48
- * @param start - the start value for the counter in case nodes do not have a location information
48
+ * @param start - the start value for the counter, in case nodes do not have location information
49
49
  */
50
50
  function deterministicLocationIdGenerator(start = 0) {
51
51
  let id = start;
52
52
  return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
53
53
  }
54
54
  exports.deterministicLocationIdGenerator = deterministicLocationIdGenerator;
55
- const defaultParentContext = { role: "root" /* RoleInParent.Root */, index: 0 };
55
+ const defaultParentContext = {
56
+ role: "root" /* RoleInParent.Root */,
57
+ index: 0
58
+ };
56
59
  /**
57
60
  * Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
58
61
  *
@@ -61,34 +64,26 @@ const defaultParentContext = { role: "root" /* RoleInParent.Root */, index: 0 };
61
64
  *
62
65
  * @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
63
66
  *
64
- * @returns A {@link DecoratedAst | decorated AST} based on the input and the id provider.
67
+ * @returns A decorated AST based on the input and the id provider.
65
68
  */
66
69
  function decorateAst(ast, getId = deterministicCountingIdGenerator(0)) {
67
70
  const idMap = new bimap_1.BiMap();
68
71
  const info = { idMap, getId };
69
- /* Please note, that all fold processors do not re-create copies in higher folding steps so that the idMap stays intact. */
72
+ /* Please note, that all fold processors do not re-create copies in higher-folding steps so that the idMap stays intact. */
70
73
  const foldLeaf = createFoldForLeaf(info);
71
74
  const foldBinaryOp = createFoldForBinaryOp(info);
72
75
  const unaryOp = createFoldForUnaryOp(info);
73
- const decoratedAst = (0, fold_1.foldAst)(ast, {
76
+ /* we pass down the depth */
77
+ const decoratedAst = (0, stateful_fold_1.foldAstStateful)(ast, -1, {
78
+ down: (_, down) => down + 1,
74
79
  foldNumber: foldLeaf,
75
80
  foldString: foldLeaf,
76
81
  foldLogical: foldLeaf,
77
82
  foldSymbol: foldLeaf,
78
83
  foldAccess: createFoldForAccess(info),
79
- binaryOp: {
80
- foldLogicalOp: foldBinaryOp,
81
- foldArithmeticOp: foldBinaryOp,
82
- foldComparisonOp: foldBinaryOp,
83
- foldAssignment: foldBinaryOp,
84
- foldPipe: foldBinaryOp,
85
- foldModelFormula: foldBinaryOp
86
- },
87
- unaryOp: {
88
- foldArithmeticOp: unaryOp,
89
- foldLogicalOp: unaryOp,
90
- foldModelFormula: unaryOp
91
- },
84
+ foldBinaryOp: foldBinaryOp,
85
+ foldPipe: foldBinaryOp,
86
+ foldUnaryOp: unaryOp,
92
87
  other: {
93
88
  foldComment: foldLeaf,
94
89
  foldLineDirective: foldLeaf
@@ -118,17 +113,26 @@ function decorateAst(ast, getId = deterministicCountingIdGenerator(0)) {
118
113
  }
119
114
  exports.decorateAst = decorateAst;
120
115
  function createFoldForLeaf(info) {
121
- return (data) => {
116
+ return (data, depth) => {
122
117
  const id = info.getId(data);
123
- const decorated = { ...data, info: { ...data.info, id, parent: undefined, ...defaultParentContext } };
118
+ const decorated = {
119
+ ...data,
120
+ info: {
121
+ ...data.info,
122
+ id,
123
+ parent: undefined,
124
+ ...defaultParentContext,
125
+ depth
126
+ }
127
+ };
124
128
  info.idMap.set(id, decorated);
125
129
  return decorated;
126
130
  };
127
131
  }
128
132
  function createFoldForBinaryOp(info) {
129
- return (data, lhs, rhs) => {
133
+ return (data, lhs, rhs, depth) => {
130
134
  const id = info.getId(data);
131
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, lhs, rhs };
135
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, lhs, rhs };
132
136
  info.idMap.set(id, decorated);
133
137
  const lhsInfo = lhs.info;
134
138
  lhsInfo.parent = id;
@@ -147,9 +151,9 @@ function createFoldForBinaryOp(info) {
147
151
  };
148
152
  }
149
153
  function createFoldForUnaryOp(info) {
150
- return (data, operand) => {
154
+ return (data, operand, depth) => {
151
155
  const id = info.getId(data);
152
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, operand };
156
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, operand };
153
157
  info.idMap.set(id, decorated);
154
158
  const opInfo = operand.info;
155
159
  opInfo.parent = id;
@@ -158,9 +162,9 @@ function createFoldForUnaryOp(info) {
158
162
  };
159
163
  }
160
164
  function createFoldForAccess(info) {
161
- return (data, accessed, access) => {
165
+ return (data, accessed, access, depth) => {
162
166
  const id = info.getId(data);
163
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, accessed, access };
167
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, accessed, access };
164
168
  info.idMap.set(id, decorated);
165
169
  const accessedInfo = accessed.info;
166
170
  accessedInfo.parent = id;
@@ -169,7 +173,7 @@ function createFoldForAccess(info) {
169
173
  let idx = 0; // the first oe will be skipped in the first iter
170
174
  for (const acc of access) {
171
175
  idx++;
172
- if (acc !== null) {
176
+ if (acc !== r_function_call_1.EmptyArgument) {
173
177
  const curInfo = acc.info;
174
178
  curInfo.parent = id;
175
179
  curInfo.index = idx;
@@ -181,9 +185,9 @@ function createFoldForAccess(info) {
181
185
  };
182
186
  }
183
187
  function createFoldForForLoop(info) {
184
- return (data, variable, vector, body) => {
188
+ return (data, variable, vector, body, depth) => {
185
189
  const id = info.getId(data);
186
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, variable, vector, body };
190
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, variable, vector, body };
187
191
  info.idMap.set(id, decorated);
188
192
  const varInfo = variable.info;
189
193
  varInfo.parent = id;
@@ -200,9 +204,9 @@ function createFoldForForLoop(info) {
200
204
  };
201
205
  }
202
206
  function createFoldForRepeatLoop(info) {
203
- return (data, body) => {
207
+ return (data, body, depth) => {
204
208
  const id = info.getId(data);
205
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, body };
209
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, body };
206
210
  info.idMap.set(id, decorated);
207
211
  const bodyInfo = body.info;
208
212
  bodyInfo.parent = id;
@@ -211,9 +215,9 @@ function createFoldForRepeatLoop(info) {
211
215
  };
212
216
  }
213
217
  function createFoldForWhileLoop(info) {
214
- return (data, condition, body) => {
218
+ return (data, condition, body, depth) => {
215
219
  const id = info.getId(data);
216
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, body };
220
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, condition, body };
217
221
  info.idMap.set(id, decorated);
218
222
  const condInfo = condition.info;
219
223
  condInfo.parent = id;
@@ -226,9 +230,9 @@ function createFoldForWhileLoop(info) {
226
230
  };
227
231
  }
228
232
  function createFoldForIfThenElse(info) {
229
- return (data, condition, then, otherwise) => {
233
+ return (data, condition, then, otherwise, depth) => {
230
234
  const id = info.getId(data);
231
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, then, otherwise };
235
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, condition, then, otherwise };
232
236
  info.idMap.set(id, decorated);
233
237
  const condInfo = condition.info;
234
238
  condInfo.parent = id;
@@ -247,9 +251,9 @@ function createFoldForIfThenElse(info) {
247
251
  };
248
252
  }
249
253
  function createFoldForExprList(info) {
250
- return (data, children) => {
254
+ return (data, grouping, children, depth) => {
251
255
  const id = info.getId(data);
252
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, children };
256
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, grouping, children };
253
257
  info.idMap.set(id, decorated);
254
258
  let i = 0;
255
259
  for (const child of children) {
@@ -262,14 +266,14 @@ function createFoldForExprList(info) {
262
266
  };
263
267
  }
264
268
  function createFoldForFunctionCall(info) {
265
- return (data, functionName, args) => {
269
+ return (data, functionName, args, depth) => {
266
270
  const id = info.getId(data);
267
271
  let decorated;
268
272
  if (data.flavor === 'named') {
269
- decorated = { ...data, info: { ...data.info, id, parent: undefined }, functionName, arguments: args };
273
+ decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, functionName, arguments: args };
270
274
  }
271
275
  else {
272
- decorated = { ...data, info: { ...data.info, id, parent: undefined }, calledFunction: functionName, arguments: args };
276
+ decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, calledFunction: functionName, arguments: args };
273
277
  }
274
278
  info.idMap.set(id, decorated);
275
279
  const funcInfo = functionName.info;
@@ -278,19 +282,20 @@ function createFoldForFunctionCall(info) {
278
282
  let idx = 0;
279
283
  for (const arg of args) {
280
284
  idx++;
281
- if (arg !== undefined) {
285
+ if (arg !== r_function_call_1.EmptyArgument) {
282
286
  const argInfo = arg.info;
283
287
  argInfo.parent = id;
284
288
  argInfo.index = idx;
289
+ argInfo.role = "call-argument" /* RoleInParent.FunctionCallArgument */;
285
290
  }
286
291
  }
287
292
  return decorated;
288
293
  };
289
294
  }
290
295
  function createFoldForFunctionDefinition(info) {
291
- return (data, params, body) => {
296
+ return (data, params, body, depth) => {
292
297
  const id = info.getId(data);
293
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, parameters: params, body };
298
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, parameters: params, body };
294
299
  info.idMap.set(id, decorated);
295
300
  let idx = 0;
296
301
  for (const param of params) {
@@ -307,9 +312,9 @@ function createFoldForFunctionDefinition(info) {
307
312
  };
308
313
  }
309
314
  function createFoldForFunctionParameter(info) {
310
- return (data, name, defaultValue) => {
315
+ return (data, name, defaultValue, depth) => {
311
316
  const id = info.getId(data);
312
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, defaultValue };
317
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, name, defaultValue };
313
318
  info.idMap.set(id, decorated);
314
319
  const nameInfo = name.info;
315
320
  nameInfo.parent = id;
@@ -324,9 +329,9 @@ function createFoldForFunctionParameter(info) {
324
329
  };
325
330
  }
326
331
  function createFoldForFunctionArgument(info) {
327
- return (data, name, value) => {
332
+ return (data, name, value, depth) => {
328
333
  const id = info.getId(data);
329
- const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, value };
334
+ const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, name, value };
330
335
  info.idMap.set(id, decorated);
331
336
  let idx = 0;
332
337
  if (name) {
@@ -0,0 +1,8 @@
1
+ import type { AstIdMap } from './decorate';
2
+ /** The type of the id assigned to each node. Branded to avoid problematic usages with other string or numeric types. */
3
+ export type NodeId<T extends string | number = string | number> = T & {
4
+ __brand?: 'node-id';
5
+ };
6
+ /** used so that we do not have to store strings for the default numeric ids */
7
+ export declare function normalizeIdToNumberIfPossible(id: NodeId): NodeId;
8
+ export declare function recoverName(id: NodeId, idMap?: AstIdMap): string | undefined;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recoverName = exports.normalizeIdToNumberIfPossible = void 0;
4
+ const numIdRegex = /^\d+$/;
5
+ /** used so that we do not have to store strings for the default numeric ids */
6
+ function normalizeIdToNumberIfPossible(id) {
7
+ // check if string is number
8
+ if (typeof id === 'string' && numIdRegex.test(id)) {
9
+ return Number(id);
10
+ }
11
+ return id;
12
+ }
13
+ exports.normalizeIdToNumberIfPossible = normalizeIdToNumberIfPossible;
14
+ function recoverName(id, idMap) {
15
+ return idMap?.get(id)?.lexeme;
16
+ }
17
+ exports.recoverName = recoverName;
18
+ //# sourceMappingURL=node-id.js.map
@@ -1,4 +1,4 @@
1
- import type { DecoratedAstMap, RNodeWithParent } from './decorate';
1
+ import type { AstIdMap, RNodeWithParent } from './decorate';
2
2
  /**
3
3
  * Describes the role of the node in its parent. For example,
4
4
  * if we have `if(TRUE) { ... }`, the role of the `TRUE` node is `IfCondition`.
@@ -38,4 +38,4 @@ export declare const enum RoleInParent {
38
38
  /**
39
39
  * Returns the roles of the parents of the given node, starting with the parent-role of the node itself.
40
40
  */
41
- export declare function rolesOfParents(node: RNodeWithParent, idMap: DecoratedAstMap): RoleInParent[];
41
+ export declare function rolesOfParents(node: RNodeWithParent, idMap: AstIdMap): RoleInParent[];
@@ -1,6 +1,27 @@
1
1
  import type { DeepReadonly } from 'ts-essentials';
2
- import type { RExpressionList, RNumber, RSymbol, RLogical, RString, RArithmeticBinaryOp, RAssignmentOp, RComparisonBinaryOp, RLogicalBinaryOp, RArithmeticUnaryOp, RLogicalUnaryOp, RIfThenElse, RForLoop, RRepeatLoop, RWhileLoop, RFunctionCall, RComment, RNext, RBreak, RParameter, RArgument, RFunctionDefinition, RAccess, RModelFormulaBinaryOp, RModelFormulaUnaryOp, RLineDirective, RPipe } from '../nodes';
3
2
  import type { RNode } from '../model';
3
+ import type { RNumber } from '../nodes/r-number';
4
+ import type { RString } from '../nodes/r-string';
5
+ import type { RLogical } from '../nodes/r-logical';
6
+ import type { RSymbol } from '../nodes/r-symbol';
7
+ import type { RAccess } from '../nodes/r-access';
8
+ import type { RBinaryOp } from '../nodes/r-binary-op';
9
+ import type { RPipe } from '../nodes/r-pipe';
10
+ import type { RUnaryOp } from '../nodes/r-unary-op';
11
+ import type { RFunctionCall } from '../nodes/r-function-call';
12
+ import { EmptyArgument } from '../nodes/r-function-call';
13
+ import type { RForLoop } from '../nodes/r-for-loop';
14
+ import type { RWhileLoop } from '../nodes/r-while-loop';
15
+ import type { RRepeatLoop } from '../nodes/r-repeat-loop';
16
+ import type { RNext } from '../nodes/r-next';
17
+ import type { RBreak } from '../nodes/r-break';
18
+ import type { RComment } from '../nodes/r-comment';
19
+ import type { RLineDirective } from '../nodes/r-line-directive';
20
+ import type { RIfThenElse } from '../nodes/r-if-then-else';
21
+ import type { RExpressionList } from '../nodes/r-expression-list';
22
+ import type { RFunctionDefinition } from '../nodes/r-function-definition';
23
+ import type { RArgument } from '../nodes/r-argument';
24
+ import type { RParameter } from '../nodes/r-parameter';
4
25
  /**
5
26
  * Called during the down-pass, will pe propagated to children and used in the up-pass (see {@link StatefulFoldFunctions}).
6
27
  * <p>
@@ -17,20 +38,10 @@ export interface StatefulFoldFunctions<Info, Down, Up> {
17
38
  foldString: (str: RString<Info>, down: Down) => Up;
18
39
  foldLogical: (logical: RLogical<Info>, down: Down) => Up;
19
40
  foldSymbol: (symbol: RSymbol<Info>, down: Down) => Up;
20
- foldAccess: (node: RAccess<Info>, name: Up, access: string | (null | Up)[], down: Down) => Up;
21
- binaryOp: {
22
- foldLogicalOp: (op: RLogicalBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
23
- foldArithmeticOp: (op: RArithmeticBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
24
- foldComparisonOp: (op: RComparisonBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
25
- foldAssignment: (op: RAssignmentOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
26
- foldPipe: (op: RPipe<Info>, lhs: Up, rhs: Up, down: Down) => Up;
27
- foldModelFormula: (op: RModelFormulaBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
28
- };
29
- unaryOp: {
30
- foldLogicalOp: (op: RLogicalUnaryOp<Info>, operand: Up, down: Down) => Up;
31
- foldArithmeticOp: (op: RArithmeticUnaryOp<Info>, operand: Up, down: Down) => Up;
32
- foldModelFormula: (op: RModelFormulaUnaryOp<Info>, operand: Up, down: Down) => Up;
33
- };
41
+ foldAccess: (node: RAccess<Info>, name: Up, access: readonly (typeof EmptyArgument | Up)[], down: Down) => Up;
42
+ foldBinaryOp: (op: RBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
43
+ foldPipe: (op: RPipe<Info>, lhs: Up, rhs: Up, down: Down) => Up;
44
+ foldUnaryOp: (op: RUnaryOp<Info>, operand: Up, down: Down) => Up;
34
45
  loop: {
35
46
  foldFor: (loop: RForLoop<Info>, variable: Up, vector: Up, body: Up, down: Down) => Up;
36
47
  foldWhile: (loop: RWhileLoop<Info>, condition: Up, body: Up, down: Down) => Up;
@@ -44,11 +55,11 @@ export interface StatefulFoldFunctions<Info, Down, Up> {
44
55
  };
45
56
  /** The `otherwise` argument is `undefined` if the `else` branch is missing */
46
57
  foldIfThenElse: (ifThenExpr: RIfThenElse<Info>, cond: Up, then: Up, otherwise: Up | undefined, down: Down) => Up;
47
- foldExprList: (exprList: RExpressionList<Info>, expressions: Up[], down: Down) => Up;
58
+ foldExprList: (exprList: RExpressionList<Info>, grouping: [start: Up, end: Up] | undefined, expressions: Up[], down: Down) => Up;
48
59
  functions: {
49
60
  foldFunctionDefinition: (definition: RFunctionDefinition<Info>, params: Up[], body: Up, down: Down) => Up;
50
61
  /** folds named and unnamed function calls */
51
- foldFunctionCall: (call: RFunctionCall<Info>, functionNameOrExpression: Up, args: (Up | undefined)[], down: Down) => Up;
62
+ foldFunctionCall: (call: RFunctionCall<Info>, functionNameOrExpression: Up, args: (Up | typeof EmptyArgument)[], down: Down) => Up;
52
63
  /** The `name` is `undefined` if the argument is unnamed, the value, if we have something like `x=,...` */
53
64
  foldArgument: (argument: RArgument<Info>, name: Up | undefined, value: Up | undefined, down: Down) => Up;
54
65
  /** The `defaultValue` is `undefined` if the argument was not initialized with a default value */