@eagleoutice/flowr 1.5.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
  2. package/abstract-interpretation/handler/binop/binop.js +4 -2
  3. package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
  4. package/abstract-interpretation/handler/binop/operators.js +14 -28
  5. package/abstract-interpretation/processor.d.ts +3 -2
  6. package/abstract-interpretation/processor.js +2 -2
  7. package/benchmark/slicer.d.ts +101 -0
  8. package/benchmark/slicer.js +214 -0
  9. package/benchmark/stats/print.d.ts +7 -0
  10. package/benchmark/stats/print.js +151 -0
  11. package/benchmark/stats/stats.d.ts +42 -0
  12. package/benchmark/stats/stats.js +6 -0
  13. package/benchmark/stopwatch.d.ts +35 -0
  14. package/benchmark/stopwatch.js +79 -0
  15. package/benchmark/summarizer/data.d.ts +54 -0
  16. package/benchmark/summarizer/first-phase/input.d.ts +3 -0
  17. package/benchmark/summarizer/first-phase/input.js +76 -0
  18. package/benchmark/summarizer/first-phase/process.d.ts +11 -0
  19. package/benchmark/summarizer/first-phase/process.js +205 -0
  20. package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
  21. package/benchmark/summarizer/second-phase/graph.js +54 -0
  22. package/benchmark/summarizer/second-phase/process.d.ts +6 -0
  23. package/benchmark/summarizer/second-phase/process.js +127 -0
  24. package/benchmark/summarizer/summarizer.d.ts +31 -0
  25. package/benchmark/summarizer/summarizer.js +58 -0
  26. package/cli/benchmark-app.d.ts +10 -0
  27. package/cli/benchmark-app.js +67 -0
  28. package/cli/benchmark-helper-app.d.ts +9 -0
  29. package/cli/benchmark-helper-app.js +69 -0
  30. package/cli/common/features.d.ts +3 -0
  31. package/cli/common/features.js +30 -0
  32. package/cli/common/options.d.ts +20 -0
  33. package/cli/common/options.js +85 -0
  34. package/cli/common/script.d.ts +21 -0
  35. package/cli/common/script.js +61 -0
  36. package/cli/common/scripts-info.d.ts +25 -0
  37. package/cli/common/scripts-info.js +83 -0
  38. package/cli/export-quads-app.d.ts +7 -0
  39. package/cli/export-quads-app.js +43 -0
  40. package/cli/flowr.d.ts +29 -0
  41. package/cli/flowr.js +141 -0
  42. package/cli/repl/commands/cfg.d.ts +3 -0
  43. package/cli/repl/commands/cfg.js +37 -0
  44. package/cli/repl/commands/commands.d.ts +13 -0
  45. package/cli/repl/commands/commands.js +142 -0
  46. package/cli/repl/commands/dataflow.d.ts +3 -0
  47. package/cli/repl/commands/dataflow.js +34 -0
  48. package/cli/repl/commands/execute.d.ts +4 -0
  49. package/cli/repl/commands/execute.js +27 -0
  50. package/cli/repl/commands/main.d.ts +39 -0
  51. package/cli/repl/commands/main.js +14 -0
  52. package/cli/repl/commands/normalize.d.ts +3 -0
  53. package/cli/repl/commands/normalize.js +34 -0
  54. package/cli/repl/commands/parse.d.ts +2 -0
  55. package/cli/repl/commands/parse.js +110 -0
  56. package/cli/repl/commands/quit.d.ts +2 -0
  57. package/cli/repl/commands/quit.js +15 -0
  58. package/cli/repl/commands/version.d.ts +16 -0
  59. package/cli/repl/commands/version.js +28 -0
  60. package/cli/repl/core.d.ts +36 -0
  61. package/cli/repl/core.js +174 -0
  62. package/cli/repl/execute.d.ts +28 -0
  63. package/cli/repl/execute.js +79 -0
  64. package/cli/repl/print-version.d.ts +2 -0
  65. package/cli/repl/print-version.js +10 -0
  66. package/cli/repl/prompt.d.ts +2 -0
  67. package/cli/repl/prompt.js +9 -0
  68. package/cli/repl/server/connection.d.ts +21 -0
  69. package/cli/repl/server/connection.js +218 -0
  70. package/cli/repl/server/messages/analysis.d.ts +72 -0
  71. package/cli/repl/server/messages/analysis.js +21 -0
  72. package/cli/repl/server/messages/error.d.ts +11 -0
  73. package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
  74. package/cli/repl/server/messages/hello.d.ts +20 -0
  75. package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
  76. package/cli/repl/server/messages/messages.d.ts +35 -0
  77. package/cli/repl/server/messages/messages.js +40 -0
  78. package/cli/repl/server/messages/repl.d.ts +33 -0
  79. package/cli/repl/server/messages/repl.js +37 -0
  80. package/cli/repl/server/messages/slice.d.ts +26 -0
  81. package/cli/repl/server/messages/slice.js +37 -0
  82. package/cli/repl/server/net.d.ts +49 -0
  83. package/cli/repl/server/net.js +63 -0
  84. package/cli/repl/server/send.d.ts +4 -0
  85. package/cli/repl/server/send.js +18 -0
  86. package/cli/repl/server/server.d.ts +20 -0
  87. package/cli/repl/server/server.js +66 -0
  88. package/cli/repl/server/validate.d.ts +15 -0
  89. package/cli/repl/server/validate.js +34 -0
  90. package/cli/slicer-app.d.ts +11 -0
  91. package/cli/slicer-app.js +83 -0
  92. package/cli/statistics-app.d.ts +11 -0
  93. package/cli/statistics-app.js +99 -0
  94. package/cli/statistics-helper-app.d.ts +11 -0
  95. package/cli/statistics-helper-app.js +87 -0
  96. package/cli/summarizer-app.d.ts +18 -0
  97. package/cli/summarizer-app.js +66 -0
  98. package/core/pipeline-executor.d.ts +154 -0
  99. package/core/pipeline-executor.js +221 -0
  100. package/core/print/dataflow-printer.d.ts +3 -4
  101. package/core/print/dataflow-printer.js +5 -5
  102. package/core/print/normalize-printer.d.ts +1 -1
  103. package/core/print/normalize-printer.js +3 -3
  104. package/core/print/parse-printer.js +3 -3
  105. package/core/print/print.d.ts +13 -4
  106. package/core/print/print.js +13 -2
  107. package/core/print/slice-diff-ansi.d.ts +3 -2
  108. package/core/print/slice-diff-ansi.js +4 -4
  109. package/core/steps/all/core/00-parse.d.ts +28 -0
  110. package/core/steps/all/core/00-parse.js +24 -0
  111. package/core/steps/all/core/10-normalize.d.ts +29 -0
  112. package/core/steps/all/core/10-normalize.js +26 -0
  113. package/core/steps/all/core/20-dataflow.d.ts +27 -0
  114. package/core/steps/all/core/20-dataflow.js +29 -0
  115. package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
  116. package/core/steps/all/static-slicing/00-slice.js +21 -0
  117. package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
  118. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  119. package/core/steps/pipeline/create-pipeline.d.ts +6 -0
  120. package/core/steps/pipeline/create-pipeline.js +130 -0
  121. package/core/steps/pipeline/default-pipelines.d.ts +251 -0
  122. package/core/steps/pipeline/default-pipelines.js +18 -0
  123. package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
  124. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  125. package/core/steps/pipeline/pipeline.d.ts +60 -0
  126. package/core/steps/pipeline/pipeline.js +28 -0
  127. package/core/steps/pipeline-step.d.ts +85 -0
  128. package/core/steps/pipeline-step.js +8 -0
  129. package/dataflow/environments/append.d.ts +4 -4
  130. package/dataflow/environments/append.js +4 -4
  131. package/dataflow/environments/built-in.d.ts +25 -0
  132. package/dataflow/environments/built-in.js +123 -0
  133. package/dataflow/environments/clone.d.ts +2 -0
  134. package/dataflow/environments/clone.js +23 -0
  135. package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
  136. package/dataflow/environments/define.js +51 -0
  137. package/dataflow/environments/diff.d.ts +6 -0
  138. package/dataflow/environments/diff.js +85 -0
  139. package/dataflow/environments/environment.d.ts +10 -43
  140. package/dataflow/environments/environment.js +32 -138
  141. package/dataflow/environments/identifier.d.ts +31 -0
  142. package/dataflow/environments/identifier.js +3 -0
  143. package/dataflow/environments/overwrite.d.ts +4 -4
  144. package/dataflow/environments/overwrite.js +9 -22
  145. package/dataflow/environments/resolve-by-name.d.ts +7 -6
  146. package/dataflow/environments/resolve-by-name.js +35 -19
  147. package/dataflow/environments/scoping.js +1 -4
  148. package/dataflow/extractor.d.ts +6 -6
  149. package/dataflow/extractor.js +47 -57
  150. package/dataflow/graph/diff.d.ts +24 -7
  151. package/dataflow/graph/diff.js +114 -74
  152. package/dataflow/graph/edge.d.ts +66 -20
  153. package/dataflow/graph/edge.js +73 -27
  154. package/dataflow/graph/graph.d.ts +53 -29
  155. package/dataflow/graph/graph.js +84 -89
  156. package/dataflow/graph/quads.js +2 -2
  157. package/dataflow/graph/vertex.d.ts +37 -34
  158. package/dataflow/info.d.ts +49 -0
  159. package/dataflow/info.js +29 -0
  160. package/dataflow/internal/linker.d.ts +11 -10
  161. package/dataflow/internal/linker.js +64 -90
  162. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
  163. package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
  164. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
  165. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
  166. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
  167. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
  168. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
  169. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
  170. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
  171. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
  172. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
  173. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
  174. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
  175. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
  176. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
  177. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
  178. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
  179. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
  180. package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
  181. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
  182. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
  183. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
  184. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
  185. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
  186. package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
  187. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
  188. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
  189. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
  190. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
  191. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
  192. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
  193. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
  194. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
  195. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
  196. package/dataflow/internal/process/functions/call/common.d.ts +35 -0
  197. package/dataflow/internal/process/functions/call/common.js +70 -0
  198. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
  199. package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
  200. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
  201. package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
  202. package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
  203. package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
  204. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
  205. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
  206. package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
  207. package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
  208. package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
  209. package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
  210. package/dataflow/internal/process/process-named-call.d.ts +6 -0
  211. package/dataflow/internal/process/process-named-call.js +17 -0
  212. package/dataflow/internal/process/process-symbol.d.ts +5 -0
  213. package/dataflow/internal/process/process-symbol.js +26 -0
  214. package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
  215. package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
  216. package/dataflow/internal/process/process-value.d.ts +4 -0
  217. package/dataflow/internal/process/process-value.js +22 -0
  218. package/dataflow/logger.d.ts +1 -0
  219. package/dataflow/logger.js +6 -0
  220. package/dataflow/processor.d.ts +18 -13
  221. package/dataflow/processor.js +1 -1
  222. package/package.json +48 -85
  223. package/r-bridge/data/data.d.ts +603 -0
  224. package/r-bridge/data/data.js +753 -0
  225. package/r-bridge/data/get.d.ts +19 -0
  226. package/r-bridge/data/get.js +51 -0
  227. package/r-bridge/data/print.d.ts +1 -0
  228. package/r-bridge/data/print.js +58 -0
  229. package/r-bridge/data/types.d.ts +33 -0
  230. package/r-bridge/data/types.js +3 -0
  231. package/r-bridge/init.d.ts +3 -0
  232. package/r-bridge/init.js +22 -0
  233. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  234. package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
  235. package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
  236. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
  237. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
  238. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
  239. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
  240. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
  241. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
  242. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
  243. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
  244. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
  245. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
  246. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
  247. package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
  248. package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
  249. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
  250. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
  251. package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
  252. package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
  253. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
  254. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
  255. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
  256. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
  257. package/r-bridge/lang-4.x/ast/model/type.js +13 -6
  258. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
  259. package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
  260. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
  261. package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
  262. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
  263. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
  264. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
  265. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
  266. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
  267. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
  268. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
  269. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
  270. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
  271. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
  272. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
  273. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
  274. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
  275. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
  276. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
  277. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
  278. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
  279. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
  280. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
  281. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
  282. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
  283. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
  284. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
  285. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
  286. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
  287. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
  288. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
  289. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
  290. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
  291. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
  292. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
  293. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
  294. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
  295. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
  296. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
  298. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
  299. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
  300. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
  301. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
  302. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
  303. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
  304. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
  305. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
  306. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
  307. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
  308. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
  309. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
  310. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
  311. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
  312. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
  313. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
  314. package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
  315. package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
  316. package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
  317. package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
  318. package/r-bridge/retriever.d.ts +5 -5
  319. package/r-bridge/retriever.js +11 -24
  320. package/r-bridge/shell-executor.d.ts +0 -1
  321. package/r-bridge/shell-executor.js +7 -12
  322. package/r-bridge/shell.d.ts +14 -12
  323. package/r-bridge/shell.js +50 -45
  324. package/reconstruct/reconstruct.d.ts +4 -2
  325. package/reconstruct/reconstruct.js +193 -185
  326. package/slicing/criterion/collect-all.d.ts +4 -3
  327. package/slicing/criterion/collect-all.js +5 -1
  328. package/slicing/criterion/filters/all-variables.js +14 -22
  329. package/slicing/criterion/parse.d.ts +4 -2
  330. package/slicing/criterion/parse.js +13 -11
  331. package/slicing/static/fingerprint.d.ts +5 -0
  332. package/slicing/static/fingerprint.js +17 -0
  333. package/slicing/static/slice-call.d.ts +10 -0
  334. package/slicing/static/slice-call.js +86 -0
  335. package/slicing/static/slicer-types.d.ts +33 -0
  336. package/slicing/static/slicer-types.js +3 -0
  337. package/slicing/static/static-slicer.d.ts +6 -24
  338. package/slicing/static/static-slicer.js +54 -155
  339. package/slicing/static/visiting-queue.d.ts +23 -0
  340. package/slicing/static/visiting-queue.js +53 -0
  341. package/statistics/features/common-syntax-probability.d.ts +29 -0
  342. package/statistics/features/common-syntax-probability.js +159 -0
  343. package/statistics/features/feature.d.ts +182 -0
  344. package/statistics/features/feature.js +39 -0
  345. package/statistics/features/post-processing.d.ts +12 -0
  346. package/statistics/features/post-processing.js +21 -0
  347. package/statistics/features/supported/assignments/assignments.d.ts +12 -0
  348. package/statistics/features/supported/assignments/assignments.js +55 -0
  349. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  350. package/statistics/features/supported/assignments/post-process.js +124 -0
  351. package/statistics/features/supported/comments/comments.d.ts +18 -0
  352. package/statistics/features/supported/comments/comments.js +133 -0
  353. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  354. package/statistics/features/supported/comments/post-process.js +49 -0
  355. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  356. package/statistics/features/supported/control-flow/control-flow.js +68 -0
  357. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  358. package/statistics/features/supported/control-flow/post-process.js +64 -0
  359. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  360. package/statistics/features/supported/data-access/data-access.js +120 -0
  361. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  362. package/statistics/features/supported/data-access/post-process.js +106 -0
  363. package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
  364. package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
  365. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  366. package/statistics/features/supported/defined-functions/post-process.js +169 -0
  367. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  368. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  369. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  370. package/statistics/features/supported/expression-list/post-process.js +43 -0
  371. package/statistics/features/supported/loops/loops.d.ts +20 -0
  372. package/statistics/features/supported/loops/loops.js +79 -0
  373. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  374. package/statistics/features/supported/loops/post-process.js +71 -0
  375. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  376. package/statistics/features/supported/used-functions/post-process.js +178 -0
  377. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  378. package/statistics/features/supported/used-functions/used-functions.js +97 -0
  379. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  380. package/statistics/features/supported/used-packages/post-process.js +120 -0
  381. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  382. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  383. package/statistics/features/supported/values/post-process.d.ts +3 -0
  384. package/statistics/features/supported/values/post-process.js +71 -0
  385. package/statistics/features/supported/values/values.d.ts +14 -0
  386. package/statistics/features/supported/values/values.js +101 -0
  387. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  388. package/statistics/features/supported/variables/post-process.js +121 -0
  389. package/statistics/features/supported/variables/variables.d.ts +15 -0
  390. package/statistics/features/supported/variables/variables.js +60 -0
  391. package/statistics/meta-statistics.d.ts +33 -0
  392. package/statistics/meta-statistics.js +17 -0
  393. package/statistics/output/file-provider.d.ts +37 -0
  394. package/statistics/output/file-provider.js +97 -0
  395. package/statistics/output/print-stats.d.ts +17 -0
  396. package/statistics/output/print-stats.js +69 -0
  397. package/statistics/output/statistics-file.d.ts +37 -0
  398. package/statistics/output/statistics-file.js +69 -0
  399. package/statistics/statistics.d.ts +28 -0
  400. package/statistics/statistics.js +108 -0
  401. package/statistics/summarizer/auto-detect.d.ts +2 -0
  402. package/statistics/summarizer/auto-detect.js +32 -0
  403. package/statistics/summarizer/first-phase/process.d.ts +6 -0
  404. package/statistics/summarizer/first-phase/process.js +81 -0
  405. package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
  406. package/statistics/summarizer/post-process/clusterer.js +43 -0
  407. package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
  408. package/statistics/summarizer/post-process/file-based-count.js +49 -0
  409. package/statistics/summarizer/post-process/histogram.d.ts +59 -0
  410. package/statistics/summarizer/post-process/histogram.js +128 -0
  411. package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
  412. package/statistics/summarizer/post-process/post-process-output.js +105 -0
  413. package/statistics/summarizer/second-phase/process.d.ts +11 -0
  414. package/statistics/summarizer/second-phase/process.js +116 -0
  415. package/statistics/summarizer/summarizer.d.ts +35 -0
  416. package/statistics/summarizer/summarizer.js +135 -0
  417. package/util/ansi.d.ts +2 -2
  418. package/util/ansi.js +2 -2
  419. package/util/arrays.d.ts +11 -1
  420. package/util/arrays.js +34 -1
  421. package/util/assert.d.ts +1 -0
  422. package/util/assert.js +5 -1
  423. package/util/cfg/cfg.d.ts +3 -2
  424. package/util/cfg/cfg.js +17 -28
  425. package/util/cfg/visitor.d.ts +1 -1
  426. package/util/defaultmap.d.ts +1 -1
  427. package/util/defaultmap.js +1 -1
  428. package/util/diff.d.ts +4 -4
  429. package/util/files.d.ts +2 -2
  430. package/util/files.js +1 -1
  431. package/util/log.d.ts +1 -0
  432. package/util/log.js +7 -1
  433. package/util/logic.d.ts +1 -0
  434. package/util/logic.js +3 -0
  435. package/util/mermaid/ast.d.ts +1 -1
  436. package/util/mermaid/ast.js +2 -2
  437. package/util/mermaid/cfg.d.ts +1 -1
  438. package/util/mermaid/dfg.d.ts +34 -8
  439. package/util/mermaid/dfg.js +99 -70
  440. package/util/mermaid/mermaid.d.ts +1 -1
  441. package/util/mermaid/mermaid.js +6 -7
  442. package/util/objects.js +4 -0
  443. package/util/quads.d.ts +3 -3
  444. package/util/quads.js +0 -1
  445. package/util/range.d.ts +27 -14
  446. package/util/range.js +31 -27
  447. package/util/version.js +1 -1
  448. package/core/index.d.ts +0 -4
  449. package/core/index.js +0 -23
  450. package/core/input.d.ts +0 -42
  451. package/core/output.d.ts +0 -15
  452. package/core/slicer.d.ts +0 -124
  453. package/core/slicer.js +0 -227
  454. package/core/steps.d.ts +0 -508
  455. package/core/steps.js +0 -100
  456. package/dataflow/environments/index.d.ts +0 -7
  457. package/dataflow/environments/index.js +0 -23
  458. package/dataflow/environments/register.js +0 -40
  459. package/dataflow/environments/scopes.d.ts +0 -6
  460. package/dataflow/environments/scopes.js +0 -6
  461. package/dataflow/graph/index.d.ts +0 -4
  462. package/dataflow/graph/index.js +0 -21
  463. package/dataflow/index.d.ts +0 -5
  464. package/dataflow/index.js +0 -24
  465. package/dataflow/internal/info.d.ts +0 -21
  466. package/dataflow/internal/info.js +0 -16
  467. package/dataflow/internal/process/access.d.ts +0 -4
  468. package/dataflow/internal/process/access.js +0 -53
  469. package/dataflow/internal/process/expression-list.d.ts +0 -8
  470. package/dataflow/internal/process/expression-list.js +0 -144
  471. package/dataflow/internal/process/functions/argument.d.ts +0 -8
  472. package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
  473. package/dataflow/internal/process/functions/exit-points.js +0 -121
  474. package/dataflow/internal/process/functions/function-call.d.ts +0 -5
  475. package/dataflow/internal/process/functions/function-call.js +0 -105
  476. package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
  477. package/dataflow/internal/process/functions/function-definition.js +0 -176
  478. package/dataflow/internal/process/functions/source.d.ts +0 -8
  479. package/dataflow/internal/process/functions/source.js +0 -81
  480. package/dataflow/internal/process/if-then-else.d.ts +0 -4
  481. package/dataflow/internal/process/if-then-else.js +0 -56
  482. package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
  483. package/dataflow/internal/process/loops/for-loop.js +0 -54
  484. package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
  485. package/dataflow/internal/process/loops/repeat-loop.js +0 -21
  486. package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
  487. package/dataflow/internal/process/loops/while-loop.js +0 -31
  488. package/dataflow/internal/process/operators/assignment.d.ts +0 -4
  489. package/dataflow/internal/process/operators/assignment.js +0 -129
  490. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
  491. package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
  492. package/dataflow/internal/process/operators/pipe.d.ts +0 -4
  493. package/dataflow/internal/process/operators/pipe.js +0 -46
  494. package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
  495. package/dataflow/internal/process/operators/unary-op.js +0 -10
  496. package/dataflow/internal/process/symbol.d.ts +0 -4
  497. package/dataflow/internal/process/symbol.js +0 -21
  498. package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
  499. package/dataflow/internal/process/uninteresting-leaf.js +0 -9
  500. package/index.d.ts +0 -4
  501. package/index.js +0 -21
  502. package/r-bridge/index.d.ts +0 -11
  503. package/r-bridge/index.js +0 -28
  504. package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
  505. package/r-bridge/lang-4.x/ast/index.js +0 -22
  506. package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
  507. package/r-bridge/lang-4.x/ast/model/index.js +0 -23
  508. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
  509. package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
  510. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
  511. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
  512. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
  513. package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
  514. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
  515. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
  516. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
  517. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
  518. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
  519. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
  520. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
  521. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
  522. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
  523. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
  524. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
  525. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
  526. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
  527. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
  528. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
  529. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
  530. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
  531. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
  532. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
  533. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
  534. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
  535. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
  536. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
  537. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
  538. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
  539. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
  540. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
  541. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
  542. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
  543. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
  544. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
  545. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
  546. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
  547. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
  548. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
  549. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
  550. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
  551. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
  552. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
  553. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
  554. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
  555. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
  556. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
  557. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
  558. package/r-bridge/lang-4.x/index.d.ts +0 -2
  559. package/r-bridge/lang-4.x/index.js +0 -19
  560. package/slicing/criterion/filters/index.d.ts +0 -1
  561. package/slicing/criterion/filters/index.js +0 -18
  562. package/slicing/criterion/index.d.ts +0 -3
  563. package/slicing/criterion/index.js +0 -20
  564. package/slicing/index.d.ts +0 -3
  565. package/slicing/index.js +0 -20
  566. package/slicing/static/index.d.ts +0 -1
  567. package/slicing/static/index.js +0 -18
  568. package/util/mermaid/index.d.ts +0 -3
  569. package/util/mermaid/index.js +0 -20
  570. /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
@@ -1,105 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processFunctionCall = exports.UnnamedFunctionCallPrefix = void 0;
4
- const processor_1 = require("../../../processor");
5
- const environments_1 = require("../../../environments");
6
- const assert_1 = require("../../../../util/assert");
7
- const index_1 = require("../../../index");
8
- const linker_1 = require("../../linker");
9
- const scopes_1 = require("../../../environments/scopes");
10
- const source_1 = require("./source");
11
- exports.UnnamedFunctionCallPrefix = 'unnamed-function-call-';
12
- function processFunctionCall(functionCall, data) {
13
- const named = functionCall.flavor === 'named';
14
- const functionName = (0, processor_1.processDataflowFor)(named ? functionCall.functionName : functionCall.calledFunction, data);
15
- let finalEnv = functionName.environments;
16
- // arg env contains the environments with other args defined
17
- let argEnv = functionName.environments;
18
- const finalGraph = new index_1.DataflowGraph();
19
- const callArgs = [];
20
- const args = [];
21
- const remainingReadInArgs = [];
22
- const functionRootId = functionCall.info.id;
23
- let functionCallName;
24
- if (named) {
25
- functionCallName = functionCall.functionName.content;
26
- index_1.dataflowLogger.debug(`Using ${functionRootId} (name: ${functionCallName}) as root for the function call`);
27
- }
28
- else {
29
- functionCallName = `${exports.UnnamedFunctionCallPrefix}${functionRootId}`;
30
- index_1.dataflowLogger.debug(`Using ${functionRootId} as root for the unnamed function call`);
31
- // we know, that it calls the toplevel:
32
- finalGraph.addEdge(functionRootId, functionCall.calledFunction.info.id, index_1.EdgeType.Calls, 'always');
33
- // keep the defined function
34
- finalGraph.mergeWith(functionName.graph);
35
- }
36
- for (const arg of functionCall.arguments) {
37
- if (arg === undefined) {
38
- callArgs.push('empty');
39
- args.push(undefined);
40
- continue;
41
- }
42
- const processed = (0, processor_1.processDataflowFor)(arg, { ...data, environments: argEnv });
43
- args.push(processed);
44
- finalEnv = (0, environments_1.overwriteEnvironments)(finalEnv, processed.environments);
45
- argEnv = (0, environments_1.overwriteEnvironments)(argEnv, processed.environments);
46
- finalGraph.mergeWith(processed.graph);
47
- (0, assert_1.guard)(processed.out.length > 0, () => `Argument ${JSON.stringify(arg)} has no out references, but needs one for the unnamed arg`);
48
- if (arg.name === undefined) {
49
- callArgs.push(processed.out[0]);
50
- }
51
- else {
52
- callArgs.push([arg.name.content, processed.out[0]]);
53
- }
54
- // add an argument edge to the final graph
55
- finalGraph.addEdge(functionRootId, processed.out[0], index_1.EdgeType.Argument, 'always');
56
- // resolve reads within argument
57
- for (const ingoing of [...processed.in, ...processed.unknownReferences]) {
58
- const tryToResolve = (0, environments_1.resolveByName)(ingoing.name, scopes_1.LocalScope, argEnv);
59
- if (tryToResolve === undefined) {
60
- remainingReadInArgs.push(ingoing);
61
- }
62
- else {
63
- for (const resolved of tryToResolve) {
64
- finalGraph.addEdge(ingoing.nodeId, resolved.nodeId, index_1.EdgeType.Reads, 'always');
65
- }
66
- }
67
- }
68
- if (arg.type === "RArgument" /* RType.Argument */ && arg.name !== undefined) {
69
- argEnv = (0, environments_1.define)({ ...processed.out[0], definedAt: arg.info.id, kind: 'argument' }, scopes_1.LocalScope, argEnv);
70
- }
71
- }
72
- finalGraph.addVertex({
73
- tag: 'function-call',
74
- id: functionRootId,
75
- name: functionCallName,
76
- environment: data.environments,
77
- when: 'always',
78
- scope: data.activeScope,
79
- args: callArgs // same reference
80
- });
81
- const inIds = remainingReadInArgs;
82
- inIds.push({ nodeId: functionRootId, name: functionCallName, scope: data.activeScope, used: 'always' });
83
- if (!named) {
84
- if (functionCall.calledFunction.type === "RFunctionDefinition" /* RType.FunctionDefinition */) {
85
- (0, linker_1.linkArgumentsOnCall)(callArgs, functionCall.calledFunction.parameters, finalGraph);
86
- }
87
- // push the called function to the ids:
88
- inIds.push(...functionName.in, ...functionName.unknownReferences);
89
- }
90
- let info = {
91
- unknownReferences: [],
92
- in: inIds,
93
- out: functionName.out, // we do not keep argument out as it has been linked by the function
94
- graph: finalGraph,
95
- environments: finalEnv,
96
- scope: data.activeScope
97
- };
98
- // parse a source call and analyze the referenced code
99
- if ((0, source_1.isSourceCall)(functionCallName, data.activeScope, finalEnv)) {
100
- info = (0, source_1.processSourceCall)(functionCall, data, info);
101
- }
102
- return info;
103
- }
104
- exports.processFunctionCall = processFunctionCall;
105
- //# sourceMappingURL=function-call.js.map
@@ -1,4 +0,0 @@
1
- import type { DataflowInformation } from '../../info';
2
- import type { DataflowProcessorInformation } from '../../../processor';
3
- import type { ParentInformation, RFunctionDefinition } from '../../../../r-bridge';
4
- export declare function processFunctionDefinition<OtherInfo>(functionDefinition: RFunctionDefinition<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
@@ -1,176 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processFunctionDefinition = void 0;
4
- const processor_1 = require("../../../processor");
5
- const environments_1 = require("../../../environments");
6
- const linker_1 = require("../../linker");
7
- const index_1 = require("../../../index");
8
- const r_bridge_1 = require("../../../../r-bridge");
9
- const exit_points_1 = require("./exit-points");
10
- const assert_1 = require("../../../../util/assert");
11
- const scopes_1 = require("../../../environments/scopes");
12
- function updateNestedFunctionClosures(exitPoints, subgraph, outEnvironment, data, functionDefinition) {
13
- // track *all* function definitions - included those nested within the current graph
14
- // try to resolve their 'in' by only using the lowest scope which will be popped after this definition
15
- for (const [id, info] of subgraph.vertices(true)) {
16
- if (info.tag !== 'function-definition') {
17
- continue;
18
- }
19
- const ingoingRefs = info.subflow.in;
20
- const remainingIn = [];
21
- for (const ingoing of ingoingRefs) {
22
- for (const exitPoint of exitPoints) {
23
- const node = subgraph.get(exitPoint, true);
24
- const env = (0, environments_1.initializeCleanEnvironments)();
25
- env.current.memory = node === undefined ? outEnvironment.current.memory : node[0].environment.current.memory;
26
- const resolved = (0, environments_1.resolveByName)(ingoing.name, data.activeScope, env);
27
- if (resolved === undefined) {
28
- remainingIn.push(ingoing);
29
- continue;
30
- }
31
- index_1.dataflowLogger.trace(`Found ${resolved.length} references to open ref ${id} in closure of function definition ${functionDefinition.info.id}`);
32
- for (const ref of resolved) {
33
- subgraph.addEdge(ingoing, ref, index_1.EdgeType.Reads, exitPoints.length > 1 ? 'maybe' : 'always');
34
- }
35
- }
36
- }
37
- index_1.dataflowLogger.trace(`Keeping ${remainingIn.length} references to open ref ${id} in closure of function definition ${functionDefinition.info.id}`);
38
- info.subflow.in = [...new Set(remainingIn)];
39
- }
40
- }
41
- function prepareFunctionEnvironment(data) {
42
- let env = (0, environments_1.initializeCleanEnvironments)();
43
- for (let i = 0; i < data.environments.level + 1 /* add another env */; i++) {
44
- env = (0, environments_1.pushLocalEnvironment)(env);
45
- }
46
- return { ...data, environments: env };
47
- }
48
- /**
49
- * Within something like `f <- function(a=b, m=3) { b <- 1; a; b <- 5; a + 1 }`
50
- * `a` will be defined by `b` and `b`will be a promise object bound by the first definition of b it can find.
51
- * This means, that this function returns `2` due to the first `b <- 1` definition.
52
- * If the code would be `f <- function(a=b, m=3) { if(m > 3) { b <- 1; }; a; b <- 5; a + 1 }`, we need a link to `b <- 1` and `b <- 6`
53
- * as `b` can be defined by either one of them.
54
- * <p>
55
- * <b>Currently we may be unable to narrow down every definition within the body as we have not implemented ways to track what covers a first definitions</b>
56
- */
57
- function findPromiseLinkagesForParameters(parameters, readInParameters, parameterEnvs, body) {
58
- // first we try to bind again within parameters - if we have it, fine
59
- const remainingRead = [];
60
- for (const read of readInParameters) {
61
- const resolved = (0, environments_1.resolveByName)(read.name, scopes_1.LocalScope, parameterEnvs);
62
- if (resolved !== undefined) {
63
- for (const ref of resolved) {
64
- parameters.addEdge(read, ref, index_1.EdgeType.Reads, 'always');
65
- }
66
- continue;
67
- }
68
- // if not resolved, link all outs within the body as potential reads
69
- // regarding the sort we can ignore equality as nodeIds are unique
70
- // we sort to get the lowest id - if it is an 'always' flag we can safely use it instead of all of them
71
- const writingOuts = body.out.filter(o => o.name === read.name).sort((a, b) => a.nodeId < b.nodeId ? 1 : -1);
72
- if (writingOuts.length === 0) {
73
- remainingRead.push(read);
74
- continue;
75
- }
76
- if (writingOuts[0].used === 'always') {
77
- parameters.addEdge(read, writingOuts[0], index_1.EdgeType.Reads, 'always');
78
- continue;
79
- }
80
- for (const out of writingOuts) {
81
- parameters.addEdge(read, out, index_1.EdgeType.Reads, 'maybe');
82
- }
83
- }
84
- return remainingRead;
85
- }
86
- function processFunctionDefinition(functionDefinition, data) {
87
- index_1.dataflowLogger.trace(`Processing function definition with id ${functionDefinition.info.id}`);
88
- const originalEnvironments = data.environments;
89
- // within a function def we do not pass on the outer binds as they could be overwritten when called
90
- data = prepareFunctionEnvironment(data);
91
- const subgraph = new index_1.DataflowGraph();
92
- let readInParameters = [];
93
- for (const param of functionDefinition.parameters) {
94
- const processed = (0, processor_1.processDataflowFor)(param, data);
95
- subgraph.mergeWith(processed.graph);
96
- const read = [...processed.in, ...processed.unknownReferences];
97
- (0, linker_1.linkInputs)(read, data.activeScope, data.environments, readInParameters, subgraph, false);
98
- data = { ...data, environments: (0, environments_1.overwriteEnvironments)(data.environments, processed.environments) };
99
- }
100
- const paramsEnvironments = data.environments;
101
- const body = (0, processor_1.processDataflowFor)(functionDefinition.body, data);
102
- // as we know, that parameters can not duplicate, we overwrite their environments (which is the correct behavior, if someone uses non-`=` arguments in functions)
103
- const bodyEnvironment = body.environments;
104
- readInParameters = findPromiseLinkagesForParameters(subgraph, readInParameters, paramsEnvironments, body);
105
- const readInBody = [...body.in, ...body.unknownReferences];
106
- // there is no uncertainty regarding the arguments, as if a function header is executed, so is its body
107
- const remainingRead = (0, linker_1.linkInputs)(readInBody, data.activeScope, paramsEnvironments, readInParameters.slice(), body.graph, true /* functions do not have to be called */);
108
- subgraph.mergeWith(body.graph);
109
- index_1.dataflowLogger.trace(`Function definition with id ${functionDefinition.info.id} has ${remainingRead.length} remaining reads`);
110
- // link same-def-def with arguments
111
- for (const writeTarget of body.out) {
112
- const writeName = writeTarget.name;
113
- const resolved = (0, environments_1.resolveByName)(writeName, data.activeScope, paramsEnvironments);
114
- if (resolved !== undefined) {
115
- // write-write
116
- for (const target of resolved) {
117
- subgraph.addEdge(target, writeTarget, index_1.EdgeType.SameDefDef, undefined, true);
118
- }
119
- }
120
- }
121
- const outEnvironment = (0, environments_1.overwriteEnvironments)(paramsEnvironments, bodyEnvironment);
122
- for (const read of remainingRead) {
123
- subgraph.addVertex({ tag: 'use', id: read.nodeId, name: read.name, environment: outEnvironment, when: 'maybe' });
124
- }
125
- const flow = {
126
- unknownReferences: [],
127
- in: remainingRead,
128
- out: [],
129
- graph: new Set(subgraph.rootIds()),
130
- environments: outEnvironment,
131
- scope: data.activeScope
132
- };
133
- const exitPoints = (0, exit_points_1.retrieveExitPointsOfFunctionDefinition)(functionDefinition);
134
- // if exit points are extra, we must link them to all dataflow nodes they relate to.
135
- linkExitPointsInGraph(exitPoints, subgraph, data.completeAst.idMap, outEnvironment);
136
- updateNestedFunctionClosures(exitPoints, subgraph, outEnvironment, data, functionDefinition);
137
- const graph = new index_1.DataflowGraph().mergeWith(subgraph, false);
138
- graph.addVertex({
139
- tag: 'function-definition',
140
- id: functionDefinition.info.id,
141
- name: functionDefinition.info.id,
142
- environment: (0, environments_1.popLocalEnvironment)(outEnvironment),
143
- scope: data.activeScope,
144
- when: 'always',
145
- subflow: flow,
146
- exitPoints
147
- });
148
- return {
149
- unknownReferences: [] /* nothing escapes a function definition, but the function itself, will be forced in assignment: { nodeId: functionDefinition.info.id, scope: data.activeScope, used: 'always', name: functionDefinition.info.id as string } */,
150
- in: [],
151
- out: [],
152
- graph,
153
- environments: originalEnvironments,
154
- scope: data.activeScope
155
- };
156
- }
157
- exports.processFunctionDefinition = processFunctionDefinition;
158
- function linkExitPointsInGraph(exitPoints, graph, idMap, environment) {
159
- for (const exitPoint of exitPoints) {
160
- const exitPointNode = graph.get(exitPoint, true);
161
- // if there already is an exit point it is either a variable or already linked
162
- if (exitPointNode !== undefined) {
163
- continue;
164
- }
165
- const nodeInAst = idMap.get(exitPoint);
166
- (0, assert_1.guard)(nodeInAst !== undefined, `Could not find exit point node with id ${exitPoint} in ast`);
167
- graph.addVertex({ tag: 'exit-point', id: exitPoint, name: `${nodeInAst.lexeme ?? '??'}`, when: 'always', environment });
168
- const allIds = [...(0, r_bridge_1.collectAllIds)(nodeInAst)].filter(id => graph.get(id, true) !== undefined);
169
- for (const relatedId of allIds) {
170
- if (relatedId !== exitPoint) {
171
- graph.addEdge(exitPoint, relatedId, index_1.EdgeType.Relates, 'always');
172
- }
173
- }
174
- }
175
- }
176
- //# sourceMappingURL=function-definition.js.map
@@ -1,8 +0,0 @@
1
- import type { IdGenerator, NoInfo, RParseRequest, RParseRequestProvider, ParentInformation, RFunctionCall } from '../../../../r-bridge';
2
- import { type DataflowProcessorInformation } from '../../../processor';
3
- import { type DataflowScopeName, type Identifier, type REnvironmentInformation } from '../../../environments';
4
- import type { DataflowInformation } from '../../info';
5
- export declare function setSourceProvider(provider: RParseRequestProvider): void;
6
- export declare function isSourceCall(name: Identifier, scope: DataflowScopeName, environments: REnvironmentInformation): boolean;
7
- export declare function processSourceCall<OtherInfo>(functionCall: RFunctionCall<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, information: DataflowInformation): DataflowInformation;
8
- export declare function sourceRequest<OtherInfo>(request: RParseRequest, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, information: DataflowInformation, getId: IdGenerator<NoInfo>): DataflowInformation;
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sourceRequest = exports.processSourceCall = exports.isSourceCall = exports.setSourceProvider = void 0;
4
- const r_bridge_1 = require("../../../../r-bridge");
5
- const shell_executor_1 = require("../../../../r-bridge/shell-executor");
6
- const core_1 = require("../../../../core");
7
- const processor_1 = require("../../../processor");
8
- const environments_1 = require("../../../environments");
9
- const index_1 = require("../../../index");
10
- const config_1 = require("../../../../config");
11
- let sourceProvider = (0, r_bridge_1.requestProviderFromFile)();
12
- function setSourceProvider(provider) {
13
- sourceProvider = provider;
14
- }
15
- exports.setSourceProvider = setSourceProvider;
16
- function isSourceCall(name, scope, environments) {
17
- const definitions = (0, environments_1.resolveByName)(name, scope, environments);
18
- if (definitions === undefined) {
19
- return false;
20
- }
21
- // fail if there are multiple definitions because then we must treat the complete import as a maybe because it might do something different
22
- if (definitions.length !== 1) {
23
- return false;
24
- }
25
- const def = definitions[0];
26
- return def.name == 'source' && def.kind == 'built-in-function';
27
- }
28
- exports.isSourceCall = isSourceCall;
29
- function processSourceCall(functionCall, data, information) {
30
- const sourceFile = functionCall.arguments[0];
31
- if ((0, config_1.getConfig)().ignoreSourceCalls) {
32
- index_1.dataflowLogger.info(`Skipping source call ${JSON.stringify(sourceFile)} (disabled in config file)`);
33
- return information;
34
- }
35
- if (sourceFile?.value?.type == "RString" /* RType.String */) {
36
- const path = (0, r_bridge_1.removeRQuotes)(sourceFile.lexeme);
37
- const request = sourceProvider.createRequest(path);
38
- // check if the sourced file has already been dataflow analyzed, and if so, skip it
39
- if (data.referenceChain.includes((0, r_bridge_1.requestFingerprint)(request))) {
40
- index_1.dataflowLogger.info(`Found loop in dataflow analysis for ${JSON.stringify(request)}: ${JSON.stringify(data.referenceChain)}, skipping further dataflow analysis`);
41
- return information;
42
- }
43
- return sourceRequest(request, data, information, (0, r_bridge_1.sourcedDeterministicCountingIdGenerator)(path, functionCall.location));
44
- }
45
- else {
46
- index_1.dataflowLogger.info(`Non-constant argument ${JSON.stringify(sourceFile)} for source is currently not supported, skipping`);
47
- return information;
48
- }
49
- }
50
- exports.processSourceCall = processSourceCall;
51
- function sourceRequest(request, data, information, getId) {
52
- const executor = new shell_executor_1.RShellExecutor();
53
- // parse, normalize and dataflow the sourced file
54
- let normalized;
55
- let dataflow;
56
- try {
57
- const parsed = (0, core_1.executeSingleSubStep)('parse', request, executor);
58
- normalized = (0, core_1.executeSingleSubStep)('normalize', parsed, undefined, getId);
59
- dataflow = (0, processor_1.processDataflowFor)(normalized.ast, {
60
- ...data,
61
- currentRequest: request,
62
- environments: information.environments,
63
- referenceChain: [...data.referenceChain, (0, r_bridge_1.requestFingerprint)(request)]
64
- });
65
- }
66
- catch (e) {
67
- index_1.dataflowLogger.warn(`Failed to analyze sourced file ${JSON.stringify(request)}, skipping: ${e.message}`);
68
- return information;
69
- }
70
- // update our graph with the sourced file's information
71
- const newInformation = { ...information };
72
- newInformation.environments = (0, environments_1.overwriteEnvironments)(information.environments, dataflow.environments);
73
- newInformation.graph.mergeWith(dataflow.graph);
74
- // this can be improved, see issue #628
75
- for (const [k, v] of normalized.idMap) {
76
- data.completeAst.idMap.set(k, v);
77
- }
78
- return newInformation;
79
- }
80
- exports.sourceRequest = sourceRequest;
81
- //# sourceMappingURL=source.js.map
@@ -1,4 +0,0 @@
1
- import type { DataflowInformation } from '../info';
2
- import type { DataflowProcessorInformation } from '../../processor';
3
- import type { ParentInformation, RIfThenElse } from '../../../r-bridge';
4
- export declare function processIfThenElse<OtherInfo>(ifThen: RIfThenElse<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processIfThenElse = void 0;
4
- const processor_1 = require("../../processor");
5
- const environments_1 = require("../../environments");
6
- const linker_1 = require("../linker");
7
- function processIfThenElse(ifThen, data) {
8
- const cond = (0, processor_1.processDataflowFor)(ifThen.condition, data);
9
- data = { ...data, environments: cond.environments };
10
- let then;
11
- let makeThenMaybe = false;
12
- if (ifThen.condition.lexeme !== 'FALSE') {
13
- then = (0, processor_1.processDataflowFor)(ifThen.then, data);
14
- if (ifThen.condition.lexeme !== 'TRUE') {
15
- makeThenMaybe = true;
16
- }
17
- }
18
- let otherwise;
19
- let makeOtherwiseMaybe = false;
20
- if (ifThen.otherwise !== undefined && ifThen.condition.lexeme !== 'TRUE') {
21
- otherwise = (0, processor_1.processDataflowFor)(ifThen.otherwise, data);
22
- if (ifThen.condition.lexeme !== 'FALSE') {
23
- makeOtherwiseMaybe = true;
24
- }
25
- }
26
- const nextGraph = cond.graph.mergeWith(then?.graph).mergeWith(otherwise?.graph);
27
- const thenEnvironment = (0, environments_1.appendEnvironments)(cond.environments, then?.environments);
28
- const finalEnvironment = otherwise ? (0, environments_1.appendEnvironments)(thenEnvironment, otherwise.environments) : thenEnvironment;
29
- // again within an if-then-else we consider all actives to be read
30
- const ingoing = [
31
- ...cond.in,
32
- ...(makeThenMaybe ? (0, environments_1.makeAllMaybe)(then?.in, nextGraph, finalEnvironment) : then?.in ?? []),
33
- ...(makeOtherwiseMaybe ? (0, environments_1.makeAllMaybe)(otherwise?.in, nextGraph, finalEnvironment) : otherwise?.in ?? []),
34
- ...cond.unknownReferences,
35
- ...(makeThenMaybe ? (0, environments_1.makeAllMaybe)(then?.unknownReferences, nextGraph, finalEnvironment) : then?.unknownReferences ?? []),
36
- ...(makeOtherwiseMaybe ? (0, environments_1.makeAllMaybe)(otherwise?.unknownReferences, nextGraph, finalEnvironment) : otherwise?.unknownReferences ?? []),
37
- ];
38
- // we assign all with a maybe marker
39
- // we do not merge even if they appear in both branches because the maybe links will refer to different ids
40
- const outgoing = [
41
- ...cond.out,
42
- ...(makeThenMaybe ? (0, environments_1.makeAllMaybe)(then?.out, nextGraph, finalEnvironment) : then?.out ?? []),
43
- ...(makeOtherwiseMaybe ? (0, environments_1.makeAllMaybe)(otherwise?.out, nextGraph, finalEnvironment) : otherwise?.out ?? []),
44
- ];
45
- (0, linker_1.linkIngoingVariablesInSameScope)(nextGraph, ingoing);
46
- return {
47
- unknownReferences: [],
48
- in: ingoing,
49
- out: outgoing,
50
- environments: finalEnvironment,
51
- graph: nextGraph,
52
- scope: data.activeScope,
53
- };
54
- }
55
- exports.processIfThenElse = processIfThenElse;
56
- //# sourceMappingURL=if-then-else.js.map
@@ -1,4 +0,0 @@
1
- import type { DataflowInformation } from '../../info';
2
- import type { DataflowProcessorInformation } from '../../../processor';
3
- import type { ParentInformation, RForLoop } from '../../../../r-bridge';
4
- export declare function processForLoop<OtherInfo>(loop: RForLoop<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processForLoop = void 0;
4
- const linker_1 = require("../../linker");
5
- const processor_1 = require("../../../processor");
6
- const environments_1 = require("../../../environments");
7
- const graph_1 = require("../../../graph");
8
- const scopes_1 = require("../../../environments/scopes");
9
- function processForLoop(loop, data) {
10
- const variable = (0, processor_1.processDataflowFor)(loop.variable, data);
11
- const vector = (0, processor_1.processDataflowFor)(loop.vector, data);
12
- let headEnvironments = (0, environments_1.overwriteEnvironments)(vector.environments, variable.environments);
13
- const headGraph = variable.graph.mergeWith(vector.graph);
14
- const writtenVariable = variable.unknownReferences;
15
- for (const write of writtenVariable) {
16
- headEnvironments = (0, environments_1.define)({ ...write, used: 'always', definedAt: loop.info.id, kind: 'variable' }, scopes_1.LocalScope, headEnvironments);
17
- }
18
- data = { ...data, environments: headEnvironments };
19
- const body = (0, processor_1.processDataflowFor)(loop.body, data);
20
- const nextGraph = headGraph.mergeWith(body.graph);
21
- const outEnvironments = (0, environments_1.appendEnvironments)(headEnvironments, body.environments);
22
- // again within an if-then-else we consider all actives to be read
23
- // currently i add it at the end, but is this correct?
24
- const ingoing = [...vector.in, ...(0, environments_1.makeAllMaybe)(body.in, nextGraph, outEnvironments), ...vector.unknownReferences, ...(0, environments_1.makeAllMaybe)(body.unknownReferences, nextGraph, outEnvironments)];
25
- // now we have to bind all open reads with the given name to the locally defined writtenVariable!
26
- const nameIdShares = (0, linker_1.produceNameSharedIdMap)(ingoing);
27
- for (const write of writtenVariable) {
28
- for (const link of [...vector.in, ...vector.unknownReferences]) {
29
- nextGraph.addEdge(write.nodeId, link.nodeId, graph_1.EdgeType.DefinedBy, 'always', true);
30
- }
31
- const name = write.name;
32
- const readIdsToLink = nameIdShares.get(name);
33
- for (const readId of readIdsToLink) {
34
- nextGraph.addEdge(readId.nodeId, write.nodeId, graph_1.EdgeType.Reads, 'always', true);
35
- }
36
- // now, we remove the name from the id shares as they are no longer needed
37
- nameIdShares.delete(name);
38
- nextGraph.setDefinitionOfVertex(write);
39
- }
40
- const outgoing = [...variable.out, ...writtenVariable, ...(0, environments_1.makeAllMaybe)(body.out, nextGraph, outEnvironments)];
41
- (0, linker_1.linkIngoingVariablesInSameScope)(nextGraph, ingoing);
42
- (0, linker_1.linkCircularRedefinitionsWithinALoop)(nextGraph, nameIdShares, body.out);
43
- return {
44
- unknownReferences: [],
45
- // we only want those not bound by a local variable
46
- in: [...variable.in, ...[...nameIdShares.values()].flat()],
47
- out: outgoing,
48
- graph: nextGraph,
49
- environments: outEnvironments,
50
- scope: data.activeScope
51
- };
52
- }
53
- exports.processForLoop = processForLoop;
54
- //# sourceMappingURL=for-loop.js.map
@@ -1,4 +0,0 @@
1
- import type { DataflowInformation } from '../../info';
2
- import type { DataflowProcessorInformation } from '../../../processor';
3
- import type { ParentInformation, RRepeatLoop } from '../../../../r-bridge';
4
- export declare function processRepeatLoop<OtherInfo>(loop: RRepeatLoop<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processRepeatLoop = void 0;
4
- const processor_1 = require("../../../processor");
5
- const linker_1 = require("../../linker");
6
- function processRepeatLoop(loop, data) {
7
- const body = (0, processor_1.processDataflowFor)(loop.body, data);
8
- const graph = body.graph;
9
- const namedIdShares = (0, linker_1.produceNameSharedIdMap)([...body.in, ...body.unknownReferences]);
10
- (0, linker_1.linkCircularRedefinitionsWithinALoop)(graph, namedIdShares, body.out);
11
- return {
12
- unknownReferences: [],
13
- in: [...body.in, ...body.unknownReferences],
14
- out: body.out,
15
- environments: body.environments,
16
- scope: data.activeScope,
17
- graph: body.graph
18
- };
19
- }
20
- exports.processRepeatLoop = processRepeatLoop;
21
- //# sourceMappingURL=repeat-loop.js.map
@@ -1,4 +0,0 @@
1
- import type { DataflowInformation } from '../../info';
2
- import type { DataflowProcessorInformation } from '../../../processor';
3
- import type { ParentInformation, RWhileLoop } from '../../../../r-bridge';
4
- export declare function processWhileLoop<OtherInfo>(loop: RWhileLoop<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processWhileLoop = void 0;
4
- const processor_1 = require("../../../processor");
5
- const environments_1 = require("../../../environments");
6
- const linker_1 = require("../../linker");
7
- function processWhileLoop(loop, data) {
8
- const condition = (0, processor_1.processDataflowFor)(loop.condition, data);
9
- data = { ...data, environments: condition.environments };
10
- const body = (0, processor_1.processDataflowFor)(loop.body, data);
11
- const environments = condition.environments;
12
- const nextGraph = condition.graph.mergeWith(body.graph);
13
- const finalEnvironments = (0, environments_1.appendEnvironments)(condition.environments, body.environments);
14
- // this is theoretically redundant, but we would have to manually mark all affected edges as maybe this way. This does that for us.
15
- const remainingInputs = (0, linker_1.linkInputs)([
16
- ...(0, environments_1.makeAllMaybe)(body.unknownReferences, nextGraph, finalEnvironments),
17
- ...(0, environments_1.makeAllMaybe)(body.in, nextGraph, finalEnvironments)
18
- ], data.activeScope, environments, [...condition.in, ...condition.unknownReferences], nextGraph, true);
19
- (0, linker_1.linkCircularRedefinitionsWithinALoop)(nextGraph, (0, linker_1.produceNameSharedIdMap)(remainingInputs), body.out);
20
- return {
21
- unknownReferences: [],
22
- in: remainingInputs,
23
- out: [...(0, environments_1.makeAllMaybe)(body.out, nextGraph, finalEnvironments), ...condition.out],
24
- graph: nextGraph,
25
- /* the body might not happen if the condition is false */
26
- environments: finalEnvironments,
27
- scope: data.activeScope
28
- };
29
- }
30
- exports.processWhileLoop = processWhileLoop;
31
- //# sourceMappingURL=while-loop.js.map
@@ -1,4 +0,0 @@
1
- import type { ParentInformation, RAssignmentOp } from '../../../../r-bridge';
2
- import type { DataflowInformation } from '../../info';
3
- import type { DataflowProcessorInformation } from '../../../processor';
4
- export declare function processAssignment<OtherInfo>(op: RAssignmentOp<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;