@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
@@ -1,29 +1,38 @@
1
- import type { NodeId, NoInfo, RNodeWithParent } from '../../r-bridge';
2
- import type { IdentifierDefinition, IdentifierReference } from '../environments';
3
- import type { BiMap } from '../../util/bimap';
4
- import type { DataflowGraphEdge, DataflowGraphEdgeAttribute } from './edge';
1
+ import type { DataflowGraphEdge } from './edge';
5
2
  import { EdgeType } from './edge';
6
- import type { DataflowInformation } from '../internal/info';
3
+ import type { DataflowInformation } from '../info';
4
+ import type { DataflowDifferenceReport } from './diff';
7
5
  import type { DataflowGraphVertexArgument, DataflowGraphVertexInfo } from './vertex';
8
- import type { DifferenceReport } from '../../util/diff';
9
- /** Used to get an entry point for every id, after that it allows reference-chasing of the graph */
10
- export type DataflowMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherInfo>>;
11
- export type DataflowFunctionFlowInformation = Omit<DataflowInformation, 'graph'> & {
6
+ import { EmptyArgument } from '../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
7
+ import type { IdentifierDefinition, IdentifierReference } from '../environments/identifier';
8
+ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
9
+ import type { AstIdMap } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
10
+ export type DataflowFunctionFlowInformation = Omit<DataflowInformation, 'graph' | 'exitPoints'> & {
12
11
  graph: Set<NodeId>;
13
12
  };
14
- export type NamedFunctionArgument = [string, IdentifierReference | '<value>'];
15
- export type PositionalFunctionArgument = IdentifierReference | '<value>';
16
- export type FunctionArgument = NamedFunctionArgument | PositionalFunctionArgument | 'empty';
17
- type ReferenceForEdge = Pick<IdentifierReference, 'nodeId' | 'used'> | IdentifierDefinition;
13
+ export interface NamedFunctionArgument extends IdentifierReference {
14
+ readonly name: string;
15
+ }
16
+ export interface PositionalFunctionArgument extends Omit<IdentifierReference, 'name'> {
17
+ readonly name?: undefined;
18
+ }
19
+ export type FunctionArgument = NamedFunctionArgument | PositionalFunctionArgument | typeof EmptyArgument;
20
+ export declare function isPositionalArgument(arg: FunctionArgument): arg is PositionalFunctionArgument;
21
+ export declare function isNamedArgument(arg: FunctionArgument): arg is NamedFunctionArgument;
22
+ export declare function getReferenceOfArgument(arg: FunctionArgument): NodeId | undefined;
23
+ type ReferenceForEdge = Pick<IdentifierReference, 'nodeId' | 'controlDependencies'> | IdentifierDefinition;
18
24
  /**
19
25
  * Maps the edges target to the edge information
20
26
  */
21
- export type OutgoingEdges = Map<NodeId, DataflowGraphEdge>;
27
+ export type OutgoingEdges<Edge extends DataflowGraphEdge = DataflowGraphEdge> = Map<NodeId, Edge>;
22
28
  /**
23
29
  * Similar to {@link OutgoingEdges}, but inverted regarding the edge direction.
24
30
  * In other words, it maps the source to the edge information.
25
31
  */
26
- export type IngoingEdges = Map<NodeId, DataflowGraphEdge>;
32
+ export type IngoingEdges<Edge extends DataflowGraphEdge = DataflowGraphEdge> = Map<NodeId, Edge>;
33
+ type EdgeData<Edge extends DataflowGraphEdge> = Omit<Edge, 'from' | 'to' | 'types' | 'attribute'> & {
34
+ type: EdgeType;
35
+ };
27
36
  /**
28
37
  * The dataflow graph holds the dataflow information found within the given AST.
29
38
  * We differentiate the directed edges in {@link EdgeType} and the vertices indicated by {@link DataflowGraphVertexArgument}
@@ -35,8 +44,10 @@ export type IngoingEdges = Map<NodeId, DataflowGraphEdge>;
35
44
  *
36
45
  * All methods return the modified graph to allow for chaining.
37
46
  */
38
- export declare class DataflowGraph {
47
+ export declare class DataflowGraph<Vertex extends DataflowGraphVertexInfo = DataflowGraphVertexInfo, Edge extends DataflowGraphEdge = DataflowGraphEdge> {
39
48
  private static DEFAULT_ENVIRONMENT;
49
+ readonly idMap: AstIdMap | undefined;
50
+ constructor(idMap: AstIdMap | undefined);
40
51
  /** Contains the vertices of the root level graph (i.e., included those vertices from the complete graph, that are nested within function definitions) */
41
52
  private rootVertices;
42
53
  /** All vertices in the complete graph (including those nested in function definition) */
@@ -49,8 +60,20 @@ export declare class DataflowGraph {
49
60
  * @param id - The id of the node to get
50
61
  * @param includeDefinedFunctions - If true this will search function definitions as well and not just the toplevel
51
62
  * @returns the node info for the given id (if it exists)
63
+ *
64
+ * @see #getVertex
65
+ */
66
+ get(id: NodeId, includeDefinedFunctions?: boolean): [Vertex, OutgoingEdges] | undefined;
67
+ /**
68
+ * Get the {@link DataflowGraphVertexInfo} attached to a vertex.
69
+ *
70
+ * @param id - The id of the node to get
71
+ * @param includeDefinedFunctions - If true this will search function definitions as well and not just the toplevel
72
+ * @returns the node info for the given id (if it exists)
73
+ *
74
+ * @see #get
52
75
  */
53
- get(id: NodeId, includeDefinedFunctions?: boolean): [DataflowGraphVertexInfo, OutgoingEdges] | undefined;
76
+ getVertex(id: NodeId, includeDefinedFunctions?: boolean): Vertex | undefined;
54
77
  outgoingEdges(id: NodeId): OutgoingEdges | undefined;
55
78
  ingoingEdges(id: NodeId): IngoingEdges | undefined;
56
79
  /**
@@ -59,7 +82,7 @@ export declare class DataflowGraph {
59
82
  *
60
83
  * @see #edges
61
84
  */
62
- vertices(includeDefinedFunctions: boolean): IterableIterator<[NodeId, DataflowGraphVertexInfo]>;
85
+ vertices(includeDefinedFunctions: boolean): IterableIterator<[NodeId, Vertex]>;
63
86
  /**
64
87
  * @returns the ids of all edges in the graph together with their edge information
65
88
  *
@@ -72,7 +95,7 @@ export declare class DataflowGraph {
72
95
  * @param id - The id to check for
73
96
  * @param includeDefinedFunctions - If true this will check function definitions as well and not just the toplevel
74
97
  */
75
- hasNode(id: NodeId, includeDefinedFunctions: boolean): boolean;
98
+ hasVertex(id: NodeId, includeDefinedFunctions: boolean): boolean;
76
99
  /**
77
100
  * Returns true if the root level of the graph contains a node with the given id.
78
101
  */
@@ -82,19 +105,20 @@ export declare class DataflowGraph {
82
105
  * Adds a new vertex to the graph, for ease of use, some arguments are optional and filled automatically.
83
106
  *
84
107
  * @param vertex - The vertex to add
85
- * @param asRoot - If false, this will only add the vertex but do not add it to the {@link rootIds | root vertices} of the graph.
108
+ * @param asRoot - If false, this will only add the vertex but do not add it to the {@link rootIds|root vertices} of the graph.
86
109
  * This is probably only of use, when you construct dataflow graphs for tests.
87
110
  *
88
111
  * @see DataflowGraphVertexInfo
89
112
  * @see DataflowGraphVertexArgument
90
113
  */
91
- addVertex(vertex: DataflowGraphVertexArgument, asRoot?: boolean): this;
92
- /** Basically only exists for creations in tests, within the dataflow-extraction, this 3-argument variant will determine `attribute` automatically */
93
- addEdge(from: NodeId, to: NodeId, type: EdgeType, attribute: DataflowGraphEdgeAttribute): this;
114
+ addVertex(vertex: DataflowGraphVertexArgument & Omit<Vertex, keyof DataflowGraphVertexArgument>, asRoot?: boolean): this;
115
+ /** {@inheritDoc} */
116
+ addEdge(from: NodeId, to: NodeId, edgeInfo: EdgeData<Edge>): this;
94
117
  /** {@inheritDoc} */
95
- addEdge(from: ReferenceForEdge, to: ReferenceForEdge, type: EdgeType): this;
118
+ addEdge(from: ReferenceForEdge, to: ReferenceForEdge, edgeInfo: EdgeData<Edge>): this;
96
119
  /** {@inheritDoc} */
97
- addEdge(from: NodeId | ReferenceForEdge, to: NodeId | ReferenceForEdge, type: EdgeType, attribute?: DataflowGraphEdgeAttribute, promote?: boolean): this;
120
+ addEdge(from: NodeId | ReferenceForEdge, to: NodeId | ReferenceForEdge, edgeInfo: EdgeData<Edge>): this;
121
+ private installEdge;
98
122
  /**
99
123
  * Merges the other graph into *this* one (in-place). The return value is only for convenience.
100
124
  *
@@ -102,13 +126,13 @@ export declare class DataflowGraph {
102
126
  * @param mergeRootVertices - If false, this will only merge the vertices and edges but exclude the root vertices this is probably only of use
103
127
  * in the context of function definitions
104
128
  */
105
- mergeWith(otherGraph: DataflowGraph | undefined, mergeRootVertices?: boolean): this;
129
+ mergeWith(otherGraph: DataflowGraph<Vertex, Edge> | undefined, mergeRootVertices?: boolean): this;
106
130
  private mergeEdges;
107
- equals(other: DataflowGraph, diff: true, names?: {
131
+ equals(other: DataflowGraph<Vertex, Edge>, diff: true, names?: {
108
132
  left: string;
109
133
  right: string;
110
- }): DifferenceReport;
111
- equals(other: DataflowGraph, diff?: false, names?: {
134
+ }): DataflowDifferenceReport;
135
+ equals(other: DataflowGraph<Vertex, Edge>, diff?: false, names?: {
112
136
  left: string;
113
137
  right: string;
114
138
  }): boolean;
@@ -1,11 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataflowGraph = void 0;
3
+ exports.DataflowGraph = exports.getReferenceOfArgument = exports.isNamedArgument = exports.isPositionalArgument = void 0;
4
4
  const assert_1 = require("../../util/assert");
5
- const environments_1 = require("../environments");
6
- const log_1 = require("../../util/log");
7
- const edge_1 = require("./edge");
8
5
  const diff_1 = require("./diff");
6
+ const arrays_1 = require("../../util/arrays");
7
+ const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
8
+ const environment_1 = require("../environments/environment");
9
+ const clone_1 = require("../environments/clone");
10
+ function isPositionalArgument(arg) {
11
+ return arg !== r_function_call_1.EmptyArgument && arg.name === undefined;
12
+ }
13
+ exports.isPositionalArgument = isPositionalArgument;
14
+ function isNamedArgument(arg) {
15
+ return arg !== r_function_call_1.EmptyArgument && arg.name !== undefined;
16
+ }
17
+ exports.isNamedArgument = isNamedArgument;
18
+ function getReferenceOfArgument(arg) {
19
+ if (arg !== r_function_call_1.EmptyArgument) {
20
+ return arg.nodeId;
21
+ }
22
+ return undefined;
23
+ }
24
+ exports.getReferenceOfArgument = getReferenceOfArgument;
25
+ function extractEdgeIds(from, to) {
26
+ const fromId = typeof from === 'object' ? from.nodeId : from;
27
+ const toId = typeof to === 'object' ? to.nodeId : to;
28
+ return { fromId, toId };
29
+ }
9
30
  /**
10
31
  * The dataflow graph holds the dataflow information found within the given AST.
11
32
  * We differentiate the directed edges in {@link EdgeType} and the vertices indicated by {@link DataflowGraphVertexArgument}
@@ -18,7 +39,12 @@ const diff_1 = require("./diff");
18
39
  * All methods return the modified graph to allow for chaining.
19
40
  */
20
41
  class DataflowGraph {
21
- static DEFAULT_ENVIRONMENT = (0, environments_1.initializeCleanEnvironments)();
42
+ static DEFAULT_ENVIRONMENT = undefined;
43
+ idMap;
44
+ constructor(idMap) {
45
+ DataflowGraph.DEFAULT_ENVIRONMENT ??= (0, environment_1.initializeCleanEnvironments)();
46
+ this.idMap = idMap;
47
+ }
22
48
  /** Contains the vertices of the root level graph (i.e., included those vertices from the complete graph, that are nested within function definitions) */
23
49
  rootVertices = new Set();
24
50
  /** All vertices in the complete graph (including those nested in function definition) */
@@ -31,12 +57,26 @@ class DataflowGraph {
31
57
  * @param id - The id of the node to get
32
58
  * @param includeDefinedFunctions - If true this will search function definitions as well and not just the toplevel
33
59
  * @returns the node info for the given id (if it exists)
60
+ *
61
+ * @see #getVertex
34
62
  */
35
63
  get(id, includeDefinedFunctions = true) {
36
64
  // if we do not want to include function definitions, only retrieve the value if the id is part of the root vertices
37
- const vertex = includeDefinedFunctions || this.rootVertices.has(id) ? this.vertexInformation.get(id) : undefined;
65
+ const vertex = this.getVertex(id, includeDefinedFunctions);
38
66
  return vertex === undefined ? undefined : [vertex, this.outgoingEdges(id) ?? new Map()];
39
67
  }
68
+ /**
69
+ * Get the {@link DataflowGraphVertexInfo} attached to a vertex.
70
+ *
71
+ * @param id - The id of the node to get
72
+ * @param includeDefinedFunctions - If true this will search function definitions as well and not just the toplevel
73
+ * @returns the node info for the given id (if it exists)
74
+ *
75
+ * @see #get
76
+ */
77
+ getVertex(id, includeDefinedFunctions = true) {
78
+ return includeDefinedFunctions || this.rootVertices.has(id) ? this.vertexInformation.get(id) : undefined;
79
+ }
40
80
  outgoingEdges(id) {
41
81
  return this.edgeInformation.get(id);
42
82
  }
@@ -79,7 +119,7 @@ class DataflowGraph {
79
119
  * @param id - The id to check for
80
120
  * @param includeDefinedFunctions - If true this will check function definitions as well and not just the toplevel
81
121
  */
82
- hasNode(id, includeDefinedFunctions) {
122
+ hasVertex(id, includeDefinedFunctions) {
83
123
  return includeDefinedFunctions ? this.vertexInformation.has(id) : this.rootVertices.has(id);
84
124
  }
85
125
  /**
@@ -95,7 +135,7 @@ class DataflowGraph {
95
135
  * Adds a new vertex to the graph, for ease of use, some arguments are optional and filled automatically.
96
136
  *
97
137
  * @param vertex - The vertex to add
98
- * @param asRoot - If false, this will only add the vertex but do not add it to the {@link rootIds | root vertices} of the graph.
138
+ * @param asRoot - If false, this will only add the vertex but do not add it to the {@link rootIds|root vertices} of the graph.
99
139
  * This is probably only of use, when you construct dataflow graphs for tests.
100
140
  *
101
141
  * @see DataflowGraphVertexInfo
@@ -104,14 +144,13 @@ class DataflowGraph {
104
144
  addVertex(vertex, asRoot = true) {
105
145
  const oldVertex = this.vertexInformation.get(vertex.id);
106
146
  if (oldVertex !== undefined) {
107
- (0, assert_1.guard)(oldVertex.name === vertex.name, 'vertex names must match for the same id if added');
108
147
  return this;
109
148
  }
110
149
  // keep a clone of the original environment
111
- const environment = vertex.environment === undefined ? DataflowGraph.DEFAULT_ENVIRONMENT : (0, environments_1.cloneEnvironments)(vertex.environment);
150
+ const environment = vertex.environment === undefined ? DataflowGraph.DEFAULT_ENVIRONMENT : (0, clone_1.cloneEnvironmentInformation)(vertex.environment);
112
151
  this.vertexInformation.set(vertex.id, {
113
152
  ...vertex,
114
- when: vertex.when ?? 'always',
153
+ when: vertex.controlDependencies ?? 'always',
115
154
  environment
116
155
  });
117
156
  if (asRoot) {
@@ -123,37 +162,15 @@ class DataflowGraph {
123
162
  * Will insert a new edge into the graph,
124
163
  * if the direction of the edge is of no importance (`same-read-read` or `same-def-def`), source
125
164
  * and target will be sorted so that `from` has the lower, and `to` the higher id (default ordering).
126
- * <p>
127
- * If you omit the last argument but set promote, this will make the edge `maybe` if at least one of the {@link IdentifierReference | references} or {@link DataflowGraphVertexInfo | nodes} has a used flag of `maybe`.
128
- * Promote will probably only be used internally and not by tests etc.
129
165
  */
130
- addEdge(from, to, type, attribute, promote = false) {
131
- const fromId = typeof from === 'object' ? from.nodeId : from;
132
- const toId = typeof to === 'object' ? to.nodeId : to;
166
+ addEdge(from, to, edgeInfo) {
167
+ const { fromId, toId } = extractEdgeIds(from, to);
168
+ const { type, ...rest } = edgeInfo;
133
169
  if (fromId === toId) {
134
- log_1.log.trace(`ignoring self-edge from ${fromId} to ${toId} (${type}, ${attribute ?? '?'}, ${promote ? 'y' : 'n'})`);
135
170
  return this;
136
171
  }
137
- if (promote) {
138
- attribute ??= from.used === 'maybe' ? 'maybe' : to.used;
139
- // reduce the load on attribute checks
140
- if (attribute !== 'maybe') {
141
- const fromInfo = this.get(fromId, true);
142
- if (fromInfo?.[0].when === 'maybe') {
143
- log_1.log.trace(`automatically promoting edge from ${fromId} to ${toId} as maybe because at least one of the nodes is maybe`);
144
- attribute = 'maybe';
145
- }
146
- else {
147
- const toInfo = this.get(toId, true);
148
- if (toInfo?.[0].when === 'maybe') {
149
- log_1.log.trace(`automatically promoting edge from ${fromId} to ${toId} as maybe because at least one of the nodes is maybe`);
150
- attribute = 'maybe';
151
- }
152
- }
153
- }
154
- }
155
- (0, assert_1.guard)(attribute !== undefined, 'attribute must be set');
156
- const edge = { types: new Set([type]), attribute };
172
+ /* we now that we pass all required arguments */
173
+ const edge = { types: type, ...rest };
157
174
  const existingFrom = this.edgeInformation.get(fromId);
158
175
  const edgeInFrom = existingFrom?.get(toId);
159
176
  if (edgeInFrom === undefined) {
@@ -163,41 +180,28 @@ class DataflowGraph {
163
180
  else {
164
181
  existingFrom.set(toId, edge);
165
182
  }
166
- // sort (on id so that sorting is the same, independent of the attribute)
167
- const bidirectional = type === 'same-read-read' || type === 'same-def-def' || type === 'relates';
168
- if (bidirectional) {
169
- const existingTo = this.edgeInformation.get(toId);
170
- if (existingTo === undefined) {
171
- this.edgeInformation.set(toId, new Map([[fromId, edge]]));
172
- }
173
- else {
174
- existingTo.set(fromId, edge);
175
- }
176
- }
177
- else if (type === 'defines-on-call') {
178
- const otherEdge = { ...edge,
179
- types: new Set([edge_1.EdgeType.DefinedByOnCall])
180
- };
181
- const existingTo = this.edgeInformation.get(toId);
182
- if (existingTo === undefined) {
183
- this.edgeInformation.set(toId, new Map([[fromId, otherEdge]]));
184
- }
185
- else {
186
- existingTo.set(fromId, otherEdge);
187
- }
188
- }
183
+ this.installEdge(type, toId, fromId, edge);
189
184
  }
190
185
  else {
191
- if (attribute === 'maybe') {
192
- // as the data is shared, we can just set it for one direction
193
- edgeInFrom.attribute = 'maybe';
186
+ // adding the type
187
+ edgeInFrom.types |= type;
188
+ }
189
+ return this;
190
+ }
191
+ installEdge(type, toId, fromId, edge) {
192
+ if (type === 16 /* EdgeType.DefinesOnCall */) {
193
+ const otherEdge = {
194
+ ...edge,
195
+ types: 32 /* EdgeType.DefinedByOnCall */
196
+ };
197
+ const existingTo = this.edgeInformation.get(toId);
198
+ if (existingTo === undefined) {
199
+ this.edgeInformation.set(toId, new Map([[fromId, otherEdge]]));
194
200
  }
195
- if (!edgeInFrom.types.has(type)) {
196
- // adding the type
197
- edgeInFrom.types.add(type);
201
+ else {
202
+ existingTo.set(fromId, otherEdge);
198
203
  }
199
204
  }
200
- return this;
201
205
  }
202
206
  /**
203
207
  * Merges the other graph into *this* one (in-place). The return value is only for convenience.
@@ -236,10 +240,7 @@ class DataflowGraph {
236
240
  existing.set(target, edge);
237
241
  }
238
242
  else {
239
- get.types = new Set([...get.types, ...edge.types]);
240
- if (edge.attribute === 'maybe') {
241
- get.attribute = 'maybe';
242
- }
243
+ get.types = get.types | edge.types;
243
244
  }
244
245
  }
245
246
  }
@@ -259,38 +260,32 @@ class DataflowGraph {
259
260
  * @param reference - The reference to the vertex to mark as definition
260
261
  */
261
262
  setDefinitionOfVertex(reference) {
262
- const got = this.get(reference.nodeId, true);
263
- (0, assert_1.guard)(got !== undefined, () => `node must be defined for ${JSON.stringify(reference)} to set definition scope to ${reference.scope}`);
264
- const [node] = got;
265
- if (node.tag === 'function-definition' || node.tag === 'variable-definition') {
266
- (0, assert_1.guard)(node.scope === reference.scope, () => `node ${JSON.stringify(node)} must not be previously defined at position or have same scope for ${JSON.stringify(reference)}`);
267
- (0, assert_1.guard)(node.when === reference.used || node.when === 'maybe' || reference.used === 'maybe', () => `node ${JSON.stringify(node)} must not be previously defined at position or have same scope for ${JSON.stringify(reference)}`);
268
- node.scope = reference.scope;
269
- node.when = reference.used === 'maybe' ? 'maybe' : node.when;
263
+ const vertex = this.getVertex(reference.nodeId, true);
264
+ (0, assert_1.guard)(vertex !== undefined, () => `node must be defined for ${JSON.stringify(reference)} to set reference`);
265
+ if (vertex.tag === "function-definition" /* VertexType.FunctionDefinition */ || vertex.tag === "variable-definition" /* VertexType.VariableDefinition */) {
266
+ (0, assert_1.guard)(vertex.controlDependencies !== undefined
267
+ || reference.controlDependencies !== undefined
268
+ || (0, arrays_1.arrayEqual)(vertex.controlDependencies, reference.controlDependencies), () => `node ${JSON.stringify(vertex)} must not be previously defined at position or have same scope for ${JSON.stringify(reference)}`);
269
+ vertex.controlDependencies = reference.controlDependencies;
270
270
  }
271
271
  else {
272
- this.vertexInformation.set(reference.nodeId, {
273
- ...node,
274
- tag: 'variable-definition',
275
- scope: reference.scope,
276
- });
272
+ this.vertexInformation.set(reference.nodeId, { ...vertex, tag: 'variable-definition' });
277
273
  }
278
274
  }
279
275
  }
280
276
  exports.DataflowGraph = DataflowGraph;
281
277
  function mergeNodeInfos(current, next) {
282
278
  (0, assert_1.guard)(current.tag === next.tag, () => `nodes to be joined for the same id must have the same tag, but ${JSON.stringify(current)} vs ${JSON.stringify(next)}`);
283
- (0, assert_1.guard)(current.name === next.name, () => `nodes to be joined for the same id must have the same name, but ${JSON.stringify(current)} vs ${JSON.stringify(next)}`);
284
279
  (0, assert_1.guard)(current.environment === next.environment, 'nodes to be joined for the same id must have the same environment');
285
280
  if (current.tag === 'variable-definition') {
286
281
  (0, assert_1.guard)(current.scope === next.scope, 'nodes to be joined for the same id must have the same scope');
287
282
  }
288
- else if (current.tag === 'function-call') {
289
- (0, assert_1.guard)((0, diff_1.equalFunctionArguments)(current.args, next.args), 'nodes to be joined for the same id must have the same function call information');
283
+ else if (current.tag === "function-call" /* VertexType.FunctionCall */) {
284
+ (0, assert_1.guard)((0, diff_1.equalFunctionArguments)(current.id, current.args, next.args), 'nodes to be joined for the same id must have the same function call information');
290
285
  }
291
286
  else if (current.tag === 'function-definition') {
292
287
  (0, assert_1.guard)(current.scope === next.scope, 'nodes to be joined for the same id must have the same scope');
293
- (0, assert_1.guard)((0, diff_1.equalExitPoints)(current.exitPoints, next.exitPoints), 'nodes to be joined must have same exist points');
288
+ (0, assert_1.guard)((0, arrays_1.arrayEqual)(current.exitPoints, next.exitPoints), 'nodes to be joined must have same exist points');
294
289
  }
295
290
  // make a copy
296
291
  return { ...current };
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.df2quads = void 0;
4
4
  const quads_1 = require("../../util/quads");
5
+ const edge_1 = require("./edge");
5
6
  /**
6
7
  * @see cfg2quads
7
8
  * @see serialize2quads
@@ -18,8 +19,7 @@ function df2quads(graph, config) {
18
19
  edges: [...graph.edges()].flatMap(([fromId, targets]) => [...targets].map(([toId, info]) => ({
19
20
  from: fromId,
20
21
  to: toId,
21
- type: [...info.types],
22
- when: info.attribute
22
+ type: [...(0, edge_1.edgeTypesToNames)(info.types)],
23
23
  })))
24
24
  }, config);
25
25
  }
@@ -1,9 +1,15 @@
1
1
  import type { MergeableRecord } from '../../util/objects';
2
- import type { NodeId } from '../../r-bridge';
3
- import type { DataflowScopeName, REnvironmentInformation } from '../environments';
4
- import type { DataflowGraphEdgeAttribute } from './edge';
5
2
  import type { DataflowFunctionFlowInformation, FunctionArgument } from './graph';
6
- export type DataflowGraphVertices = Map<NodeId, DataflowGraphVertexInfo>;
3
+ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
4
+ import type { REnvironmentInformation } from '../environments/environment';
5
+ export type DataflowGraphVertices<Vertex extends DataflowGraphVertexInfo = DataflowGraphVertexInfo> = Map<NodeId, Vertex>;
6
+ export declare const enum VertexType {
7
+ Value = "value",
8
+ Use = "use",
9
+ FunctionCall = "function-call",
10
+ VariableDefinition = "variable-definition",
11
+ FunctionDefinition = "function-definition"
12
+ }
7
13
  /**
8
14
  * Arguments required to construct a vertex in the dataflow graph.
9
15
  *
@@ -15,61 +21,57 @@ interface DataflowGraphVertexBase extends MergeableRecord {
15
21
  /**
16
22
  * Used to identify and separate different types of vertices.
17
23
  */
18
- readonly tag: string;
24
+ readonly tag: VertexType;
19
25
  /**
20
26
  * The id of the node (the id assigned by the {@link ParentInformation} decoration)
21
27
  */
22
28
  id: NodeId;
23
29
  /**
24
- * The name of the node, usually the variable name
25
- */
26
- name: string;
27
- /**
28
- * The environment in which the node is defined.
29
- * If you do not provide an explicit environment, this will use the same clean one (with {@link initializeCleanEnvironments}).
30
+ * The environment in which the vertex is set.
30
31
  */
31
- environment?: REnvironmentInformation;
32
+ environment?: REnvironmentInformation | undefined;
32
33
  /**
33
- * Is this node part of every local execution trace or only in some.
34
- * If you do not provide an explicit value, this will default to `always`.
34
+ * See {@link IdentifierReference}
35
35
  */
36
- when?: DataflowGraphEdgeAttribute;
36
+ controlDependencies: NodeId[] | undefined;
37
37
  }
38
- /**
39
- * Arguments required to construct a vertex which represents the usage of a variable in the dataflow graph.
40
- */
41
- export interface DataflowGraphExitPoint extends DataflowGraphVertexBase {
42
- readonly tag: 'exit-point';
38
+ export interface DataflowGraphValue extends DataflowGraphVertexBase {
39
+ readonly tag: VertexType.Value;
40
+ readonly environment?: undefined;
43
41
  }
44
42
  /**
45
43
  * Arguments required to construct a vertex which represents the usage of a variable in the dataflow graph.
46
44
  */
47
45
  export interface DataflowGraphVertexUse extends DataflowGraphVertexBase {
48
- readonly tag: 'use';
46
+ readonly tag: VertexType.Use;
47
+ readonly environment?: undefined;
49
48
  }
50
49
  /**
51
50
  * Arguments required to construct a vertex which represents the usage of a variable in the dataflow graph.
52
51
  */
53
52
  export interface DataflowGraphVertexFunctionCall extends DataflowGraphVertexBase {
54
- readonly tag: 'function-call';
53
+ readonly tag: VertexType.FunctionCall;
54
+ /**
55
+ * Effective name of the function call,
56
+ * Please be aware that this name can differ from the lexeme.
57
+ * For example, if the function is a replacement function, in this case, the actually called fn will
58
+ * have the compound name (e.g., `[<-`).
59
+ */
60
+ readonly name: string;
55
61
  args: FunctionArgument[];
62
+ /** a performance flag to indicate that the respective call is _only_ calling a builtin function without any df graph attached */
63
+ onlyBuiltin: boolean;
64
+ readonly environment: REnvironmentInformation;
56
65
  }
57
66
  /**
58
67
  * Arguments required to construct a vertex which represents the definition of a variable in the dataflow graph.
59
68
  */
60
69
  export interface DataflowGraphVertexVariableDefinition extends DataflowGraphVertexBase {
61
- readonly tag: 'variable-definition';
62
- /**
63
- * The scope in which the vertex is defined (can be global or local to the current environment).
64
- */
65
- scope: DataflowScopeName;
70
+ readonly tag: VertexType.VariableDefinition;
71
+ readonly environment?: undefined;
66
72
  }
67
73
  export interface DataflowGraphVertexFunctionDefinition extends DataflowGraphVertexBase {
68
- readonly tag: 'function-definition';
69
- /**
70
- * The scope in which the vertex is defined (can be global or local to the current environment).
71
- */
72
- scope: DataflowScopeName;
74
+ readonly tag: VertexType.FunctionDefinition;
73
75
  /**
74
76
  * The static subflow of the function definition, constructed within {@link processFunctionDefinition}.
75
77
  * If the vertex is (for example) a function, it can have a subgraph which is used as a template for each call.
@@ -79,8 +81,9 @@ export interface DataflowGraphVertexFunctionDefinition extends DataflowGraphVert
79
81
  * All exist points of the function definitions.
80
82
  * In other words: last expressions/return calls
81
83
  */
82
- exitPoints: NodeId[];
84
+ exitPoints: readonly NodeId[];
85
+ environment?: REnvironmentInformation;
83
86
  }
84
- export type DataflowGraphVertexArgument = DataflowGraphVertexUse | DataflowGraphExitPoint | DataflowGraphVertexVariableDefinition | DataflowGraphVertexFunctionDefinition | DataflowGraphVertexFunctionCall;
87
+ export type DataflowGraphVertexArgument = DataflowGraphVertexUse | DataflowGraphVertexVariableDefinition | DataflowGraphVertexFunctionDefinition | DataflowGraphVertexFunctionCall | DataflowGraphValue;
85
88
  export type DataflowGraphVertexInfo = Required<DataflowGraphVertexArgument>;
86
89
  export {};
@@ -0,0 +1,49 @@
1
+ import type { DataflowProcessorInformation } from './processor';
2
+ import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
3
+ import type { IdentifierReference } from './environments/identifier';
4
+ import type { REnvironmentInformation } from './environments/environment';
5
+ import { DataflowGraph } from './graph/graph';
6
+ export declare const enum ExitPointType {
7
+ Default = 0,
8
+ Return = 1,
9
+ Break = 2,
10
+ Next = 3
11
+ }
12
+ export interface ExitPoint {
13
+ readonly type: ExitPointType;
14
+ readonly nodeId: NodeId;
15
+ readonly controlDependencies: NodeId[] | undefined;
16
+ }
17
+ export declare function addNonDefaultExitPoints(existing: ExitPoint[], add: readonly ExitPoint[]): void;
18
+ /**
19
+ * The control flow information for the current {@link DataflowInformation}.
20
+ */
21
+ export interface DataflowCfgInformation {
22
+ /**
23
+ * The entry node into the subgraph
24
+ */
25
+ entryPoint: NodeId;
26
+ /**
27
+ * All already identified exit points (active 'return'/'break'/'next'-likes) of the respective structure.
28
+ */
29
+ exitPoints: readonly ExitPoint[];
30
+ }
31
+ /**
32
+ * The dataflow information is continuously updated during the dataflow analysis
33
+ * and holds its current state for the respective subtree processed.
34
+ */
35
+ export interface DataflowInformation extends DataflowCfgInformation {
36
+ /** References that have not been identified as read or write and will be so on higher */
37
+ unknownReferences: readonly IdentifierReference[];
38
+ /** References which are read */
39
+ in: readonly IdentifierReference[];
40
+ /** References which are written to */
41
+ out: readonly IdentifierReference[];
42
+ /** Current environments used for name resolution, probably updated on the next expression-list processing */
43
+ environment: REnvironmentInformation;
44
+ /** The current constructed dataflow graph */
45
+ graph: DataflowGraph;
46
+ }
47
+ export declare function initializeCleanDataflowInformation<T>(entryPoint: NodeId, data: Pick<DataflowProcessorInformation<T>, 'environment' | 'completeAst'>): DataflowInformation;
48
+ export declare function alwaysExits(data: DataflowInformation): boolean;
49
+ export declare function filterOutLoopExitPoints(exitPoints: readonly ExitPoint[]): readonly ExitPoint[];
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterOutLoopExitPoints = exports.alwaysExits = exports.initializeCleanDataflowInformation = exports.addNonDefaultExitPoints = void 0;
4
+ const graph_1 = require("./graph/graph");
5
+ function addNonDefaultExitPoints(existing, add) {
6
+ existing.push(...add.filter(({ type }) => type !== 0 /* ExitPointType.Default */));
7
+ }
8
+ exports.addNonDefaultExitPoints = addNonDefaultExitPoints;
9
+ function initializeCleanDataflowInformation(entryPoint, data) {
10
+ return {
11
+ unknownReferences: [],
12
+ in: [],
13
+ out: [],
14
+ environment: data.environment,
15
+ graph: new graph_1.DataflowGraph(data.completeAst.idMap),
16
+ entryPoint,
17
+ exitPoints: [{ nodeId: entryPoint, type: 0 /* ExitPointType.Default */, controlDependencies: undefined }]
18
+ };
19
+ }
20
+ exports.initializeCleanDataflowInformation = initializeCleanDataflowInformation;
21
+ function alwaysExits(data) {
22
+ return data.exitPoints?.some(e => e.type !== 0 /* ExitPointType.Default */ && e.controlDependencies === undefined) ?? false;
23
+ }
24
+ exports.alwaysExits = alwaysExits;
25
+ function filterOutLoopExitPoints(exitPoints) {
26
+ return exitPoints.filter(({ type }) => type === 1 /* ExitPointType.Return */ || type === 0 /* ExitPointType.Default */);
27
+ }
28
+ exports.filterOutLoopExitPoints = filterOutLoopExitPoints;
29
+ //# sourceMappingURL=info.js.map