@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.
- package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
- package/abstract-interpretation/handler/binop/binop.js +4 -2
- package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
- package/abstract-interpretation/handler/binop/operators.js +14 -28
- package/abstract-interpretation/processor.d.ts +3 -2
- package/abstract-interpretation/processor.js +2 -2
- package/benchmark/slicer.d.ts +101 -0
- package/benchmark/slicer.js +214 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +151 -0
- package/benchmark/stats/stats.d.ts +42 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/benchmark/summarizer/data.d.ts +54 -0
- package/benchmark/summarizer/first-phase/input.d.ts +3 -0
- package/benchmark/summarizer/first-phase/input.js +76 -0
- package/benchmark/summarizer/first-phase/process.d.ts +11 -0
- package/benchmark/summarizer/first-phase/process.js +205 -0
- package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
- package/benchmark/summarizer/second-phase/graph.js +54 -0
- package/benchmark/summarizer/second-phase/process.d.ts +6 -0
- package/benchmark/summarizer/second-phase/process.js +127 -0
- package/benchmark/summarizer/summarizer.d.ts +31 -0
- package/benchmark/summarizer/summarizer.js +58 -0
- package/cli/benchmark-app.d.ts +10 -0
- package/cli/benchmark-app.js +67 -0
- package/cli/benchmark-helper-app.d.ts +9 -0
- package/cli/benchmark-helper-app.js +69 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +85 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +25 -0
- package/cli/common/scripts-info.js +83 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +43 -0
- package/cli/flowr.d.ts +29 -0
- package/cli/flowr.js +141 -0
- package/cli/repl/commands/cfg.d.ts +3 -0
- package/cli/repl/commands/cfg.js +37 -0
- package/cli/repl/commands/commands.d.ts +13 -0
- package/cli/repl/commands/commands.js +142 -0
- package/cli/repl/commands/dataflow.d.ts +3 -0
- package/cli/repl/commands/dataflow.js +34 -0
- package/cli/repl/commands/execute.d.ts +4 -0
- package/cli/repl/commands/execute.js +27 -0
- package/cli/repl/commands/main.d.ts +39 -0
- package/cli/repl/commands/main.js +14 -0
- package/cli/repl/commands/normalize.d.ts +3 -0
- package/cli/repl/commands/normalize.js +34 -0
- package/cli/repl/commands/parse.d.ts +2 -0
- package/cli/repl/commands/parse.js +110 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +15 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +28 -0
- package/cli/repl/core.d.ts +36 -0
- package/cli/repl/core.js +174 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/print-version.d.ts +2 -0
- package/cli/repl/print-version.js +10 -0
- package/cli/repl/prompt.d.ts +2 -0
- package/cli/repl/prompt.js +9 -0
- package/cli/repl/server/connection.d.ts +21 -0
- package/cli/repl/server/connection.js +218 -0
- package/cli/repl/server/messages/analysis.d.ts +72 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +40 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +37 -0
- package/cli/repl/server/messages/slice.d.ts +26 -0
- package/cli/repl/server/messages/slice.js +37 -0
- package/cli/repl/server/net.d.ts +49 -0
- package/cli/repl/server/net.js +63 -0
- package/cli/repl/server/send.d.ts +4 -0
- package/cli/repl/server/send.js +18 -0
- package/cli/repl/server/server.d.ts +20 -0
- package/cli/repl/server/server.js +66 -0
- package/cli/repl/server/validate.d.ts +15 -0
- package/cli/repl/server/validate.js +34 -0
- package/cli/slicer-app.d.ts +11 -0
- package/cli/slicer-app.js +83 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +99 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +87 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +66 -0
- package/core/pipeline-executor.d.ts +154 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +3 -4
- package/core/print/dataflow-printer.js +5 -5
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +3 -3
- package/core/print/parse-printer.js +3 -3
- package/core/print/print.d.ts +13 -4
- package/core/print/print.js +13 -2
- package/core/print/slice-diff-ansi.d.ts +3 -2
- package/core/print/slice-diff-ansi.js +4 -4
- package/core/steps/all/core/00-parse.d.ts +28 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.d.ts +29 -0
- package/core/steps/all/core/10-normalize.js +26 -0
- package/core/steps/all/core/20-dataflow.d.ts +27 -0
- package/core/steps/all/core/20-dataflow.js +29 -0
- package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/pipeline/create-pipeline.d.ts +6 -0
- package/core/steps/pipeline/create-pipeline.js +130 -0
- package/core/steps/pipeline/default-pipelines.d.ts +251 -0
- package/core/steps/pipeline/default-pipelines.js +18 -0
- package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.d.ts +60 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/pipeline-step.d.ts +85 -0
- package/core/steps/pipeline-step.js +8 -0
- package/dataflow/environments/append.d.ts +4 -4
- package/dataflow/environments/append.js +4 -4
- package/dataflow/environments/built-in.d.ts +25 -0
- package/dataflow/environments/built-in.js +123 -0
- package/dataflow/environments/clone.d.ts +2 -0
- package/dataflow/environments/clone.js +23 -0
- package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
- package/dataflow/environments/define.js +51 -0
- package/dataflow/environments/diff.d.ts +6 -0
- package/dataflow/environments/diff.js +85 -0
- package/dataflow/environments/environment.d.ts +10 -43
- package/dataflow/environments/environment.js +32 -138
- package/dataflow/environments/identifier.d.ts +31 -0
- package/dataflow/environments/identifier.js +3 -0
- package/dataflow/environments/overwrite.d.ts +4 -4
- package/dataflow/environments/overwrite.js +9 -22
- package/dataflow/environments/resolve-by-name.d.ts +7 -6
- package/dataflow/environments/resolve-by-name.js +35 -19
- package/dataflow/environments/scoping.js +1 -4
- package/dataflow/extractor.d.ts +6 -6
- package/dataflow/extractor.js +47 -57
- package/dataflow/graph/diff.d.ts +24 -7
- package/dataflow/graph/diff.js +114 -74
- package/dataflow/graph/edge.d.ts +66 -20
- package/dataflow/graph/edge.js +73 -27
- package/dataflow/graph/graph.d.ts +53 -29
- package/dataflow/graph/graph.js +84 -89
- package/dataflow/graph/quads.js +2 -2
- package/dataflow/graph/vertex.d.ts +37 -34
- package/dataflow/info.d.ts +49 -0
- package/dataflow/info.js +29 -0
- package/dataflow/internal/linker.d.ts +11 -10
- package/dataflow/internal/linker.js +64 -90
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
- package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
- package/dataflow/internal/process/functions/call/common.d.ts +35 -0
- package/dataflow/internal/process/functions/call/common.js +70 -0
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
- package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
- package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
- package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
- package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
- package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
- package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
- package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
- package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
- package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
- package/dataflow/internal/process/process-named-call.d.ts +6 -0
- package/dataflow/internal/process/process-named-call.js +17 -0
- package/dataflow/internal/process/process-symbol.d.ts +5 -0
- package/dataflow/internal/process/process-symbol.js +26 -0
- package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
- package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
- package/dataflow/internal/process/process-value.d.ts +4 -0
- package/dataflow/internal/process/process-value.js +22 -0
- package/dataflow/logger.d.ts +1 -0
- package/dataflow/logger.js +6 -0
- package/dataflow/processor.d.ts +18 -13
- package/dataflow/processor.js +1 -1
- package/package.json +48 -85
- package/r-bridge/data/data.d.ts +603 -0
- package/r-bridge/data/data.js +753 -0
- package/r-bridge/data/get.d.ts +19 -0
- package/r-bridge/data/get.js +51 -0
- package/r-bridge/data/print.d.ts +1 -0
- package/r-bridge/data/print.js +58 -0
- package/r-bridge/data/types.d.ts +33 -0
- package/r-bridge/data/types.js +3 -0
- package/r-bridge/init.d.ts +3 -0
- package/r-bridge/init.js +22 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
- package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
- package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
- package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
- package/r-bridge/lang-4.x/ast/model/type.js +13 -6
- package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
- package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
- package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
- package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
- package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
- package/r-bridge/retriever.d.ts +5 -5
- package/r-bridge/retriever.js +11 -24
- package/r-bridge/shell-executor.d.ts +0 -1
- package/r-bridge/shell-executor.js +7 -12
- package/r-bridge/shell.d.ts +14 -12
- package/r-bridge/shell.js +50 -45
- package/reconstruct/reconstruct.d.ts +4 -2
- package/reconstruct/reconstruct.js +193 -185
- package/slicing/criterion/collect-all.d.ts +4 -3
- package/slicing/criterion/collect-all.js +5 -1
- package/slicing/criterion/filters/all-variables.js +14 -22
- package/slicing/criterion/parse.d.ts +4 -2
- package/slicing/criterion/parse.js +13 -11
- package/slicing/static/fingerprint.d.ts +5 -0
- package/slicing/static/fingerprint.js +17 -0
- package/slicing/static/slice-call.d.ts +10 -0
- package/slicing/static/slice-call.js +86 -0
- package/slicing/static/slicer-types.d.ts +33 -0
- package/slicing/static/slicer-types.js +3 -0
- package/slicing/static/static-slicer.d.ts +6 -24
- package/slicing/static/static-slicer.js +54 -155
- package/slicing/static/visiting-queue.d.ts +23 -0
- package/slicing/static/visiting-queue.js +53 -0
- package/statistics/features/common-syntax-probability.d.ts +29 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +182 -0
- package/statistics/features/feature.js +39 -0
- package/statistics/features/post-processing.d.ts +12 -0
- package/statistics/features/post-processing.js +21 -0
- package/statistics/features/supported/assignments/assignments.d.ts +12 -0
- package/statistics/features/supported/assignments/assignments.js +55 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +124 -0
- package/statistics/features/supported/comments/comments.d.ts +18 -0
- package/statistics/features/supported/comments/comments.js +133 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +49 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +68 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +64 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +120 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +106 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +169 -0
- package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
- package/statistics/features/supported/expression-list/expression-list.js +36 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +43 -0
- package/statistics/features/supported/loops/loops.d.ts +20 -0
- package/statistics/features/supported/loops/loops.js +79 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +71 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +178 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +97 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +120 -0
- package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
- package/statistics/features/supported/used-packages/used-packages.js +130 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +71 -0
- package/statistics/features/supported/values/values.d.ts +14 -0
- package/statistics/features/supported/values/values.js +101 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +121 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +60 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/print-stats.d.ts +17 -0
- package/statistics/output/print-stats.js +69 -0
- package/statistics/output/statistics-file.d.ts +37 -0
- package/statistics/output/statistics-file.js +69 -0
- package/statistics/statistics.d.ts +28 -0
- package/statistics/statistics.js +108 -0
- package/statistics/summarizer/auto-detect.d.ts +2 -0
- package/statistics/summarizer/auto-detect.js +32 -0
- package/statistics/summarizer/first-phase/process.d.ts +6 -0
- package/statistics/summarizer/first-phase/process.js +81 -0
- package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
- package/statistics/summarizer/post-process/clusterer.js +43 -0
- package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
- package/statistics/summarizer/post-process/file-based-count.js +49 -0
- package/statistics/summarizer/post-process/histogram.d.ts +59 -0
- package/statistics/summarizer/post-process/histogram.js +128 -0
- package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
- package/statistics/summarizer/post-process/post-process-output.js +105 -0
- package/statistics/summarizer/second-phase/process.d.ts +11 -0
- package/statistics/summarizer/second-phase/process.js +116 -0
- package/statistics/summarizer/summarizer.d.ts +35 -0
- package/statistics/summarizer/summarizer.js +135 -0
- package/util/ansi.d.ts +2 -2
- package/util/ansi.js +2 -2
- package/util/arrays.d.ts +11 -1
- package/util/arrays.js +34 -1
- package/util/assert.d.ts +1 -0
- package/util/assert.js +5 -1
- package/util/cfg/cfg.d.ts +3 -2
- package/util/cfg/cfg.js +17 -28
- package/util/cfg/visitor.d.ts +1 -1
- package/util/defaultmap.d.ts +1 -1
- package/util/defaultmap.js +1 -1
- package/util/diff.d.ts +4 -4
- package/util/files.d.ts +2 -2
- package/util/files.js +1 -1
- package/util/log.d.ts +1 -0
- package/util/log.js +7 -1
- package/util/logic.d.ts +1 -0
- package/util/logic.js +3 -0
- package/util/mermaid/ast.d.ts +1 -1
- package/util/mermaid/ast.js +2 -2
- package/util/mermaid/cfg.d.ts +1 -1
- package/util/mermaid/dfg.d.ts +34 -8
- package/util/mermaid/dfg.js +99 -70
- package/util/mermaid/mermaid.d.ts +1 -1
- package/util/mermaid/mermaid.js +6 -7
- package/util/objects.js +4 -0
- package/util/quads.d.ts +3 -3
- package/util/quads.js +0 -1
- package/util/range.d.ts +27 -14
- package/util/range.js +31 -27
- package/util/version.js +1 -1
- package/core/index.d.ts +0 -4
- package/core/index.js +0 -23
- package/core/input.d.ts +0 -42
- package/core/output.d.ts +0 -15
- package/core/slicer.d.ts +0 -124
- package/core/slicer.js +0 -227
- package/core/steps.d.ts +0 -508
- package/core/steps.js +0 -100
- package/dataflow/environments/index.d.ts +0 -7
- package/dataflow/environments/index.js +0 -23
- package/dataflow/environments/register.js +0 -40
- package/dataflow/environments/scopes.d.ts +0 -6
- package/dataflow/environments/scopes.js +0 -6
- package/dataflow/graph/index.d.ts +0 -4
- package/dataflow/graph/index.js +0 -21
- package/dataflow/index.d.ts +0 -5
- package/dataflow/index.js +0 -24
- package/dataflow/internal/info.d.ts +0 -21
- package/dataflow/internal/info.js +0 -16
- package/dataflow/internal/process/access.d.ts +0 -4
- package/dataflow/internal/process/access.js +0 -53
- package/dataflow/internal/process/expression-list.d.ts +0 -8
- package/dataflow/internal/process/expression-list.js +0 -144
- package/dataflow/internal/process/functions/argument.d.ts +0 -8
- package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
- package/dataflow/internal/process/functions/exit-points.js +0 -121
- package/dataflow/internal/process/functions/function-call.d.ts +0 -5
- package/dataflow/internal/process/functions/function-call.js +0 -105
- package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
- package/dataflow/internal/process/functions/function-definition.js +0 -176
- package/dataflow/internal/process/functions/source.d.ts +0 -8
- package/dataflow/internal/process/functions/source.js +0 -81
- package/dataflow/internal/process/if-then-else.d.ts +0 -4
- package/dataflow/internal/process/if-then-else.js +0 -56
- package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/for-loop.js +0 -54
- package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/repeat-loop.js +0 -21
- package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/while-loop.js +0 -31
- package/dataflow/internal/process/operators/assignment.d.ts +0 -4
- package/dataflow/internal/process/operators/assignment.js +0 -129
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
- package/dataflow/internal/process/operators/pipe.d.ts +0 -4
- package/dataflow/internal/process/operators/pipe.js +0 -46
- package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/unary-op.js +0 -10
- package/dataflow/internal/process/symbol.d.ts +0 -4
- package/dataflow/internal/process/symbol.js +0 -21
- package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
- package/dataflow/internal/process/uninteresting-leaf.js +0 -9
- package/index.d.ts +0 -4
- package/index.js +0 -21
- package/r-bridge/index.d.ts +0 -11
- package/r-bridge/index.js +0 -28
- package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/index.js +0 -22
- package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/model/index.js +0 -23
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
- package/r-bridge/lang-4.x/index.d.ts +0 -2
- package/r-bridge/lang-4.x/index.js +0 -19
- package/slicing/criterion/filters/index.d.ts +0 -1
- package/slicing/criterion/filters/index.js +0 -18
- package/slicing/criterion/index.d.ts +0 -3
- package/slicing/criterion/index.js +0 -20
- package/slicing/index.d.ts +0 -3
- package/slicing/index.js +0 -20
- package/slicing/static/index.d.ts +0 -1
- package/slicing/static/index.js +0 -18
- package/util/mermaid/index.d.ts +0 -3
- package/util/mermaid/index.js +0 -20
- /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
package/core/steps.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* This file defines *all* steps of the slicing process and the data they require.
|
|
4
|
-
*
|
|
5
|
-
* Note, that the order of elements here also describes the *desired* order of their desired execution for readability.
|
|
6
|
-
* However, it is the {@link SteppingSlicer} which controls the order of execution and the steps required to achieve a given result.
|
|
7
|
-
*
|
|
8
|
-
* If you add a new step, you have to (at least) update the {@link SteppingSlicer} as well as the corresponding type predicate {@link SteppingSlicerInput}.
|
|
9
|
-
* Furthermore, if your step is the new *last* step, please update {@link LAST_STEP}.
|
|
10
|
-
*
|
|
11
|
-
* Please note that the combination of `satisfies` and `as` seems to be required.
|
|
12
|
-
* With `satisfies` we make sure that the respective element has all the keys it requires, and the `as` force the type to be exactly the given one
|
|
13
|
-
*
|
|
14
|
-
* @module
|
|
15
|
-
*/
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.printStepResult = exports.executeSingleSubStep = exports.LAST_STEP = exports.LAST_PER_FILE_STEP = exports.STEPS = exports.STEPS_PER_SLICE = exports.STEPS_PER_FILE = void 0;
|
|
18
|
-
const r_bridge_1 = require("../r-bridge");
|
|
19
|
-
const dataflow_1 = require("../dataflow");
|
|
20
|
-
const slicing_1 = require("../slicing");
|
|
21
|
-
const print_1 = require("./print/print");
|
|
22
|
-
const normalize_printer_1 = require("./print/normalize-printer");
|
|
23
|
-
const assert_1 = require("../util/assert");
|
|
24
|
-
const parse_printer_1 = require("./print/parse-printer");
|
|
25
|
-
const dataflow_printer_1 = require("./print/dataflow-printer");
|
|
26
|
-
const parser_1 = require("../r-bridge/lang-4.x/ast/parser/json/parser");
|
|
27
|
-
exports.STEPS_PER_FILE = {
|
|
28
|
-
'parse': {
|
|
29
|
-
description: 'Parse the given R code into an AST',
|
|
30
|
-
processor: (r, s) => (0, r_bridge_1.retrieveParseDataFromRCode)(r, s),
|
|
31
|
-
required: 'once-per-file',
|
|
32
|
-
printer: {
|
|
33
|
-
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter,
|
|
34
|
-
[2 /* StepOutputFormat.Json */]: text => text,
|
|
35
|
-
[5 /* StepOutputFormat.RdfQuads */]: parse_printer_1.parseToQuads
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
'normalize': {
|
|
39
|
-
description: 'Normalize the AST to flowR\'s AST (first step of the normalization)',
|
|
40
|
-
processor: (j, h, g) => (0, parser_1.normalize)(j, h, g),
|
|
41
|
-
required: 'once-per-file',
|
|
42
|
-
printer: {
|
|
43
|
-
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter,
|
|
44
|
-
[2 /* StepOutputFormat.Json */]: normalize_printer_1.normalizedAstToJson,
|
|
45
|
-
[5 /* StepOutputFormat.RdfQuads */]: normalize_printer_1.normalizedAstToQuads,
|
|
46
|
-
[3 /* StepOutputFormat.Mermaid */]: normalize_printer_1.printNormalizedAstToMermaid,
|
|
47
|
-
[4 /* StepOutputFormat.MermaidUrl */]: normalize_printer_1.printNormalizedAstToMermaidUrl
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
'dataflow': {
|
|
51
|
-
description: 'Construct the dataflow graph',
|
|
52
|
-
processor: (r, a) => (0, dataflow_1.produceDataFlowGraph)(r, a),
|
|
53
|
-
required: 'once-per-file',
|
|
54
|
-
printer: {
|
|
55
|
-
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter,
|
|
56
|
-
[2 /* StepOutputFormat.Json */]: dataflow_printer_1.dataflowGraphToJson,
|
|
57
|
-
[5 /* StepOutputFormat.RdfQuads */]: dataflow_printer_1.dataflowGraphToQuads,
|
|
58
|
-
[3 /* StepOutputFormat.Mermaid */]: dataflow_printer_1.dataflowGraphToMermaid,
|
|
59
|
-
[4 /* StepOutputFormat.MermaidUrl */]: dataflow_printer_1.dataflowGraphToMermaidUrl
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
exports.STEPS_PER_SLICE = {
|
|
64
|
-
'slice': {
|
|
65
|
-
description: 'Calculate the actual static slice from the dataflow graph and the given slicing criteria',
|
|
66
|
-
processor: (d, a, c) => (0, slicing_1.staticSlicing)(d, a, c),
|
|
67
|
-
required: 'once-per-slice',
|
|
68
|
-
printer: {
|
|
69
|
-
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
'reconstruct': {
|
|
73
|
-
description: 'Reconstruct R code from the static slice',
|
|
74
|
-
processor: (a, s) => (0, slicing_1.reconstructToCode)(a, s),
|
|
75
|
-
required: 'once-per-slice',
|
|
76
|
-
printer: {
|
|
77
|
-
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
exports.STEPS = { ...exports.STEPS_PER_FILE, ...exports.STEPS_PER_SLICE };
|
|
82
|
-
exports.LAST_PER_FILE_STEP = 'dataflow';
|
|
83
|
-
exports.LAST_STEP = 'reconstruct';
|
|
84
|
-
function executeSingleSubStep(subStep, ...input) {
|
|
85
|
-
// @ts-expect-error - this is safe, as we know that the function arguments are correct by 'satisfies', this saves an explicit cast with 'as'
|
|
86
|
-
return exports.STEPS[subStep].processor(...input);
|
|
87
|
-
}
|
|
88
|
-
exports.executeSingleSubStep = executeSingleSubStep;
|
|
89
|
-
/**
|
|
90
|
-
* For a `step` of the given name, which returned the given `data`. Convert that data into the given `format`.
|
|
91
|
-
* Depending on your step and the format this may require `additional` inputs.
|
|
92
|
-
*/
|
|
93
|
-
function printStepResult(step, data, format, ...additional) {
|
|
94
|
-
const base = exports.STEPS[step].printer;
|
|
95
|
-
const printer = base[format];
|
|
96
|
-
(0, assert_1.guard)(printer !== undefined, `printer for ${step} does not support ${String(format)}`);
|
|
97
|
-
return printer(data, ...additional);
|
|
98
|
-
}
|
|
99
|
-
exports.printStepResult = printStepResult;
|
|
100
|
-
//# sourceMappingURL=steps.js.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./append"), exports);
|
|
18
|
-
__exportStar(require("./resolve-by-name"), exports);
|
|
19
|
-
__exportStar(require("./scoping"), exports);
|
|
20
|
-
__exportStar(require("./overwrite"), exports);
|
|
21
|
-
__exportStar(require("./environment"), exports);
|
|
22
|
-
__exportStar(require("./register"), exports);
|
|
23
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.define = void 0;
|
|
4
|
-
const environment_1 = require("./environment");
|
|
5
|
-
const scopes_1 = require("./scopes");
|
|
6
|
-
const assert_1 = require("../../util/assert");
|
|
7
|
-
/**
|
|
8
|
-
* Insert the given `definition` --- defined within the given scope --- into the passed along `environments` will take care of propagation.
|
|
9
|
-
* Does not modify the passed along `environments` in-place! It returns the new reference.
|
|
10
|
-
*/
|
|
11
|
-
function define(definition, withinScope, environments) {
|
|
12
|
-
let newEnvironments = environments;
|
|
13
|
-
(0, assert_1.guard)(withinScope === definition.scope, 'Mismatching scopes');
|
|
14
|
-
if (withinScope === scopes_1.LocalScope) {
|
|
15
|
-
newEnvironments = (0, environment_1.cloneEnvironments)(environments, false);
|
|
16
|
-
newEnvironments.current.memory.set(definition.name, [definition]);
|
|
17
|
-
}
|
|
18
|
-
else if (withinScope === scopes_1.GlobalScope) {
|
|
19
|
-
newEnvironments = (0, environment_1.cloneEnvironments)(environments, true);
|
|
20
|
-
let current = newEnvironments.current;
|
|
21
|
-
let last = undefined;
|
|
22
|
-
let found = false;
|
|
23
|
-
do {
|
|
24
|
-
if (current.memory.has(definition.name)) {
|
|
25
|
-
current.memory.set(definition.name, [definition]);
|
|
26
|
-
found = true;
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
last = current;
|
|
30
|
-
current = current.parent;
|
|
31
|
-
} while (current !== undefined);
|
|
32
|
-
if (!found) {
|
|
33
|
-
(0, assert_1.guard)(last !== undefined, () => `Could not find global scope for ${definition.name}`);
|
|
34
|
-
last.memory.set(definition.name, [definition]);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return newEnvironments;
|
|
38
|
-
}
|
|
39
|
-
exports.define = define;
|
|
40
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare const GlobalScope = ".GlobalEnv";
|
|
2
|
-
export declare const LocalScope = "local";
|
|
3
|
-
/**
|
|
4
|
-
* Used to represent usual R scopes
|
|
5
|
-
*/
|
|
6
|
-
export type DataflowScopeName = /** default R global environment */ typeof GlobalScope | /** unspecified automatic local environment */ typeof LocalScope | /** named environments */ string;
|
package/dataflow/graph/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./graph"), exports);
|
|
18
|
-
__exportStar(require("./edge"), exports);
|
|
19
|
-
__exportStar(require("./vertex"), exports);
|
|
20
|
-
__exportStar(require("./diff"), exports);
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
package/dataflow/index.d.ts
DELETED
package/dataflow/index.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.dataflowLogger = void 0;
|
|
18
|
-
const log_1 = require("../util/log");
|
|
19
|
-
exports.dataflowLogger = log_1.log.getSubLogger({ name: 'dataflow' });
|
|
20
|
-
__exportStar(require("./graph"), exports);
|
|
21
|
-
__exportStar(require("./extractor"), exports);
|
|
22
|
-
__exportStar(require("./environments/environment"), exports);
|
|
23
|
-
__exportStar(require("../util/mermaid/dfg"), exports);
|
|
24
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DataflowGraph } from '../graph';
|
|
2
|
-
import type { REnvironmentInformation, IdentifierReference, DataflowScopeName } from '../environments';
|
|
3
|
-
import type { DataflowProcessorInformation } from '../processor';
|
|
4
|
-
/**
|
|
5
|
-
* Continuously updated during the dataflow analysis to hold the current state.
|
|
6
|
-
*/
|
|
7
|
-
export interface DataflowInformation {
|
|
8
|
-
/** Nodes that have not been identified as read or write and will be so on higher */
|
|
9
|
-
unknownReferences: IdentifierReference[];
|
|
10
|
-
/** Nodes which are read */
|
|
11
|
-
in: IdentifierReference[];
|
|
12
|
-
/** Nodes which are written to */
|
|
13
|
-
out: IdentifierReference[];
|
|
14
|
-
/** The current scope during the fold */
|
|
15
|
-
scope: DataflowScopeName;
|
|
16
|
-
/** Current environments used for name resolution, probably updated on the next expression-list processing */
|
|
17
|
-
environments: REnvironmentInformation;
|
|
18
|
-
/** The current constructed dataflow graph */
|
|
19
|
-
graph: DataflowGraph;
|
|
20
|
-
}
|
|
21
|
-
export declare function initializeCleanInfo<T>(data: DataflowProcessorInformation<T>): DataflowInformation;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.initializeCleanInfo = void 0;
|
|
4
|
-
const graph_1 = require("../graph");
|
|
5
|
-
function initializeCleanInfo(data) {
|
|
6
|
-
return {
|
|
7
|
-
unknownReferences: [],
|
|
8
|
-
in: [],
|
|
9
|
-
out: [],
|
|
10
|
-
scope: data.activeScope,
|
|
11
|
-
environments: data.environments,
|
|
12
|
-
graph: new graph_1.DataflowGraph()
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
exports.initializeCleanInfo = initializeCleanInfo;
|
|
16
|
-
//# sourceMappingURL=info.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ParentInformation, RAccess } from '../../../r-bridge';
|
|
2
|
-
import type { DataflowInformation } from '../info';
|
|
3
|
-
import type { DataflowProcessorInformation } from '../../processor';
|
|
4
|
-
export declare function processAccess<OtherInfo>(node: RAccess<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -1,53 +0,0 @@
|
|
|
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("../../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
|
-
const 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
|
-
const processedAccess = (0, processor_1.processDataflowFor)(access, data);
|
|
20
|
-
nextGraph.mergeWith(processedAccess.graph);
|
|
21
|
-
// outgoing.push()
|
|
22
|
-
// we link to *out* instead of *in*, as access uses arguments for parsing and the arguments are defined
|
|
23
|
-
for (const newIn of [...processedAccess.out, ...processedAccess.unknownReferences]) {
|
|
24
|
-
for (const accessedNode of accessedNodes) {
|
|
25
|
-
nextGraph.addEdge(accessedNode, newIn, graph_1.EdgeType.Reads, 'always');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
ingoing.push(...processedAccess.in, ...processedAccess.unknownReferences);
|
|
29
|
-
(0, environments_1.overwriteEnvironments)(environments, processedAccess.environments);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
/*
|
|
34
|
-
* keep active nodes in case of assignments etc.
|
|
35
|
-
* We make them maybe as a kind of hack.
|
|
36
|
-
* This way when using
|
|
37
|
-
* ```ts
|
|
38
|
-
* a[[1]] <- 3
|
|
39
|
-
* a[[2]] <- 4
|
|
40
|
-
* a
|
|
41
|
-
* ```
|
|
42
|
-
* the read for a will use both accesses as potential definitions and not just the last one!
|
|
43
|
-
*/
|
|
44
|
-
unknownReferences: (0, environments_1.makeAllMaybe)(processedAccessed.unknownReferences, nextGraph, environments),
|
|
45
|
-
in: ingoing,
|
|
46
|
-
out: outgoing,
|
|
47
|
-
environments: environments,
|
|
48
|
-
scope: data.activeScope,
|
|
49
|
-
graph: nextGraph
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
exports.processAccess = processAccess;
|
|
53
|
-
//# sourceMappingURL=access.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Processes a list of expressions joining their dataflow graphs accordingly.
|
|
3
|
-
* @module
|
|
4
|
-
*/
|
|
5
|
-
import type { DataflowInformation } from '../info';
|
|
6
|
-
import type { ParentInformation, RExpressionList } from '../../../r-bridge';
|
|
7
|
-
import type { DataflowProcessorInformation } from '../../processor';
|
|
8
|
-
export declare function processExpressionList<OtherInfo>(exprList: RExpressionList<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processExpressionList = void 0;
|
|
4
|
-
const info_1 = require("../info");
|
|
5
|
-
const r_bridge_1 = require("../../../r-bridge");
|
|
6
|
-
const processor_1 = require("../../processor");
|
|
7
|
-
const environments_1 = require("../../environments");
|
|
8
|
-
const linker_1 = require("../linker");
|
|
9
|
-
const defaultmap_1 = require("../../../util/defaultmap");
|
|
10
|
-
const graph_1 = require("../../graph");
|
|
11
|
-
const index_1 = require("../../index");
|
|
12
|
-
const assert_1 = require("../../../util/assert");
|
|
13
|
-
const dotDotDotAccess = /\.\.\d+/;
|
|
14
|
-
function linkReadNameToWriteIfPossible(read, data, environments, listEnvironments, remainingRead, nextGraph) {
|
|
15
|
-
const readName = dotDotDotAccess.test(read.name) ? '...' : read.name;
|
|
16
|
-
const probableTarget = (0, environments_1.resolveByName)(readName, data.activeScope, environments);
|
|
17
|
-
// record if at least one has not been defined
|
|
18
|
-
if (probableTarget === undefined || probableTarget.some(t => !listEnvironments.has(t.nodeId))) {
|
|
19
|
-
if (remainingRead.has(readName)) {
|
|
20
|
-
remainingRead.get(readName)?.push(read);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
remainingRead.set(readName, [read]);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// keep it, for we have no target, as read-ids are unique within same fold, this should work for same links
|
|
27
|
-
// we keep them if they are defined outside the current parent and maybe throw them away later
|
|
28
|
-
if (probableTarget === undefined) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
for (const target of probableTarget) {
|
|
32
|
-
// we can stick with maybe even if readId.attribute is always
|
|
33
|
-
nextGraph.addEdge(read, target, index_1.EdgeType.Reads, undefined, true);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function processNextExpression(currentElement, data, environments, listEnvironments, remainingRead, nextGraph) {
|
|
37
|
-
// all inputs that have not been written until know, are read!
|
|
38
|
-
for (const read of [...currentElement.in, ...currentElement.unknownReferences]) {
|
|
39
|
-
linkReadNameToWriteIfPossible(read, data, environments, listEnvironments, remainingRead, nextGraph);
|
|
40
|
-
}
|
|
41
|
-
// add same variable reads for deferred if they are read previously but not dependent
|
|
42
|
-
for (const writeTarget of currentElement.out) {
|
|
43
|
-
const writeName = writeTarget.name;
|
|
44
|
-
const resolved = (0, environments_1.resolveByName)(writeName, data.activeScope, environments);
|
|
45
|
-
if (resolved !== undefined) {
|
|
46
|
-
// write-write
|
|
47
|
-
for (const target of resolved) {
|
|
48
|
-
nextGraph.addEdge(target, writeTarget, index_1.EdgeType.SameDefDef, undefined, true);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function updateSideEffectsForCalledFunctions(calledEnvs, environments, nextGraph) {
|
|
54
|
-
for (const { functionCall, called } of calledEnvs) {
|
|
55
|
-
for (const calledFn of called) {
|
|
56
|
-
(0, assert_1.guard)(calledFn.tag === 'function-definition', 'called function must call a function definition');
|
|
57
|
-
// only merge the environments they have in common
|
|
58
|
-
let environment = calledFn.environment;
|
|
59
|
-
while (environment.level > environments.level) {
|
|
60
|
-
environment = (0, environments_1.popLocalEnvironment)(environment);
|
|
61
|
-
}
|
|
62
|
-
// update alle definitions to be defined at this function call
|
|
63
|
-
let current = environment.current;
|
|
64
|
-
while (current !== undefined) {
|
|
65
|
-
for (const definitions of current.memory.values()) {
|
|
66
|
-
for (const def of definitions) {
|
|
67
|
-
if (def.kind !== 'built-in-function') {
|
|
68
|
-
nextGraph.addEdge(def.nodeId, functionCall, index_1.EdgeType.SideEffectOnCall, def.used);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
current = current.parent;
|
|
73
|
-
}
|
|
74
|
-
// we update all definitions to be linked with teh corresponding function call
|
|
75
|
-
environments = (0, environments_1.overwriteEnvironments)(environments, environment);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return environments;
|
|
79
|
-
}
|
|
80
|
-
function processExpressionList(exprList, data) {
|
|
81
|
-
const expressions = exprList.children;
|
|
82
|
-
index_1.dataflowLogger.trace(`processing expression list with ${expressions.length} expressions`);
|
|
83
|
-
if (expressions.length === 0) {
|
|
84
|
-
return (0, info_1.initializeCleanInfo)(data);
|
|
85
|
-
}
|
|
86
|
-
let environments = data.environments;
|
|
87
|
-
// used to detect if a "write" happens within the same expression list
|
|
88
|
-
const listEnvironments = new Set();
|
|
89
|
-
const remainingRead = new Map();
|
|
90
|
-
const nextGraph = new graph_1.DataflowGraph();
|
|
91
|
-
const out = [];
|
|
92
|
-
let expressionCounter = 0;
|
|
93
|
-
let foundNextOrBreak = false;
|
|
94
|
-
for (const expression of expressions) {
|
|
95
|
-
index_1.dataflowLogger.trace(`processing expression ${++expressionCounter} of ${expressions.length}`);
|
|
96
|
-
// use the current environments for processing
|
|
97
|
-
data = { ...data, environments };
|
|
98
|
-
const processed = (0, processor_1.processDataflowFor)(expression, data);
|
|
99
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- seems to be a bug in eslint
|
|
100
|
-
if (!foundNextOrBreak) {
|
|
101
|
-
(0, r_bridge_1.visitAst)(expression, n => {
|
|
102
|
-
if (n.type === "RNext" /* RType.Next */ || n.type === "RBreak" /* RType.Break */) {
|
|
103
|
-
foundNextOrBreak = true;
|
|
104
|
-
}
|
|
105
|
-
return n.type === "RForLoop" /* RType.ForLoop */ || n.type === "RWhileLoop" /* RType.WhileLoop */ || n.type === "RRepeatLoop" /* RType.RepeatLoop */ || n.type === "RFunctionDefinition" /* RType.FunctionDefinition */;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
// 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
|
|
109
|
-
// update the environments for the next iteration with the previous writes
|
|
110
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- seems to be a bug in eslint
|
|
111
|
-
if (foundNextOrBreak) {
|
|
112
|
-
processed.out = (0, environments_1.makeAllMaybe)(processed.out, nextGraph, processed.environments);
|
|
113
|
-
processed.in = (0, environments_1.makeAllMaybe)(processed.in, nextGraph, processed.environments);
|
|
114
|
-
processed.unknownReferences = (0, environments_1.makeAllMaybe)(processed.unknownReferences, nextGraph, processed.environments);
|
|
115
|
-
}
|
|
116
|
-
nextGraph.mergeWith(processed.graph);
|
|
117
|
-
out.push(...processed.out);
|
|
118
|
-
index_1.dataflowLogger.trace(`expression ${expressionCounter} of ${expressions.length} has ${processed.unknownReferences.length} unknown nodes`);
|
|
119
|
-
processNextExpression(processed, data, environments, listEnvironments, remainingRead, nextGraph);
|
|
120
|
-
const functionCallIds = [...processed.graph.vertices(true)]
|
|
121
|
-
.filter(([_, info]) => info.tag === 'function-call');
|
|
122
|
-
const calledEnvs = (0, linker_1.linkFunctionCalls)(nextGraph, data.completeAst.idMap, functionCallIds, processed.graph);
|
|
123
|
-
environments = (0, environments_1.overwriteEnvironments)(environments, processed.environments);
|
|
124
|
-
// if the called function has global redefinitions, we have to keep them within our environment
|
|
125
|
-
environments = updateSideEffectsForCalledFunctions(calledEnvs, environments, nextGraph);
|
|
126
|
-
for (const { nodeId } of processed.out) {
|
|
127
|
-
listEnvironments.add(nodeId);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
// now, we have to link same reads
|
|
131
|
-
(0, linker_1.linkReadVariablesInSameScopeWithNames)(nextGraph, new defaultmap_1.DefaultMap(() => [], remainingRead));
|
|
132
|
-
index_1.dataflowLogger.trace(`expression list exits with ${remainingRead.size} remaining read names`);
|
|
133
|
-
return {
|
|
134
|
-
/* no active nodes remain, they are consumed within the remaining read collection */
|
|
135
|
-
unknownReferences: [],
|
|
136
|
-
in: [...remainingRead.values()].flat(),
|
|
137
|
-
out,
|
|
138
|
-
environments,
|
|
139
|
-
scope: data.activeScope,
|
|
140
|
-
graph: nextGraph
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
exports.processExpressionList = processExpressionList;
|
|
144
|
-
//# sourceMappingURL=expression-list.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { DataflowInformation } from '../../info';
|
|
2
|
-
import type { DataflowProcessorInformation } from '../../../processor';
|
|
3
|
-
import type { ParentInformation, RArgument, RNode } from '../../../../r-bridge';
|
|
4
|
-
import { DataflowGraph } from '../../../graph';
|
|
5
|
-
import type { IdentifierReference } from '../../../environments';
|
|
6
|
-
export declare const UnnamedArgumentPrefix = "unnamed-argument-";
|
|
7
|
-
export declare function linkReadsForArgument<OtherInfo>(root: RNode<OtherInfo & ParentInformation>, ingoingRefs: IdentifierReference[], graph: DataflowGraph): void;
|
|
8
|
-
export declare function processFunctionArgument<OtherInfo>(argument: RArgument<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.retrieveExitPointsOfFunctionDefinition = void 0;
|
|
4
|
-
const assert_1 = require("../../../../util/assert");
|
|
5
|
-
function retrieveExitPointsOfFunctionDefinition(functionDefinition) {
|
|
6
|
-
const exitPoints = visitExitPoints(functionDefinition.body);
|
|
7
|
-
return exitPoints.knownIds.concat(exitPoints.potentialIds);
|
|
8
|
-
}
|
|
9
|
-
exports.retrieveExitPointsOfFunctionDefinition = retrieveExitPointsOfFunctionDefinition;
|
|
10
|
-
function visitExitPoints(node) {
|
|
11
|
-
const type = node.type;
|
|
12
|
-
switch (type) {
|
|
13
|
-
case "RExpressionList" /* RType.ExpressionList */:
|
|
14
|
-
return visitExpressionList(node);
|
|
15
|
-
case "RFunctionCall" /* RType.FunctionCall */:
|
|
16
|
-
if (node.flavor === 'named' && node.functionName.content === 'return') {
|
|
17
|
-
return {
|
|
18
|
-
knownIds: [node.info.id],
|
|
19
|
-
potentialIds: []
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
break;
|
|
23
|
-
case "RFunctionDefinition" /* RType.FunctionDefinition */:
|
|
24
|
-
// do not further investigate
|
|
25
|
-
break;
|
|
26
|
-
case "RForLoop" /* RType.ForLoop */:
|
|
27
|
-
case "RWhileLoop" /* RType.WhileLoop */:
|
|
28
|
-
case "RRepeatLoop" /* RType.RepeatLoop */:
|
|
29
|
-
// loops return invisible null, as we do not trace values, but they may contain return statements
|
|
30
|
-
return visitLoops(node);
|
|
31
|
-
case "RIfThenElse" /* RType.IfThenElse */:
|
|
32
|
-
return visitIf(node);
|
|
33
|
-
case "RPipe" /* RType.Pipe */:
|
|
34
|
-
case "RBinaryOp" /* RType.BinaryOp */:
|
|
35
|
-
// assignments return invisible rhs
|
|
36
|
-
return knownIdsOfChildren(node.info.id, node.lhs, node.rhs);
|
|
37
|
-
case "RUnaryOp" /* RType.UnaryOp */:
|
|
38
|
-
return knownIdsOfChildren(node.info.id, node.operand);
|
|
39
|
-
case "RParameter" /* RType.Parameter */:
|
|
40
|
-
return node.defaultValue ? knownIdsOfChildren(node.info.id, node.defaultValue) : { knownIds: [], potentialIds: [] };
|
|
41
|
-
case "RArgument" /* RType.Argument */:
|
|
42
|
-
return node.value ? knownIdsOfChildren(node.info.id, node.value) : { knownIds: [], potentialIds: [] };
|
|
43
|
-
case "RSymbol" /* RType.Symbol */:
|
|
44
|
-
case "RLogical" /* RType.Logical */:
|
|
45
|
-
case "RNumber" /* RType.Number */:
|
|
46
|
-
case "RString" /* RType.String */:
|
|
47
|
-
case "RAccess" /* RType.Access */:
|
|
48
|
-
// just use this node
|
|
49
|
-
break;
|
|
50
|
-
// contain noting to return/return `invisible(null)`
|
|
51
|
-
case "RComment" /* RType.Comment */:
|
|
52
|
-
case "RLineDirective" /* RType.LineDirective */:
|
|
53
|
-
case "RBreak" /* RType.Break */:
|
|
54
|
-
case "RNext" /* RType.Next */:
|
|
55
|
-
return { knownIds: [], potentialIds: [] };
|
|
56
|
-
default:
|
|
57
|
-
(0, assert_1.assertUnreachable)(type);
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
knownIds: [],
|
|
61
|
-
potentialIds: [node.info.id]
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
// we use keepSelfAsPotential in order to track nodes like 2 + 3, which keep themselves as potential exit points if there are no knownIds
|
|
65
|
-
function knownIdsOfChildren(keepSelfAsPotential, ...children) {
|
|
66
|
-
const knownIds = children.flatMap(child => visitExitPoints(child).knownIds);
|
|
67
|
-
return {
|
|
68
|
-
knownIds,
|
|
69
|
-
potentialIds: knownIds.length === 0 ? [keepSelfAsPotential] : []
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
function visitLoops(loop) {
|
|
73
|
-
const result = visitExitPoints(loop.body);
|
|
74
|
-
// conditions may contain return statements which we have to keep
|
|
75
|
-
let otherKnownIds = [];
|
|
76
|
-
if (loop.type === "RForLoop" /* RType.ForLoop */) {
|
|
77
|
-
otherKnownIds = visitExitPoints(loop.variable).knownIds;
|
|
78
|
-
otherKnownIds.push(...visitExitPoints(loop.vector).knownIds);
|
|
79
|
-
}
|
|
80
|
-
else if (loop.type === "RWhileLoop" /* RType.WhileLoop */) {
|
|
81
|
-
otherKnownIds = visitExitPoints(loop.condition).knownIds;
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
knownIds: [...result.knownIds, ...otherKnownIds],
|
|
85
|
-
potentialIds: []
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
function visitExpressionList(node) {
|
|
89
|
-
const known = [];
|
|
90
|
-
let lastPotentialIds = [];
|
|
91
|
-
// we only keep the potential ids of the last expression, which is no comment
|
|
92
|
-
for (const child of node.children) {
|
|
93
|
-
const { knownIds, potentialIds } = visitExitPoints(child);
|
|
94
|
-
known.push(...knownIds);
|
|
95
|
-
if (child.type !== "RComment" /* RType.Comment */) {
|
|
96
|
-
lastPotentialIds = potentialIds;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return {
|
|
100
|
-
knownIds: known,
|
|
101
|
-
potentialIds: lastPotentialIds
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function visitIf(node) {
|
|
105
|
-
// conditions can contain return statements
|
|
106
|
-
const known = visitExitPoints(node.condition).knownIds;
|
|
107
|
-
const potential = [];
|
|
108
|
-
const thenCase = visitExitPoints(node.then);
|
|
109
|
-
known.push(...thenCase.knownIds);
|
|
110
|
-
potential.push(...thenCase.potentialIds);
|
|
111
|
-
if (node.otherwise !== undefined) {
|
|
112
|
-
const otherwiseCase = visitExitPoints(node.otherwise);
|
|
113
|
-
known.push(...otherwiseCase.knownIds);
|
|
114
|
-
potential.push(...otherwiseCase.potentialIds);
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
knownIds: known,
|
|
118
|
-
potentialIds: potential
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=exit-points.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { DataflowInformation } from '../../info';
|
|
2
|
-
import type { DataflowProcessorInformation } from '../../../processor';
|
|
3
|
-
import type { ParentInformation, RFunctionCall } from '../../../../r-bridge';
|
|
4
|
-
export declare const UnnamedFunctionCallPrefix = "unnamed-function-call-";
|
|
5
|
-
export declare function processFunctionCall<OtherInfo>(functionCall: RFunctionCall<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|