@eagleoutice/flowr 1.5.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
- package/abstract-interpretation/handler/binop/binop.js +4 -2
- package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
- package/abstract-interpretation/handler/binop/operators.js +14 -28
- package/abstract-interpretation/processor.d.ts +3 -2
- package/abstract-interpretation/processor.js +2 -2
- package/benchmark/slicer.d.ts +101 -0
- package/benchmark/slicer.js +214 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +151 -0
- package/benchmark/stats/stats.d.ts +42 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/benchmark/summarizer/data.d.ts +54 -0
- package/benchmark/summarizer/first-phase/input.d.ts +3 -0
- package/benchmark/summarizer/first-phase/input.js +76 -0
- package/benchmark/summarizer/first-phase/process.d.ts +11 -0
- package/benchmark/summarizer/first-phase/process.js +205 -0
- package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
- package/benchmark/summarizer/second-phase/graph.js +54 -0
- package/benchmark/summarizer/second-phase/process.d.ts +6 -0
- package/benchmark/summarizer/second-phase/process.js +127 -0
- package/benchmark/summarizer/summarizer.d.ts +31 -0
- package/benchmark/summarizer/summarizer.js +58 -0
- package/cli/benchmark-app.d.ts +10 -0
- package/cli/benchmark-app.js +67 -0
- package/cli/benchmark-helper-app.d.ts +9 -0
- package/cli/benchmark-helper-app.js +69 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +85 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +25 -0
- package/cli/common/scripts-info.js +83 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +43 -0
- package/cli/flowr.d.ts +29 -0
- package/cli/flowr.js +141 -0
- package/cli/repl/commands/cfg.d.ts +3 -0
- package/cli/repl/commands/cfg.js +37 -0
- package/cli/repl/commands/commands.d.ts +13 -0
- package/cli/repl/commands/commands.js +142 -0
- package/cli/repl/commands/dataflow.d.ts +3 -0
- package/cli/repl/commands/dataflow.js +34 -0
- package/cli/repl/commands/execute.d.ts +4 -0
- package/cli/repl/commands/execute.js +27 -0
- package/cli/repl/commands/main.d.ts +39 -0
- package/cli/repl/commands/main.js +14 -0
- package/cli/repl/commands/normalize.d.ts +3 -0
- package/cli/repl/commands/normalize.js +34 -0
- package/cli/repl/commands/parse.d.ts +2 -0
- package/cli/repl/commands/parse.js +110 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +15 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +28 -0
- package/cli/repl/core.d.ts +36 -0
- package/cli/repl/core.js +174 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/print-version.d.ts +2 -0
- package/cli/repl/print-version.js +10 -0
- package/cli/repl/prompt.d.ts +2 -0
- package/cli/repl/prompt.js +9 -0
- package/cli/repl/server/connection.d.ts +21 -0
- package/cli/repl/server/connection.js +218 -0
- package/cli/repl/server/messages/analysis.d.ts +72 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +40 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +37 -0
- package/cli/repl/server/messages/slice.d.ts +26 -0
- package/cli/repl/server/messages/slice.js +37 -0
- package/cli/repl/server/net.d.ts +49 -0
- package/cli/repl/server/net.js +63 -0
- package/cli/repl/server/send.d.ts +4 -0
- package/cli/repl/server/send.js +18 -0
- package/cli/repl/server/server.d.ts +20 -0
- package/cli/repl/server/server.js +66 -0
- package/cli/repl/server/validate.d.ts +15 -0
- package/cli/repl/server/validate.js +34 -0
- package/cli/slicer-app.d.ts +11 -0
- package/cli/slicer-app.js +83 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +99 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +87 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +66 -0
- package/core/pipeline-executor.d.ts +154 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +3 -4
- package/core/print/dataflow-printer.js +5 -5
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +3 -3
- package/core/print/parse-printer.js +3 -3
- package/core/print/print.d.ts +13 -4
- package/core/print/print.js +13 -2
- package/core/print/slice-diff-ansi.d.ts +3 -2
- package/core/print/slice-diff-ansi.js +4 -4
- package/core/steps/all/core/00-parse.d.ts +28 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.d.ts +29 -0
- package/core/steps/all/core/10-normalize.js +26 -0
- package/core/steps/all/core/20-dataflow.d.ts +27 -0
- package/core/steps/all/core/20-dataflow.js +29 -0
- package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/pipeline/create-pipeline.d.ts +6 -0
- package/core/steps/pipeline/create-pipeline.js +130 -0
- package/core/steps/pipeline/default-pipelines.d.ts +251 -0
- package/core/steps/pipeline/default-pipelines.js +18 -0
- package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.d.ts +60 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/pipeline-step.d.ts +85 -0
- package/core/steps/pipeline-step.js +8 -0
- package/dataflow/environments/append.d.ts +4 -4
- package/dataflow/environments/append.js +4 -4
- package/dataflow/environments/built-in.d.ts +25 -0
- package/dataflow/environments/built-in.js +123 -0
- package/dataflow/environments/clone.d.ts +2 -0
- package/dataflow/environments/clone.js +23 -0
- package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
- package/dataflow/environments/define.js +51 -0
- package/dataflow/environments/diff.d.ts +6 -0
- package/dataflow/environments/diff.js +85 -0
- package/dataflow/environments/environment.d.ts +10 -43
- package/dataflow/environments/environment.js +32 -138
- package/dataflow/environments/identifier.d.ts +31 -0
- package/dataflow/environments/identifier.js +3 -0
- package/dataflow/environments/overwrite.d.ts +4 -4
- package/dataflow/environments/overwrite.js +9 -22
- package/dataflow/environments/resolve-by-name.d.ts +7 -6
- package/dataflow/environments/resolve-by-name.js +35 -19
- package/dataflow/environments/scoping.js +1 -4
- package/dataflow/extractor.d.ts +6 -6
- package/dataflow/extractor.js +47 -57
- package/dataflow/graph/diff.d.ts +24 -7
- package/dataflow/graph/diff.js +114 -74
- package/dataflow/graph/edge.d.ts +66 -20
- package/dataflow/graph/edge.js +73 -27
- package/dataflow/graph/graph.d.ts +53 -29
- package/dataflow/graph/graph.js +84 -89
- package/dataflow/graph/quads.js +2 -2
- package/dataflow/graph/vertex.d.ts +37 -34
- package/dataflow/info.d.ts +49 -0
- package/dataflow/info.js +29 -0
- package/dataflow/internal/linker.d.ts +11 -10
- package/dataflow/internal/linker.js +64 -90
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
- package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
- package/dataflow/internal/process/functions/call/common.d.ts +35 -0
- package/dataflow/internal/process/functions/call/common.js +70 -0
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
- package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
- package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
- package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
- package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
- package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
- package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
- package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
- package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
- package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
- package/dataflow/internal/process/process-named-call.d.ts +6 -0
- package/dataflow/internal/process/process-named-call.js +17 -0
- package/dataflow/internal/process/process-symbol.d.ts +5 -0
- package/dataflow/internal/process/process-symbol.js +26 -0
- package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
- package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
- package/dataflow/internal/process/process-value.d.ts +4 -0
- package/dataflow/internal/process/process-value.js +22 -0
- package/dataflow/logger.d.ts +1 -0
- package/dataflow/logger.js +6 -0
- package/dataflow/processor.d.ts +18 -13
- package/dataflow/processor.js +1 -1
- package/package.json +48 -85
- package/r-bridge/data/data.d.ts +603 -0
- package/r-bridge/data/data.js +753 -0
- package/r-bridge/data/get.d.ts +19 -0
- package/r-bridge/data/get.js +51 -0
- package/r-bridge/data/print.d.ts +1 -0
- package/r-bridge/data/print.js +58 -0
- package/r-bridge/data/types.d.ts +33 -0
- package/r-bridge/data/types.js +3 -0
- package/r-bridge/init.d.ts +3 -0
- package/r-bridge/init.js +22 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
- package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
- package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
- package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
- package/r-bridge/lang-4.x/ast/model/type.js +13 -6
- package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
- package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
- package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
- package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
- package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
- package/r-bridge/retriever.d.ts +5 -5
- package/r-bridge/retriever.js +11 -24
- package/r-bridge/shell-executor.d.ts +0 -1
- package/r-bridge/shell-executor.js +7 -12
- package/r-bridge/shell.d.ts +14 -12
- package/r-bridge/shell.js +52 -47
- package/reconstruct/reconstruct.d.ts +4 -2
- package/reconstruct/reconstruct.js +193 -185
- package/slicing/criterion/collect-all.d.ts +4 -3
- package/slicing/criterion/collect-all.js +5 -1
- package/slicing/criterion/filters/all-variables.js +14 -22
- package/slicing/criterion/parse.d.ts +4 -2
- package/slicing/criterion/parse.js +13 -11
- package/slicing/static/fingerprint.d.ts +5 -0
- package/slicing/static/fingerprint.js +17 -0
- package/slicing/static/slice-call.d.ts +10 -0
- package/slicing/static/slice-call.js +86 -0
- package/slicing/static/slicer-types.d.ts +33 -0
- package/slicing/static/slicer-types.js +3 -0
- package/slicing/static/static-slicer.d.ts +6 -24
- package/slicing/static/static-slicer.js +54 -155
- package/slicing/static/visiting-queue.d.ts +23 -0
- package/slicing/static/visiting-queue.js +53 -0
- package/statistics/features/common-syntax-probability.d.ts +29 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +182 -0
- package/statistics/features/feature.js +39 -0
- package/statistics/features/post-processing.d.ts +12 -0
- package/statistics/features/post-processing.js +21 -0
- package/statistics/features/supported/assignments/assignments.d.ts +12 -0
- package/statistics/features/supported/assignments/assignments.js +55 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +124 -0
- package/statistics/features/supported/comments/comments.d.ts +18 -0
- package/statistics/features/supported/comments/comments.js +133 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +49 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +68 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +64 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +120 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +106 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +169 -0
- package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
- package/statistics/features/supported/expression-list/expression-list.js +36 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +43 -0
- package/statistics/features/supported/loops/loops.d.ts +20 -0
- package/statistics/features/supported/loops/loops.js +79 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +71 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +178 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +97 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +120 -0
- package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
- package/statistics/features/supported/used-packages/used-packages.js +130 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +71 -0
- package/statistics/features/supported/values/values.d.ts +14 -0
- package/statistics/features/supported/values/values.js +101 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +121 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +60 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/print-stats.d.ts +17 -0
- package/statistics/output/print-stats.js +69 -0
- package/statistics/output/statistics-file.d.ts +37 -0
- package/statistics/output/statistics-file.js +69 -0
- package/statistics/statistics.d.ts +28 -0
- package/statistics/statistics.js +108 -0
- package/statistics/summarizer/auto-detect.d.ts +2 -0
- package/statistics/summarizer/auto-detect.js +32 -0
- package/statistics/summarizer/first-phase/process.d.ts +6 -0
- package/statistics/summarizer/first-phase/process.js +81 -0
- package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
- package/statistics/summarizer/post-process/clusterer.js +43 -0
- package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
- package/statistics/summarizer/post-process/file-based-count.js +49 -0
- package/statistics/summarizer/post-process/histogram.d.ts +59 -0
- package/statistics/summarizer/post-process/histogram.js +128 -0
- package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
- package/statistics/summarizer/post-process/post-process-output.js +105 -0
- package/statistics/summarizer/second-phase/process.d.ts +11 -0
- package/statistics/summarizer/second-phase/process.js +116 -0
- package/statistics/summarizer/summarizer.d.ts +35 -0
- package/statistics/summarizer/summarizer.js +135 -0
- package/util/ansi.d.ts +2 -2
- package/util/ansi.js +2 -2
- package/util/arrays.d.ts +11 -1
- package/util/arrays.js +34 -1
- package/util/assert.d.ts +1 -0
- package/util/assert.js +5 -1
- package/util/cfg/cfg.d.ts +3 -2
- package/util/cfg/cfg.js +17 -28
- package/util/cfg/visitor.d.ts +1 -1
- package/util/defaultmap.d.ts +1 -1
- package/util/defaultmap.js +1 -1
- package/util/diff.d.ts +4 -4
- package/util/files.d.ts +2 -2
- package/util/files.js +1 -1
- package/util/log.d.ts +1 -0
- package/util/log.js +7 -1
- package/util/logic.d.ts +1 -0
- package/util/logic.js +3 -0
- package/util/mermaid/ast.d.ts +1 -1
- package/util/mermaid/ast.js +2 -2
- package/util/mermaid/cfg.d.ts +1 -1
- package/util/mermaid/dfg.d.ts +34 -8
- package/util/mermaid/dfg.js +99 -70
- package/util/mermaid/mermaid.d.ts +1 -1
- package/util/mermaid/mermaid.js +6 -7
- package/util/objects.js +4 -0
- package/util/quads.d.ts +3 -3
- package/util/quads.js +0 -1
- package/util/range.d.ts +27 -14
- package/util/range.js +31 -27
- package/util/version.js +1 -1
- package/core/index.d.ts +0 -4
- package/core/index.js +0 -23
- package/core/input.d.ts +0 -42
- package/core/output.d.ts +0 -15
- package/core/slicer.d.ts +0 -124
- package/core/slicer.js +0 -227
- package/core/steps.d.ts +0 -508
- package/core/steps.js +0 -100
- package/dataflow/environments/index.d.ts +0 -7
- package/dataflow/environments/index.js +0 -23
- package/dataflow/environments/register.js +0 -40
- package/dataflow/environments/scopes.d.ts +0 -6
- package/dataflow/environments/scopes.js +0 -6
- package/dataflow/graph/index.d.ts +0 -4
- package/dataflow/graph/index.js +0 -21
- package/dataflow/index.d.ts +0 -5
- package/dataflow/index.js +0 -24
- package/dataflow/internal/info.d.ts +0 -21
- package/dataflow/internal/info.js +0 -16
- package/dataflow/internal/process/access.d.ts +0 -4
- package/dataflow/internal/process/access.js +0 -53
- package/dataflow/internal/process/expression-list.d.ts +0 -8
- package/dataflow/internal/process/expression-list.js +0 -144
- package/dataflow/internal/process/functions/argument.d.ts +0 -8
- package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
- package/dataflow/internal/process/functions/exit-points.js +0 -121
- package/dataflow/internal/process/functions/function-call.d.ts +0 -5
- package/dataflow/internal/process/functions/function-call.js +0 -105
- package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
- package/dataflow/internal/process/functions/function-definition.js +0 -176
- package/dataflow/internal/process/functions/source.d.ts +0 -8
- package/dataflow/internal/process/functions/source.js +0 -81
- package/dataflow/internal/process/if-then-else.d.ts +0 -4
- package/dataflow/internal/process/if-then-else.js +0 -56
- package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/for-loop.js +0 -54
- package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/repeat-loop.js +0 -21
- package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/while-loop.js +0 -31
- package/dataflow/internal/process/operators/assignment.d.ts +0 -4
- package/dataflow/internal/process/operators/assignment.js +0 -129
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
- package/dataflow/internal/process/operators/pipe.d.ts +0 -4
- package/dataflow/internal/process/operators/pipe.js +0 -46
- package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/unary-op.js +0 -10
- package/dataflow/internal/process/symbol.d.ts +0 -4
- package/dataflow/internal/process/symbol.js +0 -21
- package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
- package/dataflow/internal/process/uninteresting-leaf.js +0 -9
- package/index.d.ts +0 -4
- package/index.js +0 -21
- package/r-bridge/index.d.ts +0 -11
- package/r-bridge/index.js +0 -28
- package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/index.js +0 -22
- package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/model/index.js +0 -23
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
- package/r-bridge/lang-4.x/index.d.ts +0 -2
- package/r-bridge/lang-4.x/index.js +0 -19
- package/slicing/criterion/filters/index.d.ts +0 -1
- package/slicing/criterion/filters/index.js +0 -18
- package/slicing/criterion/index.d.ts +0 -3
- package/slicing/criterion/index.js +0 -20
- package/slicing/index.d.ts +0 -3
- package/slicing/index.js +0 -20
- package/slicing/static/index.d.ts +0 -1
- package/slicing/static/index.js +0 -18
- package/util/mermaid/index.d.ts +0 -3
- package/util/mermaid/index.js +0 -20
- /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
|
@@ -1,67 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.UnaryOperatorsInRAst = exports.OperatorsInRAst = exports.Operators = exports.OperatorDatabase = void 0;
|
|
4
4
|
/* eslint-disable */
|
|
5
5
|
exports.OperatorDatabase = {
|
|
6
6
|
/* model formulae */
|
|
7
|
-
'~': { name: 'model formulae', stringUsedInRAst: "~" /* RawRType.Tilde */, stringUsedInternally: '~',
|
|
7
|
+
'~': { name: 'model formulae', stringUsedInRAst: "~" /* RawRType.Tilde */, stringUsedInternally: '~', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'model-formula', 'function-calls'] },
|
|
8
8
|
/* arithmetic */
|
|
9
|
-
'+': { name: 'addition or unary +', stringUsedInRAst: "+" /* RawRType.Plus */, stringUsedInternally: '+',
|
|
10
|
-
'-': { name: 'subtraction or unary -', stringUsedInRAst: "-" /* RawRType.Minus */, stringUsedInternally: '-',
|
|
11
|
-
'*': { name: 'multiplication', stringUsedInRAst: "*" /* RawRType.Times */, stringUsedInternally: '*',
|
|
12
|
-
'/': { name: 'division', stringUsedInRAst: "/" /* RawRType.Div */, stringUsedInternally: '/',
|
|
13
|
-
'^': { name: 'exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '^',
|
|
9
|
+
'+': { name: 'addition or unary +', stringUsedInRAst: "+" /* RawRType.Plus */, stringUsedInternally: '+', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['function-calls'] },
|
|
10
|
+
'-': { name: 'subtraction or unary -', stringUsedInRAst: "-" /* RawRType.Minus */, stringUsedInternally: '-', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation', capabilities: ['function-calls'] },
|
|
11
|
+
'*': { name: 'multiplication', stringUsedInRAst: "*" /* RawRType.Times */, stringUsedInternally: '*', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
12
|
+
'/': { name: 'division', stringUsedInRAst: "/" /* RawRType.Div */, stringUsedInternally: '/', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
13
|
+
'^': { name: 'exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '^', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
14
14
|
/* no error, R uses ^ to represent ** in the AST */
|
|
15
|
-
'**': { name: 'alternative exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '**',
|
|
16
|
-
'%%': { name: 'modulus', stringUsedInRAst: '%%', stringUsedInternally: '%%',
|
|
17
|
-
'%/%': { name: 'integer division', stringUsedInRAst: '%/%', stringUsedInternally: '%/%',
|
|
18
|
-
'%*%': { name: 'matrix product', stringUsedInRAst: '%*%', stringUsedInternally: '%*%',
|
|
19
|
-
'%o%': { name: 'outer product', stringUsedInRAst: '%o%', stringUsedInternally: '%o%',
|
|
20
|
-
'%x%': { name: 'kronecker product', stringUsedInRAst: '%x%', stringUsedInternally: '%x%',
|
|
15
|
+
'**': { name: 'alternative exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '**', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
16
|
+
'%%': { name: 'modulus', stringUsedInRAst: '%%', stringUsedInternally: '%%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
17
|
+
'%/%': { name: 'integer division', stringUsedInRAst: '%/%', stringUsedInternally: '%/%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
18
|
+
'%*%': { name: 'matrix product', stringUsedInRAst: '%*%', stringUsedInternally: '%*%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
19
|
+
'%o%': { name: 'outer product', stringUsedInRAst: '%o%', stringUsedInternally: '%o%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
20
|
+
'%x%': { name: 'kronecker product', stringUsedInRAst: '%x%', stringUsedInternally: '%x%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
21
21
|
/* comparison */
|
|
22
|
-
'==': { name: 'equal to', stringUsedInRAst: "EQ" /* RawRType.Eq */, stringUsedInternally: '==',
|
|
23
|
-
'!=': { name: 'not equal to', stringUsedInRAst: "NE" /* RawRType.Ne */, stringUsedInternally: '!=',
|
|
24
|
-
'>': { name: 'greater than', stringUsedInRAst: "GT" /* RawRType.Gt */, stringUsedInternally: '>',
|
|
25
|
-
'>=': { name: 'greater than or equal to', stringUsedInRAst: "GE" /* RawRType.Ge */, stringUsedInternally: '>=',
|
|
26
|
-
'<': { name: 'less than', stringUsedInRAst: "LT" /* RawRType.Lt */, stringUsedInternally: '<',
|
|
27
|
-
'<=': { name: 'less than or equal to', stringUsedInRAst: "LE" /* RawRType.Le */, stringUsedInternally: '<=',
|
|
22
|
+
'==': { name: 'equal to', stringUsedInRAst: "EQ" /* RawRType.Eq */, stringUsedInternally: '==', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
23
|
+
'!=': { name: 'not equal to', stringUsedInRAst: "NE" /* RawRType.Ne */, stringUsedInternally: '!=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
24
|
+
'>': { name: 'greater than', stringUsedInRAst: "GT" /* RawRType.Gt */, stringUsedInternally: '>', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
25
|
+
'>=': { name: 'greater than or equal to', stringUsedInRAst: "GE" /* RawRType.Ge */, stringUsedInternally: '>=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
26
|
+
'<': { name: 'less than', stringUsedInRAst: "LT" /* RawRType.Lt */, stringUsedInternally: '<', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
27
|
+
'<=': { name: 'less than or equal to', stringUsedInRAst: "LE" /* RawRType.Le */, stringUsedInternally: '<=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls'] },
|
|
28
28
|
/* logical */
|
|
29
|
-
'&': { name: 'logical and (vectorized)', stringUsedInRAst: "AND" /* RawRType.And */, stringUsedInternally: '&',
|
|
30
|
-
'&&': { name: 'logical and (non-vectorized)', stringUsedInRAst: "AND2" /* RawRType.And2 */, stringUsedInternally: '&&',
|
|
31
|
-
'|': { name: 'logical or (vectorized)', stringUsedInRAst: "OR" /* RawRType.Or */, stringUsedInternally: '|',
|
|
32
|
-
'||': { name: 'logical or (not-vectorized)', stringUsedInRAst: "OR2" /* RawRType.Or2 */, stringUsedInternally: '||',
|
|
33
|
-
'!': { name: 'unary not', stringUsedInRAst: "!" /* RawRType.Exclamation */, stringUsedInternally: '!',
|
|
34
|
-
'%in%': { name: 'matching operator', stringUsedInRAst: '%in%', stringUsedInternally: '%in%',
|
|
29
|
+
'&': { name: 'logical and (vectorized)', stringUsedInRAst: "AND" /* RawRType.And */, stringUsedInternally: '&', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
|
|
30
|
+
'&&': { name: 'logical and (non-vectorized)', stringUsedInRAst: "AND2" /* RawRType.And2 */, stringUsedInternally: '&&', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
|
|
31
|
+
'|': { name: 'logical or (vectorized)', stringUsedInRAst: "OR" /* RawRType.Or */, stringUsedInternally: '|', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
|
|
32
|
+
'||': { name: 'logical or (not-vectorized)', stringUsedInRAst: "OR2" /* RawRType.Or2 */, stringUsedInternally: '||', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'non-strict-logical-operators'] },
|
|
33
|
+
'!': { name: 'unary not', stringUsedInRAst: "!" /* RawRType.Exclamation */, stringUsedInternally: '!', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation', capabilities: ['unary-operator', 'function-calls'] },
|
|
34
|
+
'%in%': { name: 'matching operator', stringUsedInRAst: '%in%', stringUsedInternally: '%in%', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'special-operator', 'function-calls'] },
|
|
35
35
|
/* assignment */
|
|
36
|
-
'<-': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<-',
|
|
37
|
-
':=': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: ':=',
|
|
38
|
-
'<<-': { name: 'left global assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<<-',
|
|
39
|
-
'->': { name: 'right assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->',
|
|
40
|
-
'->>': { name: 'right global assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->>',
|
|
41
|
-
'=': { name: 'equal assignment', stringUsedInRAst: "EQ_ASSIGN" /* RawRType.EqualAssign */, stringUsedInternally: '=',
|
|
36
|
+
'<-': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<-', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-left-assignment', 'function-calls'] },
|
|
37
|
+
':=': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: ':=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-equal-assignment', 'function-calls'] },
|
|
38
|
+
'<<-': { name: 'left global assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<<-', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'super-left-assignment', 'function-calls'] },
|
|
39
|
+
'->': { name: 'right assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-right-assignment', 'function-calls'] },
|
|
40
|
+
'->>': { name: 'right global assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->>', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'super-right-assignment', 'function-calls'] },
|
|
41
|
+
'=': { name: 'equal assignment', stringUsedInRAst: "EQ_ASSIGN" /* RawRType.EqualAssign */, stringUsedInternally: '=', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment', capabilities: ['binary-operator', 'infix-calls', 'assignment-functions', 'local-equal-assignment', 'function-calls'] },
|
|
42
42
|
/* others */
|
|
43
43
|
/* maybe introduce custom in-r-ast flavor for these? we consider it arithmetic, as it works on numbers => if we change this we have to create custom tests! (with arithmetic, there is the automatic test set) */
|
|
44
|
-
':': { name: 'sequence operator', stringUsedInRAst: ":" /* RawRType.Colon */, stringUsedInternally: ':',
|
|
45
|
-
'?': { name: 'question', stringUsedInRAst: "?" /* RawRType.Question */, stringUsedInternally: '?',
|
|
44
|
+
':': { name: 'sequence operator', stringUsedInRAst: ":" /* RawRType.Colon */, stringUsedInternally: ':', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation', capabilities: ['binary-operator', 'infix-calls', 'function-calls', 'built-in-sequencing'] },
|
|
45
|
+
'?': { name: 'question', stringUsedInRAst: "?" /* RawRType.Question */, stringUsedInternally: '?', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation', capabilities: ['unary-operator', 'built-in-help'] }
|
|
46
46
|
};
|
|
47
47
|
/* eslint-enable */
|
|
48
48
|
function buildOperatorRAstCollection(operators) {
|
|
49
49
|
return new Set(operators.map(op => exports.OperatorDatabase[op].stringUsedInRAst));
|
|
50
50
|
}
|
|
51
|
-
exports.
|
|
51
|
+
exports.Operators = Object.keys(exports.OperatorDatabase);
|
|
52
52
|
// '**' will be treated as '^'
|
|
53
|
-
exports.
|
|
54
|
-
exports.
|
|
55
|
-
exports.ComparisonOperatorsRAst = buildOperatorRAstCollection(exports.ComparisonOperators);
|
|
56
|
-
exports.LogicalOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'logical');
|
|
57
|
-
exports.LogicalOperatorsRAst = buildOperatorRAstCollection(exports.LogicalOperators);
|
|
58
|
-
exports.ModelFormulaOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'model formula');
|
|
59
|
-
exports.ModelFormulaOperatorsRAst = buildOperatorRAstCollection(exports.ModelFormulaOperators);
|
|
60
|
-
exports.Assignments = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'assignment');
|
|
61
|
-
exports.AssignmentsRAst = buildOperatorRAstCollection(exports.Assignments);
|
|
62
|
-
exports.Operators = [
|
|
63
|
-
...exports.ArithmeticOperators,
|
|
64
|
-
...exports.ComparisonOperators,
|
|
65
|
-
...exports.LogicalOperators,
|
|
66
|
-
];
|
|
53
|
+
exports.OperatorsInRAst = buildOperatorRAstCollection(exports.Operators);
|
|
54
|
+
exports.UnaryOperatorsInRAst = buildOperatorRAstCollection(exports.Operators.filter(op => exports.OperatorDatabase[op].arity !== 2 /* OperatorArity.Binary */));
|
|
67
55
|
//# sourceMappingURL=operators.js.map
|
|
@@ -13,10 +13,8 @@ import type { SourceRange } from '../../../../../util/range';
|
|
|
13
13
|
import { BiMap } from '../../../../../util/bimap';
|
|
14
14
|
import type { MergeableRecord } from '../../../../../util/objects';
|
|
15
15
|
import { RoleInParent } from './role';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
__brand?: 'node-id';
|
|
19
|
-
};
|
|
16
|
+
import type { NodeId } from './node-id';
|
|
17
|
+
import type { RDelimiter } from '../nodes/info/r-delimiter';
|
|
20
18
|
/**
|
|
21
19
|
* A function that given an RNode returns a (guaranteed) unique id for it
|
|
22
20
|
* @param data - the node to generate an id for
|
|
@@ -27,27 +25,33 @@ export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
|
|
|
27
25
|
/**
|
|
28
26
|
* The simplest id generator which just increments a number on each call.
|
|
29
27
|
*/
|
|
30
|
-
export declare function deterministicCountingIdGenerator(
|
|
28
|
+
export declare function deterministicCountingIdGenerator(id?: number): () => NodeId;
|
|
31
29
|
export declare function sourcedDeterministicCountingIdGenerator(path: string, location: SourceRange, start?: number): () => NodeId;
|
|
32
30
|
/**
|
|
33
31
|
* Generates the location id, used by {@link deterministicLocationIdGenerator}.
|
|
34
32
|
*
|
|
35
33
|
* @param data - the node to generate an id for, must have location information
|
|
36
34
|
*/
|
|
37
|
-
export declare function nodeToLocationId<OtherInfo>(data: RNode<OtherInfo>): NodeId;
|
|
35
|
+
export declare function nodeToLocationId<OtherInfo>(data: RNode<OtherInfo> | RDelimiter): NodeId;
|
|
38
36
|
/**
|
|
39
37
|
* Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
|
|
40
|
-
* If a node has no location information, it will be assigned a unique counter
|
|
38
|
+
* If a node has no location information, it will be assigned a unique counter-value.
|
|
41
39
|
*
|
|
42
|
-
* @param start - the start value for the counter in case nodes do not have
|
|
40
|
+
* @param start - the start value for the counter, in case nodes do not have location information
|
|
43
41
|
*/
|
|
44
42
|
export declare function deterministicLocationIdGenerator<OtherInfo>(start?: number): IdGenerator<OtherInfo>;
|
|
45
43
|
export interface ParentContextInfo extends MergeableRecord {
|
|
46
44
|
role: RoleInParent;
|
|
47
45
|
/**
|
|
48
|
-
*
|
|
46
|
+
* The depth of the node in the AST
|
|
49
47
|
*
|
|
50
|
-
* The
|
|
48
|
+
* The root node has a depth of 0, its children a depth of 1, and so on.
|
|
49
|
+
*/
|
|
50
|
+
depth: number;
|
|
51
|
+
/**
|
|
52
|
+
* 0-based index of the child in the parent (code semantics, e.g., for an if-then-else, the condition will be 0, the then-case will be 1, ...)
|
|
53
|
+
*
|
|
54
|
+
* The index is adaptive, that means that if the name of an argument exists, it will have index 0, and the value will have index 1.
|
|
51
55
|
* But if the argument is unnamed, its value will get the index 0 instead.
|
|
52
56
|
*/
|
|
53
57
|
index: number;
|
|
@@ -59,16 +63,16 @@ export interface ParentInformation extends ParentContextInfo {
|
|
|
59
63
|
parent: NodeId | undefined;
|
|
60
64
|
}
|
|
61
65
|
export type RNodeWithParent<OtherInfo = NoInfo> = RNode<OtherInfo & ParentInformation>;
|
|
62
|
-
export type
|
|
66
|
+
export type AstIdMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherInfo>>;
|
|
63
67
|
/**
|
|
64
68
|
* Contains the normalized AST as a doubly linked tree
|
|
65
69
|
* and a map from ids to nodes so that parent links can be chased easily.
|
|
66
70
|
*/
|
|
67
|
-
export interface NormalizedAst<OtherInfo = ParentInformation
|
|
71
|
+
export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<OtherInfo & ParentInformation>> {
|
|
68
72
|
/** Bidirectional mapping of ids to the corresponding nodes and the other way */
|
|
69
|
-
idMap:
|
|
73
|
+
idMap: AstIdMap<OtherInfo>;
|
|
70
74
|
/** The root of the AST with parent information */
|
|
71
|
-
ast:
|
|
75
|
+
ast: Node;
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
74
78
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
@@ -78,6 +82,6 @@ export interface NormalizedAst<OtherInfo = ParentInformation> {
|
|
|
78
82
|
*
|
|
79
83
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
80
84
|
*
|
|
81
|
-
* @returns A
|
|
85
|
+
* @returns A decorated AST based on the input and the id provider.
|
|
82
86
|
*/
|
|
83
87
|
export declare function decorateAst<OtherInfo = NoInfo>(ast: RNode<OtherInfo>, getId?: IdGenerator<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
|
|
@@ -13,13 +13,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.decorateAst = exports.deterministicLocationIdGenerator = exports.nodeToLocationId = exports.sourcedDeterministicCountingIdGenerator = exports.deterministicCountingIdGenerator = void 0;
|
|
14
14
|
const assert_1 = require("../../../../../util/assert");
|
|
15
15
|
const bimap_1 = require("../../../../../util/bimap");
|
|
16
|
-
const
|
|
16
|
+
const stateful_fold_1 = require("./stateful-fold");
|
|
17
|
+
const r_function_call_1 = require("../nodes/r-function-call");
|
|
17
18
|
/**
|
|
18
19
|
* The simplest id generator which just increments a number on each call.
|
|
19
20
|
*/
|
|
20
|
-
function deterministicCountingIdGenerator(
|
|
21
|
-
|
|
22
|
-
return () => `${id++}`;
|
|
21
|
+
function deterministicCountingIdGenerator(id = 0) {
|
|
22
|
+
return () => id++;
|
|
23
23
|
}
|
|
24
24
|
exports.deterministicCountingIdGenerator = deterministicCountingIdGenerator;
|
|
25
25
|
function sourcedDeterministicCountingIdGenerator(path, location, start = 0) {
|
|
@@ -27,8 +27,8 @@ function sourcedDeterministicCountingIdGenerator(path, location, start = 0) {
|
|
|
27
27
|
return () => `${path}-${loc2Id(location)}-${id++}`;
|
|
28
28
|
}
|
|
29
29
|
exports.sourcedDeterministicCountingIdGenerator = sourcedDeterministicCountingIdGenerator;
|
|
30
|
-
function loc2Id(
|
|
31
|
-
return `${
|
|
30
|
+
function loc2Id([sl, sc, el, ec]) {
|
|
31
|
+
return `${sl}:${sc}-${el}:${ec}`;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Generates the location id, used by {@link deterministicLocationIdGenerator}.
|
|
@@ -43,16 +43,19 @@ function nodeToLocationId(data) {
|
|
|
43
43
|
exports.nodeToLocationId = nodeToLocationId;
|
|
44
44
|
/**
|
|
45
45
|
* Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
|
|
46
|
-
* If a node has no location information, it will be assigned a unique counter
|
|
46
|
+
* If a node has no location information, it will be assigned a unique counter-value.
|
|
47
47
|
*
|
|
48
|
-
* @param start - the start value for the counter in case nodes do not have
|
|
48
|
+
* @param start - the start value for the counter, in case nodes do not have location information
|
|
49
49
|
*/
|
|
50
50
|
function deterministicLocationIdGenerator(start = 0) {
|
|
51
51
|
let id = start;
|
|
52
52
|
return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
53
53
|
}
|
|
54
54
|
exports.deterministicLocationIdGenerator = deterministicLocationIdGenerator;
|
|
55
|
-
const defaultParentContext = {
|
|
55
|
+
const defaultParentContext = {
|
|
56
|
+
role: "root" /* RoleInParent.Root */,
|
|
57
|
+
index: 0
|
|
58
|
+
};
|
|
56
59
|
/**
|
|
57
60
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
58
61
|
*
|
|
@@ -61,34 +64,26 @@ const defaultParentContext = { role: "root" /* RoleInParent.Root */, index: 0 };
|
|
|
61
64
|
*
|
|
62
65
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
63
66
|
*
|
|
64
|
-
* @returns A
|
|
67
|
+
* @returns A decorated AST based on the input and the id provider.
|
|
65
68
|
*/
|
|
66
69
|
function decorateAst(ast, getId = deterministicCountingIdGenerator(0)) {
|
|
67
70
|
const idMap = new bimap_1.BiMap();
|
|
68
71
|
const info = { idMap, getId };
|
|
69
|
-
/* Please note, that all fold processors do not re-create copies in higher
|
|
72
|
+
/* Please note, that all fold processors do not re-create copies in higher-folding steps so that the idMap stays intact. */
|
|
70
73
|
const foldLeaf = createFoldForLeaf(info);
|
|
71
74
|
const foldBinaryOp = createFoldForBinaryOp(info);
|
|
72
75
|
const unaryOp = createFoldForUnaryOp(info);
|
|
73
|
-
|
|
76
|
+
/* we pass down the depth */
|
|
77
|
+
const decoratedAst = (0, stateful_fold_1.foldAstStateful)(ast, -1, {
|
|
78
|
+
down: (_, down) => down + 1,
|
|
74
79
|
foldNumber: foldLeaf,
|
|
75
80
|
foldString: foldLeaf,
|
|
76
81
|
foldLogical: foldLeaf,
|
|
77
82
|
foldSymbol: foldLeaf,
|
|
78
83
|
foldAccess: createFoldForAccess(info),
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
foldComparisonOp: foldBinaryOp,
|
|
83
|
-
foldAssignment: foldBinaryOp,
|
|
84
|
-
foldPipe: foldBinaryOp,
|
|
85
|
-
foldModelFormula: foldBinaryOp
|
|
86
|
-
},
|
|
87
|
-
unaryOp: {
|
|
88
|
-
foldArithmeticOp: unaryOp,
|
|
89
|
-
foldLogicalOp: unaryOp,
|
|
90
|
-
foldModelFormula: unaryOp
|
|
91
|
-
},
|
|
84
|
+
foldBinaryOp: foldBinaryOp,
|
|
85
|
+
foldPipe: foldBinaryOp,
|
|
86
|
+
foldUnaryOp: unaryOp,
|
|
92
87
|
other: {
|
|
93
88
|
foldComment: foldLeaf,
|
|
94
89
|
foldLineDirective: foldLeaf
|
|
@@ -118,17 +113,26 @@ function decorateAst(ast, getId = deterministicCountingIdGenerator(0)) {
|
|
|
118
113
|
}
|
|
119
114
|
exports.decorateAst = decorateAst;
|
|
120
115
|
function createFoldForLeaf(info) {
|
|
121
|
-
return (data) => {
|
|
116
|
+
return (data, depth) => {
|
|
122
117
|
const id = info.getId(data);
|
|
123
|
-
const decorated = {
|
|
118
|
+
const decorated = {
|
|
119
|
+
...data,
|
|
120
|
+
info: {
|
|
121
|
+
...data.info,
|
|
122
|
+
id,
|
|
123
|
+
parent: undefined,
|
|
124
|
+
...defaultParentContext,
|
|
125
|
+
depth
|
|
126
|
+
}
|
|
127
|
+
};
|
|
124
128
|
info.idMap.set(id, decorated);
|
|
125
129
|
return decorated;
|
|
126
130
|
};
|
|
127
131
|
}
|
|
128
132
|
function createFoldForBinaryOp(info) {
|
|
129
|
-
return (data, lhs, rhs) => {
|
|
133
|
+
return (data, lhs, rhs, depth) => {
|
|
130
134
|
const id = info.getId(data);
|
|
131
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, lhs, rhs };
|
|
135
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, lhs, rhs };
|
|
132
136
|
info.idMap.set(id, decorated);
|
|
133
137
|
const lhsInfo = lhs.info;
|
|
134
138
|
lhsInfo.parent = id;
|
|
@@ -147,9 +151,9 @@ function createFoldForBinaryOp(info) {
|
|
|
147
151
|
};
|
|
148
152
|
}
|
|
149
153
|
function createFoldForUnaryOp(info) {
|
|
150
|
-
return (data, operand) => {
|
|
154
|
+
return (data, operand, depth) => {
|
|
151
155
|
const id = info.getId(data);
|
|
152
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, operand };
|
|
156
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, operand };
|
|
153
157
|
info.idMap.set(id, decorated);
|
|
154
158
|
const opInfo = operand.info;
|
|
155
159
|
opInfo.parent = id;
|
|
@@ -158,9 +162,9 @@ function createFoldForUnaryOp(info) {
|
|
|
158
162
|
};
|
|
159
163
|
}
|
|
160
164
|
function createFoldForAccess(info) {
|
|
161
|
-
return (data, accessed, access) => {
|
|
165
|
+
return (data, accessed, access, depth) => {
|
|
162
166
|
const id = info.getId(data);
|
|
163
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, accessed, access };
|
|
167
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, accessed, access };
|
|
164
168
|
info.idMap.set(id, decorated);
|
|
165
169
|
const accessedInfo = accessed.info;
|
|
166
170
|
accessedInfo.parent = id;
|
|
@@ -169,7 +173,7 @@ function createFoldForAccess(info) {
|
|
|
169
173
|
let idx = 0; // the first oe will be skipped in the first iter
|
|
170
174
|
for (const acc of access) {
|
|
171
175
|
idx++;
|
|
172
|
-
if (acc !==
|
|
176
|
+
if (acc !== r_function_call_1.EmptyArgument) {
|
|
173
177
|
const curInfo = acc.info;
|
|
174
178
|
curInfo.parent = id;
|
|
175
179
|
curInfo.index = idx;
|
|
@@ -181,9 +185,9 @@ function createFoldForAccess(info) {
|
|
|
181
185
|
};
|
|
182
186
|
}
|
|
183
187
|
function createFoldForForLoop(info) {
|
|
184
|
-
return (data, variable, vector, body) => {
|
|
188
|
+
return (data, variable, vector, body, depth) => {
|
|
185
189
|
const id = info.getId(data);
|
|
186
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, variable, vector, body };
|
|
190
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, variable, vector, body };
|
|
187
191
|
info.idMap.set(id, decorated);
|
|
188
192
|
const varInfo = variable.info;
|
|
189
193
|
varInfo.parent = id;
|
|
@@ -200,9 +204,9 @@ function createFoldForForLoop(info) {
|
|
|
200
204
|
};
|
|
201
205
|
}
|
|
202
206
|
function createFoldForRepeatLoop(info) {
|
|
203
|
-
return (data, body) => {
|
|
207
|
+
return (data, body, depth) => {
|
|
204
208
|
const id = info.getId(data);
|
|
205
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, body };
|
|
209
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, body };
|
|
206
210
|
info.idMap.set(id, decorated);
|
|
207
211
|
const bodyInfo = body.info;
|
|
208
212
|
bodyInfo.parent = id;
|
|
@@ -211,9 +215,9 @@ function createFoldForRepeatLoop(info) {
|
|
|
211
215
|
};
|
|
212
216
|
}
|
|
213
217
|
function createFoldForWhileLoop(info) {
|
|
214
|
-
return (data, condition, body) => {
|
|
218
|
+
return (data, condition, body, depth) => {
|
|
215
219
|
const id = info.getId(data);
|
|
216
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, body };
|
|
220
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, condition, body };
|
|
217
221
|
info.idMap.set(id, decorated);
|
|
218
222
|
const condInfo = condition.info;
|
|
219
223
|
condInfo.parent = id;
|
|
@@ -226,9 +230,9 @@ function createFoldForWhileLoop(info) {
|
|
|
226
230
|
};
|
|
227
231
|
}
|
|
228
232
|
function createFoldForIfThenElse(info) {
|
|
229
|
-
return (data, condition, then, otherwise) => {
|
|
233
|
+
return (data, condition, then, otherwise, depth) => {
|
|
230
234
|
const id = info.getId(data);
|
|
231
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, then, otherwise };
|
|
235
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, condition, then, otherwise };
|
|
232
236
|
info.idMap.set(id, decorated);
|
|
233
237
|
const condInfo = condition.info;
|
|
234
238
|
condInfo.parent = id;
|
|
@@ -247,9 +251,9 @@ function createFoldForIfThenElse(info) {
|
|
|
247
251
|
};
|
|
248
252
|
}
|
|
249
253
|
function createFoldForExprList(info) {
|
|
250
|
-
return (data, children) => {
|
|
254
|
+
return (data, grouping, children, depth) => {
|
|
251
255
|
const id = info.getId(data);
|
|
252
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, children };
|
|
256
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, grouping, children };
|
|
253
257
|
info.idMap.set(id, decorated);
|
|
254
258
|
let i = 0;
|
|
255
259
|
for (const child of children) {
|
|
@@ -262,14 +266,14 @@ function createFoldForExprList(info) {
|
|
|
262
266
|
};
|
|
263
267
|
}
|
|
264
268
|
function createFoldForFunctionCall(info) {
|
|
265
|
-
return (data, functionName, args) => {
|
|
269
|
+
return (data, functionName, args, depth) => {
|
|
266
270
|
const id = info.getId(data);
|
|
267
271
|
let decorated;
|
|
268
272
|
if (data.flavor === 'named') {
|
|
269
|
-
decorated = { ...data, info: { ...data.info, id, parent: undefined }, functionName, arguments: args };
|
|
273
|
+
decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, functionName, arguments: args };
|
|
270
274
|
}
|
|
271
275
|
else {
|
|
272
|
-
decorated = { ...data, info: { ...data.info, id, parent: undefined }, calledFunction: functionName, arguments: args };
|
|
276
|
+
decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, calledFunction: functionName, arguments: args };
|
|
273
277
|
}
|
|
274
278
|
info.idMap.set(id, decorated);
|
|
275
279
|
const funcInfo = functionName.info;
|
|
@@ -278,19 +282,20 @@ function createFoldForFunctionCall(info) {
|
|
|
278
282
|
let idx = 0;
|
|
279
283
|
for (const arg of args) {
|
|
280
284
|
idx++;
|
|
281
|
-
if (arg !==
|
|
285
|
+
if (arg !== r_function_call_1.EmptyArgument) {
|
|
282
286
|
const argInfo = arg.info;
|
|
283
287
|
argInfo.parent = id;
|
|
284
288
|
argInfo.index = idx;
|
|
289
|
+
argInfo.role = "call-argument" /* RoleInParent.FunctionCallArgument */;
|
|
285
290
|
}
|
|
286
291
|
}
|
|
287
292
|
return decorated;
|
|
288
293
|
};
|
|
289
294
|
}
|
|
290
295
|
function createFoldForFunctionDefinition(info) {
|
|
291
|
-
return (data, params, body) => {
|
|
296
|
+
return (data, params, body, depth) => {
|
|
292
297
|
const id = info.getId(data);
|
|
293
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, parameters: params, body };
|
|
298
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, parameters: params, body };
|
|
294
299
|
info.idMap.set(id, decorated);
|
|
295
300
|
let idx = 0;
|
|
296
301
|
for (const param of params) {
|
|
@@ -307,9 +312,9 @@ function createFoldForFunctionDefinition(info) {
|
|
|
307
312
|
};
|
|
308
313
|
}
|
|
309
314
|
function createFoldForFunctionParameter(info) {
|
|
310
|
-
return (data, name, defaultValue) => {
|
|
315
|
+
return (data, name, defaultValue, depth) => {
|
|
311
316
|
const id = info.getId(data);
|
|
312
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, defaultValue };
|
|
317
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, name, defaultValue };
|
|
313
318
|
info.idMap.set(id, decorated);
|
|
314
319
|
const nameInfo = name.info;
|
|
315
320
|
nameInfo.parent = id;
|
|
@@ -324,9 +329,9 @@ function createFoldForFunctionParameter(info) {
|
|
|
324
329
|
};
|
|
325
330
|
}
|
|
326
331
|
function createFoldForFunctionArgument(info) {
|
|
327
|
-
return (data, name, value) => {
|
|
332
|
+
return (data, name, value, depth) => {
|
|
328
333
|
const id = info.getId(data);
|
|
329
|
-
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, value };
|
|
334
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, depth }, name, value };
|
|
330
335
|
info.idMap.set(id, decorated);
|
|
331
336
|
let idx = 0;
|
|
332
337
|
if (name) {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AstIdMap } from './decorate';
|
|
2
|
+
/** The type of the id assigned to each node. Branded to avoid problematic usages with other string or numeric types. */
|
|
3
|
+
export type NodeId<T extends string | number = string | number> = T & {
|
|
4
|
+
__brand?: 'node-id';
|
|
5
|
+
};
|
|
6
|
+
/** used so that we do not have to store strings for the default numeric ids */
|
|
7
|
+
export declare function normalizeIdToNumberIfPossible(id: NodeId): NodeId;
|
|
8
|
+
export declare function recoverName(id: NodeId, idMap?: AstIdMap): string | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recoverName = exports.normalizeIdToNumberIfPossible = void 0;
|
|
4
|
+
const numIdRegex = /^\d+$/;
|
|
5
|
+
/** used so that we do not have to store strings for the default numeric ids */
|
|
6
|
+
function normalizeIdToNumberIfPossible(id) {
|
|
7
|
+
// check if string is number
|
|
8
|
+
if (typeof id === 'string' && numIdRegex.test(id)) {
|
|
9
|
+
return Number(id);
|
|
10
|
+
}
|
|
11
|
+
return id;
|
|
12
|
+
}
|
|
13
|
+
exports.normalizeIdToNumberIfPossible = normalizeIdToNumberIfPossible;
|
|
14
|
+
function recoverName(id, idMap) {
|
|
15
|
+
return idMap?.get(id)?.lexeme;
|
|
16
|
+
}
|
|
17
|
+
exports.recoverName = recoverName;
|
|
18
|
+
//# sourceMappingURL=node-id.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AstIdMap, RNodeWithParent } from './decorate';
|
|
2
2
|
/**
|
|
3
3
|
* Describes the role of the node in its parent. For example,
|
|
4
4
|
* if we have `if(TRUE) { ... }`, the role of the `TRUE` node is `IfCondition`.
|
|
@@ -38,4 +38,4 @@ export declare const enum RoleInParent {
|
|
|
38
38
|
/**
|
|
39
39
|
* Returns the roles of the parents of the given node, starting with the parent-role of the node itself.
|
|
40
40
|
*/
|
|
41
|
-
export declare function rolesOfParents(node: RNodeWithParent, idMap:
|
|
41
|
+
export declare function rolesOfParents(node: RNodeWithParent, idMap: AstIdMap): RoleInParent[];
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { DeepReadonly } from 'ts-essentials';
|
|
2
|
-
import type { RExpressionList, RNumber, RSymbol, RLogical, RString, RArithmeticBinaryOp, RAssignmentOp, RComparisonBinaryOp, RLogicalBinaryOp, RArithmeticUnaryOp, RLogicalUnaryOp, RIfThenElse, RForLoop, RRepeatLoop, RWhileLoop, RFunctionCall, RComment, RNext, RBreak, RParameter, RArgument, RFunctionDefinition, RAccess, RModelFormulaBinaryOp, RModelFormulaUnaryOp, RLineDirective, RPipe } from '../nodes';
|
|
3
2
|
import type { RNode } from '../model';
|
|
3
|
+
import type { RNumber } from '../nodes/r-number';
|
|
4
|
+
import type { RString } from '../nodes/r-string';
|
|
5
|
+
import type { RLogical } from '../nodes/r-logical';
|
|
6
|
+
import type { RSymbol } from '../nodes/r-symbol';
|
|
7
|
+
import type { RAccess } from '../nodes/r-access';
|
|
8
|
+
import type { RBinaryOp } from '../nodes/r-binary-op';
|
|
9
|
+
import type { RPipe } from '../nodes/r-pipe';
|
|
10
|
+
import type { RUnaryOp } from '../nodes/r-unary-op';
|
|
11
|
+
import type { RFunctionCall } from '../nodes/r-function-call';
|
|
12
|
+
import { EmptyArgument } from '../nodes/r-function-call';
|
|
13
|
+
import type { RForLoop } from '../nodes/r-for-loop';
|
|
14
|
+
import type { RWhileLoop } from '../nodes/r-while-loop';
|
|
15
|
+
import type { RRepeatLoop } from '../nodes/r-repeat-loop';
|
|
16
|
+
import type { RNext } from '../nodes/r-next';
|
|
17
|
+
import type { RBreak } from '../nodes/r-break';
|
|
18
|
+
import type { RComment } from '../nodes/r-comment';
|
|
19
|
+
import type { RLineDirective } from '../nodes/r-line-directive';
|
|
20
|
+
import type { RIfThenElse } from '../nodes/r-if-then-else';
|
|
21
|
+
import type { RExpressionList } from '../nodes/r-expression-list';
|
|
22
|
+
import type { RFunctionDefinition } from '../nodes/r-function-definition';
|
|
23
|
+
import type { RArgument } from '../nodes/r-argument';
|
|
24
|
+
import type { RParameter } from '../nodes/r-parameter';
|
|
4
25
|
/**
|
|
5
26
|
* Called during the down-pass, will pe propagated to children and used in the up-pass (see {@link StatefulFoldFunctions}).
|
|
6
27
|
* <p>
|
|
@@ -17,20 +38,10 @@ export interface StatefulFoldFunctions<Info, Down, Up> {
|
|
|
17
38
|
foldString: (str: RString<Info>, down: Down) => Up;
|
|
18
39
|
foldLogical: (logical: RLogical<Info>, down: Down) => Up;
|
|
19
40
|
foldSymbol: (symbol: RSymbol<Info>, down: Down) => Up;
|
|
20
|
-
foldAccess: (node: RAccess<Info>, name: Up, access:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
foldComparisonOp: (op: RComparisonBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
25
|
-
foldAssignment: (op: RAssignmentOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
26
|
-
foldPipe: (op: RPipe<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
27
|
-
foldModelFormula: (op: RModelFormulaBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
28
|
-
};
|
|
29
|
-
unaryOp: {
|
|
30
|
-
foldLogicalOp: (op: RLogicalUnaryOp<Info>, operand: Up, down: Down) => Up;
|
|
31
|
-
foldArithmeticOp: (op: RArithmeticUnaryOp<Info>, operand: Up, down: Down) => Up;
|
|
32
|
-
foldModelFormula: (op: RModelFormulaUnaryOp<Info>, operand: Up, down: Down) => Up;
|
|
33
|
-
};
|
|
41
|
+
foldAccess: (node: RAccess<Info>, name: Up, access: readonly (typeof EmptyArgument | Up)[], down: Down) => Up;
|
|
42
|
+
foldBinaryOp: (op: RBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
43
|
+
foldPipe: (op: RPipe<Info>, lhs: Up, rhs: Up, down: Down) => Up;
|
|
44
|
+
foldUnaryOp: (op: RUnaryOp<Info>, operand: Up, down: Down) => Up;
|
|
34
45
|
loop: {
|
|
35
46
|
foldFor: (loop: RForLoop<Info>, variable: Up, vector: Up, body: Up, down: Down) => Up;
|
|
36
47
|
foldWhile: (loop: RWhileLoop<Info>, condition: Up, body: Up, down: Down) => Up;
|
|
@@ -44,11 +55,11 @@ export interface StatefulFoldFunctions<Info, Down, Up> {
|
|
|
44
55
|
};
|
|
45
56
|
/** The `otherwise` argument is `undefined` if the `else` branch is missing */
|
|
46
57
|
foldIfThenElse: (ifThenExpr: RIfThenElse<Info>, cond: Up, then: Up, otherwise: Up | undefined, down: Down) => Up;
|
|
47
|
-
foldExprList: (exprList: RExpressionList<Info>, expressions: Up[], down: Down) => Up;
|
|
58
|
+
foldExprList: (exprList: RExpressionList<Info>, grouping: [start: Up, end: Up] | undefined, expressions: Up[], down: Down) => Up;
|
|
48
59
|
functions: {
|
|
49
60
|
foldFunctionDefinition: (definition: RFunctionDefinition<Info>, params: Up[], body: Up, down: Down) => Up;
|
|
50
61
|
/** folds named and unnamed function calls */
|
|
51
|
-
foldFunctionCall: (call: RFunctionCall<Info>, functionNameOrExpression: Up, args: (Up |
|
|
62
|
+
foldFunctionCall: (call: RFunctionCall<Info>, functionNameOrExpression: Up, args: (Up | typeof EmptyArgument)[], down: Down) => Up;
|
|
52
63
|
/** The `name` is `undefined` if the argument is unnamed, the value, if we have something like `x=,...` */
|
|
53
64
|
foldArgument: (argument: RArgument<Info>, name: Up | undefined, value: Up | undefined, down: Down) => Up;
|
|
54
65
|
/** The `defaultValue` is `undefined` if the argument was not initialized with a default value */
|