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