@eagleoutice/flowr 1.5.2 → 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,26 +1,27 @@
|
|
|
1
|
-
import type { DataflowGraph, DataflowGraphVertexInfo, FunctionArgument } from '../graph';
|
|
2
|
-
import type { DataflowScopeName, IdentifierReference, REnvironmentInformation } from '../environments';
|
|
3
1
|
import { DefaultMap } from '../../util/defaultmap';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
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 { DataflowGraph, FunctionArgument } from '../graph/graph';
|
|
5
|
+
import type { RParameter } from '../../r-bridge/lang-4.x/ast/model/nodes/r-parameter';
|
|
6
|
+
import type { AstIdMap, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
7
|
+
import type { DataflowGraphVertexInfo } from '../graph/vertex';
|
|
8
|
+
import type { REnvironmentInformation } from '../environments/environment';
|
|
6
9
|
export type NameIdMap = DefaultMap<string, IdentifierReference[]>;
|
|
7
10
|
export declare function produceNameSharedIdMap(references: IdentifierReference[]): NameIdMap;
|
|
8
|
-
export declare function linkReadVariablesInSameScopeWithNames(graph: DataflowGraph, nameIdShares: DefaultMap<string, IdentifierReference[]>): void;
|
|
9
11
|
export declare function linkArgumentsOnCall(args: FunctionArgument[], params: RParameter<ParentInformation>[], graph: DataflowGraph): void;
|
|
10
12
|
/**
|
|
11
13
|
* Returns the called functions within the current graph, which can be used to merge the environments with the call.
|
|
12
14
|
* Furthermore, it links the corresponding arguments.
|
|
13
15
|
*/
|
|
14
|
-
export declare function linkFunctionCalls(graph: DataflowGraph, idMap:
|
|
16
|
+
export declare function linkFunctionCalls(graph: DataflowGraph, idMap: AstIdMap, thisGraph: DataflowGraph): {
|
|
15
17
|
functionCall: NodeId;
|
|
16
|
-
called: DataflowGraphVertexInfo[];
|
|
18
|
+
called: readonly DataflowGraphVertexInfo[];
|
|
17
19
|
}[];
|
|
18
20
|
export declare function getAllLinkedFunctionDefinitions(functionDefinitionReadIds: Set<NodeId>, dataflowGraph: DataflowGraph): Map<NodeId, DataflowGraphVertexInfo>;
|
|
19
21
|
/**
|
|
20
22
|
* This method links a set of read variables to definitions in an environment.
|
|
21
23
|
*
|
|
22
24
|
* @param referencesToLinkAgainstEnvironment - The set of references to link against the environment
|
|
23
|
-
* @param scope - The scope in which the linking shall happen (probably the active scope of {@link DataflowProcessorInformation})
|
|
24
25
|
* @param environmentInformation - The environment information to link against
|
|
25
26
|
* @param givenInputs - The existing list of inputs that might be extended
|
|
26
27
|
* @param graph - The graph to enter the found links
|
|
@@ -28,7 +29,7 @@ export declare function getAllLinkedFunctionDefinitions(functionDefinitionReadId
|
|
|
28
29
|
*
|
|
29
30
|
* @returns the given inputs, possibly extended with the remaining inputs (those of `referencesToLinkAgainstEnvironment` that could not be linked against the environment)
|
|
30
31
|
*/
|
|
31
|
-
export declare function linkInputs(referencesToLinkAgainstEnvironment: IdentifierReference[],
|
|
32
|
+
export declare function linkInputs(referencesToLinkAgainstEnvironment: readonly IdentifierReference[], environmentInformation: REnvironmentInformation, givenInputs: IdentifierReference[], graph: DataflowGraph, maybeForRemaining: boolean): IdentifierReference[];
|
|
32
33
|
/** all loops variables which are open read (not already bound by a redefinition within the loop) get a maybe read marker to their last definition within the loop
|
|
33
34
|
* e.g. with:
|
|
34
35
|
* ```R
|
|
@@ -38,4 +39,4 @@ export declare function linkInputs(referencesToLinkAgainstEnvironment: Identifie
|
|
|
38
39
|
* ```
|
|
39
40
|
* `x_2` must get a read marker to `x_1` as `x_1` is the active redefinition in the second loop iteration.
|
|
40
41
|
*/
|
|
41
|
-
export declare function linkCircularRedefinitionsWithinALoop(graph: DataflowGraph, openIns: NameIdMap, outgoing: IdentifierReference[]): void;
|
|
42
|
+
export declare function linkCircularRedefinitionsWithinALoop(graph: DataflowGraph, openIns: NameIdMap, outgoing: readonly IdentifierReference[]): void;
|
|
@@ -1,97 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.linkCircularRedefinitionsWithinALoop = exports.linkInputs = exports.getAllLinkedFunctionDefinitions = exports.linkFunctionCalls = exports.linkArgumentsOnCall = exports.
|
|
4
|
-
const environments_1 = require("../environments");
|
|
3
|
+
exports.linkCircularRedefinitionsWithinALoop = exports.linkInputs = exports.getAllLinkedFunctionDefinitions = exports.linkFunctionCalls = exports.linkArgumentsOnCall = exports.produceNameSharedIdMap = void 0;
|
|
5
4
|
const defaultmap_1 = require("../../util/defaultmap");
|
|
6
5
|
const assert_1 = require("../../util/assert");
|
|
7
6
|
const log_1 = require("../../util/log");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
const node_id_1 = require("../../r-bridge/lang-4.x/ast/model/processing/node-id");
|
|
8
|
+
const graph_1 = require("../graph/graph");
|
|
9
|
+
const logger_1 = require("../logger");
|
|
10
|
+
const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
11
|
+
const edge_1 = require("../graph/edge");
|
|
12
|
+
const resolve_by_name_1 = require("../environments/resolve-by-name");
|
|
13
|
+
const built_in_1 = require("../environments/built-in");
|
|
14
|
+
const static_slicer_1 = require("../../slicing/static/static-slicer");
|
|
16
15
|
function produceNameSharedIdMap(references) {
|
|
17
16
|
const nameIdShares = new defaultmap_1.DefaultMap(() => []);
|
|
18
17
|
for (const reference of references) {
|
|
19
|
-
|
|
18
|
+
if (reference.name) {
|
|
19
|
+
nameIdShares.get(reference.name).push(reference);
|
|
20
|
+
}
|
|
20
21
|
}
|
|
21
22
|
return nameIdShares;
|
|
22
23
|
}
|
|
23
24
|
exports.produceNameSharedIdMap = produceNameSharedIdMap;
|
|
24
|
-
function linkReadVariablesInSameScopeWithNames(graph, nameIdShares) {
|
|
25
|
-
for (const ids of nameIdShares.values()) {
|
|
26
|
-
if (ids.length <= 1) {
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
const base = ids[0];
|
|
30
|
-
for (let i = 1; i < ids.length; i++) {
|
|
31
|
-
graph.addEdge(base.nodeId, ids[i].nodeId, index_1.EdgeType.SameReadRead, 'always', true);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.linkReadVariablesInSameScopeWithNames = linkReadVariablesInSameScopeWithNames;
|
|
36
|
-
function specialReturnFunction(info, graph, id) {
|
|
37
|
-
if (info.args.length > 1) {
|
|
38
|
-
index_1.dataflowLogger.error(`expected up to one argument for return, but got ${info.args.length}`);
|
|
39
|
-
}
|
|
40
|
-
for (const arg of info.args) {
|
|
41
|
-
if (Array.isArray(arg)) {
|
|
42
|
-
if (arg[1] !== '<value>') {
|
|
43
|
-
graph.addEdge(id, arg[1], index_1.EdgeType.Returns, 'always');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else if (arg !== '<value>') {
|
|
47
|
-
graph.addEdge(id, arg, index_1.EdgeType.Returns, 'always');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
25
|
function linkArgumentsOnCall(args, params, graph) {
|
|
52
|
-
const nameArgMap = new Map(args.filter(
|
|
26
|
+
const nameArgMap = new Map(args.filter(graph_1.isNamedArgument).map(a => [a.name, a]));
|
|
53
27
|
const nameParamMap = new Map(params.map(p => [p.name.content, p]));
|
|
54
28
|
const specialDotParameter = params.find(p => p.special);
|
|
55
29
|
// all parameters matched by name
|
|
56
30
|
const matchedParameters = new Set();
|
|
57
31
|
// first map names
|
|
58
32
|
for (const [name, arg] of nameArgMap) {
|
|
59
|
-
if (arg === '<value>') {
|
|
60
|
-
index_1.dataflowLogger.trace(`skipping value argument for ${name}`);
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
33
|
const param = nameParamMap.get(name);
|
|
64
34
|
if (param !== undefined) {
|
|
65
|
-
|
|
66
|
-
graph.addEdge(arg.nodeId, param.name.info.id,
|
|
35
|
+
logger_1.dataflowLogger.trace(`mapping named argument "${name}" to parameter "${param.name.content}"`);
|
|
36
|
+
graph.addEdge(arg.nodeId, param.name.info.id, { type: 16 /* EdgeType.DefinesOnCall */ });
|
|
67
37
|
matchedParameters.add(name);
|
|
68
38
|
}
|
|
69
39
|
else if (specialDotParameter !== undefined) {
|
|
70
|
-
|
|
71
|
-
graph.addEdge(arg.nodeId, specialDotParameter.name.info.id,
|
|
40
|
+
logger_1.dataflowLogger.trace(`mapping named argument "${name}" to dot-dot-dot parameter`);
|
|
41
|
+
graph.addEdge(arg.nodeId, specialDotParameter.name.info.id, { type: 16 /* EdgeType.DefinesOnCall */ });
|
|
72
42
|
}
|
|
73
43
|
}
|
|
74
44
|
const remainingParameter = params.filter(p => !matchedParameters.has(p.name.content));
|
|
75
|
-
const remainingArguments = args.filter(a => !
|
|
45
|
+
const remainingArguments = args.filter(a => !(0, graph_1.isNamedArgument)(a));
|
|
76
46
|
for (let i = 0; i < remainingArguments.length; i++) {
|
|
77
47
|
const arg = remainingArguments[i];
|
|
78
|
-
if (arg ===
|
|
79
|
-
|
|
48
|
+
if (arg === r_function_call_1.EmptyArgument) {
|
|
49
|
+
logger_1.dataflowLogger.trace(`skipping value argument for ${i}`);
|
|
80
50
|
continue;
|
|
81
51
|
}
|
|
82
52
|
if (remainingParameter.length <= i) {
|
|
83
53
|
if (specialDotParameter !== undefined) {
|
|
84
|
-
|
|
85
|
-
graph.addEdge(arg.nodeId, specialDotParameter.name.info.id,
|
|
54
|
+
logger_1.dataflowLogger.trace(`mapping unnamed argument ${i} (id: ${arg.nodeId}) to dot-dot-dot parameter`);
|
|
55
|
+
graph.addEdge(arg.nodeId, specialDotParameter.name.info.id, { type: 16 /* EdgeType.DefinesOnCall */ });
|
|
86
56
|
}
|
|
87
57
|
else {
|
|
88
|
-
|
|
58
|
+
logger_1.dataflowLogger.error(`skipping argument ${i} as there is no corresponding parameter - R should block that`);
|
|
89
59
|
}
|
|
90
60
|
continue;
|
|
91
61
|
}
|
|
92
62
|
const param = remainingParameter[i];
|
|
93
|
-
|
|
94
|
-
graph.addEdge(arg.nodeId, param.name.info.id,
|
|
63
|
+
logger_1.dataflowLogger.trace(`mapping unnamed argument ${i} (id: ${arg.nodeId}) to parameter "${param.name.content}"`);
|
|
64
|
+
graph.addEdge(arg.nodeId, param.name.info.id, { type: 16 /* EdgeType.DefinesOnCall */ });
|
|
95
65
|
}
|
|
96
66
|
}
|
|
97
67
|
exports.linkArgumentsOnCall = linkArgumentsOnCall;
|
|
@@ -99,42 +69,48 @@ function linkFunctionCallArguments(targetId, idMap, functionCallName, functionRo
|
|
|
99
69
|
// we get them by just choosing the rhs of the definition
|
|
100
70
|
const linkedFunction = idMap.get(targetId);
|
|
101
71
|
if (linkedFunction === undefined) {
|
|
102
|
-
|
|
72
|
+
logger_1.dataflowLogger.trace(`no function definition found for ${functionCallName} (${functionRootId})`);
|
|
103
73
|
return;
|
|
104
74
|
}
|
|
105
75
|
if (linkedFunction.type !== "RFunctionDefinition" /* RType.FunctionDefinition */) {
|
|
106
|
-
|
|
76
|
+
logger_1.dataflowLogger.trace(`function call definition base ${functionCallName} does not lead to a function definition (${functionRootId}) but got ${linkedFunction.type}`);
|
|
107
77
|
return;
|
|
108
78
|
}
|
|
109
|
-
|
|
79
|
+
(0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `linking arguments for ${functionCallName} (${functionRootId}) to ${JSON.stringify(linkedFunction.location)}`);
|
|
110
80
|
linkArgumentsOnCall(callArgs, linkedFunction.parameters, finalGraph);
|
|
111
81
|
}
|
|
112
82
|
function linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefinitions) {
|
|
113
|
-
const edges = graph.
|
|
114
|
-
|
|
115
|
-
|
|
83
|
+
const edges = graph.outgoingEdges(id);
|
|
84
|
+
if (edges === undefined) {
|
|
85
|
+
/* no outgoing edges */
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const readBits = 1 /* EdgeType.Reads */ | 4 /* EdgeType.Calls */;
|
|
89
|
+
const functionDefinitionReadIds = [...edges].filter(([_, e]) => (0, edge_1.edgeDoesNotIncludeType)(e.types, 64 /* EdgeType.Argument */)
|
|
90
|
+
&& (0, edge_1.edgeIncludesType)(e.types, readBits)).map(([target, _]) => target);
|
|
116
91
|
const functionDefs = getAllLinkedFunctionDefinitions(new Set(functionDefinitionReadIds), graph);
|
|
117
92
|
for (const def of functionDefs.values()) {
|
|
118
|
-
(0, assert_1.guard)(def.tag ===
|
|
93
|
+
(0, assert_1.guard)(def.tag === "function-definition" /* VertexType.FunctionDefinition */, () => `expected function definition, but got ${def.tag}`);
|
|
119
94
|
if (info.environment !== undefined) {
|
|
120
|
-
// for each open ingoing reference, try to resolve it here, and if so add a read edge from the call to signal that it reads it
|
|
95
|
+
// for each open ingoing reference, try to resolve it here, and if so, add a read edge from the call to signal that it reads it
|
|
121
96
|
for (const ingoing of def.subflow.in) {
|
|
122
|
-
const defs = (0,
|
|
97
|
+
const defs = ingoing.name ? (0, resolve_by_name_1.resolveByName)(ingoing.name, info.environment) : undefined;
|
|
123
98
|
if (defs === undefined) {
|
|
124
99
|
continue;
|
|
125
100
|
}
|
|
126
101
|
for (const def of defs) {
|
|
127
|
-
graph.addEdge(id, def,
|
|
102
|
+
graph.addEdge(id, def, { type: 1 /* EdgeType.Reads */ });
|
|
128
103
|
}
|
|
129
104
|
}
|
|
130
105
|
}
|
|
131
106
|
const exitPoints = def.exitPoints;
|
|
132
107
|
for (const exitPoint of exitPoints) {
|
|
133
|
-
graph.addEdge(id, exitPoint,
|
|
108
|
+
graph.addEdge(id, exitPoint, { type: 8 /* EdgeType.Returns */ });
|
|
134
109
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
110
|
+
const defName = (0, node_id_1.recoverName)(def.id, idMap);
|
|
111
|
+
(0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `recording expression-list-level call from ${(0, node_id_1.recoverName)(info.id, idMap)} to ${defName}`);
|
|
112
|
+
graph.addEdge(id, def.id, { type: 4 /* EdgeType.Calls */ });
|
|
113
|
+
linkFunctionCallArguments(def.id, idMap, defName, id, info.args, graph);
|
|
138
114
|
}
|
|
139
115
|
if (thisGraph.isRoot(id)) {
|
|
140
116
|
calledFunctionDefinitions.push({ functionCall: id, called: [...functionDefs.values()] });
|
|
@@ -144,15 +120,11 @@ function linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefin
|
|
|
144
120
|
* Returns the called functions within the current graph, which can be used to merge the environments with the call.
|
|
145
121
|
* Furthermore, it links the corresponding arguments.
|
|
146
122
|
*/
|
|
147
|
-
function linkFunctionCalls(graph, idMap,
|
|
123
|
+
function linkFunctionCalls(graph, idMap, thisGraph) {
|
|
124
|
+
const functionCalls = [...thisGraph.vertices(true)]
|
|
125
|
+
.filter(([_, info]) => info.tag === "function-call" /* VertexType.FunctionCall */);
|
|
148
126
|
const calledFunctionDefinitions = [];
|
|
149
127
|
for (const [id, info] of functionCalls) {
|
|
150
|
-
(0, assert_1.guard)(info.tag === 'function-call', () => `encountered non-function call in function call linkage ${JSON.stringify(info)}`);
|
|
151
|
-
if (info.name === 'return') {
|
|
152
|
-
specialReturnFunction(info, graph, id);
|
|
153
|
-
graph.addEdge(id, environments_1.BuiltIn, index_1.EdgeType.Calls, 'always');
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
128
|
linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefinitions);
|
|
157
129
|
}
|
|
158
130
|
return calledFunctionDefinitions;
|
|
@@ -164,25 +136,26 @@ function getAllLinkedFunctionDefinitions(functionDefinitionReadIds, dataflowGrap
|
|
|
164
136
|
const result = new Map();
|
|
165
137
|
while (potential.length > 0) {
|
|
166
138
|
const currentId = potential.pop();
|
|
167
|
-
if (currentId ===
|
|
139
|
+
if (currentId === built_in_1.BuiltIn) {
|
|
168
140
|
// do not traverse builtins
|
|
169
|
-
|
|
141
|
+
static_slicer_1.slicerLogger.trace('skipping builtin function definition during collection');
|
|
170
142
|
continue;
|
|
171
143
|
}
|
|
172
144
|
const currentInfo = dataflowGraph.get(currentId, true);
|
|
173
145
|
if (currentInfo === undefined) {
|
|
174
|
-
|
|
146
|
+
static_slicer_1.slicerLogger.trace('skipping unknown link');
|
|
175
147
|
continue;
|
|
176
148
|
}
|
|
177
149
|
visited.add(currentId);
|
|
178
150
|
const outgoingEdges = [...currentInfo[1]];
|
|
179
|
-
const returnEdges = outgoingEdges.filter(([_, e]) => e.types
|
|
151
|
+
const returnEdges = outgoingEdges.filter(([_, e]) => (0, edge_1.edgeIncludesType)(e.types, 8 /* EdgeType.Returns */));
|
|
180
152
|
if (returnEdges.length > 0) {
|
|
181
|
-
// only traverse return edges and do not follow calls etc. as this indicates that we have a function call which returns a result, and not the function
|
|
153
|
+
// only traverse return edges and do not follow `calls` etc. as this indicates that we have a function call which returns a result, and not the function calls itself
|
|
182
154
|
potential.push(...returnEdges.map(([target]) => target).filter(id => !visited.has(id)));
|
|
183
155
|
continue;
|
|
184
156
|
}
|
|
185
|
-
const
|
|
157
|
+
const followBits = 1 /* EdgeType.Reads */ | 2 /* EdgeType.DefinedBy */ | 32 /* EdgeType.DefinedByOnCall */;
|
|
158
|
+
const followEdges = outgoingEdges.filter(([_, e]) => (0, edge_1.edgeIncludesType)(e.types, followBits));
|
|
186
159
|
if (currentInfo[0].subflow !== undefined) {
|
|
187
160
|
result.set(currentId, currentInfo[0]);
|
|
188
161
|
}
|
|
@@ -196,7 +169,6 @@ exports.getAllLinkedFunctionDefinitions = getAllLinkedFunctionDefinitions;
|
|
|
196
169
|
* This method links a set of read variables to definitions in an environment.
|
|
197
170
|
*
|
|
198
171
|
* @param referencesToLinkAgainstEnvironment - The set of references to link against the environment
|
|
199
|
-
* @param scope - The scope in which the linking shall happen (probably the active scope of {@link DataflowProcessorInformation})
|
|
200
172
|
* @param environmentInformation - The environment information to link against
|
|
201
173
|
* @param givenInputs - The existing list of inputs that might be extended
|
|
202
174
|
* @param graph - The graph to enter the found links
|
|
@@ -204,20 +176,20 @@ exports.getAllLinkedFunctionDefinitions = getAllLinkedFunctionDefinitions;
|
|
|
204
176
|
*
|
|
205
177
|
* @returns the given inputs, possibly extended with the remaining inputs (those of `referencesToLinkAgainstEnvironment` that could not be linked against the environment)
|
|
206
178
|
*/
|
|
207
|
-
function linkInputs(referencesToLinkAgainstEnvironment,
|
|
179
|
+
function linkInputs(referencesToLinkAgainstEnvironment, environmentInformation, givenInputs, graph, maybeForRemaining) {
|
|
208
180
|
for (const bodyInput of referencesToLinkAgainstEnvironment) {
|
|
209
|
-
const probableTarget = (0,
|
|
181
|
+
const probableTarget = bodyInput.name ? (0, resolve_by_name_1.resolveByName)(bodyInput.name, environmentInformation) : undefined;
|
|
210
182
|
if (probableTarget === undefined) {
|
|
211
|
-
log_1.log.trace(`found no target for ${bodyInput.name}
|
|
183
|
+
log_1.log.trace(`found no target for ${bodyInput.name}`);
|
|
212
184
|
if (maybeForRemaining) {
|
|
213
|
-
bodyInput.
|
|
185
|
+
bodyInput.controlDependencies ??= [];
|
|
214
186
|
}
|
|
215
187
|
givenInputs.push(bodyInput);
|
|
216
188
|
}
|
|
217
189
|
else {
|
|
218
190
|
for (const target of probableTarget) {
|
|
219
191
|
// we can stick with maybe even if readId.attribute is always
|
|
220
|
-
graph.addEdge(bodyInput, target,
|
|
192
|
+
graph.addEdge(bodyInput, target, { type: 1 /* EdgeType.Reads */ });
|
|
221
193
|
}
|
|
222
194
|
}
|
|
223
195
|
}
|
|
@@ -239,13 +211,15 @@ function linkCircularRedefinitionsWithinALoop(graph, openIns, outgoing) {
|
|
|
239
211
|
// this implicitly assumes that the outgoing references are ordered
|
|
240
212
|
const lastOutgoing = new Map();
|
|
241
213
|
for (const out of outgoing) {
|
|
242
|
-
|
|
214
|
+
if (out.name) {
|
|
215
|
+
lastOutgoing.set(out.name, out);
|
|
216
|
+
}
|
|
243
217
|
}
|
|
244
218
|
for (const [name, targets] of openIns.entries()) {
|
|
245
219
|
for (const out of lastOutgoing.values()) {
|
|
246
220
|
if (out.name === name) {
|
|
247
221
|
for (const target of targets) {
|
|
248
|
-
graph.addEdge(target.nodeId, out.nodeId,
|
|
222
|
+
graph.addEdge(target.nodeId, out.nodeId, { type: 1 /* EdgeType.Reads */ });
|
|
249
223
|
}
|
|
250
224
|
}
|
|
251
225
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RNode } from '../../../../../../r-bridge/lang-4.x/ast/model/model';
|
|
2
|
+
import type { AstIdMap, ParentInformation } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
3
|
+
import { EmptyArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
4
|
+
import type { RUnnamedArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-argument';
|
|
5
|
+
export declare function toUnnamedArgument<OtherInfo>(node: RNode<OtherInfo & ParentInformation> | undefined, idMap: AstIdMap<OtherInfo>): RUnnamedArgument<OtherInfo & ParentInformation> | typeof EmptyArgument;
|
|
6
|
+
export declare function wrapArgumentsUnnamed<OtherInfo>(nodes: readonly (RNode<OtherInfo & ParentInformation> | typeof EmptyArgument | undefined)[], idMap: AstIdMap<OtherInfo>): ("<>" | import("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-argument").RArgument<OtherInfo & ParentInformation>)[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapArgumentsUnnamed = exports.toUnnamedArgument = void 0;
|
|
4
|
+
const range_1 = require("../../../../../../util/range");
|
|
5
|
+
const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
6
|
+
const voidRange = (0, range_1.rangeFrom)(-1, -1, -1, -1);
|
|
7
|
+
function toUnnamedArgument(node, idMap) {
|
|
8
|
+
if (node === undefined) {
|
|
9
|
+
return r_function_call_1.EmptyArgument;
|
|
10
|
+
}
|
|
11
|
+
const arg = {
|
|
12
|
+
type: "RArgument" /* RType.Argument */,
|
|
13
|
+
lexeme: node.lexeme ?? '',
|
|
14
|
+
// is this correct?
|
|
15
|
+
location: node.location ?? voidRange,
|
|
16
|
+
info: {
|
|
17
|
+
...node.info,
|
|
18
|
+
id: node.info.id + '-arg'
|
|
19
|
+
},
|
|
20
|
+
name: undefined,
|
|
21
|
+
value: node
|
|
22
|
+
};
|
|
23
|
+
idMap.set(arg.info.id, node);
|
|
24
|
+
return arg;
|
|
25
|
+
}
|
|
26
|
+
exports.toUnnamedArgument = toUnnamedArgument;
|
|
27
|
+
function wrapArgumentsUnnamed(nodes, idMap) {
|
|
28
|
+
return nodes.map(n => n === r_function_call_1.EmptyArgument || n?.type === "RArgument" /* RType.Argument */ ? n : toUnnamedArgument(n, idMap));
|
|
29
|
+
}
|
|
30
|
+
exports.wrapArgumentsUnnamed = wrapArgumentsUnnamed;
|
|
31
|
+
//# sourceMappingURL=make-argument.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
2
|
+
import type { RNode } from '../../../../../../r-bridge/lang-4.x/ast/model/model';
|
|
3
|
+
export declare function unpackArgument<OtherInfo>(arg: RFunctionArgument<OtherInfo>): RNode<OtherInfo> | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unpackArgument = void 0;
|
|
4
|
+
const log_1 = require("../../../../../../util/log");
|
|
5
|
+
const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
6
|
+
function unpackArgument(arg) {
|
|
7
|
+
if (arg === r_function_call_1.EmptyArgument) {
|
|
8
|
+
log_1.log.trace('Argument is empty, skipping');
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
else if (arg.name !== undefined) {
|
|
12
|
+
log_1.log.trace(`Argument ${JSON.stringify(arg)} is not unnamed, skipping`);
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return arg.value;
|
|
16
|
+
}
|
|
17
|
+
exports.unpackArgument = unpackArgument;
|
|
18
|
+
//# sourceMappingURL=unpack-argument.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DataflowProcessorInformation } from '../../../../../processor';
|
|
2
|
+
import type { DataflowInformation } from '../../../../../info';
|
|
3
|
+
import type { ParentInformation } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
4
|
+
import type { RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
5
|
+
import type { RSymbol } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
6
|
+
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
7
|
+
export declare function processAccess<OtherInfo>(name: RSymbol<OtherInfo & ParentInformation>, args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], rootId: NodeId, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, config: {
|
|
8
|
+
treatIndicesAsString: boolean;
|
|
9
|
+
}): DataflowInformation;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processAccess = void 0;
|
|
4
|
+
const assert_1 = require("../../../../../../util/assert");
|
|
5
|
+
const known_call_handling_1 = require("../known-call-handling");
|
|
6
|
+
const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
7
|
+
const logger_1 = require("../../../../../logger");
|
|
8
|
+
const environment_1 = require("../../../../../environments/environment");
|
|
9
|
+
function processAccess(name, args, rootId, data, config) {
|
|
10
|
+
if (args.length < 2) {
|
|
11
|
+
logger_1.dataflowLogger.warn(`Access ${name.content} has less than 2 arguments, skipping`);
|
|
12
|
+
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data }).information;
|
|
13
|
+
}
|
|
14
|
+
const head = args[0];
|
|
15
|
+
(0, assert_1.guard)(head !== r_function_call_1.EmptyArgument, () => `Access ${name.content} has no source, impossible!`);
|
|
16
|
+
let fnCall;
|
|
17
|
+
if (!config.treatIndicesAsString) {
|
|
18
|
+
fnCall = (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data });
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const newArgs = [...args];
|
|
22
|
+
// if the argument is a symbol, we convert it to a string for this perspective
|
|
23
|
+
for (let i = 1; i < newArgs.length; i++) {
|
|
24
|
+
const arg = newArgs[i];
|
|
25
|
+
if (arg !== r_function_call_1.EmptyArgument && arg.value?.type === "RSymbol" /* RType.Symbol */) {
|
|
26
|
+
newArgs[i] = {
|
|
27
|
+
...arg,
|
|
28
|
+
value: {
|
|
29
|
+
type: "RString" /* RType.String */,
|
|
30
|
+
info: arg.value.info,
|
|
31
|
+
lexeme: arg.value.lexeme,
|
|
32
|
+
location: arg.value.location,
|
|
33
|
+
content: {
|
|
34
|
+
quotes: 'none',
|
|
35
|
+
str: arg.value.lexeme
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
fnCall = (0, known_call_handling_1.processKnownFunctionCall)({ name, args: newArgs, rootId, data });
|
|
42
|
+
}
|
|
43
|
+
const info = fnCall.information;
|
|
44
|
+
info.graph.addEdge(name.info.id, fnCall.processedArguments[0]?.entryPoint ?? head.info.id, { type: 8 /* EdgeType.Returns */ });
|
|
45
|
+
/* access always reads all of its indices */
|
|
46
|
+
for (const arg of fnCall.processedArguments) {
|
|
47
|
+
if (arg !== undefined) {
|
|
48
|
+
info.graph.addEdge(name.info.id, arg.entryPoint, { type: 1 /* EdgeType.Reads */ });
|
|
49
|
+
}
|
|
50
|
+
if (config.treatIndicesAsString) {
|
|
51
|
+
// everything but the first is disabled here
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
...info,
|
|
57
|
+
/*
|
|
58
|
+
* Keep active nodes in case of assignments etc.
|
|
59
|
+
* We make them maybe as a kind of hack.
|
|
60
|
+
* This way when using
|
|
61
|
+
* ```ts
|
|
62
|
+
* a[[1]] <- 3
|
|
63
|
+
* a[[2]] <- 4
|
|
64
|
+
* a
|
|
65
|
+
* ```
|
|
66
|
+
* the read for a will use both accesses as potential definitions and not just the last one!
|
|
67
|
+
*/
|
|
68
|
+
unknownReferences: (0, environment_1.makeAllMaybe)(info.unknownReferences, info.graph, info.environment, false),
|
|
69
|
+
entryPoint: rootId,
|
|
70
|
+
/** it is, to be precise, the accessed element we want to map to maybe */
|
|
71
|
+
in: info.in.map(ref => {
|
|
72
|
+
if (ref.nodeId === head.value?.info.id) {
|
|
73
|
+
return (0, environment_1.makeReferenceMaybe)(ref, info.graph, info.environment, false);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return ref;
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
exports.processAccess = processAccess;
|
|
82
|
+
//# sourceMappingURL=built-in-access.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DataflowProcessorInformation } from '../../../../../processor';
|
|
2
|
+
import type { DataflowInformation } from '../../../../../info';
|
|
3
|
+
import type { ParentInformation } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
4
|
+
import type { RNode } from '../../../../../../r-bridge/lang-4.x/ast/model/model';
|
|
5
|
+
import type { RSymbol } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
6
|
+
import type { RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
7
|
+
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
8
|
+
export interface AssignmentConfiguration {
|
|
9
|
+
readonly superAssignment?: boolean;
|
|
10
|
+
readonly swapSourceAndTarget?: boolean;
|
|
11
|
+
readonly makeMaybe?: boolean;
|
|
12
|
+
readonly quoteSource?: boolean;
|
|
13
|
+
readonly canBeReplacement?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Processes an assignment, i.e., `<target> <- <source>`.
|
|
17
|
+
* Handling it as a function call \`<-\` `(<target>, <source>)`.
|
|
18
|
+
* This includes handling of replacement functions (e.g., `names(x) <- ...` as \`names<-\` `(x, ...)`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function processAssignment<OtherInfo>(name: RSymbol<OtherInfo & ParentInformation>, args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], rootId: NodeId, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, config: AssignmentConfiguration): DataflowInformation;
|
|
21
|
+
export interface AssignmentToSymbolParameters<OtherInfo> extends AssignmentConfiguration {
|
|
22
|
+
readonly name: RSymbol<OtherInfo & ParentInformation>;
|
|
23
|
+
readonly source: RNode<OtherInfo & ParentInformation>;
|
|
24
|
+
readonly args: [DataflowInformation, DataflowInformation];
|
|
25
|
+
readonly target: RSymbol<OtherInfo & ParentInformation>;
|
|
26
|
+
readonly rootId: NodeId;
|
|
27
|
+
readonly data: DataflowProcessorInformation<OtherInfo>;
|
|
28
|
+
readonly information: DataflowInformation;
|
|
29
|
+
}
|