@eagleoutice/flowr 1.3.11

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 (668) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +27 -0
  3. package/benchmark/benchmark-slicer.js +223 -0
  4. package/benchmark/index.d.ts +3 -0
  5. package/benchmark/index.js +20 -0
  6. package/benchmark/slicer.d.ts +100 -0
  7. package/benchmark/slicer.js +223 -0
  8. package/benchmark/stats/index.d.ts +10 -0
  9. package/benchmark/stats/index.js +27 -0
  10. package/benchmark/stats/print.d.ts +7 -0
  11. package/benchmark/stats/print.js +157 -0
  12. package/benchmark/stats/stats.d.ts +41 -0
  13. package/benchmark/stats/stats.js +6 -0
  14. package/benchmark/stopwatch.d.ts +35 -0
  15. package/benchmark/stopwatch.js +79 -0
  16. package/cli/benchmark-app.d.ts +9 -0
  17. package/cli/benchmark-app.js +52 -0
  18. package/cli/benchmark-helper-app.d.ts +7 -0
  19. package/cli/benchmark-helper-app.js +60 -0
  20. package/cli/common/features.d.ts +3 -0
  21. package/cli/common/features.js +30 -0
  22. package/cli/common/index.d.ts +2 -0
  23. package/cli/common/index.js +19 -0
  24. package/cli/common/options.d.ts +20 -0
  25. package/cli/common/options.js +82 -0
  26. package/cli/common/script.d.ts +21 -0
  27. package/cli/common/script.js +61 -0
  28. package/cli/common/scripts-info.d.ts +24 -0
  29. package/cli/common/scripts-info.js +69 -0
  30. package/cli/export-quads-app.d.ts +7 -0
  31. package/cli/export-quads-app.js +46 -0
  32. package/cli/repl/commands/cfg.d.ts +3 -0
  33. package/cli/repl/commands/cfg.js +37 -0
  34. package/cli/repl/commands/commands.d.ts +11 -0
  35. package/cli/repl/commands/commands.js +103 -0
  36. package/cli/repl/commands/dataflow.d.ts +3 -0
  37. package/cli/repl/commands/dataflow.js +34 -0
  38. package/cli/repl/commands/execute.d.ts +4 -0
  39. package/cli/repl/commands/execute.js +27 -0
  40. package/cli/repl/commands/index.d.ts +2 -0
  41. package/cli/repl/commands/index.js +19 -0
  42. package/cli/repl/commands/main.d.ts +39 -0
  43. package/cli/repl/commands/main.js +14 -0
  44. package/cli/repl/commands/normalize.d.ts +3 -0
  45. package/cli/repl/commands/normalize.js +34 -0
  46. package/cli/repl/commands/parse.d.ts +2 -0
  47. package/cli/repl/commands/parse.js +109 -0
  48. package/cli/repl/commands/quit.d.ts +2 -0
  49. package/cli/repl/commands/quit.js +12 -0
  50. package/cli/repl/commands/version.d.ts +16 -0
  51. package/cli/repl/commands/version.js +33 -0
  52. package/cli/repl/core.d.ts +41 -0
  53. package/cli/repl/core.js +89 -0
  54. package/cli/repl/execute.d.ts +28 -0
  55. package/cli/repl/execute.js +79 -0
  56. package/cli/repl/index.d.ts +5 -0
  57. package/cli/repl/index.js +22 -0
  58. package/cli/repl/prompt.d.ts +2 -0
  59. package/cli/repl/prompt.js +9 -0
  60. package/cli/repl/server/connection.d.ts +21 -0
  61. package/cli/repl/server/connection.js +217 -0
  62. package/cli/repl/server/messages/analysis.d.ts +71 -0
  63. package/cli/repl/server/messages/analysis.js +21 -0
  64. package/cli/repl/server/messages/error.d.ts +11 -0
  65. package/cli/repl/server/messages/error.js +3 -0
  66. package/cli/repl/server/messages/hello.d.ts +20 -0
  67. package/cli/repl/server/messages/hello.js +3 -0
  68. package/cli/repl/server/messages/index.d.ts +1 -0
  69. package/cli/repl/server/messages/index.js +3 -0
  70. package/cli/repl/server/messages/messages.d.ts +35 -0
  71. package/cli/repl/server/messages/messages.js +20 -0
  72. package/cli/repl/server/messages/repl.d.ts +33 -0
  73. package/cli/repl/server/messages/repl.js +17 -0
  74. package/cli/repl/server/messages/slice.d.ts +25 -0
  75. package/cli/repl/server/messages/slice.js +17 -0
  76. package/cli/repl/server/net.d.ts +33 -0
  77. package/cli/repl/server/net.js +24 -0
  78. package/cli/repl/server/send.d.ts +4 -0
  79. package/cli/repl/server/send.js +18 -0
  80. package/cli/repl/server/server.d.ts +20 -0
  81. package/cli/repl/server/server.js +66 -0
  82. package/cli/repl/server/validate.d.ts +15 -0
  83. package/cli/repl/server/validate.js +34 -0
  84. package/cli/slicer-app.d.ts +11 -0
  85. package/cli/slicer-app.js +81 -0
  86. package/cli/statistics-app.d.ts +11 -0
  87. package/cli/statistics-app.js +98 -0
  88. package/cli/statistics-helper-app.d.ts +11 -0
  89. package/cli/statistics-helper-app.js +83 -0
  90. package/cli/summarizer-app.d.ts +18 -0
  91. package/cli/summarizer-app.js +67 -0
  92. package/core/index.d.ts +4 -0
  93. package/core/index.js +23 -0
  94. package/core/input.d.ts +42 -0
  95. package/core/input.js +3 -0
  96. package/core/output.d.ts +15 -0
  97. package/core/output.js +3 -0
  98. package/core/pipeline-executor.js +221 -0
  99. package/core/print/dataflow-printer.d.ts +8 -0
  100. package/core/print/dataflow-printer.js +62 -0
  101. package/core/print/normalize-printer.d.ts +7 -0
  102. package/core/print/normalize-printer.js +31 -0
  103. package/core/print/parse-printer.d.ts +3 -0
  104. package/core/print/parse-printer.js +29 -0
  105. package/core/print/print.d.ts +47 -0
  106. package/core/print/print.js +13 -0
  107. package/core/print/slice-diff-ansi.d.ts +2 -0
  108. package/core/print/slice-diff-ansi.js +49 -0
  109. package/core/slicer.d.ts +123 -0
  110. package/core/slicer.js +227 -0
  111. package/core/stepping-slicer.js +160 -0
  112. package/core/steps/all/00-parse.js +19 -0
  113. package/core/steps/all/10-normalize.js +21 -0
  114. package/core/steps/all/20-dataflow.js +21 -0
  115. package/core/steps/all/30-slice.js +16 -0
  116. package/core/steps/all/40-reconstruct.js +16 -0
  117. package/core/steps/all/core/00-parse.js +24 -0
  118. package/core/steps/all/core/10-normalize.js +46 -0
  119. package/core/steps/all/core/20-dataflow.js +39 -0
  120. package/core/steps/all/static-slicing/00-slice.js +21 -0
  121. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  122. package/core/steps/index.js +21 -0
  123. package/core/steps/input.js +3 -0
  124. package/core/steps/output.js +3 -0
  125. package/core/steps/pipeline/create.js +130 -0
  126. package/core/steps/pipeline/default.js +15 -0
  127. package/core/steps/pipeline/dependency-checker.js +76 -0
  128. package/core/steps/pipeline/index.js +20 -0
  129. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  130. package/core/steps/pipeline/pipeline.js +28 -0
  131. package/core/steps/step.js +8 -0
  132. package/core/steps/steps-provider.js +3 -0
  133. package/core/steps/steps.js +35 -0
  134. package/core/steps.d.ts +166 -0
  135. package/core/steps.js +99 -0
  136. package/dataflow/common/environments/append.js +48 -0
  137. package/dataflow/common/environments/environment.js +165 -0
  138. package/dataflow/common/environments/index.js +23 -0
  139. package/dataflow/common/environments/overwrite.js +82 -0
  140. package/dataflow/common/environments/register.js +49 -0
  141. package/dataflow/common/environments/resolve-by-name.js +35 -0
  142. package/dataflow/common/environments/scopes.js +6 -0
  143. package/dataflow/common/environments/scoping.js +27 -0
  144. package/dataflow/environments/append.d.ts +8 -0
  145. package/dataflow/environments/append.js +48 -0
  146. package/dataflow/environments/environment.d.ts +78 -0
  147. package/dataflow/environments/environment.js +161 -0
  148. package/dataflow/environments/index.d.ts +7 -0
  149. package/dataflow/environments/index.js +23 -0
  150. package/dataflow/environments/overwrite.d.ts +6 -0
  151. package/dataflow/environments/overwrite.js +82 -0
  152. package/dataflow/environments/register.d.ts +7 -0
  153. package/dataflow/environments/register.js +39 -0
  154. package/dataflow/environments/resolve-by-name.d.ts +12 -0
  155. package/dataflow/environments/resolve-by-name.js +35 -0
  156. package/dataflow/environments/scopes.d.ts +6 -0
  157. package/dataflow/environments/scopes.js +6 -0
  158. package/dataflow/environments/scoping.d.ts +4 -0
  159. package/dataflow/environments/scoping.js +27 -0
  160. package/dataflow/extractor.d.ts +6 -0
  161. package/dataflow/extractor.js +60 -0
  162. package/dataflow/graph/diff.d.ts +18 -0
  163. package/dataflow/graph/diff.js +206 -0
  164. package/dataflow/graph/edge.d.ts +37 -0
  165. package/dataflow/graph/edge.js +32 -0
  166. package/dataflow/graph/equal.js +127 -0
  167. package/dataflow/graph/graph.d.ts +120 -0
  168. package/dataflow/graph/graph.js +298 -0
  169. package/dataflow/graph/index.d.ts +4 -0
  170. package/dataflow/graph/index.js +21 -0
  171. package/dataflow/graph/quads.d.ts +8 -0
  172. package/dataflow/graph/quads.js +27 -0
  173. package/dataflow/graph/vertex.d.ts +86 -0
  174. package/dataflow/graph/vertex.js +3 -0
  175. package/dataflow/index.d.ts +5 -0
  176. package/dataflow/index.js +24 -0
  177. package/dataflow/internal/info.d.ts +21 -0
  178. package/dataflow/internal/info.js +16 -0
  179. package/dataflow/internal/linker.d.ts +41 -0
  180. package/dataflow/internal/linker.js +255 -0
  181. package/dataflow/internal/process/access.d.ts +4 -0
  182. package/dataflow/internal/process/access.js +53 -0
  183. package/dataflow/internal/process/expression-list.d.ts +8 -0
  184. package/dataflow/internal/process/expression-list.js +148 -0
  185. package/dataflow/internal/process/functions/argument.d.ts +8 -0
  186. package/dataflow/internal/process/functions/argument.js +46 -0
  187. package/dataflow/internal/process/functions/exit-points.d.ts +2 -0
  188. package/dataflow/internal/process/functions/exit-points.js +121 -0
  189. package/dataflow/internal/process/functions/function-call.d.ts +5 -0
  190. package/dataflow/internal/process/functions/function-call.js +99 -0
  191. package/dataflow/internal/process/functions/function-definition.d.ts +4 -0
  192. package/dataflow/internal/process/functions/function-definition.js +176 -0
  193. package/dataflow/internal/process/functions/parameter.d.ts +4 -0
  194. package/dataflow/internal/process/functions/parameter.js +47 -0
  195. package/dataflow/internal/process/if-then-else.d.ts +4 -0
  196. package/dataflow/internal/process/if-then-else.js +56 -0
  197. package/dataflow/internal/process/loops/for-loop.d.ts +4 -0
  198. package/dataflow/internal/process/loops/for-loop.js +54 -0
  199. package/dataflow/internal/process/loops/repeat-loop.d.ts +4 -0
  200. package/dataflow/internal/process/loops/repeat-loop.js +21 -0
  201. package/dataflow/internal/process/loops/while-loop.d.ts +4 -0
  202. package/dataflow/internal/process/loops/while-loop.js +31 -0
  203. package/dataflow/internal/process/operators/assignment.d.ts +4 -0
  204. package/dataflow/internal/process/operators/assignment.js +129 -0
  205. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +4 -0
  206. package/dataflow/internal/process/operators/non-assignment-binary-op.js +25 -0
  207. package/dataflow/internal/process/operators/pipe.d.ts +4 -0
  208. package/dataflow/internal/process/operators/pipe.js +46 -0
  209. package/dataflow/internal/process/operators/unary-op.d.ts +4 -0
  210. package/dataflow/internal/process/operators/unary-op.js +10 -0
  211. package/dataflow/internal/process/symbol.d.ts +4 -0
  212. package/dataflow/internal/process/symbol.js +21 -0
  213. package/dataflow/internal/process/uninteresting-leaf.d.ts +3 -0
  214. package/dataflow/internal/process/uninteresting-leaf.js +9 -0
  215. package/dataflow/processor.d.ts +47 -0
  216. package/dataflow/processor.js +20 -0
  217. package/dataflow/v1/extractor.js +60 -0
  218. package/dataflow/v1/graph/diff.js +206 -0
  219. package/dataflow/v1/graph/edge.js +32 -0
  220. package/dataflow/v1/graph/graph.js +298 -0
  221. package/dataflow/v1/graph/index.js +21 -0
  222. package/dataflow/v1/graph/quads.js +27 -0
  223. package/dataflow/v1/graph/vertex.js +3 -0
  224. package/dataflow/v1/index.js +24 -0
  225. package/dataflow/v1/internal/info.js +16 -0
  226. package/dataflow/v1/internal/linker.js +255 -0
  227. package/dataflow/v1/internal/process/access.js +54 -0
  228. package/dataflow/v1/internal/process/expression-list.js +154 -0
  229. package/dataflow/v1/internal/process/functions/argument.js +46 -0
  230. package/dataflow/v1/internal/process/functions/exit-points.js +125 -0
  231. package/dataflow/v1/internal/process/functions/function-call.js +99 -0
  232. package/dataflow/v1/internal/process/functions/function-definition.js +176 -0
  233. package/dataflow/v1/internal/process/functions/parameter.js +47 -0
  234. package/dataflow/v1/internal/process/if-then-else.js +57 -0
  235. package/dataflow/v1/internal/process/loops/for-loop.js +54 -0
  236. package/dataflow/v1/internal/process/loops/repeat-loop.js +21 -0
  237. package/dataflow/v1/internal/process/loops/while-loop.js +31 -0
  238. package/dataflow/v1/internal/process/operators/assignment.js +129 -0
  239. package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +25 -0
  240. package/dataflow/v1/internal/process/operators/pipe.js +46 -0
  241. package/dataflow/v1/internal/process/operators/unary-op.js +10 -0
  242. package/dataflow/v1/internal/process/symbol.js +21 -0
  243. package/dataflow/v1/internal/process/uninteresting-leaf.js +9 -0
  244. package/dataflow/v1/processor.js +20 -0
  245. package/dataflow/v2/entry.js +11 -0
  246. package/flowr-1.3.7.tgz +0 -0
  247. package/flowr.d.ts +26 -0
  248. package/flowr.js +135 -0
  249. package/index.d.ts +6 -0
  250. package/index.js +23 -0
  251. package/package.json +384 -0
  252. package/r-bridge/index.d.ts +11 -0
  253. package/r-bridge/index.js +28 -0
  254. package/r-bridge/lang-4.x/ast/index.d.ts +2 -0
  255. package/r-bridge/lang-4.x/ast/index.js +19 -0
  256. package/r-bridge/lang-4.x/ast/model/collect.d.ts +9 -0
  257. package/r-bridge/lang-4.x/ast/model/collect.js +23 -0
  258. package/r-bridge/lang-4.x/ast/model/index.d.ts +6 -0
  259. package/r-bridge/lang-4.x/ast/model/index.js +23 -0
  260. package/r-bridge/lang-4.x/ast/model/model.d.ts +127 -0
  261. package/r-bridge/lang-4.x/ast/model/model.js +3 -0
  262. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +21 -0
  263. package/r-bridge/lang-4.x/ast/model/nodes/index.js +38 -0
  264. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +13 -0
  265. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +27 -0
  266. package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.d.ts +12 -0
  267. package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.js +3 -0
  268. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +24 -0
  269. package/r-bridge/lang-4.x/ast/model/nodes/r-access.js +3 -0
  270. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +11 -0
  271. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.js +3 -0
  272. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +25 -0
  273. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.js +3 -0
  274. package/r-bridge/lang-4.x/ast/model/nodes/r-break.d.ts +5 -0
  275. package/r-bridge/lang-4.x/ast/model/nodes/r-break.js +3 -0
  276. package/r-bridge/lang-4.x/ast/model/nodes/r-comment.d.ts +6 -0
  277. package/r-bridge/lang-4.x/ast/model/nodes/r-comment.js +3 -0
  278. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +6 -0
  279. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.js +3 -0
  280. package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.d.ts +18 -0
  281. package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.js +3 -0
  282. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +31 -0
  283. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +3 -0
  284. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +10 -0
  285. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.js +3 -0
  286. package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.d.ts +9 -0
  287. package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.js +3 -0
  288. package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.d.ts +7 -0
  289. package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.js +3 -0
  290. package/r-bridge/lang-4.x/ast/model/nodes/r-logical.d.ts +7 -0
  291. package/r-bridge/lang-4.x/ast/model/nodes/r-logical.js +3 -0
  292. package/r-bridge/lang-4.x/ast/model/nodes/r-next.d.ts +5 -0
  293. package/r-bridge/lang-4.x/ast/model/nodes/r-next.js +3 -0
  294. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +8 -0
  295. package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
  296. package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.js +3 -0
  298. package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.d.ts +7 -0
  299. package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.js +3 -0
  300. package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.d.ts +12 -0
  301. package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.js +3 -0
  302. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +7 -0
  303. package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
  304. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +7 -0
  305. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +9 -0
  306. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +18 -0
  307. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.js +3 -0
  308. package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.d.ts +13 -0
  309. package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.js +3 -0
  310. package/r-bridge/lang-4.x/ast/model/operators.d.ts +46 -0
  311. package/r-bridge/lang-4.x/ast/model/operators.js +67 -0
  312. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +81 -0
  313. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +342 -0
  314. package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +10 -0
  315. package/r-bridge/lang-4.x/ast/model/processing/fold.js +20 -0
  316. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +5 -0
  317. package/r-bridge/lang-4.x/ast/model/processing/index.js +22 -0
  318. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +41 -0
  319. package/r-bridge/lang-4.x/ast/model/processing/role.js +17 -0
  320. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +61 -0
  321. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +87 -0
  322. package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +13 -0
  323. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +109 -0
  324. package/r-bridge/lang-4.x/ast/model/type.d.ts +206 -0
  325. package/r-bridge/lang-4.x/ast/model/type.js +18 -0
  326. package/r-bridge/lang-4.x/ast/model/versions.d.ts +9 -0
  327. package/r-bridge/lang-4.x/ast/model/versions.js +13 -0
  328. package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +16 -0
  329. package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +42 -0
  330. package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +118 -0
  331. package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +58 -0
  332. package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +25 -0
  333. package/r-bridge/lang-4.x/ast/parser/xml/config.js +16 -0
  334. package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +22 -0
  335. package/r-bridge/lang-4.x/ast/parser/xml/data.js +3 -0
  336. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +292 -0
  337. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +136 -0
  338. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +5 -0
  339. package/r-bridge/lang-4.x/ast/parser/xml/index.js +22 -0
  340. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +32 -0
  341. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +33 -0
  342. package/r-bridge/lang-4.x/ast/parser/xml/internal/access.d.ts +12 -0
  343. package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +107 -0
  344. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.d.ts +15 -0
  345. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +32 -0
  346. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.d.ts +13 -0
  347. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +46 -0
  348. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +2 -0
  349. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +19 -0
  350. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +10 -0
  351. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +65 -0
  352. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +1 -0
  353. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +18 -0
  354. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.d.ts +13 -0
  355. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +74 -0
  356. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.d.ts +13 -0
  357. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +149 -0
  358. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +12 -0
  359. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +60 -0
  360. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +2 -0
  361. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +20 -0
  362. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.d.ts +13 -0
  363. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +64 -0
  364. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +10 -0
  365. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +27 -0
  366. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +4 -0
  367. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +24 -0
  368. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +4 -0
  369. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +72 -0
  370. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +5 -0
  371. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +22 -0
  372. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +4 -0
  373. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +24 -0
  374. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +13 -0
  375. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +42 -0
  376. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +4 -0
  377. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +45 -0
  378. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +50 -0
  379. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +118 -0
  380. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.d.ts +8 -0
  381. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +162 -0
  382. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +3 -0
  383. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +20 -0
  384. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +6 -0
  385. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +24 -0
  386. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +13 -0
  387. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +59 -0
  388. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +11 -0
  389. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +34 -0
  390. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +1 -0
  391. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +18 -0
  392. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +12 -0
  393. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +55 -0
  394. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +10 -0
  395. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +159 -0
  396. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +3 -0
  397. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +20 -0
  398. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +4 -0
  399. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +34 -0
  400. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +13 -0
  401. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +64 -0
  402. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +3 -0
  403. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +20 -0
  404. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +13 -0
  405. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +56 -0
  406. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +11 -0
  407. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +41 -0
  408. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.d.ts +14 -0
  409. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +56 -0
  410. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +9 -0
  411. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +51 -0
  412. package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +17 -0
  413. package/r-bridge/lang-4.x/ast/parser/xml/parser.js +30 -0
  414. package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +3 -0
  415. package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +136 -0
  416. package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +22 -0
  417. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +107 -0
  418. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +32 -0
  419. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +46 -0
  420. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +19 -0
  421. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +65 -0
  422. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +18 -0
  423. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +74 -0
  424. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +149 -0
  425. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +60 -0
  426. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +20 -0
  427. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +64 -0
  428. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +27 -0
  429. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +24 -0
  430. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +72 -0
  431. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +22 -0
  432. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +24 -0
  433. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +42 -0
  434. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +45 -0
  435. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +162 -0
  436. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +20 -0
  437. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +24 -0
  438. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +59 -0
  439. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +34 -0
  440. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +18 -0
  441. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +55 -0
  442. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +159 -0
  443. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +20 -0
  444. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +34 -0
  445. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +64 -0
  446. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +20 -0
  447. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +56 -0
  448. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +41 -0
  449. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +56 -0
  450. package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +30 -0
  451. package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +3 -0
  452. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +95 -0
  453. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +99 -0
  454. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +71 -0
  455. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +30 -0
  456. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +19 -0
  457. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +35 -0
  458. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +25 -0
  459. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +18 -0
  460. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +38 -0
  461. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +26 -0
  462. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +63 -0
  463. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +18 -0
  464. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +46 -0
  465. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +33 -0
  466. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +63 -0
  467. package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +25 -0
  468. package/r-bridge/lang-4.x/index.d.ts +2 -0
  469. package/r-bridge/lang-4.x/index.js +19 -0
  470. package/r-bridge/lang-4.x/values.d.ts +39 -0
  471. package/r-bridge/lang-4.x/values.js +149 -0
  472. package/r-bridge/retriever.d.ts +48 -0
  473. package/r-bridge/retriever.js +71 -0
  474. package/r-bridge/shell.d.ts +147 -0
  475. package/r-bridge/shell.js +423 -0
  476. package/reconstruct/reconstruct.d.ts +28 -0
  477. package/reconstruct/reconstruct.js +448 -0
  478. package/slicing/criterion/collect-all.d.ts +36 -0
  479. package/slicing/criterion/collect-all.js +23 -0
  480. package/slicing/criterion/filters/all-variables.d.ts +2 -0
  481. package/slicing/criterion/filters/all-variables.js +63 -0
  482. package/slicing/criterion/filters/index.d.ts +1 -0
  483. package/slicing/criterion/filters/index.js +18 -0
  484. package/slicing/criterion/index.d.ts +3 -0
  485. package/slicing/criterion/index.js +20 -0
  486. package/slicing/criterion/parse.d.ts +20 -0
  487. package/slicing/criterion/parse.js +79 -0
  488. package/slicing/index.d.ts +3 -0
  489. package/slicing/index.js +20 -0
  490. package/slicing/static/index.d.ts +1 -0
  491. package/slicing/static/index.js +18 -0
  492. package/slicing/static/static-slicer.d.ts +29 -0
  493. package/slicing/static/static-slicer.js +186 -0
  494. package/statistics/features/common-syntax-probability.d.ts +30 -0
  495. package/statistics/features/common-syntax-probability.js +159 -0
  496. package/statistics/features/feature.d.ts +175 -0
  497. package/statistics/features/feature.js +30 -0
  498. package/statistics/features/index.d.ts +1 -0
  499. package/statistics/features/index.js +18 -0
  500. package/statistics/features/post-processing.d.ts +12 -0
  501. package/statistics/features/post-processing.js +21 -0
  502. package/statistics/features/supported/assignments/assignments.d.ts +11 -0
  503. package/statistics/features/supported/assignments/assignments.js +53 -0
  504. package/statistics/features/supported/assignments/index.d.ts +1 -0
  505. package/statistics/features/supported/assignments/index.js +6 -0
  506. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  507. package/statistics/features/supported/assignments/post-process.js +125 -0
  508. package/statistics/features/supported/comments/comments.d.ts +18 -0
  509. package/statistics/features/supported/comments/comments.js +133 -0
  510. package/statistics/features/supported/comments/index.d.ts +1 -0
  511. package/statistics/features/supported/comments/index.js +6 -0
  512. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  513. package/statistics/features/supported/comments/post-process.js +50 -0
  514. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  515. package/statistics/features/supported/control-flow/control-flow.js +67 -0
  516. package/statistics/features/supported/control-flow/index.d.ts +1 -0
  517. package/statistics/features/supported/control-flow/index.js +6 -0
  518. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  519. package/statistics/features/supported/control-flow/post-process.js +65 -0
  520. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  521. package/statistics/features/supported/data-access/data-access.js +118 -0
  522. package/statistics/features/supported/data-access/index.d.ts +1 -0
  523. package/statistics/features/supported/data-access/index.js +6 -0
  524. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  525. package/statistics/features/supported/data-access/post-process.js +107 -0
  526. package/statistics/features/supported/defined-functions/defined-functions.d.ts +35 -0
  527. package/statistics/features/supported/defined-functions/defined-functions.js +139 -0
  528. package/statistics/features/supported/defined-functions/index.d.ts +1 -0
  529. package/statistics/features/supported/defined-functions/index.js +6 -0
  530. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  531. package/statistics/features/supported/defined-functions/post-process.js +177 -0
  532. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  533. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  534. package/statistics/features/supported/expression-list/index.d.ts +1 -0
  535. package/statistics/features/supported/expression-list/index.js +6 -0
  536. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  537. package/statistics/features/supported/expression-list/post-process.js +44 -0
  538. package/statistics/features/supported/index.d.ts +10 -0
  539. package/statistics/features/supported/index.js +27 -0
  540. package/statistics/features/supported/loops/index.d.ts +1 -0
  541. package/statistics/features/supported/loops/index.js +6 -0
  542. package/statistics/features/supported/loops/loops.d.ts +20 -0
  543. package/statistics/features/supported/loops/loops.js +79 -0
  544. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  545. package/statistics/features/supported/loops/post-process.js +72 -0
  546. package/statistics/features/supported/used-functions/index.d.ts +1 -0
  547. package/statistics/features/supported/used-functions/index.js +6 -0
  548. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  549. package/statistics/features/supported/used-functions/post-process.js +179 -0
  550. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  551. package/statistics/features/supported/used-functions/used-functions.js +95 -0
  552. package/statistics/features/supported/used-packages/index.d.ts +1 -0
  553. package/statistics/features/supported/used-packages/index.js +6 -0
  554. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  555. package/statistics/features/supported/used-packages/post-process.js +121 -0
  556. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  557. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  558. package/statistics/features/supported/values/index.d.ts +1 -0
  559. package/statistics/features/supported/values/index.js +6 -0
  560. package/statistics/features/supported/values/post-process.d.ts +3 -0
  561. package/statistics/features/supported/values/post-process.js +72 -0
  562. package/statistics/features/supported/values/values.d.ts +14 -0
  563. package/statistics/features/supported/values/values.js +101 -0
  564. package/statistics/features/supported/variables/index.d.ts +1 -0
  565. package/statistics/features/supported/variables/index.js +6 -0
  566. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  567. package/statistics/features/supported/variables/post-process.js +122 -0
  568. package/statistics/features/supported/variables/variables.d.ts +15 -0
  569. package/statistics/features/supported/variables/variables.js +70 -0
  570. package/statistics/index.d.ts +6 -0
  571. package/statistics/index.js +24 -0
  572. package/statistics/meta-statistics.d.ts +33 -0
  573. package/statistics/meta-statistics.js +17 -0
  574. package/statistics/output/ansi.d.ts +50 -0
  575. package/statistics/output/ansi.js +58 -0
  576. package/statistics/output/file-provider.d.ts +37 -0
  577. package/statistics/output/file-provider.js +97 -0
  578. package/statistics/output/index.d.ts +4 -0
  579. package/statistics/output/index.js +21 -0
  580. package/statistics/output/print-stats.d.ts +17 -0
  581. package/statistics/output/print-stats.js +69 -0
  582. package/statistics/output/statistics-file.d.ts +37 -0
  583. package/statistics/output/statistics-file.js +69 -0
  584. package/statistics/statistics.d.ts +24 -0
  585. package/statistics/statistics.js +109 -0
  586. package/util/args.d.ts +14 -0
  587. package/util/args.js +67 -0
  588. package/util/arrays.d.ts +44 -0
  589. package/util/arrays.js +145 -0
  590. package/util/assert.d.ts +11 -0
  591. package/util/assert.js +35 -0
  592. package/util/bimap.d.ts +24 -0
  593. package/util/bimap.js +71 -0
  594. package/util/cfg.d.ts +55 -0
  595. package/util/cfg.js +498 -0
  596. package/util/defaultmap.d.ts +34 -0
  597. package/util/defaultmap.js +65 -0
  598. package/util/diff.d.ts +43 -0
  599. package/util/diff.js +28 -0
  600. package/util/files.d.ts +54 -0
  601. package/util/files.js +144 -0
  602. package/util/json.d.ts +2 -0
  603. package/util/json.js +28 -0
  604. package/util/log.d.ts +22 -0
  605. package/util/log.js +48 -0
  606. package/util/mermaid/ast.d.ts +6 -0
  607. package/util/mermaid/ast.js +28 -0
  608. package/util/mermaid/cfg.d.ts +7 -0
  609. package/util/mermaid/cfg.js +44 -0
  610. package/util/mermaid/dfg.d.ts +21 -0
  611. package/util/mermaid/dfg.js +165 -0
  612. package/util/mermaid/index.d.ts +3 -0
  613. package/util/mermaid/index.js +20 -0
  614. package/util/mermaid/mermaid.d.ts +7 -0
  615. package/util/mermaid/mermaid.js +24 -0
  616. package/util/numbers.d.ts +1 -0
  617. package/util/numbers.js +9 -0
  618. package/util/objects.d.ts +17 -0
  619. package/util/objects.js +60 -0
  620. package/util/os.d.ts +2 -0
  621. package/util/os.js +25 -0
  622. package/util/parallel.d.ts +30 -0
  623. package/util/parallel.js +103 -0
  624. package/util/quads.d.ts +92 -0
  625. package/util/quads.js +189 -0
  626. package/util/random.d.ts +4 -0
  627. package/util/random.js +22 -0
  628. package/util/range.d.ts +32 -0
  629. package/util/range.js +61 -0
  630. package/util/set.d.ts +8 -0
  631. package/util/set.js +32 -0
  632. package/util/strings.d.ts +12 -0
  633. package/util/strings.js +41 -0
  634. package/util/summarizer/auto-detect.d.ts +2 -0
  635. package/util/summarizer/auto-detect.js +32 -0
  636. package/util/summarizer/benchmark/benchmark-summarizer.js +208 -0
  637. package/util/summarizer/benchmark/data.d.ts +66 -0
  638. package/util/summarizer/benchmark/data.js +13 -0
  639. package/util/summarizer/benchmark/first-phase/input.d.ts +2 -0
  640. package/util/summarizer/benchmark/first-phase/input.js +59 -0
  641. package/util/summarizer/benchmark/first-phase/process.d.ts +10 -0
  642. package/util/summarizer/benchmark/first-phase/process.js +208 -0
  643. package/util/summarizer/benchmark/second-phase/graph.d.ts +2 -0
  644. package/util/summarizer/benchmark/second-phase/graph.js +54 -0
  645. package/util/summarizer/benchmark/second-phase/process.d.ts +4 -0
  646. package/util/summarizer/benchmark/second-phase/process.js +89 -0
  647. package/util/summarizer/benchmark/summarizer.d.ts +34 -0
  648. package/util/summarizer/benchmark/summarizer.js +53 -0
  649. package/util/summarizer/statistics/first-phase/process.d.ts +6 -0
  650. package/util/summarizer/statistics/first-phase/process.js +81 -0
  651. package/util/summarizer/statistics/post-process/clusterer.d.ts +26 -0
  652. package/util/summarizer/statistics/post-process/clusterer.js +43 -0
  653. package/util/summarizer/statistics/post-process/file-based-count.d.ts +17 -0
  654. package/util/summarizer/statistics/post-process/file-based-count.js +49 -0
  655. package/util/summarizer/statistics/post-process/histogram.d.ts +59 -0
  656. package/util/summarizer/statistics/post-process/histogram.js +128 -0
  657. package/util/summarizer/statistics/post-process/index.d.ts +4 -0
  658. package/util/summarizer/statistics/post-process/index.js +21 -0
  659. package/util/summarizer/statistics/post-process/post-process-output.d.ts +16 -0
  660. package/util/summarizer/statistics/post-process/post-process-output.js +104 -0
  661. package/util/summarizer/statistics/second-phase/process.d.ts +11 -0
  662. package/util/summarizer/statistics/second-phase/process.js +117 -0
  663. package/util/summarizer/statistics/summarizer.d.ts +34 -0
  664. package/util/summarizer/statistics/summarizer.js +135 -0
  665. package/util/summarizer/summarizer.d.ts +25 -0
  666. package/util/summarizer/summarizer.js +13 -0
  667. package/util/time.d.ts +6 -0
  668. package/util/time.js +13 -0
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processAccess = void 0;
4
+ const processor_1 = require("../../processor");
5
+ const environments_1 = require("../../../common/environments");
6
+ const graph_1 = require("../../graph");
7
+ function processAccess(node, data) {
8
+ const processedAccessed = (0, processor_1.processDataflowFor)(node.accessed, data);
9
+ const nextGraph = processedAccessed.graph;
10
+ const outgoing = processedAccessed.out;
11
+ const ingoing = processedAccessed.in;
12
+ let environments = processedAccessed.environments;
13
+ const accessedNodes = processedAccessed.unknownReferences;
14
+ if (node.operator === '[' || node.operator === '[[') {
15
+ for (const access of node.access) {
16
+ if (access === null || access.value === undefined) {
17
+ continue;
18
+ }
19
+ data = { ...data, environments };
20
+ const processedAccess = (0, processor_1.processDataflowFor)(access, data);
21
+ nextGraph.mergeWith(processedAccess.graph);
22
+ // outgoing.push()
23
+ // we link to *out* instead of *in*, as access uses arguments for parsing and the arguments are defined
24
+ for (const newIn of [...processedAccess.out, ...processedAccess.unknownReferences]) {
25
+ for (const accessedNode of accessedNodes) {
26
+ nextGraph.addEdge(accessedNode, newIn, graph_1.EdgeType.Reads, 'always');
27
+ }
28
+ }
29
+ ingoing.push(...processedAccess.in, ...processedAccess.unknownReferences);
30
+ environments = processedAccess.environments;
31
+ }
32
+ }
33
+ return {
34
+ /*
35
+ * keep active nodes in case of assignments etc.
36
+ * We make them maybe as a kind of hack.
37
+ * This way when using
38
+ * ```ts
39
+ * a[[1]] <- 3
40
+ * a[[2]] <- 4
41
+ * a
42
+ * ```
43
+ * the read for a will use both accesses as potential definitions and not just the last one!
44
+ */
45
+ unknownReferences: (0, environments_1.makeAllMaybe)(processedAccessed.unknownReferences, nextGraph, environments),
46
+ in: ingoing,
47
+ out: outgoing,
48
+ environments: environments,
49
+ scope: data.activeScope,
50
+ graph: nextGraph
51
+ };
52
+ }
53
+ exports.processAccess = processAccess;
54
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processExpressionList = void 0;
4
+ /**
5
+ * Processes a list of expressions joining their dataflow graphs accordingly.
6
+ * @module
7
+ */
8
+ const info_1 = require("../info");
9
+ const r_bridge_1 = require("../../../../r-bridge");
10
+ const processor_1 = require("../../processor");
11
+ const environments_1 = require("../../../common/environments");
12
+ const linker_1 = require("../linker");
13
+ const defaultmap_1 = require("../../../../util/defaultmap");
14
+ const graph_1 = require("../../graph");
15
+ const index_1 = require("../../index");
16
+ const assert_1 = require("../../../../util/assert");
17
+ const dotDotDotAccess = /\.\.\d+/;
18
+ function linkReadNameToWriteIfPossible(read, data, environments, listEnvironments, remainingRead, nextGraph) {
19
+ const readName = dotDotDotAccess.test(read.name) ? '...' : read.name;
20
+ const probableTarget = (0, environments_1.resolveByName)(readName, data.activeScope, environments);
21
+ // record if at least one has not been defined
22
+ if (probableTarget === undefined || probableTarget.some(t => !listEnvironments.has(t.nodeId))) {
23
+ if (remainingRead.has(readName)) {
24
+ remainingRead.get(readName)?.push(read);
25
+ }
26
+ else {
27
+ remainingRead.set(readName, [read]);
28
+ }
29
+ }
30
+ // keep it, for we have no target, as read-ids are unique within same fold, this should work for same links
31
+ // we keep them if they are defined outside the current parent and maybe throw them away later
32
+ if (probableTarget === undefined) {
33
+ return;
34
+ }
35
+ for (const target of probableTarget) {
36
+ // we can stick with maybe even if readId.attribute is always
37
+ nextGraph.addEdge(read, target, index_1.EdgeType.Reads, undefined, true);
38
+ }
39
+ }
40
+ function processNextExpression(currentElement, data, environments, listEnvironments, remainingRead, nextGraph) {
41
+ // all inputs that have not been written until know, are read!
42
+ for (const read of [...currentElement.in, ...currentElement.unknownReferences]) {
43
+ linkReadNameToWriteIfPossible(read, data, environments, listEnvironments, remainingRead, nextGraph);
44
+ }
45
+ // add same variable reads for deferred if they are read previously but not dependent
46
+ for (const writeTarget of currentElement.out) {
47
+ const writeName = writeTarget.name;
48
+ const resolved = (0, environments_1.resolveByName)(writeName, data.activeScope, environments);
49
+ if (resolved !== undefined) {
50
+ // write-write
51
+ for (const target of resolved) {
52
+ nextGraph.addEdge(target, writeTarget, index_1.EdgeType.SameDefDef, undefined, true);
53
+ }
54
+ }
55
+ }
56
+ }
57
+ function updateSideEffectsForCalledFunctions(calledEnvs, environments, nextGraph) {
58
+ for (const { functionCall, called } of calledEnvs) {
59
+ for (const calledFn of called) {
60
+ (0, assert_1.guard)(calledFn.tag === 'function-definition', 'called function must call a function definition');
61
+ // only merge the environments they have in common
62
+ let environment = calledFn.environment;
63
+ while (environment.level > environments.level) {
64
+ environment = (0, environments_1.popLocalEnvironment)(environment);
65
+ }
66
+ // update alle definitions to be defined at this function call
67
+ let current = environment.current;
68
+ while (current !== undefined) {
69
+ for (const definitions of current.memory.values()) {
70
+ for (const def of definitions) {
71
+ if (def.kind !== 'built-in-function') {
72
+ nextGraph.addEdge(def.nodeId, functionCall, index_1.EdgeType.SideEffectOnCall, def.used);
73
+ }
74
+ }
75
+ }
76
+ current = current.parent;
77
+ }
78
+ // we update all definitions to be linked with the corresponding function call
79
+ environments = (0, environments_1.overwriteEnvironments)(environments, environment);
80
+ }
81
+ }
82
+ return environments;
83
+ }
84
+ function processExpressionList(exprList, data) {
85
+ const expressions = exprList.children;
86
+ index_1.dataflowLogger.trace(`processing expression list with ${expressions.length} expressions`);
87
+ if (expressions.length === 0) {
88
+ return (0, info_1.initializeCleanDataflowInformation)(data);
89
+ }
90
+ let environments = data.environments;
91
+ // used to detect if a "write" happens within the same expression list
92
+ const listEnvironments = new Set();
93
+ const remainingRead = new Map();
94
+ const nextGraph = new graph_1.DataflowGraph();
95
+ const out = [];
96
+ let expressionCounter = 0;
97
+ let foundNextOrBreak = false;
98
+ for (const expression of expressions) {
99
+ index_1.dataflowLogger.trace(`processing expression ${++expressionCounter} of ${expressions.length}`);
100
+ // use the current environments for processing
101
+ data = { ...data, environments };
102
+ const processed = (0, processor_1.processDataflowFor)(expression, data);
103
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- seems to be a bug in eslint
104
+ if (!foundNextOrBreak) {
105
+ (0, r_bridge_1.visitAst)(expression, n => {
106
+ // we should track returns more consistently
107
+ if (n.type === "RNext" /* RType.Next */ || n.type === "RBreak" /* RType.Break */) {
108
+ foundNextOrBreak = true;
109
+ }
110
+ return n.type === "RForLoop" /* RType.ForLoop */ || n.type === "RWhileLoop" /* RType.WhileLoop */ || n.type === "RRepeatLoop" /* RType.RepeatLoop */ || n.type === "RFunctionDefinition" /* RType.FunctionDefinition */;
111
+ });
112
+ }
113
+ // if the expression contained next or break anywhere before the next loop, the overwrite should be an append because we do not know if the rest is executed
114
+ // update the environments for the next iteration with the previous writes
115
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- seems to be a bug in eslint
116
+ if (foundNextOrBreak) {
117
+ processed.out = (0, environments_1.makeAllMaybe)(processed.out, nextGraph, processed.environments);
118
+ processed.in = (0, environments_1.makeAllMaybe)(processed.in, nextGraph, processed.environments);
119
+ processed.unknownReferences = (0, environments_1.makeAllMaybe)(processed.unknownReferences, nextGraph, processed.environments);
120
+ }
121
+ nextGraph.mergeWith(processed.graph);
122
+ out.push(...processed.out);
123
+ index_1.dataflowLogger.trace(`expression ${expressionCounter} of ${expressions.length} has ${processed.unknownReferences.length} unknown nodes`);
124
+ processNextExpression(processed, data, environments, listEnvironments, remainingRead, nextGraph);
125
+ const functionCallIds = [...processed.graph.vertices(true)]
126
+ .filter(([_, info]) => info.tag === 'function-call');
127
+ const calledEnvs = (0, linker_1.linkFunctionCalls)(nextGraph, data.completeAst.idMap, functionCallIds, processed.graph);
128
+ if (foundNextOrBreak) {
129
+ environments = (0, environments_1.overwriteEnvironments)(environments, processed.environments);
130
+ }
131
+ else {
132
+ environments = processed.environments;
133
+ }
134
+ // if the called function has global redefinitions, we have to keep them within our environment
135
+ environments = updateSideEffectsForCalledFunctions(calledEnvs, environments, nextGraph);
136
+ for (const { nodeId } of processed.out) {
137
+ listEnvironments.add(nodeId);
138
+ }
139
+ }
140
+ // now, we have to link same reads
141
+ (0, linker_1.linkReadVariablesInSameScopeWithNames)(nextGraph, new defaultmap_1.DefaultMap(() => [], remainingRead));
142
+ index_1.dataflowLogger.trace(`expression list exits with ${remainingRead.size} remaining read names`);
143
+ return {
144
+ /* no active nodes remain, they are consumed within the remaining read collection */
145
+ unknownReferences: [],
146
+ in: [...remainingRead.values()].flat(),
147
+ out,
148
+ environments,
149
+ scope: data.activeScope,
150
+ graph: nextGraph
151
+ };
152
+ }
153
+ exports.processExpressionList = processExpressionList;
154
+ //# sourceMappingURL=expression-list.js.map
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processFunctionArgument = exports.linkReadsForArgument = exports.UnnamedArgumentPrefix = void 0;
4
+ const processor_1 = require("../../../processor");
5
+ const r_bridge_1 = require("../../../../../r-bridge");
6
+ const graph_1 = require("../../../graph");
7
+ const scopes_1 = require("../../../../common/environments/scopes");
8
+ exports.UnnamedArgumentPrefix = 'unnamed-argument-';
9
+ function linkReadsForArgument(root, ingoingRefs, graph) {
10
+ const allIdsBeforeArguments = new Set((0, r_bridge_1.collectAllIds)(root, n => n.type === "RArgument" /* RType.Argument */ && n.info.id !== root.info.id));
11
+ const ingoingBeforeArgs = ingoingRefs.filter(r => allIdsBeforeArguments.has(r.nodeId));
12
+ for (const ref of ingoingBeforeArgs) {
13
+ // link against the root reference currently I do not know how to deal with nested function calls otherwise
14
+ graph.addEdge(root.info.id, ref, graph_1.EdgeType.Reads, 'always');
15
+ }
16
+ }
17
+ exports.linkReadsForArgument = linkReadsForArgument;
18
+ function processFunctionArgument(argument, data) {
19
+ const name = argument.name === undefined ? undefined : (0, processor_1.processDataflowFor)(argument.name, data);
20
+ const value = argument.value === undefined ? undefined : (0, processor_1.processDataflowFor)(argument.value, data);
21
+ // we do not keep the graph of the name, as this is no node that should ever exist
22
+ const graph = value?.graph ?? new graph_1.DataflowGraph();
23
+ const argContent = argument.name?.content;
24
+ const argumentName = argContent ?? `${exports.UnnamedArgumentPrefix}${argument.info.id}`;
25
+ graph.addVertex({ tag: 'use', id: argument.info.id, name: argumentName, environment: data.environments, when: 'always' });
26
+ const ingoingRefs = [...value?.unknownReferences ?? [], ...value?.in ?? [], ...(name === undefined ? [] : [...name.in])];
27
+ if (argument.value?.type === "RFunctionDefinition" /* RType.FunctionDefinition */) {
28
+ graph.addEdge(argument.info.id, argument.value.info.id, graph_1.EdgeType.Reads, 'always');
29
+ }
30
+ else {
31
+ // we only need to link against those which are not already bound to another function call argument
32
+ linkReadsForArgument(argument, [...ingoingRefs, ...value?.out ?? [] /* value may perform definitions */], graph);
33
+ }
34
+ return {
35
+ unknownReferences: [],
36
+ // active nodes of the name will be lost as they are only used to reference the corresponding parameter
37
+ in: ingoingRefs,
38
+ // , ...value.out, ...(name?.out ?? [])
39
+ out: [{ name: argumentName, scope: scopes_1.LocalScope, nodeId: argument.info.id, used: 'always' }],
40
+ graph: graph,
41
+ environments: value?.environments ?? data.environments,
42
+ scope: data.activeScope
43
+ };
44
+ }
45
+ exports.processFunctionArgument = processFunctionArgument;
46
+ //# sourceMappingURL=argument.js.map
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retrieveExitPointsOfFunctionDefinition = void 0;
4
+ const assert_1 = require("../../../../../util/assert");
5
+ // TODO: wir wollen exit points für alle expression lists nicht nur für function definitions -> wir schlagen alle mit einer klappe :3
6
+ function retrieveExitPointsOfFunctionDefinition(functionDefinition) {
7
+ const exitPoints = visitExitPoints(functionDefinition.body);
8
+ return exitPoints.knownIds.concat(exitPoints.potentialIds);
9
+ }
10
+ exports.retrieveExitPointsOfFunctionDefinition = retrieveExitPointsOfFunctionDefinition;
11
+ // TODO: fold
12
+ function visitExitPoints(node) {
13
+ const type = node.type;
14
+ switch (type) {
15
+ case "RExpressionList" /* RType.ExpressionList */:
16
+ return visitExpressionList(node);
17
+ case "RFunctionCall" /* RType.FunctionCall */:
18
+ // TODO: what if return is overwritten
19
+ if (node.flavor === 'named' && node.functionName.content === 'return') {
20
+ return {
21
+ knownIds: [node.info.id],
22
+ potentialIds: []
23
+ };
24
+ }
25
+ break;
26
+ case "RFunctionDefinition" /* RType.FunctionDefinition */:
27
+ // do not further investigate
28
+ break;
29
+ case "RForLoop" /* RType.ForLoop */:
30
+ case "RWhileLoop" /* RType.WhileLoop */:
31
+ case "RRepeatLoop" /* RType.RepeatLoop */:
32
+ // loops return invisible null, as we do not trace values, but they may contain return statements
33
+ return visitLoops(node);
34
+ case "RIfThenElse" /* RType.IfThenElse */:
35
+ return visitIf(node);
36
+ case "RPipe" /* RType.Pipe */:
37
+ case "RBinaryOp" /* RType.BinaryOp */:
38
+ // assignments return invisible rhs
39
+ return knownIdsOfChildren(node.info.id, node.lhs, node.rhs);
40
+ case "RUnaryOp" /* RType.UnaryOp */:
41
+ return knownIdsOfChildren(node.info.id, node.operand);
42
+ case "RParameter" /* RType.Parameter */:
43
+ return node.defaultValue ? knownIdsOfChildren(node.info.id, node.defaultValue) : { knownIds: [], potentialIds: [] };
44
+ case "RArgument" /* RType.Argument */:
45
+ return node.value ? knownIdsOfChildren(node.info.id, node.value) : { knownIds: [], potentialIds: [] };
46
+ case "RSymbol" /* RType.Symbol */:
47
+ case "RLogical" /* RType.Logical */:
48
+ case "RNumber" /* RType.Number */:
49
+ case "RString" /* RType.String */:
50
+ case "RAccess" /* RType.Access */:
51
+ // just use this node
52
+ break;
53
+ // contain noting to return/return `invisible(null)`
54
+ case "RComment" /* RType.Comment */:
55
+ case "RLineDirective" /* RType.LineDirective */:
56
+ case "RBreak" /* RType.Break */:
57
+ case "RNext" /* RType.Next */:
58
+ // TODO: wrong for loops
59
+ return { knownIds: [], potentialIds: [] };
60
+ default:
61
+ (0, assert_1.assertUnreachable)(type);
62
+ }
63
+ return {
64
+ knownIds: [],
65
+ potentialIds: [node.info.id]
66
+ };
67
+ }
68
+ // we use keepSelfAsPotential in order to track nodes like 2 + 3, which keep themselves as potential exit points if there are no knownIds
69
+ function knownIdsOfChildren(keepSelfAsPotential, ...children) {
70
+ const knownIds = children.flatMap(child => visitExitPoints(child).knownIds);
71
+ return {
72
+ knownIds,
73
+ potentialIds: knownIds.length === 0 ? [keepSelfAsPotential] : []
74
+ };
75
+ }
76
+ function visitLoops(loop) {
77
+ const result = visitExitPoints(loop.body);
78
+ // conditions may contain return statements which we have to keep
79
+ let otherKnownIds = [];
80
+ if (loop.type === "RForLoop" /* RType.ForLoop */) {
81
+ otherKnownIds = visitExitPoints(loop.variable).knownIds;
82
+ otherKnownIds.push(...visitExitPoints(loop.vector).knownIds);
83
+ }
84
+ else if (loop.type === "RWhileLoop" /* RType.WhileLoop */) {
85
+ otherKnownIds = visitExitPoints(loop.condition).knownIds;
86
+ }
87
+ return {
88
+ knownIds: [...result.knownIds, ...otherKnownIds],
89
+ potentialIds: []
90
+ };
91
+ }
92
+ function visitExpressionList(node) {
93
+ const known = [];
94
+ let lastPotentialIds = [];
95
+ // we only keep the potential ids of the last expression, which is no comment
96
+ for (const child of node.children) {
97
+ const { knownIds, potentialIds } = visitExitPoints(child);
98
+ known.push(...knownIds);
99
+ if (child.type !== "RComment" /* RType.Comment */) {
100
+ lastPotentialIds = potentialIds;
101
+ }
102
+ }
103
+ return {
104
+ knownIds: known,
105
+ potentialIds: lastPotentialIds
106
+ };
107
+ }
108
+ function visitIf(node) {
109
+ // conditions can contain return statements
110
+ const known = visitExitPoints(node.condition).knownIds;
111
+ const potential = [];
112
+ const thenCase = visitExitPoints(node.then);
113
+ known.push(...thenCase.knownIds);
114
+ potential.push(...thenCase.potentialIds);
115
+ if (node.otherwise !== undefined) {
116
+ const otherwiseCase = visitExitPoints(node.otherwise);
117
+ known.push(...otherwiseCase.knownIds);
118
+ potential.push(...otherwiseCase.potentialIds);
119
+ }
120
+ return {
121
+ knownIds: known,
122
+ potentialIds: potential
123
+ };
124
+ }
125
+ //# sourceMappingURL=exit-points.js.map
@@ -0,0 +1,99 @@
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("../../../../common/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("../../../../common/environments/scopes");
10
+ exports.UnnamedFunctionCallPrefix = 'unnamed-function-call-';
11
+ function processFunctionCall(functionCall, data) {
12
+ const named = functionCall.flavor === 'named';
13
+ const functionName = (0, processor_1.processDataflowFor)(named ? functionCall.functionName : functionCall.calledFunction, data);
14
+ let finalEnv = functionName.environments;
15
+ // arg env contains the environments with other args defined
16
+ let argEnv = functionName.environments;
17
+ const finalGraph = new index_1.DataflowGraph();
18
+ const callArgs = [];
19
+ const args = [];
20
+ const remainingReadInArgs = [];
21
+ const functionRootId = functionCall.info.id;
22
+ let functionCallName;
23
+ if (named) {
24
+ functionCallName = functionCall.functionName.content;
25
+ index_1.dataflowLogger.debug(`Using ${functionRootId} (name: ${functionCallName}) as root for the function call`);
26
+ }
27
+ else {
28
+ functionCallName = `${exports.UnnamedFunctionCallPrefix}${functionRootId}`;
29
+ index_1.dataflowLogger.debug(`Using ${functionRootId} as root for the unnamed function call`);
30
+ // we know, that it calls the toplevel:
31
+ finalGraph.addEdge(functionRootId, functionCall.calledFunction.info.id, index_1.EdgeType.Calls, 'always');
32
+ // keep the defined function
33
+ finalGraph.mergeWith(functionName.graph);
34
+ }
35
+ for (const arg of functionCall.arguments) {
36
+ if (arg === undefined) {
37
+ callArgs.push('empty');
38
+ args.push(undefined);
39
+ continue;
40
+ }
41
+ const processed = (0, processor_1.processDataflowFor)(arg, { ...data, environments: argEnv });
42
+ args.push(processed);
43
+ finalEnv = (0, environments_1.overwriteEnvironments)(finalEnv, processed.environments);
44
+ argEnv = (0, environments_1.overwriteEnvironments)(argEnv, processed.environments);
45
+ finalGraph.mergeWith(processed.graph);
46
+ (0, assert_1.guard)(processed.out.length > 0, () => `Argument ${JSON.stringify(arg)} has no out references, but needs one for the unnamed arg`);
47
+ if (arg.type !== "RArgument" /* RType.Argument */ || !arg.name) {
48
+ callArgs.push(processed.out[0]);
49
+ }
50
+ else {
51
+ callArgs.push([arg.name.content, processed.out[0]]);
52
+ }
53
+ // add an argument edge to the final graph
54
+ finalGraph.addEdge(functionRootId, processed.out[0], index_1.EdgeType.Argument, 'always');
55
+ // resolve reads within argument
56
+ for (const ingoing of [...processed.in, ...processed.unknownReferences]) {
57
+ const tryToResolve = (0, environments_1.resolveByName)(ingoing.name, scopes_1.LocalScope, argEnv);
58
+ if (tryToResolve === undefined) {
59
+ remainingReadInArgs.push(ingoing);
60
+ }
61
+ else {
62
+ for (const resolved of tryToResolve) {
63
+ finalGraph.addEdge(ingoing.nodeId, resolved.nodeId, index_1.EdgeType.Reads, 'always');
64
+ }
65
+ }
66
+ }
67
+ if (arg.type === "RArgument" /* RType.Argument */ && arg.name !== undefined) {
68
+ argEnv = (0, environments_1.define)({ ...processed.out[0], definedAt: arg.info.id, kind: 'argument' }, scopes_1.LocalScope, argEnv);
69
+ }
70
+ }
71
+ finalGraph.addVertex({
72
+ tag: 'function-call',
73
+ id: functionRootId,
74
+ name: functionCallName,
75
+ environment: data.environments,
76
+ when: 'always',
77
+ scope: data.activeScope,
78
+ args: callArgs // same reference
79
+ });
80
+ const inIds = remainingReadInArgs;
81
+ inIds.push({ nodeId: functionRootId, name: functionCallName, scope: data.activeScope, used: 'always' });
82
+ if (!named) {
83
+ if (functionCall.calledFunction.type === "RFunctionDefinition" /* RType.FunctionDefinition */) {
84
+ (0, linker_1.linkArgumentsOnCall)(callArgs, functionCall.calledFunction.parameters, finalGraph);
85
+ }
86
+ // push the called function to the ids:
87
+ inIds.push(...functionName.in, ...functionName.unknownReferences);
88
+ }
89
+ return {
90
+ unknownReferences: [],
91
+ in: inIds,
92
+ out: functionName.out, // we do not keep argument out as it has been linked by the function
93
+ graph: finalGraph,
94
+ environments: finalEnv,
95
+ scope: data.activeScope
96
+ };
97
+ }
98
+ exports.processFunctionCall = processFunctionCall;
99
+ //# sourceMappingURL=function-call.js.map
@@ -0,0 +1,176 @@
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("../../../../common/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("../../../../common/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