@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,9 +1,8 @@
1
1
  import type { Handler } from '../handler';
2
2
  import type { AINode } from '../../processor';
3
- import type { BinaryOperatorFlavor, ParentInformation, RBinaryOp } from '../../../r-bridge';
4
- export type BinOpOperators = {
5
- [key in BinaryOperatorFlavor]: (lhs: AINode, rhs: AINode, node: RBinaryOp<ParentInformation>) => AINode;
6
- };
3
+ import type { ParentInformation } from '../../../r-bridge/lang-4.x/ast/model/processing/decorate';
4
+ import type { RBinaryOp } from '../../../r-bridge/lang-4.x/ast/model/nodes/r-binary-op';
5
+ export type BinaryOpProcessor = (lhs: AINode, rhs: AINode, node: RBinaryOp<ParentInformation>) => AINode;
7
6
  export declare class BinOp implements Handler<AINode> {
8
7
  readonly node: RBinaryOp<ParentInformation>;
9
8
  lhs: AINode | undefined;
@@ -12,7 +12,7 @@ class BinOp {
12
12
  this.node = node;
13
13
  }
14
14
  getName() {
15
- return `Bin Op (${this.node.flavor})`;
15
+ return `Bin Op (${this.node.operator})`;
16
16
  }
17
17
  enter() {
18
18
  processor_1.aiLogger.trace(`Entered ${this.getName()}`);
@@ -21,7 +21,9 @@ class BinOp {
21
21
  processor_1.aiLogger.trace(`Exited ${this.getName()}`);
22
22
  (0, assert_1.guard)(this.lhs !== undefined, `No LHS found for assignment ${this.node.info.id}`);
23
23
  (0, assert_1.guard)(this.rhs !== undefined, `No RHS found for assignment ${this.node.info.id}`);
24
- return operators_1.operators[this.node.flavor](this.lhs, this.rhs, this.node);
24
+ const processor = operators_1.operators[this.node.operator];
25
+ (0, assert_1.guard)(processor !== undefined, `No processor found for binary operator ${this.node.operator}`);
26
+ return processor(this.lhs, this.rhs, this.node);
25
27
  }
26
28
  next(node) {
27
29
  processor_1.aiLogger.trace(`${this.getName()} received`);
@@ -1,2 +1,2 @@
1
- import type { BinOpOperators } from './binop';
2
- export declare const operators: BinOpOperators;
1
+ import type { BinaryOpProcessor } from './binop';
2
+ export declare const operators: Record<string, BinaryOpProcessor>;
@@ -1,42 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.operators = void 0;
4
- const assert_1 = require("../../../util/assert");
5
4
  const domain_1 = require("../../domain");
6
5
  exports.operators = {
7
- 'assignment': (lhs, rhs, node) => {
6
+ '<-': (lhs, rhs, node) => {
8
7
  return {
9
8
  id: lhs.id,
10
9
  domain: rhs.domain,
11
10
  astNode: node.lhs,
12
11
  };
13
12
  },
14
- 'arithmetic': (lhs, rhs, node) => {
15
- switch (node.operator) {
16
- case '+':
17
- return {
18
- id: lhs.id,
19
- domain: (0, domain_1.addDomains)(lhs.domain, rhs.domain),
20
- astNode: node,
21
- };
22
- case '-':
23
- return {
24
- id: lhs.id,
25
- domain: (0, domain_1.subtractDomains)(lhs.domain, rhs.domain),
26
- astNode: node,
27
- };
28
- default:
29
- (0, assert_1.guard)(false, `Unknown binary operator ${node.operator}`);
30
- }
31
- },
32
- 'logical': () => {
33
- (0, assert_1.guard)(false, 'Not implemented yet');
34
- },
35
- 'model formula': () => {
36
- (0, assert_1.guard)(false, 'Not implemented yet');
37
- },
38
- 'comparison': () => {
39
- (0, assert_1.guard)(false, 'Not implemented yet');
13
+ '+': (lhs, rhs, node) => {
14
+ return {
15
+ id: lhs.id,
16
+ domain: (0, domain_1.addDomains)(lhs.domain, rhs.domain),
17
+ astNode: node,
18
+ };
40
19
  },
20
+ '-': (lhs, rhs, node) => {
21
+ return {
22
+ id: lhs.id,
23
+ domain: (0, domain_1.subtractDomains)(lhs.domain, rhs.domain),
24
+ astNode: node,
25
+ };
26
+ }
41
27
  };
42
28
  //# sourceMappingURL=operators.js.map
@@ -1,6 +1,7 @@
1
- import type { DataflowInformation } from '../dataflow/internal/info';
2
- import type { NodeId, NormalizedAst, ParentInformation, RNodeWithParent } from '../r-bridge';
1
+ import type { DataflowInformation } from '../dataflow/info';
3
2
  import { Domain } from './domain';
3
+ import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
4
+ import type { NormalizedAst, ParentInformation, RNodeWithParent } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
4
5
  export declare const aiLogger: import("tslog").Logger<import("tslog").ILogObj>;
5
6
  export interface AINode {
6
7
  readonly id: NodeId;
@@ -4,10 +4,10 @@ exports.runAbstractInterpretation = exports.aiLogger = void 0;
4
4
  const cfg_1 = require("../util/cfg/cfg");
5
5
  const visitor_1 = require("../util/cfg/visitor");
6
6
  const assert_1 = require("../util/assert");
7
- const dataflow_1 = require("../dataflow");
8
7
  const binop_1 = require("./handler/binop/binop");
9
8
  const domain_1 = require("./domain");
10
9
  const log_1 = require("../util/log");
10
+ const edge_1 = require("../dataflow/graph/edge");
11
11
  exports.aiLogger = log_1.log.getSubLogger({ name: 'abstract-interpretation' });
12
12
  class Stack {
13
13
  backingStore = [];
@@ -30,7 +30,7 @@ function getDomainOfDfgChild(node, dfg, nodeMap) {
30
30
  (0, assert_1.guard)(dfgNode !== undefined, `No DFG-Node found with ID ${node}`);
31
31
  const [_, children] = dfgNode;
32
32
  const ids = Array.from(children.entries())
33
- .filter(([_, edge]) => edge.types.has(dataflow_1.EdgeType.Reads))
33
+ .filter(([_, edge]) => (0, edge_1.edgeIncludesType)(edge.types, 1 /* EdgeType.Reads */))
34
34
  .map(([id, _]) => id);
35
35
  const domains = [];
36
36
  for (const id of ids) {
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Provides a top-level slicer that can be used to slice code *and* retrieve stats.
3
+ * @module
4
+ */
5
+ import type { MergeableRecord } from '../util/objects';
6
+ import type { DataflowInformation } from '../dataflow/info';
7
+ import type { SliceResult } from '../slicing/static/slicer-types';
8
+ import type { ReconstructionResult } from '../reconstruct/reconstruct';
9
+ import type { PerSliceStats, SlicerStats } from './stats/stats';
10
+ import type { NormalizedAst } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
11
+ import type { SlicingCriteria } from '../slicing/criterion/parse';
12
+ import type { RParseRequestFromFile, RParseRequestFromText } from '../r-bridge/retriever';
13
+ import type { SlicingCriteriaFilter } from '../slicing/criterion/collect-all';
14
+ export declare const benchmarkLogger: import("tslog").Logger<import("tslog").ILogObj>;
15
+ /**
16
+ * Returns the stats but also the result of all setup steps (parsing, normalization, and the dataflow analysis) during the slicing.
17
+ * This is useful for debugging and visualizing the slicing process.
18
+ */
19
+ export interface BenchmarkSlicerStats extends MergeableRecord {
20
+ /** the measurements obtained during the benchmark */
21
+ stats: SlicerStats;
22
+ /** the initial and unmodified AST produced by the R side/the 'parse' step */
23
+ parse: string;
24
+ /** the normalized AST produced by the 'normalization' step, including its parent decoration */
25
+ normalize: NormalizedAst;
26
+ /** the dataflow graph produced by the 'dataflow' step */
27
+ dataflow: DataflowInformation;
28
+ }
29
+ /**
30
+ * Additionally to {@link BenchmarkSlicerStats}, this contains the results of a *single* slice.
31
+ * In other words, it holds the results of the `slice` and `reconstruct` steps.
32
+ */
33
+ export interface BenchmarkSingleSliceStats extends MergeableRecord {
34
+ /** the measurements obtained during the single slice */
35
+ stats: PerSliceStats;
36
+ /** the result of the 'slice' step */
37
+ slice: SliceResult;
38
+ /** the final code, as the result of the 'reconstruct' step */
39
+ code: ReconstructionResult;
40
+ }
41
+ /**
42
+ * A slicer that can be used to slice exactly one file (multiple times).
43
+ * It holds its own {@link RShell} instance, maintains a cached dataflow and keeps measurements.
44
+ *
45
+ * Make sure to call {@link init} to initialize the slicer, before calling {@link slice}.
46
+ * After slicing, call {@link finish} to close the R session and retrieve the stats.
47
+ *
48
+ * @note Under the hood, the benchmark slicer maintains a {@link PipelineExecutor} using the {@link DEFAULT_SLICING_PIPELINE}.
49
+ */
50
+ export declare class BenchmarkSlicer {
51
+ /** Measures all data recorded *once* per slicer (complete setup up to the dataflow graph creation) */
52
+ private readonly commonMeasurements;
53
+ private readonly perSliceMeasurements;
54
+ private readonly shell;
55
+ private stats;
56
+ private loadedXml;
57
+ private dataflow;
58
+ private normalizedAst;
59
+ private totalStopwatch;
60
+ private finished;
61
+ private pipeline;
62
+ constructor();
63
+ /**
64
+ * Initialize the slicer on the given request.
65
+ * Can only be called once for each instance.
66
+ */
67
+ init(request: RParseRequestFromFile | RParseRequestFromText): Promise<void>;
68
+ private calculateStatsAfterInit;
69
+ /**
70
+ * Slice for the given {@link SlicingCriteria}.
71
+ * @see SingleSlicingCriterion
72
+ *
73
+ * @returns The per slice stats retrieved for this slicing criteria
74
+ */
75
+ slice(...slicingCriteria: SlicingCriteria): Promise<BenchmarkSingleSliceStats>;
76
+ /** Bridging the gap between the new internal and the old names for the benchmarking */
77
+ private measureCommonStep;
78
+ private measureSliceStep;
79
+ private guardActive;
80
+ /**
81
+ * Call {@link slice} for all slicing criteria that match the given filter.
82
+ * See {@link collectAllSlicingCriteria} for details.
83
+ * <p>
84
+ * the `report` function will be called *before* each *individual* slice is performed.
85
+ *
86
+ * @returns The number of slices that were produced
87
+ *
88
+ * @see collectAllSlicingCriteria
89
+ * @see SlicingCriteriaFilter
90
+ */
91
+ sliceForAll(filter: SlicingCriteriaFilter, report?: (current: number, total: number, allCriteria: SlicingCriteria[]) => void): Promise<number>;
92
+ /**
93
+ * Retrieves the final stats and closes the shell session.
94
+ * Can be called multiple times to retrieve the stored stats, but will only close the session once (the first time).
95
+ */
96
+ finish(): BenchmarkSlicerStats;
97
+ /**
98
+ * Only call in case of an error - if the session must be closed and the benchmark itself is to be considered failed/dead.
99
+ */
100
+ ensureSessionClosed(): void;
101
+ }
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ /**
3
+ * Provides a top-level slicer that can be used to slice code *and* retrieve stats.
4
+ * @module
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.BenchmarkSlicer = exports.benchmarkLogger = void 0;
11
+ const stopwatch_1 = require("./stopwatch");
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const log_1 = require("../util/log");
14
+ const pipeline_executor_1 = require("../core/pipeline-executor");
15
+ const assert_1 = require("../util/assert");
16
+ const strings_1 = require("../util/strings");
17
+ const shell_1 = require("../r-bridge/shell");
18
+ const default_pipelines_1 = require("../core/steps/pipeline/default-pipelines");
19
+ const retriever_1 = require("../r-bridge/retriever");
20
+ const collect_1 = require("../r-bridge/lang-4.x/ast/model/collect");
21
+ const collect_all_1 = require("../slicing/criterion/collect-all");
22
+ exports.benchmarkLogger = log_1.log.getSubLogger({ name: 'benchmark' });
23
+ /**
24
+ * A slicer that can be used to slice exactly one file (multiple times).
25
+ * It holds its own {@link RShell} instance, maintains a cached dataflow and keeps measurements.
26
+ *
27
+ * Make sure to call {@link init} to initialize the slicer, before calling {@link slice}.
28
+ * After slicing, call {@link finish} to close the R session and retrieve the stats.
29
+ *
30
+ * @note Under the hood, the benchmark slicer maintains a {@link PipelineExecutor} using the {@link DEFAULT_SLICING_PIPELINE}.
31
+ */
32
+ class BenchmarkSlicer {
33
+ /** Measures all data recorded *once* per slicer (complete setup up to the dataflow graph creation) */
34
+ commonMeasurements = new stopwatch_1.Measurements();
35
+ perSliceMeasurements = new Map();
36
+ shell;
37
+ stats;
38
+ loadedXml;
39
+ dataflow;
40
+ normalizedAst;
41
+ totalStopwatch;
42
+ finished = false;
43
+ // Yes, this is unclean, but we know that we assign the executor during the initialization and this saves us from having to check for nullability every time
44
+ pipeline = null;
45
+ constructor() {
46
+ this.totalStopwatch = this.commonMeasurements.start('total');
47
+ this.shell = this.commonMeasurements.measure('initialize R session', () => new shell_1.RShell());
48
+ }
49
+ /**
50
+ * Initialize the slicer on the given request.
51
+ * Can only be called once for each instance.
52
+ */
53
+ async init(request) {
54
+ (0, assert_1.guard)(this.stats === undefined, 'cannot initialize the slicer twice');
55
+ this.pipeline = new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_SLICING_PIPELINE, {
56
+ shell: this.shell,
57
+ request: { ...request },
58
+ criterion: []
59
+ });
60
+ this.loadedXml = await this.measureCommonStep('parse', 'retrieve AST from R code');
61
+ this.normalizedAst = await this.measureCommonStep('normalize', 'normalize R AST');
62
+ this.dataflow = await this.measureCommonStep('dataflow', 'produce dataflow information');
63
+ this.pipeline.switchToRequestStage();
64
+ await this.calculateStatsAfterInit(request);
65
+ }
66
+ async calculateStatsAfterInit(request) {
67
+ const loadedContent = request.request === 'text' ? request.content : fs_1.default.readFileSync(request.content, 'utf-8');
68
+ // retrieve number of R tokens - flowr_parsed should still contain the last parsed code
69
+ const numberOfRTokens = await (0, retriever_1.retrieveNumberOfRTokensOfLastParse)(this.shell);
70
+ (0, assert_1.guard)(this.normalizedAst !== undefined, 'normalizedAst should be defined after initialization');
71
+ (0, assert_1.guard)(this.dataflow !== undefined, 'dataflow should be defined after initialization');
72
+ // collect dataflow graph size
73
+ const vertices = [...this.dataflow.graph.vertices(true)];
74
+ let numberOfEdges = 0;
75
+ let numberOfCalls = 0;
76
+ let numberOfDefinitions = 0;
77
+ for (const [n, info] of vertices) {
78
+ const outgoingEdges = this.dataflow.graph.outgoingEdges(n);
79
+ numberOfEdges += outgoingEdges?.size ?? 0;
80
+ if (info.tag === 'function-call') {
81
+ numberOfCalls++;
82
+ }
83
+ else if (info.tag === 'function-definition') {
84
+ numberOfDefinitions++;
85
+ }
86
+ }
87
+ this.stats = {
88
+ commonMeasurements: new Map(),
89
+ perSliceMeasurements: this.perSliceMeasurements,
90
+ request,
91
+ input: {
92
+ numberOfLines: loadedContent.split('\n').length,
93
+ numberOfCharacters: loadedContent.length,
94
+ numberOfNonWhitespaceCharacters: (0, strings_1.withoutWhitespace)(loadedContent).length,
95
+ numberOfRTokens: numberOfRTokens,
96
+ numberOfNormalizedTokens: [...(0, collect_1.collectAllIds)(this.normalizedAst.ast)].length
97
+ },
98
+ dataflow: {
99
+ numberOfNodes: [...this.dataflow.graph.vertices(true)].length,
100
+ numberOfEdges: numberOfEdges,
101
+ numberOfCalls: numberOfCalls,
102
+ numberOfFunctionDefinitions: numberOfDefinitions
103
+ }
104
+ };
105
+ }
106
+ /**
107
+ * Slice for the given {@link SlicingCriteria}.
108
+ * @see SingleSlicingCriterion
109
+ *
110
+ * @returns The per slice stats retrieved for this slicing criteria
111
+ */
112
+ async slice(...slicingCriteria) {
113
+ exports.benchmarkLogger.trace(`try to slice for criteria ${JSON.stringify(slicingCriteria)}`);
114
+ this.guardActive();
115
+ (0, assert_1.guard)(!this.perSliceMeasurements.has(slicingCriteria), 'do not slice the same criteria combination twice');
116
+ const measurements = new stopwatch_1.Measurements();
117
+ const stats = {
118
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
119
+ measurements: undefined,
120
+ slicingCriteria: [],
121
+ numberOfDataflowNodesSliced: 0,
122
+ timesHitThreshold: 0,
123
+ reconstructedCode: {
124
+ code: '',
125
+ autoSelected: 0
126
+ }
127
+ };
128
+ this.perSliceMeasurements.set(slicingCriteria, stats);
129
+ this.pipeline.updateRequest({ criterion: slicingCriteria });
130
+ const totalStopwatch = measurements.start('total');
131
+ const slicedOutput = await this.measureSliceStep('slice', measurements, 'static slicing');
132
+ stats.slicingCriteria = [...slicedOutput.decodedCriteria];
133
+ stats.reconstructedCode = await this.measureSliceStep('reconstruct', measurements, 'reconstruct code');
134
+ totalStopwatch.stop();
135
+ exports.benchmarkLogger.debug(`Produced code for ${JSON.stringify(slicingCriteria)}: ${stats.reconstructedCode.code}`);
136
+ const results = this.pipeline.getResults(false);
137
+ if (exports.benchmarkLogger.settings.minLevel >= 3 /* LogLevel.Info */) {
138
+ exports.benchmarkLogger.info(`mapped slicing criteria: ${slicedOutput.decodedCriteria.map(c => {
139
+ const node = results.normalize.idMap.get(c.id);
140
+ return `\n- id: ${c.id}, location: ${JSON.stringify(node?.location)}, lexeme: ${JSON.stringify(node?.lexeme)}`;
141
+ }).join('')}`);
142
+ }
143
+ // if it is not in the dataflow graph it was kept to be safe and should not count to the included nodes
144
+ stats.numberOfDataflowNodesSliced = [...slicedOutput.result].filter(id => results.dataflow.graph.hasVertex(id, false)).length;
145
+ stats.timesHitThreshold = slicedOutput.timesHitThreshold;
146
+ stats.measurements = measurements.get();
147
+ return {
148
+ stats,
149
+ slice: slicedOutput,
150
+ code: stats.reconstructedCode
151
+ };
152
+ }
153
+ /** Bridging the gap between the new internal and the old names for the benchmarking */
154
+ async measureCommonStep(expectedStep, keyToMeasure) {
155
+ const { result } = await this.commonMeasurements.measureAsync(keyToMeasure, () => this.pipeline.nextStep(expectedStep));
156
+ return result;
157
+ }
158
+ async measureSliceStep(expectedStep, measure, keyToMeasure) {
159
+ const { result } = await measure.measureAsync(keyToMeasure, () => this.pipeline.nextStep(expectedStep));
160
+ return result;
161
+ }
162
+ guardActive() {
163
+ (0, assert_1.guard)(this.stats !== undefined && !this.finished, 'need to call init before, and can not do after finish!');
164
+ }
165
+ /**
166
+ * Call {@link slice} for all slicing criteria that match the given filter.
167
+ * See {@link collectAllSlicingCriteria} for details.
168
+ * <p>
169
+ * the `report` function will be called *before* each *individual* slice is performed.
170
+ *
171
+ * @returns The number of slices that were produced
172
+ *
173
+ * @see collectAllSlicingCriteria
174
+ * @see SlicingCriteriaFilter
175
+ */
176
+ async sliceForAll(filter, report = () => { }) {
177
+ this.guardActive();
178
+ let count = 0;
179
+ const allCriteria = [...(0, collect_all_1.collectAllSlicingCriteria)(this.normalizedAst.ast, filter)];
180
+ for (const slicingCriteria of allCriteria) {
181
+ report(count, allCriteria.length, allCriteria);
182
+ await this.slice(...slicingCriteria);
183
+ count++;
184
+ }
185
+ return count;
186
+ }
187
+ /**
188
+ * Retrieves the final stats and closes the shell session.
189
+ * Can be called multiple times to retrieve the stored stats, but will only close the session once (the first time).
190
+ */
191
+ finish() {
192
+ (0, assert_1.guard)(this.stats !== undefined, 'need to call init before finish');
193
+ if (!this.finished) {
194
+ this.commonMeasurements.measure('close R session', () => this.shell.close());
195
+ this.totalStopwatch.stop();
196
+ this.finished = true;
197
+ }
198
+ this.stats.commonMeasurements = this.commonMeasurements.get();
199
+ return {
200
+ stats: this.stats,
201
+ parse: this.loadedXml,
202
+ dataflow: this.dataflow,
203
+ normalize: this.normalizedAst
204
+ };
205
+ }
206
+ /**
207
+ * Only call in case of an error - if the session must be closed and the benchmark itself is to be considered failed/dead.
208
+ */
209
+ ensureSessionClosed() {
210
+ this.shell.close();
211
+ }
212
+ }
213
+ exports.BenchmarkSlicer = BenchmarkSlicer;
214
+ //# sourceMappingURL=slicer.js.map
@@ -0,0 +1,7 @@
1
+ import type { SummarizedSlicerStats, UltimateSlicerStats } from '../summarizer/data';
2
+ /**
3
+ * Converts the given stats to a human-readable string.
4
+ * You may have to {@link summarizeSlicerStats | summarize} the stats first.
5
+ */
6
+ export declare function stats2string(stats: SummarizedSlicerStats): string;
7
+ export declare function ultimateStats2String(stats: UltimateSlicerStats): string;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ultimateStats2String = exports.stats2string = void 0;
4
+ const assert_1 = require("../../util/assert");
5
+ const padSize = 15;
6
+ function pad(string) {
7
+ return String(string).padStart(padSize, ' ');
8
+ }
9
+ function divWithRest(dividend, divisor) {
10
+ return [dividend / divisor, dividend % divisor];
11
+ }
12
+ function formatNanoseconds(nanoseconds) {
13
+ if (nanoseconds < 0) {
14
+ return '??';
15
+ }
16
+ const [seconds, rest] = divWithRest(typeof nanoseconds === 'number' ? BigInt(Math.round(nanoseconds)) : nanoseconds, BigInt(1e9));
17
+ const [milliseconds, remainingNanoseconds] = divWithRest(rest, BigInt(1e6));
18
+ const secondsStr = seconds > 0 ? `${String(seconds).padStart(2, '0')}.` : '';
19
+ const millisecondsStr = seconds > 0 ? `${String(milliseconds).padStart(3, '0')}:` : `${String(milliseconds)}:`;
20
+ const nanoStr = String(remainingNanoseconds).padEnd(3, '0').substring(0, 3);
21
+ const unit = seconds === 0n ? 'ms' : ' s'; /* space for padding */
22
+ return pad(`${secondsStr}${millisecondsStr}${nanoStr}${unit}`);
23
+ }
24
+ function print(measurements, key) {
25
+ const time = measurements.get(key);
26
+ (0, assert_1.guard)(time !== undefined, `Measurement for ${JSON.stringify(key)} not found`);
27
+ return formatNanoseconds(time);
28
+ }
29
+ function formatSummarizedTimeMeasure(measure) {
30
+ if (measure === undefined) {
31
+ return '??';
32
+ }
33
+ return `${formatNanoseconds(measure.min)} - ${formatNanoseconds(measure.max)} (median: ${formatNanoseconds(measure.median)}, mean: ${formatNanoseconds(measure.mean)}, std: ${formatNanoseconds(measure.std)})`;
34
+ }
35
+ function roundTo(num, digits = 4) {
36
+ const factor = Math.pow(10, digits);
37
+ return Math.round(num * factor) / factor;
38
+ }
39
+ function asPercentage(num) {
40
+ if (isNaN(num)) {
41
+ return '??%';
42
+ }
43
+ return pad(`${roundTo(num * 100, 3)}%`);
44
+ }
45
+ function asFloat(num) {
46
+ return pad(roundTo(num));
47
+ }
48
+ function formatSummarizedMeasure(measure, fmt = asFloat) {
49
+ if (measure === undefined) {
50
+ return '??';
51
+ }
52
+ return `${fmt(measure.min)} - ${fmt(measure.max)} (median: ${fmt(measure.median)}, mean: ${fmt(measure.mean)}, std: ${fmt(measure.std)})`;
53
+ }
54
+ function printSummarizedMeasurements(stats, key) {
55
+ const measure = stats.measurements.get(key);
56
+ (0, assert_1.guard)(measure !== undefined, `Measurement for ${JSON.stringify(key)} not found`);
57
+ return formatSummarizedTimeMeasure(measure);
58
+ }
59
+ function printCountSummarizedMeasurements(stats) {
60
+ const range = `${stats.min} - ${stats.max}`.padStart(padSize, ' ');
61
+ return `${range} (median: ${stats.median}, mean: ${stats.mean}, std: ${stats.std})`;
62
+ }
63
+ /**
64
+ * Converts the given stats to a human-readable string.
65
+ * You may have to {@link summarizeSlicerStats | summarize} the stats first.
66
+ */
67
+ function stats2string(stats) {
68
+ let result = `
69
+ Request: ${JSON.stringify(stats.request)}
70
+ Shell init time: ${print(stats.commonMeasurements, 'initialize R session')}
71
+ AST retrieval: ${print(stats.commonMeasurements, 'retrieve AST from R code')}
72
+ AST normalization: ${print(stats.commonMeasurements, 'normalize R AST')}
73
+ Dataflow creation: ${print(stats.commonMeasurements, 'produce dataflow information')}
74
+
75
+ Slicing summary for ${stats.perSliceMeasurements.numberOfSlices} slice${stats.perSliceMeasurements.numberOfSlices !== 1 ? 's' : ''}:`;
76
+ if (stats.perSliceMeasurements.numberOfSlices > 0) {
77
+ result += `
78
+ Total: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'total')}
79
+ Slice creation: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'static slicing')}
80
+ Reconstruction: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'reconstruct code')}
81
+ Used Slice Criteria Sizes: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceCriteriaSizes)}
82
+ Result Slice Sizes:
83
+ Number of lines: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.lines)}
84
+ Number of characters: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.characters)}
85
+ Number of non whitespace characters: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.nonWhitespaceCharacters)}
86
+ Number of auto selected: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.autoSelected)}
87
+ Number of R tokens: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.tokens)}
88
+ Normalized R tokens: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.normalizedTokens)}
89
+ Number of dataflow nodes: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.dataflowNodes)}
90
+ `;
91
+ }
92
+ return `${result}
93
+ Shell close: ${print(stats.commonMeasurements, 'close R session')}
94
+ Total: ${print(stats.commonMeasurements, 'total')}
95
+
96
+ Input:
97
+ Number of lines: ${pad(stats.input.numberOfLines)}
98
+ Number of characters: ${pad(stats.input.numberOfCharacters)}
99
+ Number of non whitespace characters: ${pad(stats.input.numberOfNonWhitespaceCharacters)}
100
+ Number of tokens: ${pad(stats.input.numberOfRTokens)}
101
+ Normalized R tokens: ${pad(stats.input.numberOfNormalizedTokens)}
102
+
103
+ Dataflow:
104
+ Number of nodes: ${pad(stats.dataflow.numberOfNodes)}
105
+ Number of edges: ${pad(stats.dataflow.numberOfEdges)}
106
+ Number of calls: ${pad(stats.dataflow.numberOfCalls)}
107
+ Number of function defs: ${pad(stats.dataflow.numberOfFunctionDefinitions)}`;
108
+ }
109
+ exports.stats2string = stats2string;
110
+ function ultimateStats2String(stats) {
111
+ // Used Slice Criteria Sizes: ${formatSummarizedMeasure(stats.perSliceMeasurements.sliceCriteriaSizes)}
112
+ return `
113
+ Summarized: ${stats.totalRequests} requests and ${stats.totalSlices} slices
114
+ Shell init time: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('initialize R session'))}
115
+ AST retrieval: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('retrieve AST from R code'))}
116
+ AST normalization: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('normalize R AST'))}
117
+ Dataflow creation: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('produce dataflow information'))}
118
+
119
+ Slice summary for:
120
+ Total: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('total'))}
121
+ Slice creation: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('static slicing'))}
122
+ Reconstruction: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('reconstruct code'))}
123
+ Failed to Re-Parse: ${pad(stats.failedToRepParse)}/${stats.totalSlices}
124
+ Times hit Threshold: ${pad(stats.timesHitThreshold)}/${stats.totalSlices}
125
+ Reductions (reduced by x%):
126
+ Number of lines: ${formatSummarizedMeasure(stats.reduction.numberOfLines, asPercentage)}
127
+ Number of lines no auto: ${formatSummarizedMeasure(stats.reduction.numberOfLinesNoAutoSelection, asPercentage)}
128
+ Number of characters: ${formatSummarizedMeasure(stats.reduction.numberOfCharacters, asPercentage)}
129
+ Number of non whitespace characters: ${formatSummarizedMeasure(stats.reduction.numberOfNonWhitespaceCharacters, asPercentage)}
130
+ Number of R tokens: ${formatSummarizedMeasure(stats.reduction.numberOfRTokens, asPercentage)}
131
+ Normalized R tokens: ${formatSummarizedMeasure(stats.reduction.numberOfNormalizedTokens, asPercentage)}
132
+ Number of dataflow nodes: ${formatSummarizedMeasure(stats.reduction.numberOfDataflowNodes, asPercentage)}
133
+
134
+ Shell close: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('close R session'))}
135
+ Total: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('total'))}
136
+
137
+ Input:
138
+ Number of lines: ${formatSummarizedMeasure(stats.input.numberOfLines)}
139
+ Number of characters: ${formatSummarizedMeasure(stats.input.numberOfCharacters)}
140
+ Number of non whitespace characters: ${formatSummarizedMeasure(stats.input.numberOfNonWhitespaceCharacters)}
141
+ Number of tokens: ${formatSummarizedMeasure(stats.input.numberOfRTokens)}
142
+ Normalized R tokens: ${formatSummarizedMeasure(stats.input.numberOfNormalizedTokens)}
143
+
144
+ Dataflow:
145
+ Number of nodes: ${formatSummarizedMeasure(stats.dataflow.numberOfNodes)}
146
+ Number of edges: ${formatSummarizedMeasure(stats.dataflow.numberOfEdges)}
147
+ Number of calls: ${formatSummarizedMeasure(stats.dataflow.numberOfCalls)}
148
+ Number of function defs: ${formatSummarizedMeasure(stats.dataflow.numberOfFunctionDefinitions)}`;
149
+ }
150
+ exports.ultimateStats2String = ultimateStats2String;
151
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1,42 @@
1
+ import type { SingleSlicingCriterion, SlicingCriteria } from '../../slicing/criterion/parse';
2
+ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
3
+ import type { ReconstructionResult } from '../../reconstruct/reconstruct';
4
+ import type { RParseRequestFromFile, RParseRequestFromText } from '../../r-bridge/retriever';
5
+ export declare const CommonSlicerMeasurements: readonly ["initialize R session", "retrieve AST from R code", "normalize R AST", "produce dataflow information", "close R session", "total"];
6
+ export type CommonSlicerMeasurements = typeof CommonSlicerMeasurements[number];
7
+ export declare const PerSliceMeasurements: readonly ["static slicing", "reconstruct code", "total"];
8
+ export type PerSliceMeasurements = typeof PerSliceMeasurements[number];
9
+ export type ElapsedTime = bigint;
10
+ export interface PerSliceStats {
11
+ measurements: Map<PerSliceMeasurements, ElapsedTime>;
12
+ slicingCriteria: {
13
+ criterion: SingleSlicingCriterion;
14
+ id: NodeId;
15
+ }[];
16
+ reconstructedCode: ReconstructionResult;
17
+ numberOfDataflowNodesSliced: number;
18
+ timesHitThreshold: number;
19
+ }
20
+ export interface SlicerStatsInput<T = number> {
21
+ numberOfLines: T;
22
+ numberOfCharacters: T;
23
+ numberOfNonWhitespaceCharacters: T;
24
+ numberOfRTokens: T;
25
+ numberOfNormalizedTokens: T;
26
+ }
27
+ export interface SlicerStatsDataflow<T = number> {
28
+ numberOfNodes: T;
29
+ numberOfEdges: T;
30
+ numberOfCalls: T;
31
+ numberOfFunctionDefinitions: T;
32
+ }
33
+ /**
34
+ * The statistics that are collected by the {@link BenchmarkSlicer} and used for benchmarking.
35
+ */
36
+ export interface SlicerStats {
37
+ commonMeasurements: Map<CommonSlicerMeasurements, ElapsedTime>;
38
+ perSliceMeasurements: Map<SlicingCriteria, PerSliceStats>;
39
+ request: RParseRequestFromFile | RParseRequestFromText;
40
+ input: SlicerStatsInput;
41
+ dataflow: SlicerStatsDataflow;
42
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PerSliceMeasurements = exports.CommonSlicerMeasurements = void 0;
4
+ exports.CommonSlicerMeasurements = ['initialize R session', 'retrieve AST from R code', 'normalize R AST', 'produce dataflow information', 'close R session', 'total'];
5
+ exports.PerSliceMeasurements = ['static slicing', 'reconstruct code', 'total'];
6
+ //# sourceMappingURL=stats.js.map