@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
|
@@ -519,16 +519,16 @@ const DataFrameFunctionParamsMapper = {
|
|
|
519
519
|
};
|
|
520
520
|
/**
|
|
521
521
|
* Maps a concrete data frame function call to abstract data frame operations.
|
|
522
|
-
* @param node
|
|
523
|
-
* @param dfg
|
|
524
|
-
* @param
|
|
522
|
+
* @param node - The R node of the function call
|
|
523
|
+
* @param dfg - The data flow graph for resolving the arguments
|
|
524
|
+
* @param ctx - The current flowR analyzer context
|
|
525
525
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame function call
|
|
526
526
|
*/
|
|
527
|
-
function mapDataFrameFunctionCall(node, dfg,
|
|
527
|
+
function mapDataFrameFunctionCall(node, dfg, ctx) {
|
|
528
528
|
if (node.type !== type_1.RType.FunctionCall || !node.named) {
|
|
529
529
|
return;
|
|
530
530
|
}
|
|
531
|
-
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias };
|
|
531
|
+
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias, ctx };
|
|
532
532
|
let operations;
|
|
533
533
|
if (isDataFrameFunction(node.functionName.content)) {
|
|
534
534
|
const functionName = node.functionName.content;
|
|
@@ -539,7 +539,7 @@ function mapDataFrameFunctionCall(node, dfg, config) {
|
|
|
539
539
|
operations = [{ operation: 'unknown', operand: undefined }];
|
|
540
540
|
}
|
|
541
541
|
else {
|
|
542
|
-
operations = mapper(args, params, resolveInfo,
|
|
542
|
+
operations = mapper(args, params, resolveInfo, ctx);
|
|
543
543
|
}
|
|
544
544
|
}
|
|
545
545
|
else {
|
|
@@ -605,10 +605,10 @@ function mapDataFrameConvert(args, params, info) {
|
|
|
605
605
|
operand: dataFrame.value.info.id
|
|
606
606
|
}];
|
|
607
607
|
}
|
|
608
|
-
function mapDataFrameRead(args, params, info,
|
|
608
|
+
function mapDataFrameRead(args, params, info, ctx) {
|
|
609
609
|
const fileNameArg = (0, arguments_1.getFunctionArgument)(args, params.fileName, info);
|
|
610
610
|
const textArg = params.text ? (0, arguments_1.getFunctionArgument)(args, params.text, info) : undefined;
|
|
611
|
-
const { source, request } = getRequestFromRead(fileNameArg, textArg, params, info,
|
|
611
|
+
const { source, request } = getRequestFromRead(fileNameArg, textArg, params, info, ctx);
|
|
612
612
|
const header = (0, arguments_1.getArgumentValue)(args, params.header, info);
|
|
613
613
|
const separator = (0, arguments_1.getArgumentValue)(args, params.separator, info);
|
|
614
614
|
const quote = (0, arguments_1.getArgumentValue)(args, params.quote, info);
|
|
@@ -618,7 +618,7 @@ function mapDataFrameRead(args, params, info, config) {
|
|
|
618
618
|
const noDupNames = (0, arguments_1.getArgumentValue)(args, params.noDupNames, info);
|
|
619
619
|
const validArguments = typeof header === 'boolean' && typeof separator === 'string' && typeof quote === 'string' && typeof comment === 'string' &&
|
|
620
620
|
typeof skipLines === 'number' && typeof checkNames === 'boolean' && typeof noDupNames === 'boolean';
|
|
621
|
-
if (request === undefined || !config.abstractInterpretation.dataFrame.readLoadedData.readExternalFiles || !validArguments) {
|
|
621
|
+
if (request === undefined || !ctx.config.abstractInterpretation.dataFrame.readLoadedData.readExternalFiles || !validArguments) {
|
|
622
622
|
return [{
|
|
623
623
|
operation: 'read',
|
|
624
624
|
operand: undefined,
|
|
@@ -643,7 +643,7 @@ function mapDataFrameRead(args, params, info, config) {
|
|
|
643
643
|
}
|
|
644
644
|
}
|
|
645
645
|
};
|
|
646
|
-
const allLines = parseRequestContent(request, parseLine, config.abstractInterpretation.dataFrame.readLoadedData.maxReadLines);
|
|
646
|
+
const allLines = parseRequestContent(request, parseLine, ctx.config.abstractInterpretation.dataFrame.readLoadedData.maxReadLines);
|
|
647
647
|
let colnames;
|
|
648
648
|
if (header) {
|
|
649
649
|
colnames = (0, arguments_1.filterValidNames)(firstLine, checkNames, noDupNames, params.noEmptyNames);
|
|
@@ -946,20 +946,20 @@ function mapDataFrameMutate(args, params, info) {
|
|
|
946
946
|
columns: accessedNames
|
|
947
947
|
});
|
|
948
948
|
}
|
|
949
|
-
if (
|
|
949
|
+
if (mutatedCols === undefined || mutatedCols.length > 0 || deletedCols?.length === 0) {
|
|
950
950
|
result.push({
|
|
951
|
-
operation: '
|
|
951
|
+
operation: 'mutateCols',
|
|
952
952
|
operand: operand?.info.id,
|
|
953
|
-
colnames:
|
|
954
|
-
options: { maybe: true }
|
|
953
|
+
colnames: mutatedCols
|
|
955
954
|
});
|
|
956
955
|
operand = undefined;
|
|
957
956
|
}
|
|
958
|
-
if (
|
|
957
|
+
if (deletedCols === undefined || deletedCols.length > 0) {
|
|
959
958
|
result.push({
|
|
960
|
-
operation: '
|
|
959
|
+
operation: 'removeCols',
|
|
961
960
|
operand: operand?.info.id,
|
|
962
|
-
colnames:
|
|
961
|
+
colnames: deletedCols,
|
|
962
|
+
options: { maybe: true }
|
|
963
963
|
});
|
|
964
964
|
operand = undefined;
|
|
965
965
|
}
|
|
@@ -1002,8 +1002,11 @@ function mapDataFrameSummarize(args, params, info) {
|
|
|
1002
1002
|
}
|
|
1003
1003
|
const result = [];
|
|
1004
1004
|
const summarizeArgs = args.filter(arg => arg !== dataFrame);
|
|
1005
|
-
const accessedNames = summarizeArgs.flatMap(arg => (0, arguments_1.getUnresolvedSymbolsInExpression)(arg, info.graph));
|
|
1006
1005
|
const summarizedCols = summarizeArgs.map(arg => (0, resolve_args_1.resolveIdToArgName)(arg, info));
|
|
1006
|
+
// only column names that are not created by summarize are preconditions on the operand
|
|
1007
|
+
const accessedNames = summarizeArgs
|
|
1008
|
+
.flatMap(arg => (0, arguments_1.getUnresolvedSymbolsInExpression)(arg, info.graph))
|
|
1009
|
+
.filter(arg => !summarizedCols.includes(arg));
|
|
1007
1010
|
if (accessedNames.length > 0) {
|
|
1008
1011
|
result.push({
|
|
1009
1012
|
operation: 'accessCols',
|
|
@@ -1018,7 +1021,7 @@ function mapDataFrameSummarize(args, params, info) {
|
|
|
1018
1021
|
});
|
|
1019
1022
|
return result;
|
|
1020
1023
|
}
|
|
1021
|
-
function mapDataFrameJoin(args, params, info,
|
|
1024
|
+
function mapDataFrameJoin(args, params, info, ctx) {
|
|
1022
1025
|
const dataFrame = (0, arguments_1.getFunctionArgument)(args, params.dataFrame, info);
|
|
1023
1026
|
const joinAll = (0, arguments_1.getArgumentValue)(args, params.joinAll, info);
|
|
1024
1027
|
const joinLeft = (0, arguments_1.getArgumentValue)(args, params.joinLeft, info);
|
|
@@ -1035,7 +1038,7 @@ function mapDataFrameJoin(args, params, info, config) {
|
|
|
1035
1038
|
const result = [];
|
|
1036
1039
|
const otherArg = (0, arguments_1.getFunctionArgument)(args, params.otherDataFrame, info);
|
|
1037
1040
|
const byArg = (0, arguments_1.getFunctionArgument)(args, params.by, info);
|
|
1038
|
-
const otherDataFrame = (0, shape_inference_1.resolveIdToDataFrameShape)(otherArg, info.graph) ?? dataframe_domain_1.DataFrameDomain.top(config.abstractInterpretation.dataFrame.maxColNames);
|
|
1041
|
+
const otherDataFrame = (0, shape_inference_1.resolveIdToDataFrameShape)(otherArg, info.graph) ?? dataframe_domain_1.DataFrameDomain.top(ctx.config.abstractInterpretation.dataFrame.maxColNames);
|
|
1039
1042
|
let byCols;
|
|
1040
1043
|
const joinType = getJoinType(joinAll, joinLeft, joinRight);
|
|
1041
1044
|
if (byArg !== undefined) {
|
|
@@ -1101,19 +1104,19 @@ function mapDataFrameUnknown(args, params, info) {
|
|
|
1101
1104
|
...(params.constraintType !== undefined ? { type: params.constraintType } : {})
|
|
1102
1105
|
}];
|
|
1103
1106
|
}
|
|
1104
|
-
function getRequestFromRead(fileNameArg, textArg, params, info,
|
|
1107
|
+
function getRequestFromRead(fileNameArg, textArg, params, info, ctx) {
|
|
1105
1108
|
let source;
|
|
1106
1109
|
let request;
|
|
1107
1110
|
if (fileNameArg !== undefined && fileNameArg !== r_function_call_1.EmptyArgument) {
|
|
1108
1111
|
const fileName = (0, resolve_args_1.resolveIdToArgValue)(fileNameArg, info);
|
|
1109
1112
|
if (typeof fileName === 'string') {
|
|
1110
1113
|
source = fileName;
|
|
1111
|
-
const referenceChain = fileNameArg.info.file ? [
|
|
1112
|
-
const sources = (0, built_in_source_1.findSource)(config.solver.resolveSource, fileName, { referenceChain });
|
|
1114
|
+
const referenceChain = fileNameArg.info.file ? [fileNameArg.info.file] : [];
|
|
1115
|
+
const sources = (0, built_in_source_1.findSource)(ctx.config.solver.resolveSource, fileName, { referenceChain, ctx });
|
|
1113
1116
|
if (sources?.length === 1) {
|
|
1114
1117
|
source = sources[0];
|
|
1115
1118
|
// create request from resolved source file path
|
|
1116
|
-
request =
|
|
1119
|
+
request = { request: 'file', content: sources[0] };
|
|
1117
1120
|
}
|
|
1118
1121
|
else if (params.text === undefined && (0, resolve_args_1.unescapeSpecialChars)(fileName).includes('\n')) {
|
|
1119
1122
|
// create request from string if file name argument contains newline
|
|
@@ -1128,6 +1131,7 @@ function getRequestFromRead(fileNameArg, textArg, params, info, config) {
|
|
|
1128
1131
|
request = (0, retriever_1.requestFromInput)((0, resolve_args_1.unescapeSpecialChars)(text));
|
|
1129
1132
|
}
|
|
1130
1133
|
}
|
|
1134
|
+
request = request ? ctx.files.resolveRequest(request).r : undefined;
|
|
1131
1135
|
return { source, request };
|
|
1132
1136
|
}
|
|
1133
1137
|
function parseRequestContent(request, parser, maxLines) {
|
|
@@ -2,10 +2,12 @@ import type { DataflowGraph } from '../../../dataflow/graph/graph';
|
|
|
2
2
|
import type { RNode } from '../../../r-bridge/lang-4.x/ast/model/model';
|
|
3
3
|
import type { ParentInformation } from '../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
4
4
|
import type { DataFrameExpressionInfo } from '../absint-info';
|
|
5
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../../project/context/flowr-analyzer-context';
|
|
5
6
|
/**
|
|
6
7
|
* Maps a concrete data frame replacement function to abstract data frame operations.
|
|
7
8
|
* @param node - The R node of the replacement function
|
|
8
9
|
* @param dfg - The data flow graph for resolving the arguments
|
|
10
|
+
* @param ctx - The read-only Flowr analysis context
|
|
9
11
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame replacement function
|
|
10
12
|
*/
|
|
11
|
-
export declare function mapDataFrameReplacementFunction(node: RNode<ParentInformation>, expression: RNode<ParentInformation>, dfg: DataflowGraph): DataFrameExpressionInfo | undefined;
|
|
13
|
+
export declare function mapDataFrameReplacementFunction(node: RNode<ParentInformation>, expression: RNode<ParentInformation>, dfg: DataflowGraph, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameExpressionInfo | undefined;
|
|
@@ -21,11 +21,12 @@ const DataFrameReplacementFunctionMapper = {
|
|
|
21
21
|
* Maps a concrete data frame replacement function to abstract data frame operations.
|
|
22
22
|
* @param node - The R node of the replacement function
|
|
23
23
|
* @param dfg - The data flow graph for resolving the arguments
|
|
24
|
+
* @param ctx - The read-only Flowr analysis context
|
|
24
25
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame replacement function
|
|
25
26
|
*/
|
|
26
|
-
function mapDataFrameReplacementFunction(node, expression, dfg) {
|
|
27
|
+
function mapDataFrameReplacementFunction(node, expression, dfg, ctx) {
|
|
27
28
|
const parent = hasParentReplacement(node, dfg) ? dfg.idMap?.get(node.info.parent) : undefined;
|
|
28
|
-
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias };
|
|
29
|
+
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias, ctx };
|
|
29
30
|
let operations;
|
|
30
31
|
if (node.type === type_1.RType.Access) {
|
|
31
32
|
if (node.access.every(arg => arg === r_function_call_1.EmptyArgument)) {
|
|
@@ -70,7 +70,7 @@ function getConstraintType(operation) {
|
|
|
70
70
|
return DataFrameSemanticsMapper[operation].type;
|
|
71
71
|
}
|
|
72
72
|
function applyCreateSemantics(value, { colnames, rows }) {
|
|
73
|
-
const colnamesValue = colnames
|
|
73
|
+
const colnamesValue = setRange(colnames);
|
|
74
74
|
const colsValue = colnames !== undefined ? [colnames.length, colnames.length] : positive_interval_domain_1.PosIntervalTop;
|
|
75
75
|
const rowsValue = Array.isArray(rows) ? rows : typeof rows === 'number' ? [rows, rows] : positive_interval_domain_1.PosIntervalTop;
|
|
76
76
|
return new dataframe_domain_1.DataFrameDomain({
|
|
@@ -85,7 +85,7 @@ function applyReadSemantics(value, { colnames, rows }) {
|
|
|
85
85
|
function applyAccessColsSemantics(value, { columns }) {
|
|
86
86
|
if (columns?.every(col => typeof col === 'string')) {
|
|
87
87
|
return new dataframe_domain_1.DataFrameDomain({
|
|
88
|
-
colnames: value.colnames.
|
|
88
|
+
colnames: value.colnames.union(setRange(columns)),
|
|
89
89
|
cols: value.cols,
|
|
90
90
|
rows: value.rows
|
|
91
91
|
});
|
|
@@ -93,7 +93,7 @@ function applyAccessColsSemantics(value, { columns }) {
|
|
|
93
93
|
else if (columns?.every(col => typeof col === 'number')) {
|
|
94
94
|
return new dataframe_domain_1.DataFrameDomain({
|
|
95
95
|
colnames: value.colnames,
|
|
96
|
-
cols: columns
|
|
96
|
+
cols: columns.reduce((current, col) => current.max([col, col]), value.cols),
|
|
97
97
|
rows: value.rows
|
|
98
98
|
});
|
|
99
99
|
}
|
|
@@ -113,21 +113,21 @@ function applyAssignColsSemantics(value, { columns }) {
|
|
|
113
113
|
if (columns?.every(col => typeof col === 'string')) {
|
|
114
114
|
const cols = columns.length;
|
|
115
115
|
return new dataframe_domain_1.DataFrameDomain({
|
|
116
|
-
colnames: value.colnames.
|
|
116
|
+
colnames: value.colnames.union(setRange(columns)),
|
|
117
117
|
cols: value.cols.add([0, cols]).max([cols, cols]),
|
|
118
118
|
rows: value.rows
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
else if (columns?.every(col => typeof col === 'number')) {
|
|
122
122
|
return new dataframe_domain_1.DataFrameDomain({
|
|
123
|
-
colnames: value.colnames.
|
|
123
|
+
colnames: value.colnames.widenUp(),
|
|
124
124
|
cols: columns.reduce((current, col) => current.max([col, col]), value.cols),
|
|
125
125
|
rows: value.rows
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
return new dataframe_domain_1.DataFrameDomain({
|
|
129
|
-
colnames: value.colnames.
|
|
130
|
-
cols: value.cols.
|
|
129
|
+
colnames: value.colnames.widenUp(),
|
|
130
|
+
cols: value.cols.widenUp(),
|
|
131
131
|
rows: value.rows
|
|
132
132
|
});
|
|
133
133
|
}
|
|
@@ -142,49 +142,57 @@ function applyAssignRowsSemantics(value, { rows }) {
|
|
|
142
142
|
return new dataframe_domain_1.DataFrameDomain({
|
|
143
143
|
colnames: value.colnames,
|
|
144
144
|
cols: value.cols,
|
|
145
|
-
rows: value.rows.
|
|
145
|
+
rows: value.rows.widenUp()
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
function applySetColNamesSemantics(value, { colnames }, options) {
|
|
149
149
|
if (options?.partial) {
|
|
150
150
|
return new dataframe_domain_1.DataFrameDomain({
|
|
151
|
-
colnames:
|
|
151
|
+
colnames: value.colnames.widenDown().union(setRange(colnames)),
|
|
152
152
|
cols: value.cols,
|
|
153
153
|
rows: value.rows
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
156
|
const allColNames = colnames?.every(assert_1.isNotUndefined) && value.cols.value !== lattice_1.Bottom && colnames.length >= value.cols.value[1];
|
|
157
157
|
return new dataframe_domain_1.DataFrameDomain({
|
|
158
|
-
colnames: allColNames ? value.colnames.create(colnames) : value.colnames.
|
|
158
|
+
colnames: allColNames ? value.colnames.create(setRange(colnames)) : value.colnames.widenDown().union(setRange(colnames)).widenUp(),
|
|
159
159
|
cols: value.cols,
|
|
160
160
|
rows: value.rows
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
163
|
function applyAddColsSemantics(value, { colnames }) {
|
|
164
164
|
return new dataframe_domain_1.DataFrameDomain({
|
|
165
|
-
colnames: colnames
|
|
166
|
-
cols: colnames !== undefined ? value.cols.add([colnames.length, colnames.length]) : value.cols.
|
|
165
|
+
colnames: colnames !== undefined ? value.colnames.union(setRange(colnames)) : value.colnames.widenUp(),
|
|
166
|
+
cols: colnames !== undefined ? value.cols.add([colnames.length, colnames.length]) : value.cols.widenUp(),
|
|
167
167
|
rows: value.rows
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
170
|
function applyAddRowsSemantics(value, { rows }) {
|
|
171
|
+
if (value.cols.value !== lattice_1.Bottom && value.cols.value[0] === 0) {
|
|
172
|
+
return new dataframe_domain_1.DataFrameDomain({
|
|
173
|
+
...value,
|
|
174
|
+
colnames: value.colnames.top(),
|
|
175
|
+
cols: rows !== undefined ? value.cols.add([1, 1]) : value.cols.top(),
|
|
176
|
+
rows: rows !== undefined ? value.rows.add([rows, rows]) : value.rows.widenUp()
|
|
177
|
+
});
|
|
178
|
+
}
|
|
171
179
|
return new dataframe_domain_1.DataFrameDomain({
|
|
172
180
|
colnames: value.colnames,
|
|
173
181
|
cols: value.cols,
|
|
174
|
-
rows: rows !== undefined ? value.rows.add([rows, rows]) : value.rows.
|
|
182
|
+
rows: rows !== undefined ? value.rows.add([rows, rows]) : value.rows.widenUp()
|
|
175
183
|
});
|
|
176
184
|
}
|
|
177
185
|
function applyRemoveColsSemantics(value, { colnames }, options) {
|
|
178
186
|
if (options?.maybe) {
|
|
179
187
|
return new dataframe_domain_1.DataFrameDomain({
|
|
180
|
-
colnames: colnames !== undefined ? value.colnames.subtract(colnames
|
|
181
|
-
cols: colnames !== undefined ? value.cols.subtract([colnames.length, 0]) : value.cols.
|
|
188
|
+
colnames: colnames !== undefined ? value.colnames.subtract(setRange(colnames)) : value.colnames.widenDown(),
|
|
189
|
+
cols: colnames !== undefined ? value.cols.subtract([colnames.length, 0]) : value.cols.widenDown(),
|
|
182
190
|
rows: value.rows
|
|
183
191
|
});
|
|
184
192
|
}
|
|
185
193
|
return new dataframe_domain_1.DataFrameDomain({
|
|
186
|
-
colnames: colnames !== undefined ? value.colnames.subtract(colnames
|
|
187
|
-
cols: colnames !== undefined ? value.cols.subtract([colnames.length, colnames.length]) : value.cols.
|
|
194
|
+
colnames: colnames !== undefined ? value.colnames.subtract(setRange(colnames)) : value.colnames.widenDown(),
|
|
195
|
+
cols: colnames !== undefined ? value.cols.subtract([colnames.length, colnames.length]) : value.cols.widenDown(),
|
|
188
196
|
rows: value.rows
|
|
189
197
|
});
|
|
190
198
|
}
|
|
@@ -193,18 +201,18 @@ function applyRemoveRowsSemantics(value, { rows }, options) {
|
|
|
193
201
|
return new dataframe_domain_1.DataFrameDomain({
|
|
194
202
|
colnames: value.colnames,
|
|
195
203
|
cols: value.cols,
|
|
196
|
-
rows: rows !== undefined ? value.rows.subtract([rows, 0]) : value.rows.
|
|
204
|
+
rows: rows !== undefined ? value.rows.subtract([rows, 0]) : value.rows.widenDown()
|
|
197
205
|
});
|
|
198
206
|
}
|
|
199
207
|
return new dataframe_domain_1.DataFrameDomain({
|
|
200
208
|
colnames: value.colnames,
|
|
201
209
|
cols: value.cols,
|
|
202
|
-
rows: rows !== undefined ? value.rows.subtract([rows, rows]) : value.rows.
|
|
210
|
+
rows: rows !== undefined ? value.rows.subtract([rows, rows]) : value.rows.widenDown()
|
|
203
211
|
});
|
|
204
212
|
}
|
|
205
213
|
function applyConcatColsSemantics(value, { other }) {
|
|
206
214
|
return new dataframe_domain_1.DataFrameDomain({
|
|
207
|
-
colnames: value.colnames.
|
|
215
|
+
colnames: value.colnames.union(other.colnames),
|
|
208
216
|
cols: value.cols.add(other.cols),
|
|
209
217
|
rows: value.rows
|
|
210
218
|
});
|
|
@@ -235,13 +243,13 @@ function applySubsetColsSemantics(value, { colnames }, options) {
|
|
|
235
243
|
else if (options?.renamedCols) {
|
|
236
244
|
return new dataframe_domain_1.DataFrameDomain({
|
|
237
245
|
colnames: value.colnames.top(),
|
|
238
|
-
cols: colnames !== undefined ? value.cols.min([colnames.length, colnames.length]) : value.cols.
|
|
246
|
+
cols: colnames !== undefined ? value.cols.min([colnames.length, colnames.length]) : value.cols.widenDown(),
|
|
239
247
|
rows: value.rows
|
|
240
248
|
});
|
|
241
249
|
}
|
|
242
250
|
return new dataframe_domain_1.DataFrameDomain({
|
|
243
|
-
colnames: colnames
|
|
244
|
-
cols: colnames !== undefined ? value.cols.min([colnames.length, colnames.length]) : value.cols.
|
|
251
|
+
colnames: colnames !== undefined ? value.colnames.intersect(setRange(colnames)) : value.colnames.widenDown(),
|
|
252
|
+
cols: colnames !== undefined ? value.cols.min([colnames.length, colnames.length]) : value.cols.widenDown(),
|
|
245
253
|
rows: value.rows
|
|
246
254
|
});
|
|
247
255
|
}
|
|
@@ -256,27 +264,27 @@ function applySubsetRowsSemantics(value, { rows }, options) {
|
|
|
256
264
|
return new dataframe_domain_1.DataFrameDomain({
|
|
257
265
|
colnames: value.colnames,
|
|
258
266
|
cols: value.cols,
|
|
259
|
-
rows: rows !== undefined ? value.rows.min([rows, rows]) : value.rows.
|
|
267
|
+
rows: rows !== undefined ? value.rows.min([rows, rows]) : value.rows.widenDown()
|
|
260
268
|
});
|
|
261
269
|
}
|
|
262
270
|
function applyFilterRowsSemantics(value, { condition }) {
|
|
263
271
|
return new dataframe_domain_1.DataFrameDomain({
|
|
264
272
|
colnames: value.colnames,
|
|
265
273
|
cols: value.cols,
|
|
266
|
-
rows: condition ? value.rows : condition === false ? value.rows.create([0, 0]) : value.rows.
|
|
274
|
+
rows: condition ? value.rows : condition === false ? value.rows.create([0, 0]) : value.rows.widenDown()
|
|
267
275
|
});
|
|
268
276
|
}
|
|
269
277
|
function applyMutateColsSemantics(value, { colnames }) {
|
|
270
278
|
return new dataframe_domain_1.DataFrameDomain({
|
|
271
|
-
colnames: colnames
|
|
272
|
-
cols: colnames !== undefined ? value.cols.add([0, colnames.length]).max([colnames.length, colnames.length]) : value.cols.
|
|
279
|
+
colnames: colnames !== undefined ? value.colnames.union(setRange(colnames)) : value.colnames.widenUp(),
|
|
280
|
+
cols: colnames !== undefined ? value.cols.add([0, colnames.length]).max([colnames.length, colnames.length]) : value.cols.widenUp(),
|
|
273
281
|
rows: value.rows
|
|
274
282
|
});
|
|
275
283
|
}
|
|
276
284
|
function applyGroupBySemantics(value, { by }, options) {
|
|
277
285
|
if (options?.mutatedCols) {
|
|
278
286
|
return new dataframe_domain_1.DataFrameDomain({
|
|
279
|
-
colnames:
|
|
287
|
+
colnames: value.colnames.union(setRange(by)),
|
|
280
288
|
cols: value.cols.add([0, by.length]),
|
|
281
289
|
rows: value.rows
|
|
282
290
|
});
|
|
@@ -286,8 +294,8 @@ function applyGroupBySemantics(value, { by }, options) {
|
|
|
286
294
|
}
|
|
287
295
|
function applySummarizeSemantics(value, { colnames }) {
|
|
288
296
|
return new dataframe_domain_1.DataFrameDomain({
|
|
289
|
-
colnames: colnames
|
|
290
|
-
cols: colnames !== undefined ? value.cols.add([0, colnames.length]).min([colnames.length, +Infinity]) : value.cols.
|
|
297
|
+
colnames: colnames !== undefined ? value.colnames.join(setRange([])).union(setRange(colnames)) : value.colnames.widenUp(),
|
|
298
|
+
cols: colnames !== undefined ? value.cols.add([0, colnames.length]).min([colnames.length, +Infinity]) : value.cols.widenUp(),
|
|
291
299
|
rows: value.rows.min([1, +Infinity]).max([0, 1])
|
|
292
300
|
});
|
|
293
301
|
}
|
|
@@ -310,35 +318,36 @@ function applyJoinSemantics(value, { other, by }, options) {
|
|
|
310
318
|
return new positive_interval_domain_1.PosIntervalDomain([lower.value[0], interval1.value[1] * interval2.value[1]]);
|
|
311
319
|
}
|
|
312
320
|
};
|
|
313
|
-
|
|
314
|
-
let duplicateCols; // whether columns may be renamed due to occurrence in both data frames
|
|
321
|
+
let duplicateCols; // columns that may be renamed due to occurring in both data frames
|
|
315
322
|
let productRows; // whether the resulting rows may be a Cartesian product of the rows of the data frames
|
|
316
323
|
if (options?.natural) {
|
|
317
|
-
|
|
318
|
-
|
|
324
|
+
const commonCols = value.colnames.intersect(other.colnames).upper();
|
|
325
|
+
duplicateCols = [];
|
|
326
|
+
productRows = commonCols !== lattice_1.Bottom && commonCols !== lattice_1.Top && commonCols.size === 0;
|
|
319
327
|
}
|
|
320
328
|
else if (by === undefined) {
|
|
321
|
-
duplicateCols =
|
|
329
|
+
duplicateCols = undefined;
|
|
322
330
|
productRows = true;
|
|
323
331
|
}
|
|
324
332
|
else if (by.length === 0) {
|
|
325
|
-
|
|
333
|
+
const commonCols = value.colnames.intersect(other.colnames).upper();
|
|
334
|
+
duplicateCols = commonCols !== lattice_1.Bottom ? commonCols !== lattice_1.Top ? [...commonCols] : undefined : [];
|
|
326
335
|
productRows = true;
|
|
327
336
|
}
|
|
328
337
|
else if (by.every(assert_1.isNotUndefined)) {
|
|
329
|
-
const remainingCols =
|
|
330
|
-
duplicateCols = remainingCols.
|
|
338
|
+
const remainingCols = value.colnames.intersect(other.colnames).subtract(setRange(by)).upper();
|
|
339
|
+
duplicateCols = remainingCols !== lattice_1.Bottom ? remainingCols !== lattice_1.Top ? [...remainingCols] : undefined : [];
|
|
331
340
|
productRows = false;
|
|
332
341
|
}
|
|
333
342
|
else {
|
|
334
|
-
duplicateCols =
|
|
343
|
+
duplicateCols = undefined;
|
|
335
344
|
productRows = false;
|
|
336
345
|
}
|
|
337
346
|
const joinType = options?.join ?? 'inner';
|
|
338
347
|
let rows;
|
|
339
348
|
switch (joinType) {
|
|
340
349
|
case 'inner':
|
|
341
|
-
rows = value.rows.min(other.rows).
|
|
350
|
+
rows = value.rows.min(other.rows).widenDown();
|
|
342
351
|
break;
|
|
343
352
|
case 'left':
|
|
344
353
|
rows = value.rows;
|
|
@@ -354,7 +363,7 @@ function applyJoinSemantics(value, { other, by }, options) {
|
|
|
354
363
|
}
|
|
355
364
|
return new dataframe_domain_1.DataFrameDomain({
|
|
356
365
|
...value,
|
|
357
|
-
colnames: duplicateCols ? value.colnames.top() : value.colnames.
|
|
366
|
+
colnames: duplicateCols === undefined ? value.colnames.top() : duplicateCols.length > 0 ? value.colnames.union(other.colnames).subtract(setRange(duplicateCols)).widenUp() : value.colnames.union(other.colnames),
|
|
358
367
|
cols: by !== undefined ? value.cols.add(other.cols).subtract([by.length, by.length]) : mergeInterval(value.cols, other.cols),
|
|
359
368
|
rows: productRows ? productInterval(rows, value.rows, other.rows) : rows
|
|
360
369
|
});
|
|
@@ -369,4 +378,8 @@ function applyUnknownSemantics(value,
|
|
|
369
378
|
_args) {
|
|
370
379
|
return value.top();
|
|
371
380
|
}
|
|
381
|
+
function setRange(colnames) {
|
|
382
|
+
const names = colnames?.filter(assert_1.isNotUndefined) ?? [];
|
|
383
|
+
return { min: names, range: names.length === colnames?.length ? [] : lattice_1.Top };
|
|
384
|
+
}
|
|
372
385
|
//# sourceMappingURL=semantics.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { FlowrConfigOptions } from '../../config';
|
|
2
1
|
import { type ControlFlowInformation } from '../../control-flow/control-flow-graph';
|
|
3
2
|
import type { DataflowGraph } from '../../dataflow/graph/graph';
|
|
3
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../project/context/flowr-analyzer-context';
|
|
4
4
|
import type { RNode } from '../../r-bridge/lang-4.x/ast/model/model';
|
|
5
5
|
import type { NormalizedAst, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
6
6
|
import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
@@ -12,11 +12,11 @@ import { type DataFrameDomain, DataFrameStateDomain } from './dataframe-domain';
|
|
|
12
12
|
* @param cfinfo - The control flow information containing the control flow graph
|
|
13
13
|
* @param dfg - The data flow graph to resolve variable origins and function arguments
|
|
14
14
|
* @param ast - The abstract syntax tree to resolve node IDs to AST nodes
|
|
15
|
-
* @param
|
|
15
|
+
* @param ctx - The current flowr analyzer context
|
|
16
16
|
* @returns The abstract data frame state at the exit node of the control flow graph (see {@link DataFrameStateDomain}).
|
|
17
17
|
* The abstract data frame states for all other nodes are attached to the AST.
|
|
18
18
|
*/
|
|
19
|
-
export declare function inferDataFrameShapes(cfinfo: ControlFlowInformation, dfg: DataflowGraph, ast: NormalizedAst<ParentInformation & AbstractInterpretationInfo>,
|
|
19
|
+
export declare function inferDataFrameShapes(cfinfo: ControlFlowInformation, dfg: DataflowGraph, ast: NormalizedAst<ParentInformation & AbstractInterpretationInfo>, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameStateDomain;
|
|
20
20
|
/**
|
|
21
21
|
* Resolves the abstract data frame shape of a node in the AST.
|
|
22
22
|
* This requires that the data frame shape inference has been executed before using {@link inferDataFrameShapes}.
|
|
@@ -19,12 +19,12 @@ const dataframe_domain_1 = require("./dataframe-domain");
|
|
|
19
19
|
* @param cfinfo - The control flow information containing the control flow graph
|
|
20
20
|
* @param dfg - The data flow graph to resolve variable origins and function arguments
|
|
21
21
|
* @param ast - The abstract syntax tree to resolve node IDs to AST nodes
|
|
22
|
-
* @param
|
|
22
|
+
* @param ctx - The current flowr analyzer context
|
|
23
23
|
* @returns The abstract data frame state at the exit node of the control flow graph (see {@link DataFrameStateDomain}).
|
|
24
24
|
* The abstract data frame states for all other nodes are attached to the AST.
|
|
25
25
|
*/
|
|
26
|
-
function inferDataFrameShapes(cfinfo, dfg, ast,
|
|
27
|
-
const visitor = new absint_visitor_1.DataFrameShapeInferenceVisitor({ controlFlow: cfinfo, dfg: dfg, normalizedAst: ast,
|
|
26
|
+
function inferDataFrameShapes(cfinfo, dfg, ast, ctx) {
|
|
27
|
+
const visitor = new absint_visitor_1.DataFrameShapeInferenceVisitor({ controlFlow: cfinfo, dfg: dfg, normalizedAst: ast, ctx });
|
|
28
28
|
visitor.start();
|
|
29
29
|
const exitPoints = cfinfo.exitPoints.map(id => cfinfo.graph.getVertex(id)).filter(assert_1.isNotUndefined);
|
|
30
30
|
const exitNodes = exitPoints.map(vertex => ast.idMap.get((0, control_flow_graph_1.getVertexRootId)(vertex))).filter(assert_1.isNotUndefined);
|
|
@@ -5,6 +5,7 @@ import { type Lattice, Top } from './lattice';
|
|
|
5
5
|
export declare const DEFAULT_INFERENCE_LIMIT = 50;
|
|
6
6
|
/**
|
|
7
7
|
* An abstract domain as complete lattice with a widening operator, narrowing operator, concretization function, and abstraction function.
|
|
8
|
+
* All operations of value abstract domains should not modify the domain in-place but return new values using {@link create}.
|
|
8
9
|
* @template Concrete - Type of an concrete element of the concrete domain for the abstract domain
|
|
9
10
|
* @template Abstract - Type of an abstract element of the abstract domain representing possible elements (excludes `Top` and `Bot`)
|
|
10
11
|
* @template Top - Type of the Top element of the abstract domain representing all possible elements
|
|
@@ -11,6 +11,7 @@ const lattice_1 = require("./lattice");
|
|
|
11
11
|
exports.DEFAULT_INFERENCE_LIMIT = 50;
|
|
12
12
|
/**
|
|
13
13
|
* An abstract domain as complete lattice with a widening operator, narrowing operator, concretization function, and abstraction function.
|
|
14
|
+
* All operations of value abstract domains should not modify the domain in-place but return new values using {@link create}.
|
|
14
15
|
* @template Concrete - Type of an concrete element of the concrete domain for the abstract domain
|
|
15
16
|
* @template Abstract - Type of an abstract element of the abstract domain representing possible elements (excludes `Top` and `Bot`)
|
|
16
17
|
* @template Top - Type of the Top element of the abstract domain representing all possible elements
|
|
@@ -73,10 +74,10 @@ function domainElementToString(value) {
|
|
|
73
74
|
return value.toString();
|
|
74
75
|
}
|
|
75
76
|
else if (value === lattice_1.Top) {
|
|
76
|
-
return
|
|
77
|
+
return lattice_1.TopSymbol;
|
|
77
78
|
}
|
|
78
79
|
else if (value === lattice_1.Bottom) {
|
|
79
|
-
return
|
|
80
|
+
return lattice_1.BottomSymbol;
|
|
80
81
|
}
|
|
81
82
|
return JSON.stringify(value);
|
|
82
83
|
}
|
|
@@ -125,7 +125,7 @@ class BoundedSetDomain extends abstract_domain_1.AbstractDomain {
|
|
|
125
125
|
}
|
|
126
126
|
toString() {
|
|
127
127
|
if (this.value === lattice_1.Top) {
|
|
128
|
-
return
|
|
128
|
+
return lattice_1.TopSymbol;
|
|
129
129
|
}
|
|
130
130
|
const string = this.value.values().map(abstract_domain_1.domainElementToString).toArray().join(', ');
|
|
131
131
|
return `{${string}}`;
|
|
@@ -55,11 +55,11 @@ export declare class IntervalDomain<Value extends IntervalLift = IntervalLift> e
|
|
|
55
55
|
/**
|
|
56
56
|
* Extends the lower bound of the current abstract value down to -∞.
|
|
57
57
|
*/
|
|
58
|
-
|
|
58
|
+
widenDown(): this;
|
|
59
59
|
/**
|
|
60
60
|
* Extends the upper bound of the current abstract value up to +∞.
|
|
61
61
|
*/
|
|
62
|
-
|
|
62
|
+
widenUp(): this;
|
|
63
63
|
toJson(): unknown;
|
|
64
64
|
toString(): string;
|
|
65
65
|
isTop(): this is IntervalDomain<IntervalTop>;
|
|
@@ -75,9 +75,6 @@ class IntervalDomain extends abstract_domain_1.AbstractDomain {
|
|
|
75
75
|
if (this.value === lattice_1.Bottom || otherValue === lattice_1.Bottom) {
|
|
76
76
|
return this.bottom();
|
|
77
77
|
}
|
|
78
|
-
else if (Math.max(this.value[0], otherValue[0]) > Math.min(this.value[1], otherValue[1])) {
|
|
79
|
-
return this.bottom();
|
|
80
|
-
}
|
|
81
78
|
else {
|
|
82
79
|
return this.create([Math.max(this.value[0], otherValue[0]), Math.min(this.value[1], otherValue[1])]);
|
|
83
80
|
}
|
|
@@ -222,7 +219,7 @@ class IntervalDomain extends abstract_domain_1.AbstractDomain {
|
|
|
222
219
|
/**
|
|
223
220
|
* Extends the lower bound of the current abstract value down to -∞.
|
|
224
221
|
*/
|
|
225
|
-
|
|
222
|
+
widenDown() {
|
|
226
223
|
if (this.value === lattice_1.Bottom) {
|
|
227
224
|
return this.bottom();
|
|
228
225
|
}
|
|
@@ -233,7 +230,7 @@ class IntervalDomain extends abstract_domain_1.AbstractDomain {
|
|
|
233
230
|
/**
|
|
234
231
|
* Extends the upper bound of the current abstract value up to +∞.
|
|
235
232
|
*/
|
|
236
|
-
|
|
233
|
+
widenUp() {
|
|
237
234
|
if (this.value === lattice_1.Bottom) {
|
|
238
235
|
return this.bottom();
|
|
239
236
|
}
|
|
@@ -249,7 +246,7 @@ class IntervalDomain extends abstract_domain_1.AbstractDomain {
|
|
|
249
246
|
}
|
|
250
247
|
toString() {
|
|
251
248
|
if (this.value === lattice_1.Bottom) {
|
|
252
|
-
return
|
|
249
|
+
return lattice_1.BottomSymbol;
|
|
253
250
|
}
|
|
254
251
|
return `[${isFinite(this.value[0]) ? this.value[0] : '-∞'}, ${isFinite(this.value[1]) ? this.value[1] : '+∞'}]`;
|
|
255
252
|
}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
* The Top symbol to represent the Top element of complete lattices (e.g. of abstract domains).
|
|
3
3
|
*/
|
|
4
4
|
export declare const Top: unique symbol;
|
|
5
|
+
export declare const TopSymbol = "\u22A4";
|
|
5
6
|
/**
|
|
6
7
|
* The Bottom symbol to represent the Bottom element of complete lattices (e.g. of abstract domains).
|
|
7
8
|
*/
|
|
8
9
|
export declare const Bottom: unique symbol;
|
|
10
|
+
export declare const BottomSymbol = "\u22A5";
|
|
9
11
|
/**
|
|
10
12
|
* A complete lattice with a partially ordered set, join operator (LUB), meet operator (GLB), top element, and bottom element (e.g. for abstract domains).
|
|
11
13
|
* @template Value - Type of a lattice element representing a value (may exclude `Top` and `Bot`)
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Bottom = exports.Top = void 0;
|
|
3
|
+
exports.BottomSymbol = exports.Bottom = exports.TopSymbol = exports.Top = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* The Top symbol to represent the Top element of complete lattices (e.g. of abstract domains).
|
|
6
6
|
*/
|
|
7
7
|
exports.Top = Symbol('top');
|
|
8
|
+
exports.TopSymbol = '⊤';
|
|
8
9
|
/**
|
|
9
10
|
* The Bottom symbol to represent the Bottom element of complete lattices (e.g. of abstract domains).
|
|
10
11
|
*/
|
|
11
12
|
exports.Bottom = Symbol('bottom');
|
|
13
|
+
exports.BottomSymbol = '⊥';
|
|
12
14
|
//# sourceMappingURL=lattice.js.map
|
|
@@ -30,7 +30,7 @@ export declare class PosIntervalDomain<Value extends PosIntervalLift = PosInterv
|
|
|
30
30
|
/**
|
|
31
31
|
* Extends the lower bound of the current abstract value down to 0.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
widenDown(): this;
|
|
34
34
|
isTop(): this is PosIntervalDomain<PosIntervalTop>;
|
|
35
35
|
}
|
|
36
36
|
export {};
|