@eagleoutice/flowr 1.5.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +52 -47
  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
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.foldAstStateful = void 0;
4
4
  const assert_1 = require("../../../../../util/assert");
5
+ const r_function_call_1 = require("../nodes/r-function-call");
5
6
  /**
6
7
  * Folds in old functional-fashion over the AST structure but allowing for a down function which can pass context to child nodes.
7
8
  */
@@ -22,13 +23,13 @@ function foldAstStateful(ast, down, folds) {
22
23
  case "RLineDirective" /* RType.LineDirective */:
23
24
  return folds.other.foldLineDirective(ast, down);
24
25
  case "RPipe" /* RType.Pipe */:
25
- return folds.binaryOp.foldPipe(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
26
+ return folds.foldPipe(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
26
27
  case "RBinaryOp" /* RType.BinaryOp */:
27
- return foldBinaryOp(ast, down, folds);
28
+ return folds.foldBinaryOp(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
28
29
  case "RUnaryOp" /* RType.UnaryOp */:
29
- return foldUnaryOp(ast, down, folds);
30
+ return folds.foldUnaryOp(ast, foldAstStateful(ast.operand, down, folds), down);
30
31
  case "RAccess" /* RType.Access */:
31
- return folds.foldAccess(ast, foldAstStateful(ast.accessed, down, folds), ast.operator === '[' || ast.operator === '[[' ? ast.access.map(access => access === null ? null : foldAstStateful(access, down, folds)) : ast.access, down);
32
+ return folds.foldAccess(ast, foldAstStateful(ast.accessed, down, folds), ast.access.map(access => access === r_function_call_1.EmptyArgument ? r_function_call_1.EmptyArgument : foldAstStateful(access, down, folds)), down);
32
33
  case "RForLoop" /* RType.ForLoop */:
33
34
  return folds.loop.foldFor(ast, foldAstStateful(ast.variable, down, folds), foldAstStateful(ast.vector, down, folds), foldAstStateful(ast.body, down, folds), down);
34
35
  case "RWhileLoop" /* RType.WhileLoop */:
@@ -36,7 +37,7 @@ function foldAstStateful(ast, down, folds) {
36
37
  case "RRepeatLoop" /* RType.RepeatLoop */:
37
38
  return folds.loop.foldRepeat(ast, foldAstStateful(ast.body, down, folds), down);
38
39
  case "RFunctionCall" /* RType.FunctionCall */:
39
- return folds.functions.foldFunctionCall(ast, foldAstStateful(ast.flavor === 'named' ? ast.functionName : ast.calledFunction, down, folds), ast.arguments.map(param => param === undefined ? param : foldAstStateful(param, down, folds)), down);
40
+ return folds.functions.foldFunctionCall(ast, foldAstStateful(ast.flavor === 'named' ? ast.functionName : ast.calledFunction, down, folds), ast.arguments.map(param => param === r_function_call_1.EmptyArgument ? param : foldAstStateful(param, down, folds)), down);
40
41
  case "RFunctionDefinition" /* RType.FunctionDefinition */:
41
42
  return folds.functions.foldFunctionDefinition(ast, ast.parameters.map(param => foldAstStateful(param, down, folds)), foldAstStateful(ast.body, down, folds), down);
42
43
  case "RParameter" /* RType.Parameter */:
@@ -50,38 +51,10 @@ function foldAstStateful(ast, down, folds) {
50
51
  case "RIfThenElse" /* RType.IfThenElse */:
51
52
  return folds.foldIfThenElse(ast, foldAstStateful(ast.condition, down, folds), foldAstStateful(ast.then, down, folds), ast.otherwise === undefined ? undefined : foldAstStateful(ast.otherwise, down, folds), down);
52
53
  case "RExpressionList" /* RType.ExpressionList */:
53
- return folds.foldExprList(ast, ast.children.map(expr => foldAstStateful(expr, down, folds)), down);
54
+ return folds.foldExprList(ast, ast.grouping ? [foldAstStateful(ast.grouping[0], down, folds), foldAstStateful(ast.grouping[1], down, folds)] : undefined, ast.children.map(expr => foldAstStateful(expr, down, folds)), down);
54
55
  default:
55
56
  (0, assert_1.assertUnreachable)(type);
56
57
  }
57
58
  }
58
59
  exports.foldAstStateful = foldAstStateful;
59
- function foldBinaryOp(ast, down, folds) {
60
- switch (ast.flavor) {
61
- case 'logical':
62
- return folds.binaryOp.foldLogicalOp(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
63
- case 'arithmetic':
64
- return folds.binaryOp.foldArithmeticOp(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
65
- case 'comparison':
66
- return folds.binaryOp.foldComparisonOp(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
67
- case 'assignment':
68
- return folds.binaryOp.foldAssignment(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
69
- case 'model formula':
70
- return folds.binaryOp.foldModelFormula(ast, foldAstStateful(ast.lhs, down, folds), foldAstStateful(ast.rhs, down, folds), down);
71
- default:
72
- (0, assert_1.assertUnreachable)(ast.flavor);
73
- }
74
- }
75
- function foldUnaryOp(ast, down, folds) {
76
- switch (ast.flavor) {
77
- case 'logical':
78
- return folds.unaryOp.foldLogicalOp(ast, foldAstStateful(ast.operand, down, folds), down);
79
- case 'arithmetic':
80
- return folds.unaryOp.foldArithmeticOp(ast, foldAstStateful(ast.operand, down, folds), down);
81
- case 'model formula':
82
- return folds.unaryOp.foldModelFormula(ast, foldAstStateful(ast.operand, down, folds), down);
83
- default:
84
- (0, assert_1.assertUnreachable)(ast.flavor);
85
- }
86
- }
87
60
  //# sourceMappingURL=stateful-fold.js.map
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.visitAst = void 0;
4
4
  const assert_1 = require("../../../../../util/assert");
5
+ const r_function_call_1 = require("../nodes/r-function-call");
5
6
  // capsuled as a class to avoid passing onExit and onEnter on *each* visit call
6
7
  class NodeVisitor {
7
8
  onEnter;
@@ -26,6 +27,7 @@ class NodeVisitor {
26
27
  this.visitSingle(node.body);
27
28
  break;
28
29
  case "RExpressionList" /* RType.ExpressionList */:
30
+ this.visit(node.grouping);
29
31
  this.visit(node.children);
30
32
  break;
31
33
  case "RForLoop" /* RType.ForLoop */:
@@ -84,8 +86,9 @@ class NodeVisitor {
84
86
  }
85
87
  visit(nodes) {
86
88
  if (Array.isArray(nodes)) {
87
- for (const node of nodes) {
88
- if (node) {
89
+ const n = nodes;
90
+ for (const node of n) {
91
+ if (node && node !== r_function_call_1.EmptyArgument) {
89
92
  this.visitSingle(node);
90
93
  }
91
94
  }
@@ -1,18 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isSymbol = void 0;
4
+ const validSymbolTypes = new Set([
5
+ "SYMBOL" /* RawRType.Symbol */,
6
+ "SYMBOL_PACKAGE" /* RawRType.SymbolPackage */,
7
+ "SYMBOL_FUNCTION_CALL" /* RawRType.SymbolFunctionCall */,
8
+ "NULL_CONST" /* RawRType.NullConst */,
9
+ "STR_CONST" /* RawRType.StringConst */,
10
+ "(" /* RawRType.ParenLeft */,
11
+ ")" /* RawRType.ParenRight */,
12
+ "{" /* RawRType.BraceLeft */,
13
+ "}" /* RawRType.BraceRight */,
14
+ "SLOT" /* RawRType.Slot */,
15
+ ]);
4
16
  /**
5
17
  * Validates, whether the given type can be used as a symbol in R
6
18
  *
7
19
  * @see RawRType
8
20
  */
9
21
  function isSymbol(type) {
10
- return (type === "SYMBOL" /* RawRType.Symbol */ ||
11
- type === "SYMBOL_PACKAGE" /* RawRType.SymbolPackage */ ||
12
- type === "SYMBOL_FUNCTION_CALL" /* RawRType.SymbolFunctionCall */ ||
13
- type === "NULL_CONST" /* RawRType.NullConst */ ||
14
- type === "STR_CONST" /* RawRType.StringConst */ ||
15
- type === "SLOT" /* RawRType.Slot */);
22
+ return validSymbolTypes.has(type);
16
23
  }
17
24
  exports.isSymbol = isSymbol;
18
25
  //# sourceMappingURL=type.js.map
@@ -11,4 +11,7 @@ export interface Entry extends Record<string, unknown> {
11
11
  text: string;
12
12
  children?: Entry[];
13
13
  }
14
- export declare function prepareParsedData(data: string): Map<number, Entry>;
14
+ /**
15
+ * Parses the given data and sets child relationship, return the list of root entries (with a parent of {@link RootId}).
16
+ */
17
+ export declare function prepareParsedData(data: string): Entry[];
@@ -4,12 +4,16 @@ exports.prepareParsedData = exports.RootId = void 0;
4
4
  const retriever_1 = require("../../../../retriever");
5
5
  const assert_1 = require("../../../../../util/assert");
6
6
  exports.RootId = 0;
7
+ /**
8
+ * Parses the given data and sets child relationship, return the list of root entries (with a parent of {@link RootId}).
9
+ */
7
10
  function prepareParsedData(data) {
8
- const json = JSON.parse(data);
11
+ const json = JSON.parse(`[${data}]`);
9
12
  (0, assert_1.guard)(Array.isArray(json), () => `Expected ${data} to be an array but was not`);
10
13
  const ret = new Map(json.map(([line1, col1, line2, col2, id, parent, token, terminal, text]) => {
11
14
  return [id, { line1, col1, line2, col2, id, parent, token: (0, retriever_1.removeRQuotes)(token), terminal, text }];
12
15
  }));
16
+ const roots = [];
13
17
  // iterate a second time to set parent-child relations (since they may be out of order in the csv)
14
18
  for (const entry of ret.values()) {
15
19
  if (entry.parent != exports.RootId) {
@@ -19,8 +23,11 @@ function prepareParsedData(data) {
19
23
  parent.children.push(entry);
20
24
  }
21
25
  }
26
+ else {
27
+ roots.push(entry);
28
+ }
22
29
  }
23
- return ret;
30
+ return roots;
24
31
  }
25
32
  exports.prepareParsedData = prepareParsedData;
26
33
  //# sourceMappingURL=format.js.map
@@ -1,7 +1,7 @@
1
- import type { DeepPartial } from 'ts-essentials';
2
- import type { XmlBasedJson, XmlParserHooks } from '../xml';
3
- import type { IdGenerator, NoInfo, NormalizedAst } from '../../model';
4
1
  import type { Entry } from './format';
2
+ import type { IdGenerator, NormalizedAst } from '../../model/processing/decorate';
3
+ import type { NoInfo } from '../../model/model';
4
+ import type { XmlBasedJson } from '../xml/input-format';
5
5
  export declare const parseLog: import("tslog").Logger<import("tslog").ILogObj>;
6
- export declare function normalize(jsonString: string, hooks?: DeepPartial<XmlParserHooks>, getId?: IdGenerator<NoInfo>): NormalizedAst;
7
- export declare function convertPreparedParsedData(valueMapping: Map<number, Entry>): XmlBasedJson;
6
+ export declare function normalize(jsonString: string, getId?: IdGenerator<NoInfo>): NormalizedAst;
7
+ export declare function convertPreparedParsedData(rootEntries: Entry[]): XmlBasedJson;
@@ -1,48 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertPreparedParsedData = exports.normalize = exports.parseLog = void 0;
4
- const xml_1 = require("../xml");
5
- const model_1 = require("../../model");
6
- const objects_1 = require("../../../../../util/objects");
7
4
  const format_1 = require("./format");
8
- const internal_1 = require("../xml/internal");
9
5
  const log_1 = require("../../../../../util/log");
6
+ const decorate_1 = require("../../model/processing/decorate");
7
+ const normalize_root_1 = require("../xml/internal/structure/normalize-root");
8
+ const input_format_1 = require("../xml/input-format");
10
9
  exports.parseLog = log_1.log.getSubLogger({ name: 'ast-parser' });
11
- function normalize(jsonString, hooks, getId = (0, model_1.deterministicCountingIdGenerator)(0)) {
12
- const hooksWithDefaults = (0, objects_1.deepMergeObject)(xml_1.DEFAULT_PARSER_HOOKS, hooks);
13
- const data = { hooks: hooksWithDefaults, currentRange: undefined, currentLexeme: undefined };
10
+ function normalize(jsonString, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)) {
11
+ const data = { currentRange: undefined, currentLexeme: undefined };
14
12
  const object = convertPreparedParsedData((0, format_1.prepareParsedData)(jsonString));
15
- return (0, model_1.decorateAst)((0, internal_1.parseRootObjToAst)(data, object), getId);
13
+ return (0, decorate_1.decorateAst)((0, normalize_root_1.normalizeRootObjToAst)(data, object), getId);
16
14
  }
17
15
  exports.normalize = normalize;
18
- function convertPreparedParsedData(valueMapping) {
19
- const exprlist = {};
20
- exprlist[xml_1.nameKey] = 'exprlist';
21
- const children = [];
22
- for (const entry of valueMapping.values()) {
23
- if (entry.parent == format_1.RootId) {
24
- children.push(convertEntry(entry));
16
+ function convertPreparedParsedData(rootEntries) {
17
+ return {
18
+ ["exprlist" /* RawRType.ExpressionList */]: {
19
+ [input_format_1.nameKey]: "exprlist" /* RawRType.ExpressionList */,
20
+ [input_format_1.childrenKey]: rootEntries.map(convertEntry)
25
21
  }
26
- }
27
- exprlist[xml_1.childrenKey] = children;
28
- return { 'exprlist': exprlist };
22
+ };
29
23
  }
30
24
  exports.convertPreparedParsedData = convertPreparedParsedData;
31
25
  function convertEntry(csvEntry) {
32
- const xmlEntry = {};
33
- xmlEntry[xml_1.attributesKey] = {
34
- 'line1': csvEntry.line1,
35
- 'col1': csvEntry.col1,
36
- 'line2': csvEntry.line2,
37
- 'col2': csvEntry.col2
26
+ const xmlEntry = {
27
+ [input_format_1.nameKey]: csvEntry.token,
28
+ [input_format_1.attributesKey]: {
29
+ 'line1': csvEntry.line1,
30
+ 'col1': csvEntry.col1,
31
+ 'line2': csvEntry.line2,
32
+ 'col2': csvEntry.col2
33
+ }
38
34
  };
39
- xmlEntry[xml_1.nameKey] = csvEntry.token;
40
35
  if (csvEntry.text) {
41
- xmlEntry[xml_1.contentKey] = csvEntry.text;
36
+ xmlEntry[input_format_1.contentKey] = csvEntry.text;
42
37
  }
43
38
  // check and recursively iterate children
44
39
  if (csvEntry.children && csvEntry.children.length > 0) {
45
- xmlEntry[xml_1.childrenKey] = csvEntry.children
40
+ xmlEntry[input_format_1.childrenKey] = csvEntry.children
46
41
  // we sort children the same way xmlparsedata does (by line, by column, by inverse end line, by inverse end column, by terminal state, by combined "start" tiebreaker value)
47
42
  // (https://github.com/r-lib/xmlparsedata/blob/main/R/package.R#L153C72-L153C78)
48
43
  .sort((c1, c2) => c1.line1 - c2.line1 || c1.col1 - c2.col1 || c2.line2 - c1.line2 || c2.col2 - c1.col2 || Number(c1.terminal) - Number(c2.terminal) || sortTiebreak(c1) - sortTiebreak(c2))
@@ -1,4 +1,4 @@
1
- import type { RawRType } from '../../model';
1
+ import type { RawRType } from '../../model/type';
2
2
  export declare const attributesKey = "a";
3
3
  export declare const childrenKey = "c";
4
4
  export declare const contentKey = "@";
@@ -16,21 +16,24 @@ export type XmlBasedJson = Record<string, XmlBasedJsonValue>;
16
16
  /**
17
17
  * A xml element in the json can either link to a string or another xml element
18
18
  */
19
- export type XmlBasedJsonValue = string | Record<string, unknown> | XmlBasedJson[];
19
+ export type XmlBasedJsonValue = string | Record<string, unknown> | readonly XmlBasedJson[];
20
20
  /**
21
21
  * We expect all xml elements to have a name attached which represents their R token type.
22
22
  */
23
23
  export interface NamedXmlBasedJson {
24
24
  /** corresponds to the R token type */
25
- name: RawRType;
25
+ readonly name: RawRType;
26
26
  /** remaining content (e.g., children, ...) */
27
- content: XmlBasedJson;
27
+ readonly content: XmlBasedJson;
28
28
  }
29
29
  /**
30
- * Retrieves the given key(s) from the converted xml.
30
+ * Single-key variant of {@link getKeysGuarded}. Will throw an {@link XmlParseError} if the key is not present.
31
+ */
32
+ export declare function getKeyGuarded<T extends XmlBasedJsonValue>(obj: XmlBasedJson, key: string): T;
33
+ /**
34
+ * Retrieves the given keys from the converted xml. For a single key, see {@link getKeyGuarded}.
31
35
  * Will throw an {@link XmlParseError} if at least one of the keys is not present
32
36
  *
33
37
  * @typeParam T - the type of the values to retrieve. Note, that this type is not checked at runtime.
34
38
  */
35
- export declare function getKeysGuarded<T extends XmlBasedJsonValue>(obj: XmlBasedJson, key: string): T;
36
- export declare function getKeysGuarded<T extends XmlBasedJsonValue>(obj: XmlBasedJson, ...key: readonly string[]): Record<string, T>;
39
+ export declare function getKeysGuarded<T extends XmlBasedJsonValue>(obj: XmlBasedJson, ...keys: readonly string[]): Record<string, T>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getKeysGuarded = exports.XmlParseError = exports.nameKey = exports.contentKey = exports.childrenKey = exports.attributesKey = void 0;
3
+ exports.getKeysGuarded = exports.getKeyGuarded = exports.XmlParseError = exports.nameKey = exports.contentKey = exports.childrenKey = exports.attributesKey = void 0;
4
4
  exports.attributesKey = 'a';
5
5
  exports.childrenKey = 'c';
6
6
  exports.contentKey = '@';
@@ -15,16 +15,24 @@ class XmlParseError extends Error {
15
15
  }
16
16
  }
17
17
  exports.XmlParseError = XmlParseError;
18
- function getKeysGuarded(obj, ...key) {
19
- if (key.length === 1) {
20
- return obj[key[0]];
21
- }
22
- else {
23
- return key.reduce((acc, key) => {
24
- acc[key] = obj[key];
25
- return acc;
26
- }, {});
27
- }
18
+ function error(key, obj) {
19
+ throw new XmlParseError(`expected obj to have key ${key}, yet received ${JSON.stringify(obj)}`);
20
+ }
21
+ /**
22
+ * Single-key variant of {@link getKeysGuarded}. Will throw an {@link XmlParseError} if the key is not present.
23
+ */
24
+ function getKeyGuarded(obj, key) {
25
+ return (obj[key] ?? error(key, obj));
26
+ }
27
+ exports.getKeyGuarded = getKeyGuarded;
28
+ /**
29
+ * Retrieves the given keys from the converted xml. For a single key, see {@link getKeyGuarded}.
30
+ * Will throw an {@link XmlParseError} if at least one of the keys is not present
31
+ *
32
+ * @typeParam T - the type of the values to retrieve. Note, that this type is not checked at runtime.
33
+ */
34
+ function getKeysGuarded(obj, ...keys) {
35
+ return Object.fromEntries(keys.map(k => [k, getKeyGuarded(obj, k)]));
28
36
  }
29
37
  exports.getKeysGuarded = getKeysGuarded;
30
38
  //# sourceMappingURL=input-format.js.map
@@ -1,10 +1,10 @@
1
+ import type { NormalizerData } from '../../normalizer-data';
1
2
  import type { NamedXmlBasedJson } from '../../input-format';
2
- import type { ParserData } from '../../data';
3
- import type { RIfThenElse } from '../../../../model';
3
+ import type { RIfThenElse } from '../../../../model/nodes/r-if-then-else';
4
4
  /**
5
5
  * Try to parse the construct as a {@link RIfThenElse}.
6
6
  */
7
- export declare function tryNormalizeIfThenElse(data: ParserData, tokens: [
7
+ export declare function tryNormalizeIfThenElse(data: NormalizerData, tokens: [
8
8
  ifToken: NamedXmlBasedJson,
9
9
  leftParen: NamedXmlBasedJson,
10
10
  condition: NamedXmlBasedJson,
@@ -1,32 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryNormalizeIfThenElse = void 0;
4
- const structure_1 = require("../structure");
5
- const if_then_1 = require("./if-then");
6
- const assert_1 = require("../../../../../../../util/assert");
7
- const hooks_1 = require("../../hooks");
8
- const meta_1 = require("../meta");
9
4
  const parser_1 = require("../../../json/parser");
5
+ const normalize_if_then_1 = require("./normalize-if-then");
6
+ const assert_1 = require("../../../../../../../util/assert");
7
+ const normalize_meta_1 = require("../../normalize-meta");
8
+ const normalize_single_node_1 = require("../structure/normalize-single-node");
10
9
  /**
11
10
  * Try to parse the construct as a {@link RIfThenElse}.
12
11
  */
13
12
  function tryNormalizeIfThenElse(data, tokens) {
14
13
  // we start by parsing a regular if-then structure
15
14
  parser_1.parseLog.trace('trying to parse if-then-else structure');
16
- tokens = (0, hooks_1.executeHook)(data.hooks.control.onIfThenElse.before, data, tokens);
17
- const parsedIfThen = (0, if_then_1.tryNormalizeIfThen)(data, [tokens[0], tokens[1], tokens[2], tokens[3], tokens[4]]);
15
+ const parsedIfThen = (0, normalize_if_then_1.tryNormalizeIfThen)(data, [tokens[0], tokens[1], tokens[2], tokens[3], tokens[4]]);
18
16
  if (parsedIfThen === undefined) {
19
- return (0, hooks_1.executeUnknownHook)(data.hooks.control.onIfThenElse.unknown, data, tokens);
17
+ return undefined;
20
18
  }
21
19
  parser_1.parseLog.trace('if-then part successful, now parsing else part');
22
20
  (0, assert_1.guard)(tokens[5].name === "ELSE" /* RawRType.Else */, () => `expected else token for if-then-else but found ${JSON.stringify(tokens[5])}`);
23
- const parsedElse = (0, structure_1.tryNormalizeSingleNode)(data, tokens[6]);
21
+ const parsedElse = (0, normalize_single_node_1.normalizeSingleNode)(data, tokens[6]);
24
22
  (0, assert_1.guard)(parsedElse.type !== "RDelimiter" /* RType.Delimiter */, () => `unexpected missing else-part of if-then-else, received ${JSON.stringify([parsedIfThen, parsedElse])} for ${JSON.stringify(tokens)}`);
25
- const result = {
23
+ return {
26
24
  ...parsedIfThen,
27
- otherwise: (0, meta_1.ensureExpressionList)(parsedElse)
25
+ otherwise: (0, normalize_meta_1.ensureExpressionList)(parsedElse)
28
26
  };
29
- return (0, hooks_1.executeHook)(data.hooks.control.onIfThenElse.after, data, result);
30
27
  }
31
28
  exports.tryNormalizeIfThenElse = tryNormalizeIfThenElse;
32
- //# sourceMappingURL=if-then-else.js.map
29
+ //# sourceMappingURL=normalize-if-then-else.js.map
@@ -1,10 +1,10 @@
1
+ import type { NormalizerData } from '../../normalizer-data';
1
2
  import type { NamedXmlBasedJson } from '../../input-format';
2
- import type { ParserData } from '../../data';
3
- import type { RIfThenElse } from '../../../../model';
3
+ import type { RIfThenElse } from '../../../../model/nodes/r-if-then-else';
4
4
  /**
5
5
  * Try to parse the construct as a {@link RIfThenElse}.
6
6
  */
7
- export declare function tryNormalizeIfThen(data: ParserData, tokens: [
7
+ export declare function tryNormalizeIfThen(data: NormalizerData, tokens: [
8
8
  ifToken: NamedXmlBasedJson,
9
9
  leftParen: NamedXmlBasedJson,
10
10
  condition: NamedXmlBasedJson,
@@ -2,10 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryNormalizeIfThen = void 0;
4
4
  const input_format_1 = require("../../input-format");
5
- const structure_1 = require("../structure");
6
- const meta_1 = require("../meta");
7
- const hooks_1 = require("../../hooks");
8
5
  const parser_1 = require("../../../json/parser");
6
+ const normalize_meta_1 = require("../../normalize-meta");
7
+ const normalize_single_node_1 = require("../structure/normalize-single-node");
9
8
  /**
10
9
  * Try to parse the construct as a {@link RIfThenElse}.
11
10
  */
@@ -13,7 +12,7 @@ function tryNormalizeIfThen(data, tokens) {
13
12
  parser_1.parseLog.trace('trying to parse if-then structure');
14
13
  if (tokens[0].name !== "IF" /* RawRType.If */) {
15
14
  parser_1.parseLog.debug('encountered non-if token for supposed if-then structure');
16
- return (0, hooks_1.executeUnknownHook)(data.hooks.control.onIfThen.unknown, data, tokens);
15
+ return undefined;
17
16
  }
18
17
  else if (tokens[1].name !== "(" /* RawRType.ParenLeft */) {
19
18
  throw new input_format_1.XmlParseError(`expected left-parenthesis for if but found ${JSON.stringify(tokens[1])}`);
@@ -21,17 +20,16 @@ function tryNormalizeIfThen(data, tokens) {
21
20
  else if (tokens[3].name !== ")" /* RawRType.ParenRight */) {
22
21
  throw new input_format_1.XmlParseError(`expected right-parenthesis for if but found ${JSON.stringify(tokens[3])}`);
23
22
  }
24
- tokens = (0, hooks_1.executeHook)(data.hooks.control.onIfThen.before, data, tokens);
25
- const parsedCondition = (0, structure_1.tryNormalizeSingleNode)(data, tokens[2]);
26
- const parsedThen = (0, structure_1.tryNormalizeSingleNode)(data, tokens[4]);
23
+ const parsedCondition = (0, normalize_single_node_1.normalizeSingleNode)(data, tokens[2]);
24
+ const parsedThen = (0, normalize_single_node_1.normalizeSingleNode)(data, tokens[4]);
27
25
  if (parsedCondition.type === "RDelimiter" /* RType.Delimiter */ || parsedThen.type === "RDelimiter" /* RType.Delimiter */) {
28
26
  throw new input_format_1.XmlParseError(`unexpected missing parts of if, received ${JSON.stringify([parsedCondition, parsedThen])} for ${JSON.stringify(tokens)}`);
29
27
  }
30
- const { location, content } = (0, meta_1.retrieveMetaStructure)(tokens[0].content);
31
- const result = {
28
+ const { location, content } = (0, normalize_meta_1.retrieveMetaStructure)(tokens[0].content);
29
+ return {
32
30
  type: "RIfThenElse" /* RType.IfThenElse */,
33
31
  condition: parsedCondition,
34
- then: (0, meta_1.ensureExpressionList)(parsedThen),
32
+ then: (0, normalize_meta_1.ensureExpressionList)(parsedThen),
35
33
  location,
36
34
  lexeme: content,
37
35
  info: {
@@ -40,7 +38,6 @@ function tryNormalizeIfThen(data, tokens) {
40
38
  fullLexeme: data.currentLexeme
41
39
  }
42
40
  };
43
- return (0, hooks_1.executeHook)(data.hooks.control.onIfThen.after, data, result);
44
41
  }
45
42
  exports.tryNormalizeIfThen = tryNormalizeIfThen;
46
- //# sourceMappingURL=if-then.js.map
43
+ //# sourceMappingURL=normalize-if-then.js.map
@@ -0,0 +1,10 @@
1
+ import type { NormalizerData } from '../../normalizer-data';
2
+ import type { XmlBasedJson } from '../../input-format';
3
+ import type { RNode } from '../../../../model/model';
4
+ /**
5
+ * Returns an expression list if there are multiple children, otherwise returns the single child directly with no expr wrapper
6
+ *
7
+ * @param data - The data used by the parser (see {@link NormalizerData})
8
+ * @param obj - The json object to extract the meta-information from
9
+ */
10
+ export declare function normalizeExpression(data: NormalizerData, obj: XmlBasedJson): RNode;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeExpression = void 0;
4
+ const input_format_1 = require("../../input-format");
5
+ const parser_1 = require("../../../json/parser");
6
+ const normalize_meta_1 = require("../../normalize-meta");
7
+ const normalize_access_1 = require("../normalize-access");
8
+ const arrays_1 = require("../../../../../../../util/arrays");
9
+ const normalize_expressions_1 = require("../structure/normalize-expressions");
10
+ const normalize_call_1 = require("../functions/normalize-call");
11
+ const normalize_definition_1 = require("../functions/normalize-definition");
12
+ const normalize_comment_1 = require("../other/normalize-comment");
13
+ /**
14
+ * Returns an expression list if there are multiple children, otherwise returns the single child directly with no expr wrapper
15
+ *
16
+ * @param data - The data used by the parser (see {@link NormalizerData})
17
+ * @param obj - The json object to extract the meta-information from
18
+ */
19
+ function normalizeExpression(data, obj) {
20
+ parser_1.parseLog.debug('[expr]');
21
+ const { unwrappedObj, content, location } = (0, normalize_meta_1.retrieveMetaStructure)(obj);
22
+ const childrenSource = (0, input_format_1.getKeyGuarded)(unwrappedObj, input_format_1.childrenKey);
23
+ const typed = (0, normalize_meta_1.getWithTokenType)(childrenSource);
24
+ const { others, comments } = (0, normalize_expressions_1.splitComments)(typed);
25
+ const childData = { ...data, currentRange: location, currentLexeme: content };
26
+ const maybeFunctionCall = (0, normalize_call_1.tryNormalizeFunctionCall)(childData, others);
27
+ if (maybeFunctionCall !== undefined) {
28
+ maybeFunctionCall.info.additionalTokens = [...maybeFunctionCall.info.additionalTokens ?? [], ...comments.map(x => (0, normalize_comment_1.normalizeComment)(data, x.content))];
29
+ return maybeFunctionCall;
30
+ }
31
+ const maybeAccess = (0, normalize_access_1.tryNormalizeAccess)(childData, others);
32
+ if (maybeAccess !== undefined) {
33
+ maybeAccess.info.additionalTokens = [...maybeAccess.info.additionalTokens ?? [], ...comments.map(x => (0, normalize_comment_1.normalizeComment)(data, x.content))];
34
+ return maybeAccess;
35
+ }
36
+ const maybeFunctionDefinition = (0, normalize_definition_1.tryNormalizeFunctionDefinition)(childData, others);
37
+ if (maybeFunctionDefinition !== undefined) {
38
+ maybeFunctionDefinition.info.additionalTokens = [...maybeFunctionDefinition.info.additionalTokens ?? [], ...comments.map(x => (0, normalize_comment_1.normalizeComment)(data, x.content))];
39
+ return maybeFunctionDefinition;
40
+ }
41
+ const children = (0, normalize_expressions_1.normalizeExpressions)(childData, childrenSource);
42
+ const [delimiters, nodes] = (0, arrays_1.partition)(children, x => x.type === "RDelimiter" /* RType.Delimiter */ || x.type === "RComment" /* RType.Comment */);
43
+ if (nodes.length === 1) {
44
+ const result = nodes[0];
45
+ result.info.additionalTokens = [...result.info.additionalTokens ?? [], ...delimiters];
46
+ return result;
47
+ }
48
+ else {
49
+ return {
50
+ type: "RExpressionList" /* RType.ExpressionList */,
51
+ grouping: undefined,
52
+ location,
53
+ children: nodes,
54
+ lexeme: content,
55
+ info: {
56
+ fullRange: childData.currentRange,
57
+ additionalTokens: delimiters,
58
+ fullLexeme: childData.currentLexeme
59
+ }
60
+ };
61
+ }
62
+ }
63
+ exports.normalizeExpression = normalizeExpression;
64
+ //# sourceMappingURL=normalize-expression.js.map
@@ -1,13 +1,13 @@
1
+ import type { NormalizerData } from '../../normalizer-data';
1
2
  import type { NamedXmlBasedJson } from '../../input-format';
2
- import type { RArgument } from '../../../../model';
3
- import type { ParserData } from '../../data';
3
+ import type { RArgument } from '../../../../model/nodes/r-argument';
4
4
  /**
5
5
  * Either parses `[expr]` or `[SYMBOL_SUB, EQ_SUB, expr]` as an argument of a function call in R.
6
6
  * Probably directly called by the function call parser as otherwise, we do not expect to find arguments.
7
7
  *
8
- * @param data - The data used by the parser (see {@link ParserData})
8
+ * @param data - The data used by the parser (see {@link NormalizerData})
9
9
  * @param objs - Either `[expr]` or `[SYMBOL_FORMALS, EQ_FORMALS, expr]`
10
10
  *
11
11
  * @returns The parsed argument or `undefined` if the given object is not an argument.
12
12
  */
13
- export declare function tryToNormalizeArgument(data: ParserData, objs: NamedXmlBasedJson[]): RArgument | undefined;
13
+ export declare function tryToNormalizeArgument(data: NormalizerData, objs: readonly NamedXmlBasedJson[]): RArgument | undefined;