@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
package/util/objects.js CHANGED
@@ -38,6 +38,10 @@ function deepMergeObject(base, addon) {
38
38
  exports.deepMergeObject = deepMergeObject;
39
39
  function deepMergeObjectWithResult(addon, base, result) {
40
40
  for (const key of Object.keys(addon)) {
41
+ // values that are undefined (like from a partial object) should NOT be overwritten
42
+ if (addon[key] === undefined) {
43
+ continue;
44
+ }
41
45
  if (typeof addon[key] === 'object') {
42
46
  if (key in base) {
43
47
  result[key] = deepMergeObject(base[key], addon[key]);
package/util/quads.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * @module
9
9
  */
10
10
  import type { MergeableRecord } from './objects';
11
- import type { NodeId } from '../r-bridge';
11
+ import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
12
12
  type RecordForQuad = Record<string, unknown>;
13
13
  type DataForQuad = Record<string, unknown> | ArrayLike<unknown>;
14
14
  type ContextForQuad = string;
@@ -20,8 +20,8 @@ type ContextForQuad = string;
20
20
  export type QuadIgnoreIf = (key: string, value: unknown) => boolean;
21
21
  /**
22
22
  * Deterministically retrieve a unique id for a given object.
23
- * @param obj - the object to retrieve the id for
24
- * @param context - In order to provide unique ids even for different contexts, we add the context to the id.
23
+ * @param obj - The object to retrieve the id for
24
+ * @param context - to provide unique ids even for different contexts, we add the context to the id.
25
25
  */
26
26
  export type QuadIdRetriever = (obj: unknown, context: ContextForQuad) => string;
27
27
  /**
package/util/quads.js CHANGED
@@ -176,7 +176,6 @@ function serializeObject(obj, quads, config) {
176
176
  else if (obj instanceof Set) {
177
177
  let i = 0;
178
178
  for (const value of obj.values()) {
179
- console.log('set', value);
180
179
  processObjectEntry('idx-' + String(i++), value, obj, quads, config);
181
180
  }
182
181
  }
package/util/range.d.ts CHANGED
@@ -1,32 +1,45 @@
1
- export interface SourcePosition {
1
+ export type SourcePosition = [
2
2
  /** starts with 1 */
3
- line: number;
3
+ line: number,
4
4
  /** starts with 1 */
5
- column: number;
6
- }
7
- export interface SourceRange {
5
+ column: number
6
+ ];
7
+ export type SourceRange = [
8
8
  /** inclusive start position */
9
- readonly start: SourcePosition;
9
+ startLine: number,
10
+ startColumn: number,
10
11
  /** inclusive end position */
11
- readonly end: SourcePosition;
12
- }
12
+ endLine: number,
13
+ endColumn: number
14
+ ];
15
+ export declare function getRangeStart(p: undefined): undefined;
16
+ export declare function getRangeStart(p: SourceRange): SourcePosition;
17
+ export declare function getRangeStart(p: SourceRange | undefined): SourcePosition | undefined;
18
+ export declare function getRangeEnd(p: undefined): undefined;
19
+ export declare function getRangeEnd(p: SourceRange): SourcePosition;
20
+ export declare function getRangeEnd(p: SourceRange | undefined): SourcePosition | undefined;
13
21
  /**
14
- * at the moment this does not ensure ordering of start and end!
22
+ * This does not ensure ordering of start and end!
23
+ *
24
+ * @param sl - start line
25
+ * @param sc - start column
26
+ * @param el - end line
27
+ * @param ec - end column
15
28
  */
16
- export declare function rangeFrom(line1: number | string, col1: number | string, line2: number | string, col2: number | string): SourceRange;
29
+ export declare function rangeFrom(sl: number | string, sc: number | string, el: number | string, ec: number | string): SourceRange;
17
30
  export declare function mergeRanges(...rs: SourceRange[]): SourceRange;
18
31
  /**
19
32
  * @returns true iff `r1` starts and ends before `r2` starts (i.e., if `r1` and `r2` do not overlap and `r1` comes before `r2`
20
33
  */
21
- export declare function rangeStartsCompletelyBefore(r1: SourceRange, r2: SourceRange): boolean;
34
+ export declare function rangeStartsCompletelyBefore([, , r1el, r1ec]: SourceRange, [r2sl, r2sc, ,]: SourceRange): boolean;
22
35
  /**
23
36
  * Checks if the two ranges overlap.
24
37
  */
25
- export declare function rangesOverlap(r1: SourceRange, r2: SourceRange): boolean;
26
- export declare function addRanges(r1: SourceRange, r2: SourceRange): SourceRange;
38
+ export declare function rangesOverlap([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): boolean;
39
+ export declare function addRanges([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): SourceRange;
27
40
  /**
28
41
  * Provides a comparator for {@link SourceRange}s that sorts them in ascending order.
29
42
  *
30
43
  * @returns a positive number if `r1` comes after `r2`, a negative number if `r1` comes before `r2`, and `0` if they are equal
31
44
  */
32
- export declare function rangeCompare(r1: SourceRange, r2: SourceRange): number;
45
+ export declare function rangeCompare([r1sl, r1sc, ,]: SourceRange, [r2sl, r2sc, ,]: SourceRange): number;
package/util/range.js CHANGED
@@ -1,47 +1,51 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rangeCompare = exports.addRanges = exports.rangesOverlap = exports.rangeStartsCompletelyBefore = exports.mergeRanges = exports.rangeFrom = void 0;
3
+ exports.rangeCompare = exports.addRanges = exports.rangesOverlap = exports.rangeStartsCompletelyBefore = exports.mergeRanges = exports.rangeFrom = exports.getRangeEnd = exports.getRangeStart = void 0;
4
4
  const assert_1 = require("./assert");
5
+ function getRangeStart(p) {
6
+ return p === undefined ? undefined : [p[0], p[1]];
7
+ }
8
+ exports.getRangeStart = getRangeStart;
9
+ function getRangeEnd(p) {
10
+ return p === undefined ? undefined : [p[2], p[3]];
11
+ }
12
+ exports.getRangeEnd = getRangeEnd;
5
13
  /**
6
- * at the moment this does not ensure ordering of start and end!
14
+ * This does not ensure ordering of start and end!
15
+ *
16
+ * @param sl - start line
17
+ * @param sc - start column
18
+ * @param el - end line
19
+ * @param ec - end column
7
20
  */
8
- function rangeFrom(line1, col1, line2, col2) {
9
- return {
10
- start: {
11
- line: Number(line1),
12
- column: Number(col1)
13
- },
14
- end: {
15
- line: Number(line2),
16
- column: Number(col2)
17
- }
18
- };
21
+ function rangeFrom(sl, sc, el, ec) {
22
+ return [Number(sl), Number(sc), Number(el), Number(ec)];
19
23
  }
20
24
  exports.rangeFrom = rangeFrom;
21
25
  function mergeRanges(...rs) {
22
26
  (0, assert_1.guard)(rs.length > 0, 'Cannot merge no ranges');
23
- return {
24
- start: rs.reduce((acc, r) => acc.line < r.start.line || (acc.line === r.start.line && acc.column < r.start.column) ? acc : r.start, rs[0].start),
25
- end: rs.reduce((acc, r) => acc.line > r.end.line || (acc.line === r.end.line && acc.column > r.end.column) ? acc : r.end, rs[0].end)
26
- };
27
+ return rs.reduce(([sl, sc, el, ec], [nsl, nsc, nel, nec]) => [
28
+ ...(sl < nsl || (sl === nsl && sc < nsc) ? [sl, sc] : [nsl, nsc]),
29
+ ...(el > nel || (el === nel && ec > nec) ? [el, ec] : [nel, nec])
30
+ ], rs[0]);
27
31
  }
28
32
  exports.mergeRanges = mergeRanges;
29
33
  /**
30
34
  * @returns true iff `r1` starts and ends before `r2` starts (i.e., if `r1` and `r2` do not overlap and `r1` comes before `r2`
31
35
  */
32
- function rangeStartsCompletelyBefore(r1, r2) {
33
- return r1.end.line < r2.start.line || (r1.end.line === r2.start.line && r1.end.column < r2.start.column);
36
+ function rangeStartsCompletelyBefore([, , r1el, r1ec], [r2sl, r2sc, ,]) {
37
+ return r1el < r2sl || (r1el === r2sl && r1ec < r2sc);
34
38
  }
35
39
  exports.rangeStartsCompletelyBefore = rangeStartsCompletelyBefore;
36
40
  /**
37
41
  * Checks if the two ranges overlap.
38
42
  */
39
- function rangesOverlap(r1, r2) {
40
- return r1.start.line <= r2.end.line && r2.start.line <= r1.end.line && r1.start.column <= r2.end.column && r2.start.column <= r1.end.column;
43
+ function rangesOverlap([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
44
+ return r1sl <= r2el && r2sl <= r1el && r1sc <= r2ec && r2sc <= r1ec;
41
45
  }
42
46
  exports.rangesOverlap = rangesOverlap;
43
- function addRanges(r1, r2) {
44
- return rangeFrom(r1.start.line + r2.start.line, r1.start.column + r2.start.column, r1.end.line + r2.end.line, r1.end.column + r2.end.column);
47
+ function addRanges([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
48
+ return [r1sl + r2sl, r1sc + r2sc, r1el + r2el, r1ec + r2ec];
45
49
  }
46
50
  exports.addRanges = addRanges;
47
51
  /**
@@ -49,12 +53,12 @@ exports.addRanges = addRanges;
49
53
  *
50
54
  * @returns a positive number if `r1` comes after `r2`, a negative number if `r1` comes before `r2`, and `0` if they are equal
51
55
  */
52
- function rangeCompare(r1, r2) {
53
- if (r1.start.line === r2.start.line) {
54
- return r1.start.column - r2.start.column;
56
+ function rangeCompare([r1sl, r1sc, ,], [r2sl, r2sc, ,]) {
57
+ if (r1sl === r2sl) {
58
+ return r1sc - r2sc;
55
59
  }
56
60
  else {
57
- return r1.start.line - r2.start.line;
61
+ return r1sl - r2sl;
58
62
  }
59
63
  }
60
64
  exports.rangeCompare = rangeCompare;
package/util/version.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.flowrVersion = void 0;
4
4
  const semver_1 = require("semver");
5
5
  // this is automatically replaced with the current version by release-it
6
- const version = '1.5.2';
6
+ const version = '2.0.1';
7
7
  function flowrVersion() {
8
8
  return new semver_1.SemVer(version);
9
9
  }
package/core/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export { SteppingSlicer } from './slicer';
2
- export * from './steps';
3
- export * from './input';
4
- export * from './output';
package/core/index.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.SteppingSlicer = void 0;
18
- var slicer_1 = require("./slicer");
19
- Object.defineProperty(exports, "SteppingSlicer", { enumerable: true, get: function () { return slicer_1.SteppingSlicer; } });
20
- __exportStar(require("./steps"), exports);
21
- __exportStar(require("./input"), exports);
22
- __exportStar(require("./output"), exports);
23
- //# sourceMappingURL=index.js.map
package/core/input.d.ts DELETED
@@ -1,42 +0,0 @@
1
- import type { MergeableRecord } from '../util/objects';
2
- import type { IdGenerator, NoInfo, RParseRequest, RShell, XmlParserHooks } from '../r-bridge';
3
- import type { DeepPartial } from 'ts-essentials';
4
- import type { AutoSelectPredicate, SlicingCriteria } from '../slicing';
5
- import type { STEPS_PER_SLICE, StepName, STEPS_PER_FILE } from './steps';
6
- /**
7
- * We split the types, as if you are only interested in what can be done per-file, you do not need a slicing criterion.
8
- * Furthermore, if you are only interested in the parse result, you do not require the token map and you can not pass hooks
9
- */
10
- interface BaseSteppingSlicerInput<InterestedIn extends StepName | undefined> extends MergeableRecord {
11
- /**
12
- * The step you are actually interested in.
13
- * If you pass 'dataflow', the stepper will stop after analyzing the dataflow.
14
- * The step is optional, if you do not pass a step, the stepper will execute all steps.
15
- */
16
- stepOfInterest?: InterestedIn;
17
- /** This is the {@link RShell} connection to be used to obtain the original parses AST of the R code */
18
- shell: RShell;
19
- /** The request which essentially indicates the input to extract the AST from */
20
- request: RParseRequest;
21
- /** These hooks only make sense if you at least want to normalize the parsed R AST. They can augment the normalization process */
22
- hooks?: DeepPartial<XmlParserHooks>;
23
- /** This id generator is only necessary if you want to retrieve a dataflow from the parsed R AST, it determines the id generator to use and by default uses the {@link deterministicCountingIdGenerator}*/
24
- getId?: IdGenerator<NoInfo>;
25
- /** The slicing criterion is only of interest if you actually want to slice the R code */
26
- criterion?: SlicingCriteria;
27
- /** If you want to auto-select something in the reconstruction add it here, otherwise, it will use the default defined alongside {@link reconstructToCode}*/
28
- autoSelectIf?: AutoSelectPredicate;
29
- }
30
- interface NormalizeSteppingSlicerInput<InterestedIn extends 'dataflow' | 'normalize'> extends BaseSteppingSlicerInput<InterestedIn> {
31
- stepOfInterest: InterestedIn;
32
- }
33
- interface SliceSteppingSlicerInput<InterestedIn extends 'reconstruct' | 'slice' | undefined> extends BaseSteppingSlicerInput<InterestedIn> {
34
- stepOfInterest?: InterestedIn;
35
- criterion: SlicingCriteria;
36
- }
37
- /**
38
- * For a given set of steps of interest, this essentially (statically) determines the required inputs for the {@link SteppingSlicer}.
39
- * All arguments are documented alongside {@link BaseSteppingSlicerInput}.
40
- */
41
- export type SteppingSlicerInput<InterestedIn extends StepName | undefined = undefined> = InterestedIn extends keyof typeof STEPS_PER_SLICE | undefined ? SliceSteppingSlicerInput<InterestedIn> : InterestedIn extends Exclude<keyof typeof STEPS_PER_FILE, 'parse'> ? NormalizeSteppingSlicerInput<InterestedIn> : BaseSteppingSlicerInput<InterestedIn>;
42
- export {};
package/core/output.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import type { LAST_STEP, StepName, StepResult } from './steps';
2
- /** Represents the return value of the processor linked to the step with the name 'K' */
3
- type Out<K extends StepName> = Record<K, StepResult<K>>;
4
- /**
5
- * Essentially expresses an object that, if a step 'x' is of interest, contains the result of step 'x' and all steps before 'x'.
6
- */
7
- export type StepResults<InterestedIn extends StepName | undefined> = InterestedIn extends never ? never : InterestedIn extends undefined ? StepResultsHelper<typeof LAST_STEP> : StepResultsHelper<Exclude<InterestedIn, undefined>>;
8
- type StepResultsHelper<InterestedIn extends StepName> = {
9
- 'parse': Out<'parse'>;
10
- 'normalize': StepResultsHelper<'parse'> & Out<'normalize'>;
11
- 'dataflow': StepResultsHelper<'normalize'> & Out<'dataflow'>;
12
- 'slice': StepResultsHelper<'dataflow'> & Out<'slice'>;
13
- 'reconstruct': StepResultsHelper<'slice'> & Out<'reconstruct'>;
14
- }[InterestedIn];
15
- export {};
package/core/slicer.d.ts DELETED
@@ -1,124 +0,0 @@
1
- import type { LAST_PER_FILE_STEP, StepRequired, StepName, StepResult } from './steps';
2
- import { LAST_STEP, STEPS_PER_SLICE } from './steps';
3
- import type { SlicingCriteria } from '../slicing';
4
- import type { SteppingSlicerInput } from './input';
5
- import type { StepResults } from './output';
6
- /**
7
- * This is ultimately the root of flowR's static slicing procedure.
8
- * It clearly defines the steps that are to be executed and splits them into two stages.
9
- * - `once-per-file`: for steps that are executed once per file. These can be performed *without* the knowledge of a slicing criteria,
10
- * and they can be cached and re-used if you want to slice the same file multiple times.
11
- * - `once-per-slice`: for steps that are executed once per slice. These can only be performed *with* a slicing criteria.
12
- *
13
- * Furthermore, this stepper follows an iterable fashion to be *as flexible as possible* (e.g., to be instrumented with measurements).
14
- * So, you can use the stepping slicer like this:
15
- *
16
- * ```ts
17
- * const slicer = new SteppingSlicer({ ... })
18
- * while(slicer.hasNextStep()) {
19
- * await slicer.nextStep()
20
- * }
21
- *
22
- * slicer.switchToSliceStage()
23
- *
24
- * while(slicer.hasNextStep()) {
25
- * await slicer.nextStep()
26
- * }
27
- *
28
- * const result = slicer.getResults()
29
- * ```
30
- *
31
- * Of course, you might think, that this is rather overkill if you simply want to receive the slice of a given input source or in general
32
- * the result of any step. And this is true. Therefore, if you do not want to perform some kind of magic in-between steps, you can use the
33
- * **{@link allRemainingSteps}** function like this:
34
- *
35
- * ```ts
36
- * const slicer = new SteppingSlicer({ ... })
37
- * const result = await slicer.allRemainingSteps()
38
- * ```
39
- *
40
- * As the name suggest, you can combine this name with previous calls to {@link nextStep} to only execute the remaining steps.
41
- *
42
- * Giving the **step of interest** allows you to declare the maximum step to execute.
43
- * So, if you pass `dataflow` as the step of interest, the stepping slicer will stop after the dataflow step.
44
- * If you do not pass a step, the stepping slicer will execute all steps.
45
- *
46
- * By default, the {@link SteppingSlicer} does not offer an automatic way to repeat the per-slice steps for multiple slices (this is mostly to prevent accidental errors).
47
- * However, you can use the **{@link updateCriterion}** function to reset the per-slice steps and re-execute them for a new slice. This allows something like the following:
48
- *
49
- * ```ts
50
- * const slicer = new SteppingSlicer({ ... })
51
- * const result = await slicer.allRemainingSteps()
52
- *
53
- * slicer.updateCriterion(...)
54
- * const result2 = await slicer.allRemainingSteps()
55
- * ```
56
- *
57
- * @note Even though, using the stepping slicer introduces some performance overhead, we consider
58
- * it to be the baseline for performance benchmarking. It may very well be possible to squeeze out some more performance by
59
- * directly constructing the steps in the right order. However, we consider this to be negligible when compared with the time required
60
- * for, for example, the dataflow analysis.
61
- *
62
- * @see retrieveResultOfStep
63
- * @see SteppingSlicer#doNextStep
64
- * @see StepName
65
- */
66
- export declare class SteppingSlicer<InterestedIn extends StepName | undefined = typeof LAST_STEP> {
67
- static readonly maximumNumberOfStepsPerFile: number;
68
- static readonly maximumNumberOfStepsPerSlice: number;
69
- private readonly shell;
70
- private readonly stepOfInterest;
71
- private readonly request;
72
- private readonly hooks?;
73
- private readonly getId?;
74
- private criterion?;
75
- private results;
76
- private stage;
77
- private stepCounter;
78
- private reachedWanted;
79
- /**
80
- * Create a new stepping slicer. For more details on the arguments please see {@link SteppingSlicerInput}.
81
- */
82
- constructor(input: SteppingSlicerInput<InterestedIn>);
83
- /**
84
- * Retrieve the current stage the stepping slicer is in.
85
- * @see StepRequired
86
- * @see switchToSliceStage
87
- */
88
- getCurrentStage(): StepRequired;
89
- /**
90
- * Switch to the next stage of the stepping slicer.
91
- * @see SteppingSlicer
92
- * @see getCurrentStage
93
- */
94
- switchToSliceStage(): void;
95
- getResults(intermediate?: false): StepResults<InterestedIn>;
96
- getResults(intermediate: true): Partial<StepResults<InterestedIn>>;
97
- /**
98
- * Returns true only if 1) there are more steps to-do for the current stage and 2) we have not yet reached the step we are interested in
99
- */
100
- hasNextStep(): boolean;
101
- /**
102
- * Execute the next step (guarded with {@link hasNextStep}) and return the name of the step that was executed, so you can guard if the step differs from what you are interested in.
103
- * Furthermore, it returns the step's result.
104
- *
105
- * The `step` parameter is a safeguard if you want to retrieve the result.
106
- * If given, it causes the execution to fail if the next step is not the one you expect.
107
- * *Without step, please refrain from accessing the result.*
108
- */
109
- nextStep<PassedName extends StepName>(expectedStepName?: PassedName): Promise<{
110
- name: typeof expectedStepName extends undefined ? StepName : PassedName;
111
- result: typeof expectedStepName extends undefined ? unknown : StepResult<Exclude<PassedName, undefined>>;
112
- }>;
113
- private getGuardStep;
114
- private doNextStep;
115
- /**
116
- * This only makes sense if you have already sliced a file (e.g., by running up to the `slice` step) and want to do so again while caching the results.
117
- * Or if for whatever reason you did not pass a criterion with the constructor.
118
- *
119
- * @param newCriterion - the new slicing criterion to use for the next slice
120
- */
121
- updateCriterion(newCriterion: SlicingCriteria): void;
122
- allRemainingSteps(canSwitchStage: false): Promise<Partial<StepResults<InterestedIn extends keyof typeof STEPS_PER_SLICE | undefined ? typeof LAST_PER_FILE_STEP : InterestedIn>>>;
123
- allRemainingSteps(canSwitchStage?: true): Promise<StepResults<InterestedIn>>;
124
- }
package/core/slicer.js DELETED
@@ -1,227 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SteppingSlicer = void 0;
4
- const steps_1 = require("./steps");
5
- const assert_1 = require("../util/assert");
6
- /**
7
- * This is ultimately the root of flowR's static slicing procedure.
8
- * It clearly defines the steps that are to be executed and splits them into two stages.
9
- * - `once-per-file`: for steps that are executed once per file. These can be performed *without* the knowledge of a slicing criteria,
10
- * and they can be cached and re-used if you want to slice the same file multiple times.
11
- * - `once-per-slice`: for steps that are executed once per slice. These can only be performed *with* a slicing criteria.
12
- *
13
- * Furthermore, this stepper follows an iterable fashion to be *as flexible as possible* (e.g., to be instrumented with measurements).
14
- * So, you can use the stepping slicer like this:
15
- *
16
- * ```ts
17
- * const slicer = new SteppingSlicer({ ... })
18
- * while(slicer.hasNextStep()) {
19
- * await slicer.nextStep()
20
- * }
21
- *
22
- * slicer.switchToSliceStage()
23
- *
24
- * while(slicer.hasNextStep()) {
25
- * await slicer.nextStep()
26
- * }
27
- *
28
- * const result = slicer.getResults()
29
- * ```
30
- *
31
- * Of course, you might think, that this is rather overkill if you simply want to receive the slice of a given input source or in general
32
- * the result of any step. And this is true. Therefore, if you do not want to perform some kind of magic in-between steps, you can use the
33
- * **{@link allRemainingSteps}** function like this:
34
- *
35
- * ```ts
36
- * const slicer = new SteppingSlicer({ ... })
37
- * const result = await slicer.allRemainingSteps()
38
- * ```
39
- *
40
- * As the name suggest, you can combine this name with previous calls to {@link nextStep} to only execute the remaining steps.
41
- *
42
- * Giving the **step of interest** allows you to declare the maximum step to execute.
43
- * So, if you pass `dataflow` as the step of interest, the stepping slicer will stop after the dataflow step.
44
- * If you do not pass a step, the stepping slicer will execute all steps.
45
- *
46
- * By default, the {@link SteppingSlicer} does not offer an automatic way to repeat the per-slice steps for multiple slices (this is mostly to prevent accidental errors).
47
- * However, you can use the **{@link updateCriterion}** function to reset the per-slice steps and re-execute them for a new slice. This allows something like the following:
48
- *
49
- * ```ts
50
- * const slicer = new SteppingSlicer({ ... })
51
- * const result = await slicer.allRemainingSteps()
52
- *
53
- * slicer.updateCriterion(...)
54
- * const result2 = await slicer.allRemainingSteps()
55
- * ```
56
- *
57
- * @note Even though, using the stepping slicer introduces some performance overhead, we consider
58
- * it to be the baseline for performance benchmarking. It may very well be possible to squeeze out some more performance by
59
- * directly constructing the steps in the right order. However, we consider this to be negligible when compared with the time required
60
- * for, for example, the dataflow analysis.
61
- *
62
- * @see retrieveResultOfStep
63
- * @see SteppingSlicer#doNextStep
64
- * @see StepName
65
- */
66
- class SteppingSlicer {
67
- static maximumNumberOfStepsPerFile = Object.keys(steps_1.STEPS_PER_FILE).length;
68
- static maximumNumberOfStepsPerSlice = SteppingSlicer.maximumNumberOfStepsPerFile + Object.keys(steps_1.STEPS_PER_SLICE).length;
69
- shell;
70
- stepOfInterest;
71
- request;
72
- hooks;
73
- getId;
74
- criterion;
75
- results = {};
76
- stage = 'once-per-file';
77
- stepCounter = 0;
78
- reachedWanted = false;
79
- /**
80
- * Create a new stepping slicer. For more details on the arguments please see {@link SteppingSlicerInput}.
81
- */
82
- constructor(input) {
83
- this.shell = input.shell;
84
- this.request = input.request;
85
- this.hooks = input.hooks;
86
- this.getId = input.getId;
87
- this.stepOfInterest = (input.stepOfInterest ?? steps_1.LAST_STEP);
88
- this.criterion = input.criterion;
89
- }
90
- /**
91
- * Retrieve the current stage the stepping slicer is in.
92
- * @see StepRequired
93
- * @see switchToSliceStage
94
- */
95
- getCurrentStage() {
96
- return this.stage;
97
- }
98
- /**
99
- * Switch to the next stage of the stepping slicer.
100
- * @see SteppingSlicer
101
- * @see getCurrentStage
102
- */
103
- switchToSliceStage() {
104
- (0, assert_1.guard)(this.stepCounter === SteppingSlicer.maximumNumberOfStepsPerFile, 'First need to complete all steps before switching');
105
- (0, assert_1.guard)(this.stage === 'once-per-file', 'Cannot switch to next stage, already in once-per-slice stage');
106
- this.stage = 'once-per-slice';
107
- }
108
- /**
109
- * Returns the result of the step of interest, as well as the results of all steps before it.
110
- *
111
- * @param intermediate - normally you can only receive the results *after* the stepper completed the step of interested.
112
- * However, if you pass `true` to this parameter, you can also receive the results *before* the step of interest,
113
- * although the typing system then can not guarantee which of the steps have already happened.
114
- */
115
- getResults(intermediate = false) {
116
- (0, assert_1.guard)(intermediate || this.reachedWanted, 'Before reading the results, we need to reach the step we are interested in');
117
- return this.results;
118
- }
119
- /**
120
- * Returns true only if 1) there are more steps to-do for the current stage and 2) we have not yet reached the step we are interested in
121
- */
122
- hasNextStep() {
123
- return !this.reachedWanted && (this.stage === 'once-per-file' ?
124
- this.stepCounter < SteppingSlicer.maximumNumberOfStepsPerFile
125
- : this.stepCounter < SteppingSlicer.maximumNumberOfStepsPerSlice);
126
- }
127
- /**
128
- * Execute the next step (guarded with {@link hasNextStep}) and return the name of the step that was executed, so you can guard if the step differs from what you are interested in.
129
- * Furthermore, it returns the step's result.
130
- *
131
- * The `step` parameter is a safeguard if you want to retrieve the result.
132
- * If given, it causes the execution to fail if the next step is not the one you expect.
133
- * *Without step, please refrain from accessing the result.*
134
- */
135
- async nextStep(expectedStepName) {
136
- (0, assert_1.guard)(this.hasNextStep(), 'No more steps to do');
137
- const guardStep = this.getGuardStep(expectedStepName);
138
- const { step, result } = await this.doNextStep(guardStep);
139
- this.results[step] = result;
140
- this.stepCounter += 1;
141
- if (this.stepOfInterest === step) {
142
- this.reachedWanted = true;
143
- }
144
- return { name: step, result: result };
145
- }
146
- getGuardStep(expectedStepName) {
147
- return expectedStepName === undefined ?
148
- (name) => name
149
- :
150
- (name) => {
151
- (0, assert_1.guard)(expectedStepName === name, `Expected step ${expectedStepName} but got ${name}`);
152
- return name;
153
- };
154
- }
155
- async doNextStep(guardStep) {
156
- let step;
157
- let result;
158
- switch (this.stepCounter) {
159
- case 0:
160
- step = guardStep('parse');
161
- result = await (0, steps_1.executeSingleSubStep)(step, this.request, this.shell);
162
- break;
163
- case 1:
164
- step = guardStep('normalize');
165
- result = (0, steps_1.executeSingleSubStep)(step, this.results.parse, this.hooks, this.getId);
166
- break;
167
- case 2:
168
- step = guardStep('dataflow');
169
- result = (0, steps_1.executeSingleSubStep)(step, this.request, this.results.normalize);
170
- break;
171
- case 3:
172
- (0, assert_1.guard)(this.criterion !== undefined, 'Cannot decode criteria without a criterion');
173
- step = guardStep('slice');
174
- result = (0, steps_1.executeSingleSubStep)(step, this.results.dataflow.graph, this.results.normalize, this.criterion);
175
- break;
176
- case 4:
177
- step = guardStep('reconstruct');
178
- result = (0, steps_1.executeSingleSubStep)(step, this.results.normalize, this.results.slice.result);
179
- break;
180
- default:
181
- throw new Error(`Unknown step ${this.stepCounter}, reaching this should not happen!`);
182
- }
183
- return { step, result };
184
- }
185
- /**
186
- * This only makes sense if you have already sliced a file (e.g., by running up to the `slice` step) and want to do so again while caching the results.
187
- * Or if for whatever reason you did not pass a criterion with the constructor.
188
- *
189
- * @param newCriterion - the new slicing criterion to use for the next slice
190
- */
191
- updateCriterion(newCriterion) {
192
- (0, assert_1.guard)(this.stepCounter >= SteppingSlicer.maximumNumberOfStepsPerFile, 'Cannot reset slice prior to once-per-slice stage');
193
- this.criterion = newCriterion;
194
- this.stepCounter = SteppingSlicer.maximumNumberOfStepsPerFile;
195
- this.results.slice = undefined;
196
- this.results.reconstruct = undefined;
197
- if (this.stepOfInterest === 'slice' || this.stepOfInterest === 'reconstruct') {
198
- this.reachedWanted = false;
199
- }
200
- }
201
- /**
202
- * Execute all remaining steps and automatically call {@link switchToSliceStage} if necessary.
203
- * @param canSwitchStage - if true, automatically switch to the slice stage if necessary
204
- * (i.e., this is what you want if you have never executed {@link nextStep} and you want to execute *all* steps).
205
- * However, passing false allows you to only execute the steps of the 'once-per-file' stage (i.e., the steps that can be cached).
206
- *
207
- * @note There is a small type difference if you pass 'false' and already have manually switched to the 'once-per-slice' stage.
208
- * Because now, the results of these steps are no longer part of the result type (although they are still included).
209
- * In such a case, you may be better off with simply passing 'true' as the function will detect that the stage is already switched.
210
- * We could solve this type problem by separating the SteppingSlicer class into two for each stage, but this would break the improved readability and unified handling
211
- * of the slicer that I wanted to achieve with this class.
212
- */
213
- async allRemainingSteps(canSwitchStage = true) {
214
- while (this.hasNextStep()) {
215
- await this.nextStep();
216
- }
217
- if (canSwitchStage && !this.reachedWanted && this.stage === 'once-per-file') {
218
- this.switchToSliceStage();
219
- while (this.hasNextStep()) {
220
- await this.nextStep();
221
- }
222
- }
223
- return this.reachedWanted ? this.getResults() : this.getResults(true);
224
- }
225
- }
226
- exports.SteppingSlicer = SteppingSlicer;
227
- //# sourceMappingURL=slicer.js.map