@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
package/dataflow/graph/diff.js
CHANGED
|
@@ -1,27 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.diffEdges = exports.diffVertices = exports.diffFunctionArguments = exports.equalFunctionArguments = exports.
|
|
4
|
-
const
|
|
5
|
-
const assert_1 = require("../../util/assert");
|
|
3
|
+
exports.diffEdges = exports.diffVertices = exports.diffFunctionArguments = exports.equalFunctionArguments = exports.diffOfDataflowGraphs = exports.DataflowDifferenceReport = void 0;
|
|
4
|
+
const graph_1 = require("./graph");
|
|
6
5
|
const diff_1 = require("../../util/diff");
|
|
7
6
|
const json_1 = require("../../util/json");
|
|
7
|
+
const arrays_1 = require("../../util/arrays");
|
|
8
|
+
const edge_1 = require("./edge");
|
|
9
|
+
const node_id_1 = require("../../r-bridge/lang-4.x/ast/model/processing/node-id");
|
|
10
|
+
const diff_2 = require("../environments/diff");
|
|
11
|
+
const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
8
12
|
class DataflowDifferenceReport {
|
|
9
13
|
_comments = undefined;
|
|
10
|
-
|
|
14
|
+
_problematic = undefined;
|
|
15
|
+
addComment(comment, ...related) {
|
|
11
16
|
if (this._comments === undefined) {
|
|
12
17
|
this._comments = [comment];
|
|
13
18
|
}
|
|
14
19
|
else {
|
|
15
20
|
this._comments.push(comment);
|
|
16
21
|
}
|
|
22
|
+
if (related.length > 0) {
|
|
23
|
+
if (this._problematic === undefined) {
|
|
24
|
+
this._problematic = [...related];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this._problematic.push(...related);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
17
30
|
}
|
|
18
31
|
comments() {
|
|
19
32
|
return this._comments;
|
|
20
33
|
}
|
|
34
|
+
problematic() {
|
|
35
|
+
return this._problematic;
|
|
36
|
+
}
|
|
21
37
|
isEqual() {
|
|
22
38
|
return this._comments === undefined;
|
|
23
39
|
}
|
|
24
40
|
}
|
|
41
|
+
exports.DataflowDifferenceReport = DataflowDifferenceReport;
|
|
25
42
|
function initDiffContext(left, right) {
|
|
26
43
|
return {
|
|
27
44
|
left: left.graph,
|
|
@@ -39,14 +56,20 @@ function diff(ctx) {
|
|
|
39
56
|
return true;
|
|
40
57
|
}
|
|
41
58
|
function diffOutgoingEdges(ctx) {
|
|
42
|
-
const lEdges = new Map(ctx.left.edges());
|
|
43
|
-
const rEdges = new Map(ctx.right.edges());
|
|
59
|
+
const lEdges = new Map([...ctx.left.edges()]);
|
|
60
|
+
const rEdges = new Map([...ctx.right.edges()]);
|
|
44
61
|
if (lEdges.size !== rEdges.size) {
|
|
45
|
-
ctx.report.addComment(`Detected different number of edges! ${ctx.leftname} has ${lEdges.size}, ${ctx.rightname} has ${rEdges.size}`);
|
|
62
|
+
ctx.report.addComment(`Detected different number of edges! ${ctx.leftname} has ${lEdges.size} (${JSON.stringify(lEdges, json_1.jsonReplacer)}). ${ctx.rightname} has ${rEdges.size} ${JSON.stringify(rEdges, json_1.jsonReplacer)}`);
|
|
46
63
|
}
|
|
47
64
|
for (const [id, edge] of lEdges) {
|
|
48
65
|
diffEdges(ctx, id, edge, rEdges.get(id));
|
|
49
66
|
}
|
|
67
|
+
// just to make it both ways in case the length differs
|
|
68
|
+
for (const [id, edge] of rEdges) {
|
|
69
|
+
if (!lEdges.has(id)) {
|
|
70
|
+
diffEdges(ctx, id, undefined, edge);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
50
73
|
}
|
|
51
74
|
function diffRootVertices(ctx) {
|
|
52
75
|
(0, diff_1.setDifference)(ctx.left.rootIds(), ctx.right.rootIds(), { ...ctx, position: `${ctx.position}Root vertices differ in graphs. ` });
|
|
@@ -60,146 +83,163 @@ function diffOfDataflowGraphs(left, right) {
|
|
|
60
83
|
return ctx.report;
|
|
61
84
|
}
|
|
62
85
|
exports.diffOfDataflowGraphs = diffOfDataflowGraphs;
|
|
63
|
-
function diffFunctionArgumentsReferences(a, b, ctx) {
|
|
86
|
+
function diffFunctionArgumentsReferences(fn, a, b, ctx) {
|
|
64
87
|
if (a === '<value>' || b === '<value>') {
|
|
65
88
|
if (a !== b) {
|
|
66
|
-
ctx.report.addComment(`${ctx.position}${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}
|
|
89
|
+
ctx.report.addComment(`${ctx.position}${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}`, { tag: 'vertex', id: fn });
|
|
67
90
|
}
|
|
68
91
|
return;
|
|
69
92
|
}
|
|
70
|
-
(0,
|
|
71
|
-
}
|
|
72
|
-
function equalExitPoints(a, b) {
|
|
73
|
-
if (a === undefined || b === undefined) {
|
|
74
|
-
return a === b;
|
|
75
|
-
}
|
|
76
|
-
if (a.length !== b.length) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
for (let i = 0; i < a.length; ++i) {
|
|
80
|
-
if (a[i] !== b[i]) {
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return true;
|
|
93
|
+
(0, diff_2.diffIdentifierReferences)(a, b, ctx);
|
|
85
94
|
}
|
|
86
|
-
|
|
87
|
-
function equalFunctionArguments(a, b) {
|
|
95
|
+
function equalFunctionArguments(fn, a, b) {
|
|
88
96
|
const ctx = {
|
|
89
97
|
report: new DataflowDifferenceReport(),
|
|
90
98
|
leftname: 'left',
|
|
91
99
|
rightname: 'right',
|
|
92
100
|
position: ''
|
|
93
101
|
};
|
|
94
|
-
diffFunctionArguments(a, b, ctx);
|
|
102
|
+
diffFunctionArguments(fn, a, b, ctx);
|
|
95
103
|
return ctx.report.isEqual();
|
|
96
104
|
}
|
|
97
105
|
exports.equalFunctionArguments = equalFunctionArguments;
|
|
98
|
-
function diffFunctionArguments(a, b, ctx) {
|
|
106
|
+
function diffFunctionArguments(fn, a, b, ctx) {
|
|
99
107
|
if (a === false || b === false) {
|
|
100
108
|
if (a !== b) {
|
|
101
|
-
ctx.report.addComment(`${ctx.position}${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}
|
|
109
|
+
ctx.report.addComment(`${ctx.position}${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}`, { tag: 'vertex', id: fn });
|
|
102
110
|
}
|
|
103
111
|
return;
|
|
104
112
|
}
|
|
105
113
|
else if (a.length !== b.length) {
|
|
106
|
-
ctx.report.addComment(`${ctx.position}Differs in number of arguments. ${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}
|
|
114
|
+
ctx.report.addComment(`${ctx.position}Differs in number of arguments. ${ctx.leftname}: ${JSON.stringify(a, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(b, json_1.jsonReplacer)}`, { tag: 'vertex', id: fn });
|
|
107
115
|
return;
|
|
108
116
|
}
|
|
109
117
|
for (let i = 0; i < a.length; ++i) {
|
|
110
118
|
const aArg = a[i];
|
|
111
119
|
const bArg = b[i];
|
|
112
|
-
if (
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
if (aArg === r_function_call_1.EmptyArgument || bArg === r_function_call_1.EmptyArgument) {
|
|
121
|
+
if (aArg !== bArg) {
|
|
122
|
+
ctx.report.addComment(`${ctx.position}In argument #${i} (of ${ctx.leftname}, empty) the argument differs: ${JSON.stringify(aArg)} vs ${JSON.stringify(bArg)}.`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else if ((0, graph_1.isNamedArgument)(aArg) && (0, graph_1.isNamedArgument)(bArg)) {
|
|
126
|
+
// must have the same name
|
|
127
|
+
if (aArg.name !== bArg.name) {
|
|
128
|
+
ctx.report.addComment(`${ctx.position}In argument #${i} (of ${ctx.leftname}, named) the name differs: ${aArg.name} vs ${bArg.name}.`);
|
|
116
129
|
continue;
|
|
117
130
|
}
|
|
118
|
-
diffFunctionArgumentsReferences(aArg
|
|
131
|
+
diffFunctionArgumentsReferences(fn, aArg, bArg, {
|
|
119
132
|
...ctx,
|
|
120
|
-
position: `${ctx.position} In
|
|
133
|
+
position: `${ctx.position} In argument #${i} (of ${ctx.leftname}, named). `
|
|
121
134
|
});
|
|
122
135
|
}
|
|
123
136
|
else {
|
|
124
|
-
|
|
137
|
+
if (aArg.name !== bArg.name) {
|
|
138
|
+
ctx.report.addComment(`${ctx.position}In argument #${i} (of ${ctx.leftname}, unnamed) the name differs: ${aArg.name} vs ${bArg.name}.`);
|
|
139
|
+
}
|
|
140
|
+
if (!(0, arrays_1.arrayEqual)(aArg.controlDependencies, bArg.controlDependencies)) {
|
|
141
|
+
ctx.report.addComment(`${ctx.position}In argument #${i} (of ${ctx.leftname}, unnamed) the control dependency differs: ${JSON.stringify(aArg.controlDependencies)} vs ${JSON.stringify(bArg.controlDependencies)}.`, { tag: 'vertex', id: fn });
|
|
142
|
+
}
|
|
125
143
|
}
|
|
126
144
|
}
|
|
127
145
|
}
|
|
128
146
|
exports.diffFunctionArguments = diffFunctionArguments;
|
|
129
147
|
function diffVertices(ctx) {
|
|
130
148
|
// collect vertices from both sides
|
|
131
|
-
const lVert = [...ctx.left.vertices(true)];
|
|
132
|
-
const rVert = [...ctx.right.vertices(true)];
|
|
149
|
+
const lVert = [...ctx.left.vertices(true)].map(([id, info]) => [id, info]);
|
|
150
|
+
const rVert = [...ctx.right.vertices(true)].map(([id, info]) => [id, info]);
|
|
133
151
|
if (lVert.length !== rVert.length) {
|
|
134
152
|
ctx.report.addComment(`Detected different number of vertices! ${ctx.leftname} has ${lVert.length}, ${ctx.rightname} has ${rVert.length}`);
|
|
135
153
|
}
|
|
136
154
|
for (const [id, lInfo] of lVert) {
|
|
137
155
|
const rInfoMay = ctx.right.get(id);
|
|
138
156
|
if (rInfoMay === undefined) {
|
|
139
|
-
ctx.report.addComment(`Vertex ${id} is not present in ${ctx.rightname}
|
|
157
|
+
ctx.report.addComment(`Vertex ${id} is not present in ${ctx.rightname}`, { tag: 'vertex', id });
|
|
140
158
|
continue;
|
|
141
159
|
}
|
|
142
160
|
const [rInfo] = rInfoMay;
|
|
143
161
|
if (lInfo.tag !== rInfo.tag) {
|
|
144
|
-
ctx.report.addComment(`Vertex ${id}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
ctx.report.addComment(`Vertex ${id}
|
|
162
|
+
ctx.report.addComment(`Vertex ${id} differs in tags. ${ctx.leftname}: ${lInfo.tag} vs. ${ctx.rightname}: ${rInfo.tag}`, { tag: 'vertex', id });
|
|
163
|
+
}
|
|
164
|
+
/* as names are optional, we have to recover the other name if at least one of them is no longer available */
|
|
165
|
+
if (lInfo.name !== undefined || rInfo.name !== undefined) {
|
|
166
|
+
const lname = lInfo.name ?? (0, node_id_1.recoverName)(id, ctx.left.idMap) ?? '??';
|
|
167
|
+
const rname = rInfo.name ?? (0, node_id_1.recoverName)(id, ctx.right.idMap) ?? '??';
|
|
168
|
+
if (lname !== rname) {
|
|
169
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string,@typescript-eslint/restrict-template-expressions
|
|
170
|
+
ctx.report.addComment(`Vertex ${id} differs in names. ${ctx.leftname}: ${lname} vs ${ctx.rightname}: ${rname}`, {
|
|
171
|
+
tag: 'vertex',
|
|
172
|
+
id
|
|
173
|
+
});
|
|
153
174
|
}
|
|
154
175
|
}
|
|
155
|
-
if (lInfo.
|
|
156
|
-
ctx.report.addComment(`Vertex ${id}
|
|
176
|
+
if (!(0, arrays_1.arrayEqual)(lInfo.controlDependencies, rInfo.controlDependencies)) {
|
|
177
|
+
ctx.report.addComment(`Vertex ${id} differs in controlDependency. ${ctx.leftname}: ${JSON.stringify(lInfo.controlDependencies)} vs ${ctx.rightname}: ${JSON.stringify(rInfo.controlDependencies)}`, { tag: 'vertex', id });
|
|
157
178
|
}
|
|
158
|
-
(0,
|
|
159
|
-
if (lInfo.tag ===
|
|
160
|
-
|
|
161
|
-
|
|
179
|
+
(0, diff_2.diffEnvironmentInformation)(lInfo.environment, rInfo.environment, { ...ctx, position: `${ctx.position}Vertex ${id} differs in environment. ` });
|
|
180
|
+
if (lInfo.tag === "function-call" /* VertexType.FunctionCall */) {
|
|
181
|
+
if (rInfo.tag !== "function-call" /* VertexType.FunctionCall */) {
|
|
182
|
+
ctx.report.addComment(`Vertex ${id} differs in tags. ${ctx.leftname}: ${lInfo.tag} vs. ${ctx.rightname}: ${rInfo.tag}`);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
if (lInfo.onlyBuiltin !== rInfo.onlyBuiltin) {
|
|
186
|
+
ctx.report.addComment(`Vertex ${id} differs in onlyBuiltin. ${ctx.leftname}: ${lInfo.onlyBuiltin} vs ${ctx.rightname}: ${rInfo.onlyBuiltin}`, { tag: 'vertex', id });
|
|
187
|
+
}
|
|
188
|
+
diffFunctionArguments(lInfo.id, lInfo.args, rInfo.args, {
|
|
189
|
+
...ctx,
|
|
190
|
+
position: `${ctx.position}Vertex ${id} (function call) differs in arguments. `
|
|
191
|
+
});
|
|
192
|
+
}
|
|
162
193
|
}
|
|
163
194
|
if (lInfo.tag === 'function-definition') {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
ctx.report.addComment(`Vertex ${id} has different exit points. ${ctx.leftname}: ${JSON.stringify(lInfo.exitPoints, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(rInfo.exitPoints, json_1.jsonReplacer)}`);
|
|
195
|
+
if (rInfo.tag !== 'function-definition') {
|
|
196
|
+
ctx.report.addComment(`Vertex ${id} differs in tags. ${ctx.leftname}: ${lInfo.tag} vs. ${ctx.rightname}: ${rInfo.tag}`, { tag: 'vertex', id });
|
|
167
197
|
}
|
|
168
|
-
|
|
169
|
-
|
|
198
|
+
else {
|
|
199
|
+
if (!(0, arrays_1.arrayEqual)(lInfo.exitPoints, rInfo.exitPoints)) {
|
|
200
|
+
ctx.report.addComment(`Vertex ${id} differs in exit points. ${ctx.leftname}: ${JSON.stringify(lInfo.exitPoints, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(rInfo.exitPoints, json_1.jsonReplacer)}`, { tag: 'vertex', id });
|
|
201
|
+
}
|
|
202
|
+
(0, diff_2.diffEnvironmentInformation)(lInfo.subflow.environment, rInfo.subflow.environment, {
|
|
203
|
+
...ctx,
|
|
204
|
+
position: `${ctx.position}Vertex ${id} (function definition) differs in subflow environments. `
|
|
205
|
+
});
|
|
206
|
+
(0, diff_1.setDifference)(lInfo.subflow.graph, rInfo.subflow.graph, {
|
|
207
|
+
...ctx,
|
|
208
|
+
position: `${ctx.position}Vertex ${id} differs in subflow graph. `
|
|
209
|
+
});
|
|
170
210
|
}
|
|
171
|
-
(0, environments_1.diffEnvironments)(lInfo.subflow.environments, rInfo.subflow.environments, { ...ctx, position: `${ctx.position}Vertex ${id} (function definition) differs in subflow environments. ` });
|
|
172
|
-
(0, diff_1.setDifference)(lInfo.subflow.graph, rInfo.subflow.graph, { ...ctx, position: `${ctx.position}Vertex ${id} differs in subflow graph. ` });
|
|
173
211
|
}
|
|
174
212
|
}
|
|
175
213
|
}
|
|
176
214
|
exports.diffVertices = diffVertices;
|
|
215
|
+
function diffEdge(edge, otherEdge, ctx, id, target) {
|
|
216
|
+
const edgeTypes = (0, edge_1.splitEdgeTypes)(edge.types);
|
|
217
|
+
const otherEdgeTypes = (0, edge_1.splitEdgeTypes)(otherEdge.types);
|
|
218
|
+
if (edgeTypes.length !== otherEdgeTypes.length) {
|
|
219
|
+
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} differs in number of edge types: ${JSON.stringify([...edgeTypes])} vs ${JSON.stringify([...otherEdgeTypes])}`, { tag: 'edge', from: id, to: target });
|
|
220
|
+
}
|
|
221
|
+
if (edge.types !== otherEdge.types) {
|
|
222
|
+
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} differs in edge types: ${JSON.stringify([...(0, edge_1.edgeTypesToNames)(edge.types)])} vs ${JSON.stringify([...(0, edge_1.edgeTypesToNames)(otherEdge.types)])}`, { tag: 'edge', from: id, to: target });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
177
225
|
function diffEdges(ctx, id, lEdges, rEdges) {
|
|
178
226
|
if (lEdges === undefined || rEdges === undefined) {
|
|
179
227
|
if (lEdges !== rEdges) {
|
|
180
|
-
ctx.report.addComment(`Vertex ${id} has undefined outgoing edges. ${ctx.leftname}: ${JSON.stringify(lEdges, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(rEdges, json_1.jsonReplacer)}
|
|
228
|
+
ctx.report.addComment(`Vertex ${id} has undefined outgoing edges. ${ctx.leftname}: ${JSON.stringify(lEdges, json_1.jsonReplacer)} vs ${ctx.rightname}: ${JSON.stringify(rEdges, json_1.jsonReplacer)}`, { tag: 'vertex', id });
|
|
181
229
|
}
|
|
182
230
|
return;
|
|
183
231
|
}
|
|
184
232
|
if (lEdges.size !== rEdges.size) {
|
|
185
|
-
ctx.report.addComment(`Vertex ${id}
|
|
233
|
+
ctx.report.addComment(`Vertex ${id} differs in number of outgoing edges. ${ctx.leftname}: [${[...lEdges.keys()].join(',')}] vs ${ctx.rightname}: [${[...rEdges.keys()].join(',')}] `, { tag: 'vertex', id });
|
|
186
234
|
}
|
|
187
235
|
// order independent compare
|
|
188
236
|
for (const [target, edge] of lEdges) {
|
|
189
237
|
const otherEdge = rEdges.get(target);
|
|
190
238
|
if (otherEdge === undefined) {
|
|
191
|
-
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} is not present in ${ctx.rightname}
|
|
239
|
+
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} is not present in ${ctx.rightname}`, { tag: 'edge', from: id, to: target });
|
|
192
240
|
continue;
|
|
193
241
|
}
|
|
194
|
-
|
|
195
|
-
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} has different number of edge types: ${JSON.stringify([...edge.types])} vs ${JSON.stringify([...otherEdge.types])}`);
|
|
196
|
-
}
|
|
197
|
-
if ([...edge.types].some(e => !otherEdge.types.has(e))) {
|
|
198
|
-
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} has different edge types: ${JSON.stringify([...edge.types])} vs ${JSON.stringify([...otherEdge.types])}`);
|
|
199
|
-
}
|
|
200
|
-
if (edge.attribute !== otherEdge.attribute) {
|
|
201
|
-
ctx.report.addComment(`Target of ${id}->${target} in ${ctx.leftname} has different attributes: ${JSON.stringify(edge.attribute)} vs ${JSON.stringify(otherEdge.attribute)}`);
|
|
202
|
-
}
|
|
242
|
+
diffEdge(edge, otherEdge, ctx, id, target);
|
|
203
243
|
}
|
|
204
244
|
}
|
|
205
245
|
exports.diffEdges = diffEdges;
|
package/dataflow/graph/edge.d.ts
CHANGED
|
@@ -1,37 +1,83 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* An edge consist of
|
|
3
|
-
*
|
|
4
|
-
* if it is
|
|
2
|
+
* An edge consist of:
|
|
3
|
+
* - the target node (i.e., the variable or processing node),
|
|
4
|
+
* - a type (if it is read or used in the context), and
|
|
5
|
+
* - an attribute (if this edge exists for every program execution or if it is only one possible execution path).
|
|
5
6
|
*/
|
|
6
7
|
export interface DataflowGraphEdge {
|
|
7
|
-
types:
|
|
8
|
-
attribute: DataflowGraphEdgeAttribute;
|
|
8
|
+
types: EdgeTypeBits;
|
|
9
9
|
}
|
|
10
|
-
export type DataflowGraphEdgeAttribute = 'always' | 'maybe';
|
|
11
10
|
/**
|
|
12
11
|
* Represents the relationship between the source and the target vertex in the dataflow graph.
|
|
12
|
+
* The actual value is represented as a bitmask so use {@link edgeTypesToNames} to get something more human-readable.
|
|
13
|
+
* Similarly, you can access {@link EdgeTypeName} to access the name counterpart.
|
|
13
14
|
*/
|
|
14
|
-
export declare enum EdgeType {
|
|
15
|
+
export declare const enum EdgeType {
|
|
15
16
|
/** The edge determines that source reads target */
|
|
16
|
-
Reads =
|
|
17
|
+
Reads = 1,
|
|
17
18
|
/** The edge determines that source is defined by target */
|
|
18
|
-
DefinedBy =
|
|
19
|
-
/** The edge determines that both nodes reference the same variable in a lexical/scoping sense, source and target are interchangeable (reads for at construction unbound variables) */
|
|
20
|
-
SameReadRead = "same-read-read",
|
|
21
|
-
/** Similar to `same-read-read` but for def-def constructs without a read in-between */
|
|
22
|
-
SameDefDef = "same-def-def",
|
|
19
|
+
DefinedBy = 2,
|
|
23
20
|
/** The edge determines that the source calls the target */
|
|
24
|
-
Calls =
|
|
21
|
+
Calls = 4,
|
|
25
22
|
/** The source returns target on call */
|
|
26
|
-
Returns =
|
|
23
|
+
Returns = 8,
|
|
27
24
|
/** The edge determines that source (probably argument) defines the target (probably parameter), currently automatically created by `addEdge` */
|
|
28
|
-
DefinesOnCall =
|
|
25
|
+
DefinesOnCall = 16,
|
|
29
26
|
/** Inverse of `defines-on-call` currently only needed to get better results when slicing complex function calls */
|
|
30
|
-
DefinedByOnCall =
|
|
27
|
+
DefinedByOnCall = 32,
|
|
31
28
|
/** Formal used as argument to a function call */
|
|
32
|
-
Argument =
|
|
29
|
+
Argument = 64,
|
|
33
30
|
/** The edge determines that the source is a side effect that happens when the target is called */
|
|
31
|
+
SideEffectOnCall = 128,
|
|
32
|
+
/** The Edge determines that the reference is affected by a non-standard evaluation (e.g., a for-loop body or a quotation) */
|
|
33
|
+
NonStandardEvaluation = 256
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* See {@link EdgeType} for the basis.
|
|
37
|
+
*/
|
|
38
|
+
export declare const enum EdgeTypeName {
|
|
39
|
+
Reads = "reads",
|
|
40
|
+
DefinedBy = "defined-by",
|
|
41
|
+
Calls = "calls",
|
|
42
|
+
Returns = "returns",
|
|
43
|
+
DefinesOnCall = "defined-by-on-call",
|
|
44
|
+
DefinedByOnCall = "defines-on-call",
|
|
45
|
+
Argument = "argument",
|
|
34
46
|
SideEffectOnCall = "side-effect-on-call",
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
NonStandardEvaluation = "non-standard-evaluation"
|
|
48
|
+
}
|
|
49
|
+
export type EdgeTypeBits = number;
|
|
50
|
+
/**
|
|
51
|
+
* Only use this function to retrieve a human-readable name if you know that it is a single bitmask.
|
|
52
|
+
* Otherwise, use {@link edgeTypesToNames} which handles these cases.
|
|
53
|
+
*/
|
|
54
|
+
export declare function edgeTypeToName(type: EdgeType): string;
|
|
55
|
+
export declare function splitEdgeTypes(types: EdgeTypeBits): EdgeType[];
|
|
56
|
+
export declare function edgeTypesToNames(bits: EdgeTypeBits): Set<EdgeTypeName>;
|
|
57
|
+
export declare const enum TraverseEdge {
|
|
58
|
+
/** Do not traverse this edge */
|
|
59
|
+
Never = 0,
|
|
60
|
+
/** Traverse the edge as a side effect */
|
|
61
|
+
SideEffect = 1,
|
|
62
|
+
/** Traverse this edge if the definition is relevant */
|
|
63
|
+
DefinedByOnCall = 2,
|
|
64
|
+
/** Always traverse this edge */
|
|
65
|
+
Always = 3
|
|
37
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if the given-edge type has any of the given types.
|
|
69
|
+
* @example
|
|
70
|
+
*
|
|
71
|
+
* ```typescript
|
|
72
|
+
* hasAnyTypeOf(EdgeType.Reads, EdgeType.Reads | EdgeType.DefinedBy) // true
|
|
73
|
+
*```
|
|
74
|
+
*
|
|
75
|
+
* Counterpart of {@link edgeDoesNotIncludeType}.
|
|
76
|
+
*/
|
|
77
|
+
export declare function edgeIncludesType(type: EdgeTypeBits, types: EdgeTypeBits): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Check if the given-edge type does not include the given type.
|
|
80
|
+
* Counterpart of {@link edgeIncludesType}.
|
|
81
|
+
*/
|
|
82
|
+
export declare function edgeDoesNotIncludeType(type: EdgeTypeBits, types: EdgeTypeBits): boolean;
|
|
83
|
+
export declare function shouldTraverseEdge(types: EdgeTypeBits): TraverseEdge;
|
package/dataflow/graph/edge.js
CHANGED
|
@@ -1,32 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.shouldTraverseEdge = exports.edgeDoesNotIncludeType = exports.edgeIncludesType = exports.edgeTypesToNames = exports.splitEdgeTypes = exports.edgeTypeToName = void 0;
|
|
4
|
+
const edgeTypeToHumanReadableName = new Map([
|
|
5
|
+
[1 /* EdgeType.Reads */, "reads" /* EdgeTypeName.Reads */],
|
|
6
|
+
[2 /* EdgeType.DefinedBy */, "defined-by" /* EdgeTypeName.DefinedBy */],
|
|
7
|
+
[4 /* EdgeType.Calls */, "calls" /* EdgeTypeName.Calls */],
|
|
8
|
+
[8 /* EdgeType.Returns */, "returns" /* EdgeTypeName.Returns */],
|
|
9
|
+
[16 /* EdgeType.DefinesOnCall */, "defined-by-on-call" /* EdgeTypeName.DefinesOnCall */],
|
|
10
|
+
[32 /* EdgeType.DefinedByOnCall */, "defines-on-call" /* EdgeTypeName.DefinedByOnCall */],
|
|
11
|
+
[64 /* EdgeType.Argument */, "argument" /* EdgeTypeName.Argument */],
|
|
12
|
+
[128 /* EdgeType.SideEffectOnCall */, "side-effect-on-call" /* EdgeTypeName.SideEffectOnCall */],
|
|
13
|
+
[256 /* EdgeType.NonStandardEvaluation */, "non-standard-evaluation" /* EdgeTypeName.NonStandardEvaluation */]
|
|
14
|
+
]);
|
|
4
15
|
/**
|
|
5
|
-
*
|
|
16
|
+
* Only use this function to retrieve a human-readable name if you know that it is a single bitmask.
|
|
17
|
+
* Otherwise, use {@link edgeTypesToNames} which handles these cases.
|
|
6
18
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
function edgeTypeToName(type) {
|
|
20
|
+
return edgeTypeToHumanReadableName.get(type);
|
|
21
|
+
}
|
|
22
|
+
exports.edgeTypeToName = edgeTypeToName;
|
|
23
|
+
function splitEdgeTypes(types) {
|
|
24
|
+
const split = [];
|
|
25
|
+
for (const bit of edgeTypeToHumanReadableName.keys()) {
|
|
26
|
+
if ((types & bit) !== 0) {
|
|
27
|
+
split.push(bit);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return split;
|
|
31
|
+
}
|
|
32
|
+
exports.splitEdgeTypes = splitEdgeTypes;
|
|
33
|
+
function edgeTypesToNames(bits) {
|
|
34
|
+
const types = new Set();
|
|
35
|
+
for (const [bit, name] of edgeTypeToHumanReadableName.entries()) {
|
|
36
|
+
if ((bits & bit) !== 0) {
|
|
37
|
+
types.add(name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return types;
|
|
41
|
+
}
|
|
42
|
+
exports.edgeTypesToNames = edgeTypesToNames;
|
|
43
|
+
/**
|
|
44
|
+
* Check if the given-edge type has any of the given types.
|
|
45
|
+
* @example
|
|
46
|
+
*
|
|
47
|
+
* ```typescript
|
|
48
|
+
* hasAnyTypeOf(EdgeType.Reads, EdgeType.Reads | EdgeType.DefinedBy) // true
|
|
49
|
+
*```
|
|
50
|
+
*
|
|
51
|
+
* Counterpart of {@link edgeDoesNotIncludeType}.
|
|
52
|
+
*/
|
|
53
|
+
function edgeIncludesType(type, types) {
|
|
54
|
+
return (types & type) !== 0;
|
|
55
|
+
}
|
|
56
|
+
exports.edgeIncludesType = edgeIncludesType;
|
|
57
|
+
/**
|
|
58
|
+
* Check if the given-edge type does not include the given type.
|
|
59
|
+
* Counterpart of {@link edgeIncludesType}.
|
|
60
|
+
*/
|
|
61
|
+
function edgeDoesNotIncludeType(type, types) {
|
|
62
|
+
return (types & type) === 0;
|
|
63
|
+
}
|
|
64
|
+
exports.edgeDoesNotIncludeType = edgeDoesNotIncludeType;
|
|
65
|
+
function shouldTraverseEdge(types) {
|
|
66
|
+
if (edgeIncludesType(types, 1 /* EdgeType.Reads */ | 2 /* EdgeType.DefinedBy */ | 64 /* EdgeType.Argument */ | 4 /* EdgeType.Calls */ | 16 /* EdgeType.DefinesOnCall */)) {
|
|
67
|
+
return 3 /* TraverseEdge.Always */;
|
|
68
|
+
}
|
|
69
|
+
else if (edgeIncludesType(types, 32 /* EdgeType.DefinedByOnCall */)) {
|
|
70
|
+
return 2 /* TraverseEdge.DefinedByOnCall */;
|
|
71
|
+
}
|
|
72
|
+
else if (edgeIncludesType(types, 128 /* EdgeType.SideEffectOnCall */)) {
|
|
73
|
+
return 1 /* TraverseEdge.SideEffect */;
|
|
74
|
+
}
|
|
75
|
+
return 0 /* TraverseEdge.Never */;
|
|
76
|
+
}
|
|
77
|
+
exports.shouldTraverseEdge = shouldTraverseEdge;
|
|
32
78
|
//# sourceMappingURL=edge.js.map
|