@eagleoutice/flowr 2.6.2 → 2.7.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/README.md +36 -34
- package/abstract-interpretation/data-frame/absint-visitor.d.ts +1 -1
- package/abstract-interpretation/data-frame/absint-visitor.js +6 -6
- package/abstract-interpretation/data-frame/dataframe-domain.d.ts +4 -7
- package/abstract-interpretation/data-frame/dataframe-domain.js +5 -11
- package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/access-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/arguments.js +2 -2
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
- package/abstract-interpretation/data-frame/mappers/function-mapper.js +28 -24
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +3 -2
- package/abstract-interpretation/data-frame/semantics.js +54 -41
- package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
- package/abstract-interpretation/data-frame/shape-inference.js +3 -3
- package/abstract-interpretation/domains/abstract-domain.d.ts +1 -0
- package/abstract-interpretation/domains/abstract-domain.js +3 -2
- package/abstract-interpretation/domains/bounded-set-domain.js +1 -1
- package/abstract-interpretation/domains/interval-domain.d.ts +2 -2
- package/abstract-interpretation/domains/interval-domain.js +3 -6
- package/abstract-interpretation/domains/lattice.d.ts +2 -0
- package/abstract-interpretation/domains/lattice.js +3 -1
- package/abstract-interpretation/domains/positive-interval-domain.d.ts +1 -1
- package/abstract-interpretation/domains/positive-interval-domain.js +1 -1
- package/abstract-interpretation/domains/satisfiable-domain.d.ts +2 -2
- package/abstract-interpretation/domains/satisfiable-domain.js +2 -2
- package/abstract-interpretation/domains/set-range-domain.d.ts +98 -0
- package/abstract-interpretation/domains/set-range-domain.js +400 -0
- package/abstract-interpretation/domains/set-upper-bound-domain.js +2 -2
- package/abstract-interpretation/domains/singleton-domain.js +2 -2
- package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
- package/benchmark/slicer.d.ts +3 -1
- package/benchmark/slicer.js +50 -27
- package/benchmark/stats/print.js +8 -5
- package/benchmark/stats/stats.d.ts +3 -2
- package/benchmark/summarizer/data.d.ts +11 -8
- package/benchmark/summarizer/first-phase/process.js +12 -9
- package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
- package/benchmark/summarizer/second-phase/graph.js +3 -1
- package/benchmark/summarizer/second-phase/process.js +24 -18
- package/cli/export-quads-app.js +1 -1
- package/cli/repl/commands/repl-dataflow.js +2 -1
- package/cli/repl/commands/repl-parse.js +16 -4
- package/cli/repl/commands/repl-query.js +1 -1
- package/cli/repl/core.js +16 -13
- package/cli/repl/server/connection.js +2 -1
- package/cli/script-core/statistics-helper-core.js +2 -1
- package/cli/slicer-app.js +3 -4
- package/cli/wiki.d.ts +4 -0
- package/cli/wiki.js +165 -0
- package/config.d.ts +4 -0
- package/config.js +6 -0
- package/control-flow/cfg-dead-code.js +14 -3
- package/control-flow/cfg-simplification.d.ts +5 -2
- package/control-flow/cfg-simplification.js +3 -0
- package/control-flow/extract-cfg.d.ts +9 -3
- package/control-flow/extract-cfg.js +44 -4
- package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
- package/control-flow/simple-visitor.js +2 -2
- package/control-flow/useless-loop.d.ts +3 -3
- package/control-flow/useless-loop.js +16 -5
- package/core/pipeline-executor.d.ts +3 -6
- package/core/pipeline-executor.js +4 -7
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +2 -2
- package/core/steps/all/core/00-parse.d.ts +1 -1
- package/core/steps/all/core/00-parse.js +1 -1
- package/core/steps/all/core/10-normalize.d.ts +3 -9
- package/core/steps/all/core/10-normalize.js +1 -16
- package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
- package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
- package/core/steps/all/core/20-dataflow.d.ts +3 -4
- package/core/steps/all/core/20-dataflow.js +2 -2
- package/core/steps/all/static-slicing/00-slice.d.ts +4 -2
- package/core/steps/all/static-slicing/00-slice.js +3 -2
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
- package/core/steps/pipeline/default-pipelines.d.ts +94 -95
- package/core/steps/pipeline/default-pipelines.js +8 -8
- package/dataflow/cluster.js +2 -2
- package/dataflow/environments/append.d.ts +5 -0
- package/dataflow/environments/append.js +6 -20
- package/dataflow/environments/built-in.d.ts +2 -1
- package/dataflow/environments/clone.d.ts +1 -2
- package/dataflow/environments/clone.js +3 -17
- package/dataflow/environments/define.d.ts +7 -3
- package/dataflow/environments/define.js +9 -56
- package/dataflow/environments/diff.js +3 -3
- package/dataflow/environments/environment.d.ts +48 -28
- package/dataflow/environments/environment.js +187 -62
- package/dataflow/environments/overwrite.d.ts +1 -5
- package/dataflow/environments/overwrite.js +2 -61
- package/dataflow/environments/reference-to-maybe.d.ts +13 -0
- package/dataflow/environments/reference-to-maybe.js +54 -0
- package/dataflow/environments/resolve-by-name.d.ts +6 -1
- package/dataflow/environments/resolve-by-name.js +56 -4
- package/dataflow/environments/scoping.d.ts +8 -4
- package/dataflow/environments/scoping.js +13 -9
- package/dataflow/eval/resolve/alias-tracking.d.ts +10 -4
- package/dataflow/eval/resolve/alias-tracking.js +15 -13
- package/dataflow/eval/resolve/resolve-argument.d.ts +2 -1
- package/dataflow/eval/resolve/resolve-argument.js +10 -10
- package/dataflow/eval/resolve/resolve.d.ts +13 -11
- package/dataflow/eval/resolve/resolve.js +16 -15
- package/dataflow/eval/values/string/string-constants.d.ts +9 -3
- package/dataflow/eval/values/string/string-constants.js +9 -3
- package/dataflow/extractor.d.ts +2 -3
- package/dataflow/extractor.js +25 -28
- package/dataflow/fn/higher-order-function.d.ts +2 -1
- package/dataflow/fn/higher-order-function.js +4 -4
- package/dataflow/graph/dataflowgraph-builder.d.ts +9 -5
- package/dataflow/graph/dataflowgraph-builder.js +21 -11
- package/dataflow/graph/diff-dataflow-graph.js +2 -2
- package/dataflow/graph/graph.d.ts +13 -11
- package/dataflow/graph/graph.js +40 -24
- package/dataflow/graph/invert-dfg.d.ts +3 -2
- package/dataflow/graph/invert-dfg.js +3 -3
- package/dataflow/graph/resolve-graph.d.ts +2 -1
- package/dataflow/graph/resolve-graph.js +2 -2
- package/dataflow/graph/unknown-replacement.d.ts +4 -2
- package/dataflow/graph/unknown-replacement.js +4 -2
- package/dataflow/graph/vertex.d.ts +3 -3
- package/dataflow/graph/vertex.js +3 -3
- package/dataflow/info.d.ts +8 -1
- package/dataflow/info.js +21 -0
- package/dataflow/internal/linker.js +10 -11
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
- package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +7 -1
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +12 -3
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +7 -7
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +6 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +14 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +10 -8
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +2 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +10 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +8 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +7 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +5 -5
- package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +6 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +5 -5
- package/dataflow/internal/process/functions/call/common.d.ts +1 -1
- package/dataflow/internal/process/functions/call/common.js +6 -7
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
- package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
- package/dataflow/internal/process/functions/call/known-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +1 -1
- package/dataflow/internal/process/functions/process-argument.js +1 -1
- package/dataflow/internal/process/functions/process-parameter.js +4 -4
- package/dataflow/internal/process/process-symbol.js +1 -1
- package/dataflow/internal/process/process-value.d.ts +1 -1
- package/dataflow/internal/process/process-value.js +7 -7
- package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
- package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
- package/dataflow/processor.d.ts +7 -16
- package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
- package/documentation/data/faq/faqs.js +27 -18
- package/documentation/data/faq/recommended-configs.d.ts +36 -0
- package/documentation/data/faq/recommended-configs.js +40 -0
- package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
- package/documentation/data/faq/wiki-faq-store.js +10 -2
- package/documentation/data/server/doc-data-server-messages.js +1 -1
- package/documentation/doc-capabilities.d.ts +9 -0
- package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
- package/documentation/doc-readme.d.ts +9 -0
- package/documentation/{print-readme.js → doc-readme.js} +31 -35
- package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
- package/documentation/doc-util/doc-benchmarks.js +6 -4
- package/documentation/doc-util/doc-cfg.js +5 -8
- package/documentation/doc-util/doc-dfg.d.ts +7 -7
- package/documentation/doc-util/doc-dfg.js +15 -14
- package/documentation/doc-util/doc-escape.d.ts +6 -0
- package/documentation/doc-util/doc-escape.js +11 -0
- package/documentation/doc-util/doc-general.d.ts +22 -2
- package/documentation/doc-util/doc-general.js +22 -2
- package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
- package/documentation/doc-util/doc-normalized-ast.js +14 -10
- package/documentation/doc-util/doc-query.d.ts +12 -4
- package/documentation/doc-util/doc-query.js +18 -11
- package/documentation/doc-util/doc-search.d.ts +0 -30
- package/documentation/doc-util/doc-search.js +2 -73
- package/documentation/doc-util/doc-server-message.d.ts +5 -5
- package/documentation/doc-util/doc-server-message.js +4 -4
- package/documentation/doc-util/doc-types.d.ts +69 -32
- package/documentation/doc-util/doc-types.js +109 -62
- package/documentation/index.d.ts +9 -9
- package/documentation/index.js +9 -9
- package/documentation/issue-linting-rule.d.ts +9 -0
- package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
- package/documentation/wiki-analyzer.d.ts +9 -0
- package/documentation/wiki-analyzer.js +425 -0
- package/documentation/wiki-cfg.d.ts +9 -0
- package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
- package/documentation/wiki-core.d.ts +14 -0
- package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
- package/documentation/wiki-dataflow-graph.d.ts +9 -0
- package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +146 -177
- package/documentation/wiki-engine.d.ts +9 -0
- package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
- package/documentation/wiki-faq.d.ts +8 -0
- package/documentation/wiki-faq.js +21 -0
- package/documentation/wiki-interface.d.ts +9 -0
- package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
- package/documentation/wiki-linter.d.ts +9 -0
- package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
- package/documentation/wiki-linting-and-testing.d.ts +9 -0
- package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
- package/documentation/wiki-mk/doc-context.d.ts +186 -0
- package/documentation/wiki-mk/doc-context.js +84 -0
- package/documentation/wiki-mk/doc-maker.d.ts +95 -0
- package/documentation/wiki-mk/doc-maker.js +134 -0
- package/documentation/wiki-normalized-ast.d.ts +9 -0
- package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
- package/documentation/wiki-onboarding.d.ts +8 -0
- package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
- package/documentation/wiki-query.d.ts +9 -0
- package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
- package/documentation/wiki-search.d.ts +9 -0
- package/documentation/wiki-search.js +61 -0
- package/linter/linter-executor.js +3 -2
- package/linter/linter-format.d.ts +2 -2
- package/linter/linter-rules.d.ts +15 -19
- package/linter/rules/absolute-path.d.ts +1 -2
- package/linter/rules/absolute-path.js +5 -5
- package/linter/rules/dataframe-access-validation.d.ts +2 -2
- package/linter/rules/dataframe-access-validation.js +13 -9
- package/linter/rules/dead-code.d.ts +1 -1
- package/linter/rules/deprecated-functions.d.ts +1 -5
- package/linter/rules/file-path-validity.d.ts +1 -1
- package/linter/rules/file-path-validity.js +4 -4
- package/linter/rules/function-finder-util.d.ts +3 -7
- package/linter/rules/function-finder-util.js +1 -1
- package/linter/rules/naming-convention.d.ts +2 -2
- package/linter/rules/naming-convention.js +1 -1
- package/linter/rules/network-functions.d.ts +1 -1
- package/linter/rules/network-functions.js +1 -1
- package/linter/rules/seeded-randomness.d.ts +4 -3
- package/linter/rules/seeded-randomness.js +38 -18
- package/linter/rules/unused-definition.d.ts +1 -1
- package/linter/rules/useless-loop.d.ts +2 -2
- package/linter/rules/useless-loop.js +2 -2
- package/package.json +5 -17
- package/project/cache/flowr-analyzer-cache.d.ts +7 -10
- package/project/cache/flowr-analyzer-cache.js +17 -38
- package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
- package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
- package/project/context/flowr-analyzer-context.d.ts +37 -5
- package/project/context/flowr-analyzer-context.js +51 -4
- package/project/context/flowr-analyzer-environment-context.d.ts +47 -0
- package/project/context/flowr-analyzer-environment-context.js +50 -0
- package/project/context/flowr-analyzer-files-context.d.ts +63 -13
- package/project/context/flowr-analyzer-files-context.js +110 -39
- package/project/context/flowr-file.d.ts +32 -10
- package/project/context/flowr-file.js +30 -9
- package/project/flowr-analyzer-builder.d.ts +22 -28
- package/project/flowr-analyzer-builder.js +32 -70
- package/project/flowr-analyzer.d.ts +55 -14
- package/project/flowr-analyzer.js +53 -8
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
- package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
- package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
- package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
- package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
- package/project/plugins/flowr-analyzer-plugin.js +2 -0
- package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
- package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
- package/project/plugins/plugin-registry.d.ts +34 -0
- package/project/plugins/plugin-registry.js +62 -0
- package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
- package/queries/catalog/call-context-query/call-context-query-executor.js +5 -6
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
- package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.js +3 -2
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +1 -1
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
- package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.js +5 -5
- package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.js +2 -2
- package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +6 -6
- package/queries/catalog/df-shape-query/df-shape-query-format.js +8 -7
- package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
- package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +4 -4
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.js +13 -2
- package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
- package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
- package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
- package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
- package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
- package/queries/catalog/project-query/project-query-executor.js +3 -1
- package/queries/catalog/project-query/project-query-format.d.ts +1 -1
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +3 -3
- package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
- package/queries/catalog/search-query/search-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-executor.js +2 -2
- package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
- package/queries/query.d.ts +26 -18
- package/queries/query.js +21 -1
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
- package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/model/type.js +2 -0
- package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
- package/r-bridge/parser.d.ts +15 -5
- package/r-bridge/parser.js +27 -13
- package/r-bridge/retriever.d.ts +9 -15
- package/r-bridge/retriever.js +14 -5
- package/r-bridge/shell.d.ts +1 -1
- package/r-bridge/shell.js +1 -1
- package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
- package/reconstruct/auto-select/magic-comments.js +1 -1
- package/reconstruct/reconstruct.d.ts +17 -9
- package/reconstruct/reconstruct.js +19 -8
- package/search/flowr-search.d.ts +12 -0
- package/search/search-executor/search-enrichers.d.ts +9 -2
- package/search/search-executor/search-enrichers.js +1 -3
- package/search/search-executor/search-generators.d.ts +1 -1
- package/search/search-executor/search-generators.js +9 -4
- package/slicing/criterion/collect-all.d.ts +3 -2
- package/slicing/criterion/collect-all.js +1 -1
- package/slicing/criterion/parse.js +4 -4
- package/slicing/static/slice-call.d.ts +3 -2
- package/slicing/static/slice-call.js +4 -4
- package/slicing/static/static-slicer.d.ts +3 -1
- package/slicing/static/static-slicer.js +6 -7
- package/statistics/features/supported/assignments/assignments.js +1 -1
- package/statistics/features/supported/control-flow/control-flow.js +2 -2
- package/statistics/features/supported/data-access/data-access.js +1 -1
- package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
- package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
- package/statistics/features/supported/loops/loops.js +1 -1
- package/statistics/features/supported/used-functions/used-functions.js +2 -2
- package/statistics/features/supported/variables/variables.js +3 -2
- package/statistics/statistics.js +3 -2
- package/util/assert.d.ts +4 -0
- package/util/assert.js +4 -0
- package/util/containers.js +1 -1
- package/util/files.d.ts +1 -1
- package/util/files.js +1 -1
- package/util/mermaid/ast.d.ts +4 -3
- package/util/mermaid/ast.js +36 -8
- package/util/mermaid/cfg.js +1 -1
- package/util/mermaid/dfg.d.ts +1 -0
- package/util/mermaid/dfg.js +3 -3
- package/util/simple-df/dfg-view.d.ts +2 -1
- package/util/simple-df/dfg-view.js +2 -2
- package/util/version.js +1 -1
- package/dataflow/environments/remove.d.ts +0 -12
- package/dataflow/environments/remove.js +0 -52
- package/documentation/print-analyzer-wiki.d.ts +0 -1
- package/documentation/print-analyzer-wiki.js +0 -141
- package/documentation/print-capabilities-markdown.d.ts +0 -1
- package/documentation/print-cfg-wiki.d.ts +0 -1
- package/documentation/print-core-wiki.d.ts +0 -5
- package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
- package/documentation/print-engines-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.js +0 -18
- package/documentation/print-interface-wiki.d.ts +0 -1
- package/documentation/print-linter-issue.d.ts +0 -1
- package/documentation/print-linter-wiki.d.ts +0 -1
- package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
- package/documentation/print-normalized-ast-wiki.d.ts +0 -1
- package/documentation/print-onboarding-wiki.d.ts +0 -1
- package/documentation/print-query-wiki.d.ts +0 -1
- package/documentation/print-readme.d.ts +0 -1
- package/documentation/print-search-wiki.d.ts +0 -1
- package/documentation/print-search-wiki.js +0 -74
- package/util/formats/adapter-format.d.ts +0 -6
- package/util/formats/adapter-format.js +0 -3
- package/util/formats/adapter.d.ts +0 -27
- package/util/formats/adapter.js +0 -58
- package/util/formats/adapters/r-adapter.d.ts +0 -4
- package/util/formats/adapters/r-adapter.js +0 -7
- package/util/formats/adapters/rmd-adapter.d.ts +0 -35
- package/util/formats/adapters/rmd-adapter.js +0 -100
|
@@ -16,7 +16,6 @@ const identifier_1 = require("../../../../../environments/identifier");
|
|
|
16
16
|
const overwrite_1 = require("../../../../../environments/overwrite");
|
|
17
17
|
const vertex_1 = require("../../../../../graph/vertex");
|
|
18
18
|
const scoping_1 = require("../../../../../environments/scoping");
|
|
19
|
-
const environment_1 = require("../../../../../environments/environment");
|
|
20
19
|
const resolve_by_name_1 = require("../../../../../environments/resolve-by-name");
|
|
21
20
|
const edge_1 = require("../../../../../graph/edge");
|
|
22
21
|
const log_1 = require("../../../../../../util/log");
|
|
@@ -31,7 +30,7 @@ function processFunctionDefinition(name, args, rootId, data) {
|
|
|
31
30
|
}
|
|
32
31
|
/* we remove the last argument, as it is the body */
|
|
33
32
|
const parameters = args.slice(0, -1);
|
|
34
|
-
const bodyArg = (0, unpack_argument_1.
|
|
33
|
+
const bodyArg = (0, unpack_argument_1.unpackNonameArg)(args[args.length - 1]);
|
|
35
34
|
(0, assert_1.guard)(bodyArg !== undefined, () => `Function Definition ${JSON.stringify(args)} has missing body! This is bad!`);
|
|
36
35
|
const originalEnvironment = data.environment;
|
|
37
36
|
// within a function def we do not pass on the outer binds as they could be overwritten when called
|
|
@@ -42,7 +41,7 @@ function processFunctionDefinition(name, args, rootId, data) {
|
|
|
42
41
|
(0, assert_1.guard)(param !== r_function_call_1.EmptyArgument, () => `Empty argument in function definition ${name.content}, ${JSON.stringify(args)}`);
|
|
43
42
|
const processed = (0, processor_1.processDataflowFor)(param, data);
|
|
44
43
|
subgraph.mergeWith(processed.graph);
|
|
45
|
-
const read =
|
|
44
|
+
const read = processed.in.concat(processed.unknownReferences);
|
|
46
45
|
(0, linker_1.linkInputs)(read, data.environment, readInParameters, subgraph, false);
|
|
47
46
|
data = { ...data, environment: (0, overwrite_1.overwriteEnvironment)(data.environment, processed.environment) };
|
|
48
47
|
}
|
|
@@ -74,7 +73,7 @@ function processFunctionDefinition(name, args, rootId, data) {
|
|
|
74
73
|
id: read.nodeId,
|
|
75
74
|
environment: undefined,
|
|
76
75
|
cds: undefined
|
|
77
|
-
});
|
|
76
|
+
}, data.ctx.env.makeCleanEnv());
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
const flow = {
|
|
@@ -95,7 +94,7 @@ function processFunctionDefinition(name, args, rootId, data) {
|
|
|
95
94
|
cds: data.controlDependencies,
|
|
96
95
|
subflow: flow,
|
|
97
96
|
exitPoints: exitPoints?.filter(e => e.type === 1 /* ExitPointType.Return */ || e.type === 0 /* ExitPointType.Default */).map(e => e.nodeId) ?? []
|
|
98
|
-
});
|
|
97
|
+
}, data.ctx.env.makeCleanEnv());
|
|
99
98
|
return {
|
|
100
99
|
/* nothing escapes a function definition, but the function itself, will be forced in assignment: { nodeId: functionDefinition.info.id, scope: data.activeScope, used: 'always', name: functionDefinition.info.id as string } */
|
|
101
100
|
unknownReferences: [],
|
|
@@ -112,8 +111,8 @@ function processFunctionDefinition(name, args, rootId, data) {
|
|
|
112
111
|
/**
|
|
113
112
|
*
|
|
114
113
|
*/
|
|
115
|
-
function retrieveActiveEnvironment(callerEnvironment, baseEnvironment) {
|
|
116
|
-
callerEnvironment ??=
|
|
114
|
+
function retrieveActiveEnvironment(callerEnvironment, baseEnvironment, ctx) {
|
|
115
|
+
callerEnvironment ??= ctx.env.makeCleanEnv();
|
|
117
116
|
let level = callerEnvironment.level ?? 0;
|
|
118
117
|
if (baseEnvironment.level !== level) {
|
|
119
118
|
while (baseEnvironment.level < level) {
|
|
@@ -135,10 +134,7 @@ function retrieveActiveEnvironment(callerEnvironment, baseEnvironment) {
|
|
|
135
134
|
function updateNestedFunctionClosures(graph, outEnvironment, fnId) {
|
|
136
135
|
// track *all* function definitions - including those nested within the current graph,
|
|
137
136
|
// try to resolve their 'in' by only using the lowest scope which will be popped after this definition
|
|
138
|
-
for (const [id, { subflow
|
|
139
|
-
if (tag !== vertex_1.VertexType.FunctionDefinition) {
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
137
|
+
for (const [id, { subflow }] of graph.verticesOfType(vertex_1.VertexType.FunctionDefinition)) {
|
|
142
138
|
const ingoingRefs = subflow.in;
|
|
143
139
|
const remainingIn = [];
|
|
144
140
|
for (const ingoing of ingoingRefs) {
|
|
@@ -171,8 +167,8 @@ function updateNestedFunctionClosures(graph, outEnvironment, fnId) {
|
|
|
171
167
|
function updateNestedFunctionCalls(graph, outEnvironment) {
|
|
172
168
|
// track *all* function definitions - including those nested within the current graph,
|
|
173
169
|
// try to resolve their 'in' by only using the lowest scope which will be popped after this definition
|
|
174
|
-
for (const [id, { onlyBuiltin,
|
|
175
|
-
if (
|
|
170
|
+
for (const [id, { onlyBuiltin, environment, name }] of graph.verticesOfType(vertex_1.VertexType.FunctionCall)) {
|
|
171
|
+
if (!name || onlyBuiltin) {
|
|
176
172
|
continue;
|
|
177
173
|
}
|
|
178
174
|
// only the call environment counts!
|
|
@@ -218,7 +214,7 @@ function updateNestedFunctionCalls(graph, outEnvironment) {
|
|
|
218
214
|
}
|
|
219
215
|
}
|
|
220
216
|
function prepareFunctionEnvironment(data) {
|
|
221
|
-
let env =
|
|
217
|
+
let env = data.ctx.env.makeCleanEnv();
|
|
222
218
|
for (let i = 0; i < data.environment.level + 1 /* add another env */; i++) {
|
|
223
219
|
env = (0, scoping_1.pushLocalEnvironment)(env);
|
|
224
220
|
}
|
|
@@ -5,6 +5,6 @@ import type { RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/
|
|
|
5
5
|
import type { RSymbol } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
6
6
|
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Processes a built-in 'get' function call.
|
|
9
9
|
*/
|
|
10
10
|
export declare function processGet<OtherInfo>(name: RSymbol<OtherInfo & ParentInformation>, args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], rootId: NodeId, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -9,14 +9,14 @@ const retriever_1 = require("../../../../../../r-bridge/retriever");
|
|
|
9
9
|
const type_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/type");
|
|
10
10
|
const edge_1 = require("../../../../../graph/edge");
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Processes a built-in 'get' function call.
|
|
13
13
|
*/
|
|
14
14
|
function processGet(name, args, rootId, data) {
|
|
15
15
|
if (args.length !== 1) {
|
|
16
16
|
logger_1.dataflowLogger.warn(`symbol access with ${name.content} has not 1 argument, skipping`);
|
|
17
17
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
|
|
18
18
|
}
|
|
19
|
-
const retrieve = (0, unpack_argument_1.
|
|
19
|
+
const retrieve = (0, unpack_argument_1.unpackNonameArg)(args[0]);
|
|
20
20
|
if (retrieve === undefined || retrieve.type !== type_1.RType.String) {
|
|
21
21
|
logger_1.dataflowLogger.warn(`symbol access with ${name.content} has not 1 argument, skipping`);
|
|
22
22
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
|
|
@@ -5,6 +5,8 @@ import type { ParentInformation } from '../../../../../../r-bridge/lang-4.x/ast/
|
|
|
5
5
|
import type { RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
6
6
|
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Processes an if-then-else built-in function call.
|
|
9
|
+
* For example, `if(cond) thenExpr else elseExpr` and `if(cond) thenExpr`.
|
|
10
|
+
* The arguments will be either `[cond, thenExpr]` or `[cond, thenExpr, elseExpr]`.
|
|
9
11
|
*/
|
|
10
12
|
export declare function processIfThenElse<OtherInfo>(name: RSymbol<OtherInfo & ParentInformation>, args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], rootId: NodeId, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -10,18 +10,20 @@ const logger_1 = require("../../../../../logger");
|
|
|
10
10
|
const edge_1 = require("../../../../../graph/edge");
|
|
11
11
|
const append_1 = require("../../../../../environments/append");
|
|
12
12
|
const identifier_1 = require("../../../../../environments/identifier");
|
|
13
|
-
const environment_1 = require("../../../../../environments/environment");
|
|
14
13
|
const general_1 = require("../../../../../eval/values/general");
|
|
15
14
|
const alias_tracking_1 = require("../../../../../eval/resolve/alias-tracking");
|
|
15
|
+
const reference_to_maybe_1 = require("../../../../../environments/reference-to-maybe");
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Processes an if-then-else built-in function call.
|
|
18
|
+
* For example, `if(cond) thenExpr else elseExpr` and `if(cond) thenExpr`.
|
|
19
|
+
* The arguments will be either `[cond, thenExpr]` or `[cond, thenExpr, elseExpr]`.
|
|
18
20
|
*/
|
|
19
21
|
function processIfThenElse(name, args, rootId, data) {
|
|
20
22
|
if (args.length !== 2 && args.length !== 3) {
|
|
21
23
|
logger_1.dataflowLogger.warn(`If-then-else ${name.content} has something different from 2 or 3 arguments, skipping`);
|
|
22
24
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
|
|
23
25
|
}
|
|
24
|
-
const [condArg, thenArg, otherwiseArg] = args.map(e => (0, unpack_argument_1.
|
|
26
|
+
const [condArg, thenArg, otherwiseArg] = args.map(e => (0, unpack_argument_1.unpackNonameArg)(e));
|
|
25
27
|
if (condArg === undefined || thenArg === undefined) {
|
|
26
28
|
logger_1.dataflowLogger.warn(`If-then-else ${name.content} has empty condition or then case in ${JSON.stringify(args)}, skipping`);
|
|
27
29
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
|
|
@@ -37,7 +39,7 @@ function processIfThenElse(name, args, rootId, data) {
|
|
|
37
39
|
let then;
|
|
38
40
|
let makeThenMaybe = false;
|
|
39
41
|
// we should defer this to the abstract interpretation
|
|
40
|
-
const values = (0, alias_tracking_1.resolveIdToValue)(condArg?.info.id, { environment: data.environment, idMap: data.completeAst.idMap, resolve: data.
|
|
42
|
+
const values = (0, alias_tracking_1.resolveIdToValue)(condArg?.info.id, { environment: data.environment, idMap: data.completeAst.idMap, resolve: data.ctx.config.solver.variables, ctx: data.ctx });
|
|
41
43
|
const conditionIsAlwaysFalse = (0, general_1.valueSetGuard)(values)?.elements.every(d => d.type === 'logical' && d.value === false) ?? false;
|
|
42
44
|
const conditionIsAlwaysTrue = (0, general_1.valueSetGuard)(values)?.elements.every(d => d.type === 'logical' && d.value === true) ?? false;
|
|
43
45
|
if (!conditionIsAlwaysFalse) {
|
|
@@ -77,10 +79,10 @@ function processIfThenElse(name, args, rootId, data) {
|
|
|
77
79
|
const cdTrue = { id: rootId, when: true };
|
|
78
80
|
const cdFalse = { id: rootId, when: false };
|
|
79
81
|
// again within an if-then-else we consider all actives to be read
|
|
80
|
-
const ingoing = cond.in.concat(makeThenMaybe ? (0,
|
|
82
|
+
const ingoing = cond.in.concat(makeThenMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(then?.in, nextGraph, finalEnvironment, false, cdTrue) : then?.in ?? [], makeOtherwiseMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(otherwise?.in, nextGraph, finalEnvironment, false, cdFalse) : otherwise?.in ?? [], cond.unknownReferences, makeThenMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(then?.unknownReferences, nextGraph, finalEnvironment, false, cdTrue) : then?.unknownReferences ?? [], makeOtherwiseMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(otherwise?.unknownReferences, nextGraph, finalEnvironment, false, cdFalse) : otherwise?.unknownReferences ?? []);
|
|
81
83
|
// we assign all with a maybe marker
|
|
82
84
|
// we do not merge even if they appear in both branches because the maybe links will refer to different ids
|
|
83
|
-
const outgoing = cond.out.concat((makeThenMaybe ? (0,
|
|
85
|
+
const outgoing = cond.out.concat((makeThenMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(then?.out, nextGraph, finalEnvironment, true, cdTrue) : then?.out ?? []), (makeOtherwiseMaybe ? (0, reference_to_maybe_1.makeAllMaybe)(otherwise?.out, nextGraph, finalEnvironment, true, cdFalse) : otherwise?.out ?? []));
|
|
84
86
|
(0, common_1.patchFunctionCall)({
|
|
85
87
|
nextGraph,
|
|
86
88
|
rootId,
|
|
@@ -15,7 +15,7 @@ function processLibrary(name, args, rootId, data) {
|
|
|
15
15
|
logger_1.dataflowLogger.warn(`Currently only one-arg library-likes are allows (for ${name.content}), skipping`);
|
|
16
16
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, hasUnknownSideEffect: true, origin: 'default' }).information;
|
|
17
17
|
}
|
|
18
|
-
const nameToLoad = (0, unpack_argument_1.
|
|
18
|
+
const nameToLoad = (0, unpack_argument_1.unpackNonameArg)(args[0]);
|
|
19
19
|
if (nameToLoad === undefined || nameToLoad.type !== type_1.RType.Symbol) {
|
|
20
20
|
logger_1.dataflowLogger.warn('No library name provided, skipping');
|
|
21
21
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, hasUnknownSideEffect: true, origin: 'default' }).information;
|
|
@@ -16,7 +16,7 @@ const containers_1 = require("../../../../../../util/containers");
|
|
|
16
16
|
*/
|
|
17
17
|
function processList(name, args, rootId, data) {
|
|
18
18
|
const fnCall = (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'builtin:list' });
|
|
19
|
-
if (!data.
|
|
19
|
+
if (!data.ctx.config.solver.pointerTracking) {
|
|
20
20
|
return fnCall.information;
|
|
21
21
|
}
|
|
22
22
|
const listArgs = [];
|
|
@@ -67,7 +67,7 @@ function processList(name, args, rootId, data) {
|
|
|
67
67
|
}
|
|
68
68
|
listArgs.push(newIndex);
|
|
69
69
|
}
|
|
70
|
-
if ((0, config_1.isOverPointerAnalysisThreshold)(data.
|
|
70
|
+
if ((0, config_1.isOverPointerAnalysisThreshold)(data.ctx.config, listArgs.length)) {
|
|
71
71
|
return fnCall.information;
|
|
72
72
|
}
|
|
73
73
|
const indices = {
|
|
@@ -18,7 +18,7 @@ function processPipe(name, args, rootId, data) {
|
|
|
18
18
|
logger_1.dataflowLogger.warn(`Pipe ${name.content} has something else than 2 arguments, skipping`);
|
|
19
19
|
return information;
|
|
20
20
|
}
|
|
21
|
-
const [lhs, rhs] = args.map(e => (0, unpack_argument_1.
|
|
21
|
+
const [lhs, rhs] = args.map(e => (0, unpack_argument_1.unpackNonameArg)(e));
|
|
22
22
|
(0, assert_1.guard)(lhs !== undefined && rhs !== undefined, () => `lhs and rhs must be present, but ${JSON.stringify(lhs)} and ${JSON.stringify(rhs)} were found instead.`);
|
|
23
23
|
if (rhs.type !== type_1.RType.FunctionCall) {
|
|
24
24
|
logger_1.dataflowLogger.warn(`Expected rhs of pipe to be a function call, but got ${rhs.type} instead.`);
|
|
@@ -38,19 +38,19 @@ function processPipe(name, args, rootId, data) {
|
|
|
38
38
|
information.graph.addEdge(functionCallNode.id, argId, edge_1.EdgeType.Argument | edge_1.EdgeType.Reads);
|
|
39
39
|
}
|
|
40
40
|
const firstArgument = processedArguments[0];
|
|
41
|
-
const uniqueIn =
|
|
41
|
+
const uniqueIn = information.in.slice();
|
|
42
42
|
for (const ing of (firstArgument?.in ?? [])) {
|
|
43
43
|
if (!uniqueIn.find(e => e.nodeId === ing.nodeId)) {
|
|
44
44
|
uniqueIn.push(ing);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
const uniqueOut =
|
|
47
|
+
const uniqueOut = information.out.slice();
|
|
48
48
|
for (const outg of (firstArgument?.out ?? [])) {
|
|
49
49
|
if (!uniqueOut.find(e => e.nodeId === outg.nodeId)) {
|
|
50
50
|
uniqueOut.push(outg);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
const uniqueUnknownReferences =
|
|
53
|
+
const uniqueUnknownReferences = information.unknownReferences.slice();
|
|
54
54
|
for (const unknown of (firstArgument?.unknownReferences ?? [])) {
|
|
55
55
|
if (!uniqueUnknownReferences.find(e => e.nodeId === unknown.nodeId)) {
|
|
56
56
|
uniqueUnknownReferences.push(unknown);
|
|
@@ -5,6 +5,11 @@ import { type RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/
|
|
|
5
5
|
import type { RSymbol } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
6
6
|
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Process a built-in repeat loop function call like `repeat { ... }`.
|
|
9
|
+
* @param name - The name of the function being called.
|
|
10
|
+
* @param args - The arguments passed to the function.
|
|
11
|
+
* @param rootId - The root node ID for the current processing context.
|
|
12
|
+
* @param data - Additional dataflow processor information.
|
|
13
|
+
* @returns - The resulting dataflow information after processing the repeat loop.
|
|
9
14
|
*/
|
|
10
15
|
export declare function processRepeatLoop<OtherInfo>(name: RSymbol<OtherInfo & ParentInformation>, args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], rootId: NodeId, data: DataflowProcessorInformation<OtherInfo & ParentInformation>): DataflowInformation;
|
|
@@ -9,14 +9,19 @@ const unpack_argument_1 = require("../argument/unpack-argument");
|
|
|
9
9
|
const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
10
10
|
const logger_1 = require("../../../../../logger");
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Process a built-in repeat loop function call like `repeat { ... }`.
|
|
13
|
+
* @param name - The name of the function being called.
|
|
14
|
+
* @param args - The arguments passed to the function.
|
|
15
|
+
* @param rootId - The root node ID for the current processing context.
|
|
16
|
+
* @param data - Additional dataflow processor information.
|
|
17
|
+
* @returns - The resulting dataflow information after processing the repeat loop.
|
|
13
18
|
*/
|
|
14
19
|
function processRepeatLoop(name, args, rootId, data) {
|
|
15
20
|
if (args.length !== 1 || args[0] === r_function_call_1.EmptyArgument) {
|
|
16
21
|
logger_1.dataflowLogger.warn(`Repeat-Loop ${name.content} does not have 1 argument, skipping`);
|
|
17
22
|
return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
|
|
18
23
|
}
|
|
19
|
-
const unpacked = (0, unpack_argument_1.
|
|
24
|
+
const unpacked = (0, unpack_argument_1.unpackNonameArg)(args[0]);
|
|
20
25
|
const { information, processedArguments } = (0, known_call_handling_1.processKnownFunctionCall)({
|
|
21
26
|
name,
|
|
22
27
|
args: unpacked ? [unpacked] : args,
|
|
@@ -30,7 +30,7 @@ args, rootId, data, config) {
|
|
|
30
30
|
/* we only get here if <-, <<-, ... or whatever is part of the replacement is not overwritten */
|
|
31
31
|
(0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `Replacement ${name.content} with ${JSON.stringify(args)}, processing`);
|
|
32
32
|
let indices = config.activeIndices;
|
|
33
|
-
if (data.
|
|
33
|
+
if (data.ctx.config.solver.pointerTracking) {
|
|
34
34
|
indices ??= constructAccessedIndices(name.content, args);
|
|
35
35
|
}
|
|
36
36
|
/* we assign the first argument by the last for now and maybe mark as maybe!, we can keep the symbol as we now know we have an assignment */
|
|
@@ -59,11 +59,11 @@ args, rootId, data, config) {
|
|
|
59
59
|
data,
|
|
60
60
|
rootId,
|
|
61
61
|
name,
|
|
62
|
-
argumentProcessResult: args.map(a => a === r_function_call_1.EmptyArgument ? undefined : { entryPoint: (0, unpack_argument_1.
|
|
62
|
+
argumentProcessResult: args.map(a => a === r_function_call_1.EmptyArgument ? undefined : { entryPoint: (0, unpack_argument_1.unpackNonameArg)(a)?.info.id }),
|
|
63
63
|
origin: 'builtin:replacement',
|
|
64
64
|
link: config.assignRootId ? { origin: [config.assignRootId] } : undefined
|
|
65
65
|
});
|
|
66
|
-
const firstArg = (0, unpack_argument_1.
|
|
66
|
+
const firstArg = (0, unpack_argument_1.unpackNonameArg)(args[0]);
|
|
67
67
|
(0, unknown_replacement_1.handleReplacementOperator)({
|
|
68
68
|
operator: name.content,
|
|
69
69
|
target: firstArg?.lexeme,
|
|
@@ -80,8 +80,8 @@ args, rootId, data, config) {
|
|
|
80
80
|
res.graph.addEdge(rootId, ref, edge_1.EdgeType.Reads);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
const fa = (0, unpack_argument_1.
|
|
84
|
-
if (!data.
|
|
83
|
+
const fa = (0, unpack_argument_1.unpackNonameArg)(args[0]);
|
|
84
|
+
if (!data.ctx.config.solver.pointerTracking && fa) {
|
|
85
85
|
res = {
|
|
86
86
|
...res,
|
|
87
87
|
in: [...res.in, { name: fa.lexeme, type: identifier_1.ReferenceType.Variable, nodeId: fa.info.id, controlDependencies: data.controlDependencies }]
|
|
@@ -4,7 +4,6 @@ exports.processRm = processRm;
|
|
|
4
4
|
const known_call_handling_1 = require("../known-call-handling");
|
|
5
5
|
const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
6
6
|
const logger_1 = require("../../../../../logger");
|
|
7
|
-
const remove_1 = require("../../../../../environments/remove");
|
|
8
7
|
const type_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/type");
|
|
9
8
|
/**
|
|
10
9
|
*
|
|
@@ -32,13 +31,16 @@ function processRm(name, args, rootId, data) {
|
|
|
32
31
|
names.push(unpacked.content.str);
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
|
-
let env = res.environment;
|
|
34
|
+
let env = res.environment.current;
|
|
36
35
|
for (const name of names) {
|
|
37
|
-
env =
|
|
36
|
+
env = env.remove(name);
|
|
38
37
|
}
|
|
39
38
|
return {
|
|
40
39
|
...res,
|
|
41
|
-
environment:
|
|
40
|
+
environment: {
|
|
41
|
+
current: env,
|
|
42
|
+
level: res.environment.level
|
|
43
|
+
}
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
46
|
//# sourceMappingURL=built-in-rm.js.map
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
import { type DataflowProcessorInformation } from '../../../../../processor';
|
|
2
2
|
import { type DataflowInformation } from '../../../../../info';
|
|
3
3
|
import { type FlowrLaxSourcingOptions, InferWorkingDirectory } from '../../../../../../config';
|
|
4
|
-
import { type RParseRequest
|
|
4
|
+
import { type RParseRequest } from '../../../../../../r-bridge/retriever';
|
|
5
5
|
import { type IdGenerator, type ParentInformation } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
6
6
|
import { type RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
7
7
|
import type { RSymbol } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
8
8
|
import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
9
9
|
import type { NoInfo } from '../../../../../../r-bridge/lang-4.x/ast/model/model';
|
|
10
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../../../../../project/context/flowr-analyzer-context';
|
|
11
|
+
import type { RProjectFile } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-project';
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
13
|
+
* Infers working directories based on the given option and reference chain
|
|
12
14
|
*/
|
|
13
|
-
export declare function
|
|
15
|
+
export declare function inferWdFromScript(option: InferWorkingDirectory, referenceChain: readonly (string | undefined)[]): string[];
|
|
14
16
|
/**
|
|
15
|
-
*
|
|
17
|
+
* Return the basename of a path in a platform-agnostic way
|
|
18
|
+
* @see {@link platformDirname} - for the dirname counterpart
|
|
16
19
|
*/
|
|
17
|
-
export declare function
|
|
20
|
+
export declare function platformBasename(p: string): string;
|
|
18
21
|
/**
|
|
19
|
-
*
|
|
22
|
+
* Return the dirname of a path in a platform-agnostic way
|
|
20
23
|
*/
|
|
21
|
-
export declare function
|
|
24
|
+
export declare function platformDirname(p: string): string;
|
|
22
25
|
/**
|
|
23
26
|
* Tries to find sourced by a source request and returns the first path that exists
|
|
24
27
|
* @param resolveSource - options for lax file sourcing
|
|
@@ -26,7 +29,8 @@ export declare function inferWdFromScript(option: InferWorkingDirectory, referen
|
|
|
26
29
|
* @param data - more information on the loading context
|
|
27
30
|
*/
|
|
28
31
|
export declare function findSource(resolveSource: FlowrLaxSourcingOptions | undefined, seed: string, data: {
|
|
29
|
-
referenceChain: readonly
|
|
32
|
+
referenceChain: readonly (string | undefined)[];
|
|
33
|
+
ctx: ReadOnlyFlowrAnalyzerContext;
|
|
30
34
|
}): string[] | undefined;
|
|
31
35
|
/**
|
|
32
36
|
* Processes a named function call (i.e., not an anonymous function)
|
|
@@ -39,9 +43,10 @@ export declare function processSourceCall<OtherInfo>(name: RSymbol<OtherInfo & P
|
|
|
39
43
|
}): DataflowInformation;
|
|
40
44
|
/**
|
|
41
45
|
* Processes a source request with the given dataflow processor information and existing dataflow information
|
|
46
|
+
* Otherwise, this can be an {@link RProjectFile} representing a standalone source file
|
|
42
47
|
*/
|
|
43
|
-
export declare function sourceRequest<OtherInfo>(rootId: NodeId, request: RParseRequest
|
|
48
|
+
export declare function sourceRequest<OtherInfo>(rootId: NodeId, request: RParseRequest | RProjectFile<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, information: DataflowInformation, getId?: IdGenerator<NoInfo>): DataflowInformation;
|
|
44
49
|
/**
|
|
45
50
|
* Processes a standalone source file (i.e., not from a source function call)
|
|
46
51
|
*/
|
|
47
|
-
export declare function standaloneSourceFile<OtherInfo>(
|
|
52
|
+
export declare function standaloneSourceFile<OtherInfo>(idx: number, file: RProjectFile<OtherInfo & ParentInformation>, data: DataflowProcessorInformation<OtherInfo & ParentInformation>, information: DataflowInformation): DataflowInformation;
|