@eagleoutice/flowr 1.3.11
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/LICENSE +674 -0
- package/README.md +27 -0
- package/benchmark/benchmark-slicer.js +223 -0
- package/benchmark/index.d.ts +3 -0
- package/benchmark/index.js +20 -0
- package/benchmark/slicer.d.ts +100 -0
- package/benchmark/slicer.js +223 -0
- package/benchmark/stats/index.d.ts +10 -0
- package/benchmark/stats/index.js +27 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +157 -0
- package/benchmark/stats/stats.d.ts +41 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/cli/benchmark-app.d.ts +9 -0
- package/cli/benchmark-app.js +52 -0
- package/cli/benchmark-helper-app.d.ts +7 -0
- package/cli/benchmark-helper-app.js +60 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/index.d.ts +2 -0
- package/cli/common/index.js +19 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +82 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +24 -0
- package/cli/common/scripts-info.js +69 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +46 -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 +11 -0
- package/cli/repl/commands/commands.js +103 -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/index.d.ts +2 -0
- package/cli/repl/commands/index.js +19 -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 +109 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +12 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +33 -0
- package/cli/repl/core.d.ts +41 -0
- package/cli/repl/core.js +89 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/index.d.ts +5 -0
- package/cli/repl/index.js +22 -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 +217 -0
- package/cli/repl/server/messages/analysis.d.ts +71 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/cli/repl/server/messages/error.js +3 -0
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/cli/repl/server/messages/hello.js +3 -0
- package/cli/repl/server/messages/index.d.ts +1 -0
- package/cli/repl/server/messages/index.js +3 -0
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +20 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +17 -0
- package/cli/repl/server/messages/slice.d.ts +25 -0
- package/cli/repl/server/messages/slice.js +17 -0
- package/cli/repl/server/net.d.ts +33 -0
- package/cli/repl/server/net.js +24 -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 +81 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +98 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +83 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +67 -0
- package/core/index.d.ts +4 -0
- package/core/index.js +23 -0
- package/core/input.d.ts +42 -0
- package/core/input.js +3 -0
- package/core/output.d.ts +15 -0
- package/core/output.js +3 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +8 -0
- package/core/print/dataflow-printer.js +62 -0
- package/core/print/normalize-printer.d.ts +7 -0
- package/core/print/normalize-printer.js +31 -0
- package/core/print/parse-printer.d.ts +3 -0
- package/core/print/parse-printer.js +29 -0
- package/core/print/print.d.ts +47 -0
- package/core/print/print.js +13 -0
- package/core/print/slice-diff-ansi.d.ts +2 -0
- package/core/print/slice-diff-ansi.js +49 -0
- package/core/slicer.d.ts +123 -0
- package/core/slicer.js +227 -0
- package/core/stepping-slicer.js +160 -0
- package/core/steps/all/00-parse.js +19 -0
- package/core/steps/all/10-normalize.js +21 -0
- package/core/steps/all/20-dataflow.js +21 -0
- package/core/steps/all/30-slice.js +16 -0
- package/core/steps/all/40-reconstruct.js +16 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.js +46 -0
- package/core/steps/all/core/20-dataflow.js +39 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/index.js +21 -0
- package/core/steps/input.js +3 -0
- package/core/steps/output.js +3 -0
- package/core/steps/pipeline/create.js +130 -0
- package/core/steps/pipeline/default.js +15 -0
- package/core/steps/pipeline/dependency-checker.js +76 -0
- package/core/steps/pipeline/index.js +20 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/step.js +8 -0
- package/core/steps/steps-provider.js +3 -0
- package/core/steps/steps.js +35 -0
- package/core/steps.d.ts +166 -0
- package/core/steps.js +99 -0
- package/dataflow/common/environments/append.js +48 -0
- package/dataflow/common/environments/environment.js +165 -0
- package/dataflow/common/environments/index.js +23 -0
- package/dataflow/common/environments/overwrite.js +82 -0
- package/dataflow/common/environments/register.js +49 -0
- package/dataflow/common/environments/resolve-by-name.js +35 -0
- package/dataflow/common/environments/scopes.js +6 -0
- package/dataflow/common/environments/scoping.js +27 -0
- package/dataflow/environments/append.d.ts +8 -0
- package/dataflow/environments/append.js +48 -0
- package/dataflow/environments/environment.d.ts +78 -0
- package/dataflow/environments/environment.js +161 -0
- package/dataflow/environments/index.d.ts +7 -0
- package/dataflow/environments/index.js +23 -0
- package/dataflow/environments/overwrite.d.ts +6 -0
- package/dataflow/environments/overwrite.js +82 -0
- package/dataflow/environments/register.d.ts +7 -0
- package/dataflow/environments/register.js +39 -0
- package/dataflow/environments/resolve-by-name.d.ts +12 -0
- package/dataflow/environments/resolve-by-name.js +35 -0
- package/dataflow/environments/scopes.d.ts +6 -0
- package/dataflow/environments/scopes.js +6 -0
- package/dataflow/environments/scoping.d.ts +4 -0
- package/dataflow/environments/scoping.js +27 -0
- package/dataflow/extractor.d.ts +6 -0
- package/dataflow/extractor.js +60 -0
- package/dataflow/graph/diff.d.ts +18 -0
- package/dataflow/graph/diff.js +206 -0
- package/dataflow/graph/edge.d.ts +37 -0
- package/dataflow/graph/edge.js +32 -0
- package/dataflow/graph/equal.js +127 -0
- package/dataflow/graph/graph.d.ts +120 -0
- package/dataflow/graph/graph.js +298 -0
- package/dataflow/graph/index.d.ts +4 -0
- package/dataflow/graph/index.js +21 -0
- package/dataflow/graph/quads.d.ts +8 -0
- package/dataflow/graph/quads.js +27 -0
- package/dataflow/graph/vertex.d.ts +86 -0
- package/dataflow/graph/vertex.js +3 -0
- package/dataflow/index.d.ts +5 -0
- package/dataflow/index.js +24 -0
- package/dataflow/internal/info.d.ts +21 -0
- package/dataflow/internal/info.js +16 -0
- package/dataflow/internal/linker.d.ts +41 -0
- package/dataflow/internal/linker.js +255 -0
- package/dataflow/internal/process/access.d.ts +4 -0
- package/dataflow/internal/process/access.js +53 -0
- package/dataflow/internal/process/expression-list.d.ts +8 -0
- package/dataflow/internal/process/expression-list.js +148 -0
- package/dataflow/internal/process/functions/argument.d.ts +8 -0
- package/dataflow/internal/process/functions/argument.js +46 -0
- package/dataflow/internal/process/functions/exit-points.d.ts +2 -0
- package/dataflow/internal/process/functions/exit-points.js +121 -0
- package/dataflow/internal/process/functions/function-call.d.ts +5 -0
- package/dataflow/internal/process/functions/function-call.js +99 -0
- package/dataflow/internal/process/functions/function-definition.d.ts +4 -0
- package/dataflow/internal/process/functions/function-definition.js +176 -0
- package/dataflow/internal/process/functions/parameter.d.ts +4 -0
- package/dataflow/internal/process/functions/parameter.js +47 -0
- package/dataflow/internal/process/if-then-else.d.ts +4 -0
- package/dataflow/internal/process/if-then-else.js +56 -0
- package/dataflow/internal/process/loops/for-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/for-loop.js +54 -0
- package/dataflow/internal/process/loops/repeat-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/internal/process/loops/while-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/while-loop.js +31 -0
- package/dataflow/internal/process/operators/assignment.d.ts +4 -0
- package/dataflow/internal/process/operators/assignment.js +129 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/internal/process/operators/pipe.d.ts +4 -0
- package/dataflow/internal/process/operators/pipe.js +46 -0
- package/dataflow/internal/process/operators/unary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/unary-op.js +10 -0
- package/dataflow/internal/process/symbol.d.ts +4 -0
- package/dataflow/internal/process/symbol.js +21 -0
- package/dataflow/internal/process/uninteresting-leaf.d.ts +3 -0
- package/dataflow/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/processor.d.ts +47 -0
- package/dataflow/processor.js +20 -0
- package/dataflow/v1/extractor.js +60 -0
- package/dataflow/v1/graph/diff.js +206 -0
- package/dataflow/v1/graph/edge.js +32 -0
- package/dataflow/v1/graph/graph.js +298 -0
- package/dataflow/v1/graph/index.js +21 -0
- package/dataflow/v1/graph/quads.js +27 -0
- package/dataflow/v1/graph/vertex.js +3 -0
- package/dataflow/v1/index.js +24 -0
- package/dataflow/v1/internal/info.js +16 -0
- package/dataflow/v1/internal/linker.js +255 -0
- package/dataflow/v1/internal/process/access.js +54 -0
- package/dataflow/v1/internal/process/expression-list.js +154 -0
- package/dataflow/v1/internal/process/functions/argument.js +46 -0
- package/dataflow/v1/internal/process/functions/exit-points.js +125 -0
- package/dataflow/v1/internal/process/functions/function-call.js +99 -0
- package/dataflow/v1/internal/process/functions/function-definition.js +176 -0
- package/dataflow/v1/internal/process/functions/parameter.js +47 -0
- package/dataflow/v1/internal/process/if-then-else.js +57 -0
- package/dataflow/v1/internal/process/loops/for-loop.js +54 -0
- package/dataflow/v1/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/v1/internal/process/loops/while-loop.js +31 -0
- package/dataflow/v1/internal/process/operators/assignment.js +129 -0
- package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/v1/internal/process/operators/pipe.js +46 -0
- package/dataflow/v1/internal/process/operators/unary-op.js +10 -0
- package/dataflow/v1/internal/process/symbol.js +21 -0
- package/dataflow/v1/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/v1/processor.js +20 -0
- package/dataflow/v2/entry.js +11 -0
- package/flowr-1.3.7.tgz +0 -0
- package/flowr.d.ts +26 -0
- package/flowr.js +135 -0
- package/index.d.ts +6 -0
- package/index.js +23 -0
- package/package.json +384 -0
- package/r-bridge/index.d.ts +11 -0
- package/r-bridge/index.js +28 -0
- package/r-bridge/lang-4.x/ast/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/index.js +19 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/collect.js +23 -0
- package/r-bridge/lang-4.x/ast/model/index.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/index.js +23 -0
- package/r-bridge/lang-4.x/ast/model/model.d.ts +127 -0
- package/r-bridge/lang-4.x/ast/model/model.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +21 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +38 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +27 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +24 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +31 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +46 -0
- package/r-bridge/lang-4.x/ast/model/operators.js +67 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +81 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +342 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.js +20 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.js +22 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +41 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.js +17 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +61 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +87 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +109 -0
- package/r-bridge/lang-4.x/ast/model/type.d.ts +206 -0
- package/r-bridge/lang-4.x/ast/model/type.js +18 -0
- package/r-bridge/lang-4.x/ast/model/versions.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/versions.js +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +58 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +292 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.d.ts +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +50 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.d.ts +14 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +51 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +17 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +95 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +99 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +71 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +35 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +38 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +26 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +25 -0
- package/r-bridge/lang-4.x/index.d.ts +2 -0
- package/r-bridge/lang-4.x/index.js +19 -0
- package/r-bridge/lang-4.x/values.d.ts +39 -0
- package/r-bridge/lang-4.x/values.js +149 -0
- package/r-bridge/retriever.d.ts +48 -0
- package/r-bridge/retriever.js +71 -0
- package/r-bridge/shell.d.ts +147 -0
- package/r-bridge/shell.js +423 -0
- package/reconstruct/reconstruct.d.ts +28 -0
- package/reconstruct/reconstruct.js +448 -0
- package/slicing/criterion/collect-all.d.ts +36 -0
- package/slicing/criterion/collect-all.js +23 -0
- package/slicing/criterion/filters/all-variables.d.ts +2 -0
- package/slicing/criterion/filters/all-variables.js +63 -0
- package/slicing/criterion/filters/index.d.ts +1 -0
- package/slicing/criterion/filters/index.js +18 -0
- package/slicing/criterion/index.d.ts +3 -0
- package/slicing/criterion/index.js +20 -0
- package/slicing/criterion/parse.d.ts +20 -0
- package/slicing/criterion/parse.js +79 -0
- package/slicing/index.d.ts +3 -0
- package/slicing/index.js +20 -0
- package/slicing/static/index.d.ts +1 -0
- package/slicing/static/index.js +18 -0
- package/slicing/static/static-slicer.d.ts +29 -0
- package/slicing/static/static-slicer.js +186 -0
- package/statistics/features/common-syntax-probability.d.ts +30 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +175 -0
- package/statistics/features/feature.js +30 -0
- package/statistics/features/index.d.ts +1 -0
- package/statistics/features/index.js +18 -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 +11 -0
- package/statistics/features/supported/assignments/assignments.js +53 -0
- package/statistics/features/supported/assignments/index.d.ts +1 -0
- package/statistics/features/supported/assignments/index.js +6 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +125 -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/index.d.ts +1 -0
- package/statistics/features/supported/comments/index.js +6 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +50 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +67 -0
- package/statistics/features/supported/control-flow/index.d.ts +1 -0
- package/statistics/features/supported/control-flow/index.js +6 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +65 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +118 -0
- package/statistics/features/supported/data-access/index.d.ts +1 -0
- package/statistics/features/supported/data-access/index.js +6 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +107 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +35 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +139 -0
- package/statistics/features/supported/defined-functions/index.d.ts +1 -0
- package/statistics/features/supported/defined-functions/index.js +6 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +177 -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/index.d.ts +1 -0
- package/statistics/features/supported/expression-list/index.js +6 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +44 -0
- package/statistics/features/supported/index.d.ts +10 -0
- package/statistics/features/supported/index.js +27 -0
- package/statistics/features/supported/loops/index.d.ts +1 -0
- package/statistics/features/supported/loops/index.js +6 -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 +72 -0
- package/statistics/features/supported/used-functions/index.d.ts +1 -0
- package/statistics/features/supported/used-functions/index.js +6 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +179 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +95 -0
- package/statistics/features/supported/used-packages/index.d.ts +1 -0
- package/statistics/features/supported/used-packages/index.js +6 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +121 -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/index.d.ts +1 -0
- package/statistics/features/supported/values/index.js +6 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +72 -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/index.d.ts +1 -0
- package/statistics/features/supported/variables/index.js +6 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +122 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +70 -0
- package/statistics/index.d.ts +6 -0
- package/statistics/index.js +24 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/ansi.d.ts +50 -0
- package/statistics/output/ansi.js +58 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/index.d.ts +4 -0
- package/statistics/output/index.js +21 -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 +24 -0
- package/statistics/statistics.js +109 -0
- package/util/args.d.ts +14 -0
- package/util/args.js +67 -0
- package/util/arrays.d.ts +44 -0
- package/util/arrays.js +145 -0
- package/util/assert.d.ts +11 -0
- package/util/assert.js +35 -0
- package/util/bimap.d.ts +24 -0
- package/util/bimap.js +71 -0
- package/util/cfg.d.ts +55 -0
- package/util/cfg.js +498 -0
- package/util/defaultmap.d.ts +34 -0
- package/util/defaultmap.js +65 -0
- package/util/diff.d.ts +43 -0
- package/util/diff.js +28 -0
- package/util/files.d.ts +54 -0
- package/util/files.js +144 -0
- package/util/json.d.ts +2 -0
- package/util/json.js +28 -0
- package/util/log.d.ts +22 -0
- package/util/log.js +48 -0
- package/util/mermaid/ast.d.ts +6 -0
- package/util/mermaid/ast.js +28 -0
- package/util/mermaid/cfg.d.ts +7 -0
- package/util/mermaid/cfg.js +44 -0
- package/util/mermaid/dfg.d.ts +21 -0
- package/util/mermaid/dfg.js +165 -0
- package/util/mermaid/index.d.ts +3 -0
- package/util/mermaid/index.js +20 -0
- package/util/mermaid/mermaid.d.ts +7 -0
- package/util/mermaid/mermaid.js +24 -0
- package/util/numbers.d.ts +1 -0
- package/util/numbers.js +9 -0
- package/util/objects.d.ts +17 -0
- package/util/objects.js +60 -0
- package/util/os.d.ts +2 -0
- package/util/os.js +25 -0
- package/util/parallel.d.ts +30 -0
- package/util/parallel.js +103 -0
- package/util/quads.d.ts +92 -0
- package/util/quads.js +189 -0
- package/util/random.d.ts +4 -0
- package/util/random.js +22 -0
- package/util/range.d.ts +32 -0
- package/util/range.js +61 -0
- package/util/set.d.ts +8 -0
- package/util/set.js +32 -0
- package/util/strings.d.ts +12 -0
- package/util/strings.js +41 -0
- package/util/summarizer/auto-detect.d.ts +2 -0
- package/util/summarizer/auto-detect.js +32 -0
- package/util/summarizer/benchmark/benchmark-summarizer.js +208 -0
- package/util/summarizer/benchmark/data.d.ts +66 -0
- package/util/summarizer/benchmark/data.js +13 -0
- package/util/summarizer/benchmark/first-phase/input.d.ts +2 -0
- package/util/summarizer/benchmark/first-phase/input.js +59 -0
- package/util/summarizer/benchmark/first-phase/process.d.ts +10 -0
- package/util/summarizer/benchmark/first-phase/process.js +208 -0
- package/util/summarizer/benchmark/second-phase/graph.d.ts +2 -0
- package/util/summarizer/benchmark/second-phase/graph.js +54 -0
- package/util/summarizer/benchmark/second-phase/process.d.ts +4 -0
- package/util/summarizer/benchmark/second-phase/process.js +89 -0
- package/util/summarizer/benchmark/summarizer.d.ts +34 -0
- package/util/summarizer/benchmark/summarizer.js +53 -0
- package/util/summarizer/statistics/first-phase/process.d.ts +6 -0
- package/util/summarizer/statistics/first-phase/process.js +81 -0
- package/util/summarizer/statistics/post-process/clusterer.d.ts +26 -0
- package/util/summarizer/statistics/post-process/clusterer.js +43 -0
- package/util/summarizer/statistics/post-process/file-based-count.d.ts +17 -0
- package/util/summarizer/statistics/post-process/file-based-count.js +49 -0
- package/util/summarizer/statistics/post-process/histogram.d.ts +59 -0
- package/util/summarizer/statistics/post-process/histogram.js +128 -0
- package/util/summarizer/statistics/post-process/index.d.ts +4 -0
- package/util/summarizer/statistics/post-process/index.js +21 -0
- package/util/summarizer/statistics/post-process/post-process-output.d.ts +16 -0
- package/util/summarizer/statistics/post-process/post-process-output.js +104 -0
- package/util/summarizer/statistics/second-phase/process.d.ts +11 -0
- package/util/summarizer/statistics/second-phase/process.js +117 -0
- package/util/summarizer/statistics/summarizer.d.ts +34 -0
- package/util/summarizer/statistics/summarizer.js +135 -0
- package/util/summarizer/summarizer.d.ts +25 -0
- package/util/summarizer/summarizer.js +13 -0
- package/util/time.d.ts +6 -0
- package/util/time.js +13 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Base, Location, NoInfo, RNode } from '../model';
|
|
2
|
+
import { RType } from '../type';
|
|
3
|
+
import { RExpressionList } from './r-expression-list';
|
|
4
|
+
/**
|
|
5
|
+
* ```ts
|
|
6
|
+
* while ( <condition> ) <body>
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export interface RWhileLoop<Info = NoInfo> extends Base<Info>, Location {
|
|
10
|
+
readonly type: RType.WhileLoop;
|
|
11
|
+
condition: RNode<Info>;
|
|
12
|
+
body: RExpressionList<Info>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MergeableRecord } from '../../../../util/objects';
|
|
2
|
+
import { RawRType } from './type';
|
|
3
|
+
/**
|
|
4
|
+
* Just a type-alias so that type declarations become more readable.
|
|
5
|
+
*
|
|
6
|
+
* @see OperatorDatabase
|
|
7
|
+
*/
|
|
8
|
+
type StringUsedInRCode = string;
|
|
9
|
+
/**
|
|
10
|
+
* The arity of an operator.
|
|
11
|
+
*/
|
|
12
|
+
export declare const enum OperatorArity {
|
|
13
|
+
Unary = 1,
|
|
14
|
+
Binary = 2,
|
|
15
|
+
Both = 3
|
|
16
|
+
}
|
|
17
|
+
export type UnaryOperatorFlavor = 'arithmetic' | 'logical' | 'model formula';
|
|
18
|
+
export type BinaryOperatorFlavor = UnaryOperatorFlavor | 'comparison' | 'assignment';
|
|
19
|
+
export type BinaryOperatorFlavorInAst = BinaryOperatorFlavor | 'special';
|
|
20
|
+
export type OperatorWrittenAs = 'infix' | 'prefix';
|
|
21
|
+
export type OperatorUsedAs = 'assignment' | 'operation' | 'access';
|
|
22
|
+
export type OperatorName = string;
|
|
23
|
+
export interface OperatorInformationValue extends MergeableRecord {
|
|
24
|
+
name: OperatorName;
|
|
25
|
+
stringUsedInRAst: RawRType | `%${string}%`;
|
|
26
|
+
stringUsedInternally: string;
|
|
27
|
+
flavorInRAst: BinaryOperatorFlavorInAst;
|
|
28
|
+
flavor: BinaryOperatorFlavor;
|
|
29
|
+
writtenAs: OperatorWrittenAs;
|
|
30
|
+
arity: OperatorArity;
|
|
31
|
+
usedAs: OperatorUsedAs;
|
|
32
|
+
}
|
|
33
|
+
export declare const OperatorDatabase: Record<StringUsedInRCode, OperatorInformationValue> & MergeableRecord;
|
|
34
|
+
export declare const ArithmeticOperators: readonly string[];
|
|
35
|
+
export declare const ArithmeticOperatorsRAst: Set<string>;
|
|
36
|
+
export declare const ComparisonOperators: readonly string[];
|
|
37
|
+
export declare const ComparisonOperatorsRAst: Set<string>;
|
|
38
|
+
export declare const LogicalOperators: readonly string[];
|
|
39
|
+
export declare const LogicalOperatorsRAst: Set<string>;
|
|
40
|
+
export declare const ModelFormulaOperators: readonly string[];
|
|
41
|
+
export declare const ModelFormulaOperatorsRAst: Set<string>;
|
|
42
|
+
export declare const Assignments: readonly string[];
|
|
43
|
+
export declare const AssignmentsRAst: Set<string>;
|
|
44
|
+
export declare const Operators: readonly string[];
|
|
45
|
+
export type Operator = (typeof Operators)[number];
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Operators = exports.AssignmentsRAst = exports.Assignments = exports.ModelFormulaOperatorsRAst = exports.ModelFormulaOperators = exports.LogicalOperatorsRAst = exports.LogicalOperators = exports.ComparisonOperatorsRAst = exports.ComparisonOperators = exports.ArithmeticOperatorsRAst = exports.ArithmeticOperators = exports.OperatorDatabase = void 0;
|
|
4
|
+
/* eslint-disable */
|
|
5
|
+
exports.OperatorDatabase = {
|
|
6
|
+
/* model formulae */
|
|
7
|
+
'~': { name: 'model formulae', stringUsedInRAst: "~" /* RawRType.Tilde */, stringUsedInternally: '~', flavorInRAst: 'model formula', flavor: 'model formula', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
|
|
8
|
+
/* arithmetic */
|
|
9
|
+
'+': { name: 'addition or unary +', stringUsedInRAst: "+" /* RawRType.Plus */, stringUsedInternally: '+', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
|
|
10
|
+
'-': { name: 'subtraction or unary -', stringUsedInRAst: "-" /* RawRType.Minus */, stringUsedInternally: '-', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 3 /* OperatorArity.Both */, usedAs: 'operation' },
|
|
11
|
+
'*': { name: 'multiplication', stringUsedInRAst: "*" /* RawRType.Times */, stringUsedInternally: '*', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
12
|
+
'/': { name: 'division', stringUsedInRAst: "/" /* RawRType.Div */, stringUsedInternally: '/', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
13
|
+
'^': { name: 'exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '^', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
14
|
+
/* no error, R uses ^ to represent ** in the AST */
|
|
15
|
+
'**': { name: 'alternative exponentiation', stringUsedInRAst: "^" /* RawRType.Exp */, stringUsedInternally: '**', flavorInRAst: 'arithmetic', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
16
|
+
'%%': { name: 'modulus', stringUsedInRAst: '%%', stringUsedInternally: '%%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
17
|
+
'%/%': { name: 'integer division', stringUsedInRAst: '%/%', stringUsedInternally: '%/%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
18
|
+
'%*%': { name: 'matrix product', stringUsedInRAst: '%*%', stringUsedInternally: '%*%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
19
|
+
'%o%': { name: 'outer product', stringUsedInRAst: '%o%', stringUsedInternally: '%o%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
20
|
+
'%x%': { name: 'kronecker product', stringUsedInRAst: '%x%', stringUsedInternally: '%x%', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
21
|
+
/* comparison */
|
|
22
|
+
'==': { name: 'equal to', stringUsedInRAst: "EQ" /* RawRType.Eq */, stringUsedInternally: '==', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
23
|
+
'!=': { name: 'not equal to', stringUsedInRAst: "NE" /* RawRType.Ne */, stringUsedInternally: '!=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
24
|
+
'>': { name: 'greater than', stringUsedInRAst: "GT" /* RawRType.Gt */, stringUsedInternally: '>', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
25
|
+
'>=': { name: 'greater than or equal to', stringUsedInRAst: "GE" /* RawRType.Ge */, stringUsedInternally: '>=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
26
|
+
'<': { name: 'less than', stringUsedInRAst: "LT" /* RawRType.Lt */, stringUsedInternally: '<', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
27
|
+
'<=': { name: 'less than or equal to', stringUsedInRAst: "LE" /* RawRType.Le */, stringUsedInternally: '<=', flavorInRAst: 'comparison', flavor: 'comparison', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
28
|
+
/* logical */
|
|
29
|
+
'&': { name: 'logical and (vectorized)', stringUsedInRAst: "AND" /* RawRType.And */, stringUsedInternally: '&', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
30
|
+
'&&': { name: 'logical and (non-vectorized)', stringUsedInRAst: "AND2" /* RawRType.And2 */, stringUsedInternally: '&&', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
31
|
+
'|': { name: 'logical or (vectorized)', stringUsedInRAst: "OR" /* RawRType.Or */, stringUsedInternally: '|', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
32
|
+
'||': { name: 'logical or (not-vectorized)', stringUsedInRAst: "OR2" /* RawRType.Or2 */, stringUsedInternally: '||', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
33
|
+
'!': { name: 'unary not', stringUsedInRAst: "!" /* RawRType.Exclamation */, stringUsedInternally: '!', flavorInRAst: 'logical', flavor: 'logical', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation' },
|
|
34
|
+
'%in%': { name: 'matching operator', stringUsedInRAst: '%in%', stringUsedInternally: '%in%', flavorInRAst: 'special', flavor: 'logical', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
35
|
+
/* assignment */
|
|
36
|
+
'<-': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<-', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
37
|
+
':=': { name: 'left assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: ':=', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
38
|
+
'<<-': { name: 'left global assignment', stringUsedInRAst: "LEFT_ASSIGN" /* RawRType.LeftAssign */, stringUsedInternally: '<<-', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
39
|
+
'->': { name: 'right assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
40
|
+
'->>': { name: 'right global assignment', stringUsedInRAst: "RIGHT_ASSIGN" /* RawRType.RightAssign */, stringUsedInternally: '->>', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
41
|
+
'=': { name: 'equal assignment', stringUsedInRAst: "EQ_ASSIGN" /* RawRType.EqualAssign */, stringUsedInternally: '=', flavorInRAst: 'special', flavor: 'assignment', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'assignment' },
|
|
42
|
+
/* others */
|
|
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: ':', flavorInRAst: 'special', flavor: 'arithmetic', writtenAs: 'infix', arity: 2 /* OperatorArity.Binary */, usedAs: 'operation' },
|
|
45
|
+
'?': { name: 'question', stringUsedInRAst: "?" /* RawRType.Question */, stringUsedInternally: '?', flavorInRAst: 'special', flavor: 'logical', writtenAs: 'prefix', arity: 1 /* OperatorArity.Unary */, usedAs: 'operation' }
|
|
46
|
+
};
|
|
47
|
+
/* eslint-enable */
|
|
48
|
+
function buildOperatorRAstCollection(operators) {
|
|
49
|
+
return new Set(operators.map(op => exports.OperatorDatabase[op].stringUsedInRAst));
|
|
50
|
+
}
|
|
51
|
+
exports.ArithmeticOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'arithmetic');
|
|
52
|
+
// '**' will be treated as '^'
|
|
53
|
+
exports.ArithmeticOperatorsRAst = buildOperatorRAstCollection(exports.ArithmeticOperators);
|
|
54
|
+
exports.ComparisonOperators = Object.keys(exports.OperatorDatabase).filter((op) => exports.OperatorDatabase[op].flavor === 'comparison');
|
|
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
|
+
];
|
|
67
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The decoration module is tasked with taking an R-ast given by a {@link RNode} and
|
|
3
|
+
*
|
|
4
|
+
* 1. assigning a unique id to each node (see {@link IdGenerator})
|
|
5
|
+
* 2. transforming the AST into a doubly linked tree using the ids (so it stays serializable)
|
|
6
|
+
*
|
|
7
|
+
* The main entry point is {@link decorateAst}.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { NoInfo, RNode } from '../model';
|
|
12
|
+
import { BiMap } from '../../../../../util/bimap';
|
|
13
|
+
import { MergeableRecord } from '../../../../../util/objects';
|
|
14
|
+
import { RoleInParent } from './role';
|
|
15
|
+
/** The type of the id assigned to each node. Branded to avoid problematic usages with other string types. */
|
|
16
|
+
export type NodeId = string & {
|
|
17
|
+
__brand?: 'node-id';
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A function that given an RNode returns a (guaranteed) unique id for it
|
|
21
|
+
* @param data - the node to generate an id for
|
|
22
|
+
*
|
|
23
|
+
* @returns a unique id for the given node
|
|
24
|
+
*/
|
|
25
|
+
export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
|
|
26
|
+
/**
|
|
27
|
+
* The simplest id generator which just increments a number on each call.
|
|
28
|
+
*/
|
|
29
|
+
export declare function deterministicCountingIdGenerator(start?: number): () => NodeId;
|
|
30
|
+
/**
|
|
31
|
+
* Generates the location id, used by {@link deterministicLocationIdGenerator}.
|
|
32
|
+
*
|
|
33
|
+
* @param data - the node to generate an id for, must have location information
|
|
34
|
+
*/
|
|
35
|
+
export declare function nodeToLocationId<OtherInfo>(data: RNode<OtherInfo>): NodeId;
|
|
36
|
+
/**
|
|
37
|
+
* Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
|
|
38
|
+
* If a node has no location information, it will be assigned a unique counter value.
|
|
39
|
+
*
|
|
40
|
+
* @param start - the start value for the counter in case nodes do not have a location information
|
|
41
|
+
*/
|
|
42
|
+
export declare function deterministicLocationIdGenerator<OtherInfo>(start?: number): IdGenerator<OtherInfo>;
|
|
43
|
+
export interface ParentContextInfo extends MergeableRecord {
|
|
44
|
+
role: RoleInParent;
|
|
45
|
+
/**
|
|
46
|
+
* 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 1, ...)
|
|
47
|
+
*
|
|
48
|
+
* The index is adaptive, that means that if the name of an argument exists, it will have the index 0, and the value the index 1.
|
|
49
|
+
* But if the argument is unnamed, its value will get the index 0 instead.
|
|
50
|
+
*/
|
|
51
|
+
index: number;
|
|
52
|
+
}
|
|
53
|
+
export interface ParentInformation extends ParentContextInfo {
|
|
54
|
+
/** uniquely identifies an AST-Node */
|
|
55
|
+
id: NodeId;
|
|
56
|
+
/** Links to the parent node, using an id so that the AST stays serializable */
|
|
57
|
+
parent: NodeId | undefined;
|
|
58
|
+
}
|
|
59
|
+
export type RNodeWithParent<OtherInfo = NoInfo> = RNode<OtherInfo & ParentInformation>;
|
|
60
|
+
export type DecoratedAstMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherInfo>>;
|
|
61
|
+
/**
|
|
62
|
+
* Contains the normalized AST as a doubly linked tree
|
|
63
|
+
* and a map from ids to nodes so that parent links can be chased easily.
|
|
64
|
+
*/
|
|
65
|
+
export interface NormalizedAst<OtherInfo = ParentInformation> {
|
|
66
|
+
/** Bidirectional mapping of ids to the corresponding nodes and the other way */
|
|
67
|
+
idMap: DecoratedAstMap<OtherInfo>;
|
|
68
|
+
/** The root of the AST with parent information */
|
|
69
|
+
ast: RNodeWithParent<OtherInfo>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
73
|
+
*
|
|
74
|
+
* @param ast - The root of the AST to convert
|
|
75
|
+
* @param getId - The id generator: must generate a unique id für each passed node
|
|
76
|
+
*
|
|
77
|
+
* @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)
|
|
78
|
+
*
|
|
79
|
+
* @returns A {@link DecoratedAst | decorated AST} based on the input and the id provider.
|
|
80
|
+
*/
|
|
81
|
+
export declare function decorateAst<OtherInfo = NoInfo>(ast: RNode<OtherInfo>, getId?: IdGenerator<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The decoration module is tasked with taking an R-ast given by a {@link RNode} and
|
|
4
|
+
*
|
|
5
|
+
* 1. assigning a unique id to each node (see {@link IdGenerator})
|
|
6
|
+
* 2. transforming the AST into a doubly linked tree using the ids (so it stays serializable)
|
|
7
|
+
*
|
|
8
|
+
* The main entry point is {@link decorateAst}.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.decorateAst = exports.deterministicLocationIdGenerator = exports.nodeToLocationId = exports.deterministicCountingIdGenerator = void 0;
|
|
14
|
+
const assert_1 = require("../../../../../util/assert");
|
|
15
|
+
const bimap_1 = require("../../../../../util/bimap");
|
|
16
|
+
const fold_1 = require("./fold");
|
|
17
|
+
/**
|
|
18
|
+
* The simplest id generator which just increments a number on each call.
|
|
19
|
+
*/
|
|
20
|
+
function deterministicCountingIdGenerator(start = 0) {
|
|
21
|
+
let id = start;
|
|
22
|
+
return () => `${id++}`;
|
|
23
|
+
}
|
|
24
|
+
exports.deterministicCountingIdGenerator = deterministicCountingIdGenerator;
|
|
25
|
+
function loc2Id(loc) {
|
|
26
|
+
return `${loc.start.line}:${loc.start.column}-${loc.end.line}:${loc.end.column}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generates the location id, used by {@link deterministicLocationIdGenerator}.
|
|
30
|
+
*
|
|
31
|
+
* @param data - the node to generate an id for, must have location information
|
|
32
|
+
*/
|
|
33
|
+
function nodeToLocationId(data) {
|
|
34
|
+
const loc = data.location;
|
|
35
|
+
(0, assert_1.guard)(loc !== undefined, 'location must be defined to generate a location id');
|
|
36
|
+
return loc2Id(loc);
|
|
37
|
+
}
|
|
38
|
+
exports.nodeToLocationId = nodeToLocationId;
|
|
39
|
+
/**
|
|
40
|
+
* Generates unique ids based on the locations of the node (see {@link nodeToLocationId}).
|
|
41
|
+
* If a node has no location information, it will be assigned a unique counter value.
|
|
42
|
+
*
|
|
43
|
+
* @param start - the start value for the counter in case nodes do not have a location information
|
|
44
|
+
*/
|
|
45
|
+
function deterministicLocationIdGenerator(start = 0) {
|
|
46
|
+
let id = start;
|
|
47
|
+
return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
48
|
+
}
|
|
49
|
+
exports.deterministicLocationIdGenerator = deterministicLocationIdGenerator;
|
|
50
|
+
const defaultParentContext = { role: "root" /* RoleInParent.Root */, index: 0 };
|
|
51
|
+
/**
|
|
52
|
+
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
53
|
+
*
|
|
54
|
+
* @param ast - The root of the AST to convert
|
|
55
|
+
* @param getId - The id generator: must generate a unique id für each passed node
|
|
56
|
+
*
|
|
57
|
+
* @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)
|
|
58
|
+
*
|
|
59
|
+
* @returns A {@link DecoratedAst | decorated AST} based on the input and the id provider.
|
|
60
|
+
*/
|
|
61
|
+
function decorateAst(ast, getId = deterministicCountingIdGenerator(0)) {
|
|
62
|
+
const idMap = new bimap_1.BiMap();
|
|
63
|
+
const info = { idMap, getId };
|
|
64
|
+
/* Please note, that all fold processors do not re-create copies in higher folding steps so that the idMap stays intact. */
|
|
65
|
+
const foldLeaf = createFoldForLeaf(info);
|
|
66
|
+
const foldBinaryOp = createFoldForBinaryOp(info);
|
|
67
|
+
const unaryOp = createFoldForUnaryOp(info);
|
|
68
|
+
const decoratedAst = (0, fold_1.foldAst)(ast, {
|
|
69
|
+
foldNumber: foldLeaf,
|
|
70
|
+
foldString: foldLeaf,
|
|
71
|
+
foldLogical: foldLeaf,
|
|
72
|
+
foldSymbol: foldLeaf,
|
|
73
|
+
foldAccess: createFoldForAccess(info),
|
|
74
|
+
binaryOp: {
|
|
75
|
+
foldLogicalOp: foldBinaryOp,
|
|
76
|
+
foldArithmeticOp: foldBinaryOp,
|
|
77
|
+
foldComparisonOp: foldBinaryOp,
|
|
78
|
+
foldAssignment: foldBinaryOp,
|
|
79
|
+
foldPipe: foldBinaryOp,
|
|
80
|
+
foldModelFormula: foldBinaryOp
|
|
81
|
+
},
|
|
82
|
+
unaryOp: {
|
|
83
|
+
foldArithmeticOp: unaryOp,
|
|
84
|
+
foldLogicalOp: unaryOp,
|
|
85
|
+
foldModelFormula: unaryOp
|
|
86
|
+
},
|
|
87
|
+
other: {
|
|
88
|
+
foldComment: foldLeaf,
|
|
89
|
+
foldLineDirective: foldLeaf
|
|
90
|
+
},
|
|
91
|
+
loop: {
|
|
92
|
+
foldFor: createFoldForForLoop(info),
|
|
93
|
+
foldRepeat: createFoldForRepeatLoop(info),
|
|
94
|
+
foldWhile: createFoldForWhileLoop(info),
|
|
95
|
+
foldBreak: foldLeaf,
|
|
96
|
+
foldNext: foldLeaf
|
|
97
|
+
},
|
|
98
|
+
foldIfThenElse: createFoldForIfThenElse(info),
|
|
99
|
+
foldExprList: createFoldForExprList(info),
|
|
100
|
+
functions: {
|
|
101
|
+
foldFunctionDefinition: createFoldForFunctionDefinition(info),
|
|
102
|
+
foldFunctionCall: createFoldForFunctionCall(info),
|
|
103
|
+
foldArgument: createFoldForFunctionArgument(info),
|
|
104
|
+
foldParameter: createFoldForFunctionParameter(info)
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
decoratedAst.info.role = "root" /* RoleInParent.Root */;
|
|
108
|
+
decoratedAst.info.index = 0;
|
|
109
|
+
return {
|
|
110
|
+
ast: decoratedAst,
|
|
111
|
+
idMap
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
exports.decorateAst = decorateAst;
|
|
115
|
+
function createFoldForLeaf(info) {
|
|
116
|
+
return (data) => {
|
|
117
|
+
const id = info.getId(data);
|
|
118
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined, ...defaultParentContext } };
|
|
119
|
+
info.idMap.set(id, decorated);
|
|
120
|
+
return decorated;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function createFoldForBinaryOp(info) {
|
|
124
|
+
return (data, lhs, rhs) => {
|
|
125
|
+
const id = info.getId(data);
|
|
126
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, lhs, rhs };
|
|
127
|
+
info.idMap.set(id, decorated);
|
|
128
|
+
const lhsInfo = lhs.info;
|
|
129
|
+
lhsInfo.parent = id;
|
|
130
|
+
const rhsInfo = rhs.info;
|
|
131
|
+
rhsInfo.parent = id;
|
|
132
|
+
rhsInfo.index = 1;
|
|
133
|
+
if (data.type === "RPipe" /* RType.Pipe */) {
|
|
134
|
+
lhsInfo.role = "pipe-lhs" /* RoleInParent.PipeLhs */;
|
|
135
|
+
rhsInfo.role = "pipe-rhs" /* RoleInParent.PipeRhs */;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
lhsInfo.role = "binop-lhs" /* RoleInParent.BinaryOperationLhs */;
|
|
139
|
+
rhsInfo.role = "binop-rhs" /* RoleInParent.BinaryOperationRhs */;
|
|
140
|
+
}
|
|
141
|
+
return decorated;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function createFoldForUnaryOp(info) {
|
|
145
|
+
return (data, operand) => {
|
|
146
|
+
const id = info.getId(data);
|
|
147
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, operand };
|
|
148
|
+
info.idMap.set(id, decorated);
|
|
149
|
+
const opInfo = operand.info;
|
|
150
|
+
opInfo.parent = id;
|
|
151
|
+
opInfo.role = "unary-operand" /* RoleInParent.UnaryOperand */;
|
|
152
|
+
return decorated;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function createFoldForAccess(info) {
|
|
156
|
+
return (data, accessed, access) => {
|
|
157
|
+
const id = info.getId(data);
|
|
158
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, accessed, access };
|
|
159
|
+
info.idMap.set(id, decorated);
|
|
160
|
+
const accessedInfo = accessed.info;
|
|
161
|
+
accessedInfo.parent = id;
|
|
162
|
+
accessedInfo.role = "accessed" /* RoleInParent.Accessed */;
|
|
163
|
+
if (typeof access !== 'string') {
|
|
164
|
+
let idx = 0; // the first oe will be skipped in the first iter
|
|
165
|
+
for (const acc of access) {
|
|
166
|
+
idx++;
|
|
167
|
+
if (acc !== null) {
|
|
168
|
+
const curInfo = acc.info;
|
|
169
|
+
curInfo.parent = id;
|
|
170
|
+
curInfo.index = idx;
|
|
171
|
+
curInfo.role = "index-access" /* RoleInParent.IndexAccess */;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return decorated;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function createFoldForForLoop(info) {
|
|
179
|
+
return (data, variable, vector, body) => {
|
|
180
|
+
const id = info.getId(data);
|
|
181
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, variable, vector, body };
|
|
182
|
+
info.idMap.set(id, decorated);
|
|
183
|
+
const varInfo = variable.info;
|
|
184
|
+
varInfo.parent = id;
|
|
185
|
+
varInfo.role = "for-variable" /* RoleInParent.ForVariable */;
|
|
186
|
+
const vecInfo = vector.info;
|
|
187
|
+
vecInfo.parent = id;
|
|
188
|
+
vecInfo.index = 1;
|
|
189
|
+
vecInfo.role = "for-vector" /* RoleInParent.ForVector */;
|
|
190
|
+
const bodyInfo = body.info;
|
|
191
|
+
bodyInfo.parent = id;
|
|
192
|
+
bodyInfo.index = 2;
|
|
193
|
+
bodyInfo.role = "for-body" /* RoleInParent.ForBody */;
|
|
194
|
+
return decorated;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function createFoldForRepeatLoop(info) {
|
|
198
|
+
return (data, body) => {
|
|
199
|
+
const id = info.getId(data);
|
|
200
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, body };
|
|
201
|
+
info.idMap.set(id, decorated);
|
|
202
|
+
const bodyInfo = body.info;
|
|
203
|
+
bodyInfo.parent = id;
|
|
204
|
+
bodyInfo.role = "repeat-body" /* RoleInParent.RepeatBody */;
|
|
205
|
+
return decorated;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function createFoldForWhileLoop(info) {
|
|
209
|
+
return (data, condition, body) => {
|
|
210
|
+
const id = info.getId(data);
|
|
211
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, body };
|
|
212
|
+
info.idMap.set(id, decorated);
|
|
213
|
+
const condInfo = condition.info;
|
|
214
|
+
condInfo.parent = id;
|
|
215
|
+
condInfo.role = "while-cond" /* RoleInParent.WhileCondition */;
|
|
216
|
+
const bodyInfo = body.info;
|
|
217
|
+
bodyInfo.parent = id;
|
|
218
|
+
bodyInfo.index = 1;
|
|
219
|
+
bodyInfo.role = "while-body" /* RoleInParent.WhileBody */;
|
|
220
|
+
return decorated;
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function createFoldForIfThenElse(info) {
|
|
224
|
+
return (data, condition, then, otherwise) => {
|
|
225
|
+
const id = info.getId(data);
|
|
226
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, condition, then, otherwise };
|
|
227
|
+
info.idMap.set(id, decorated);
|
|
228
|
+
const condInfo = condition.info;
|
|
229
|
+
condInfo.parent = id;
|
|
230
|
+
condInfo.role = "if-cond" /* RoleInParent.IfCondition */;
|
|
231
|
+
const thenInfo = then.info;
|
|
232
|
+
thenInfo.parent = id;
|
|
233
|
+
thenInfo.index = 1;
|
|
234
|
+
thenInfo.role = "if-then" /* RoleInParent.IfThen */;
|
|
235
|
+
if (otherwise) {
|
|
236
|
+
const otherwiseInfo = otherwise.info;
|
|
237
|
+
otherwiseInfo.parent = id;
|
|
238
|
+
otherwiseInfo.index = 2;
|
|
239
|
+
otherwiseInfo.role = "if-otherwise" /* RoleInParent.IfOtherwise */;
|
|
240
|
+
}
|
|
241
|
+
return decorated;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function createFoldForExprList(info) {
|
|
245
|
+
return (data, children) => {
|
|
246
|
+
const id = info.getId(data);
|
|
247
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, children };
|
|
248
|
+
info.idMap.set(id, decorated);
|
|
249
|
+
let i = 0;
|
|
250
|
+
for (const child of children) {
|
|
251
|
+
const childInfo = child.info;
|
|
252
|
+
childInfo.parent = id;
|
|
253
|
+
childInfo.index = i++;
|
|
254
|
+
childInfo.role = "expr-list-child" /* RoleInParent.ExpressionListChild */;
|
|
255
|
+
}
|
|
256
|
+
return decorated;
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function createFoldForFunctionCall(info) {
|
|
260
|
+
return (data, functionName, args) => {
|
|
261
|
+
const id = info.getId(data);
|
|
262
|
+
let decorated;
|
|
263
|
+
if (data.flavor === 'named') {
|
|
264
|
+
decorated = { ...data, info: { ...data.info, id, parent: undefined }, functionName, arguments: args };
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
decorated = { ...data, info: { ...data.info, id, parent: undefined }, calledFunction: functionName, arguments: args };
|
|
268
|
+
}
|
|
269
|
+
info.idMap.set(id, decorated);
|
|
270
|
+
const funcInfo = functionName.info;
|
|
271
|
+
funcInfo.parent = id;
|
|
272
|
+
funcInfo.role = "call-name" /* RoleInParent.FunctionCallName */;
|
|
273
|
+
let idx = 0;
|
|
274
|
+
for (const arg of args) {
|
|
275
|
+
idx++;
|
|
276
|
+
if (arg !== undefined) {
|
|
277
|
+
const argInfo = arg.info;
|
|
278
|
+
argInfo.parent = id;
|
|
279
|
+
argInfo.index = idx;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return decorated;
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function createFoldForFunctionDefinition(info) {
|
|
286
|
+
return (data, params, body) => {
|
|
287
|
+
const id = info.getId(data);
|
|
288
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, parameters: params, body };
|
|
289
|
+
info.idMap.set(id, decorated);
|
|
290
|
+
let idx = 0;
|
|
291
|
+
for (const param of params) {
|
|
292
|
+
const paramInfo = param.info;
|
|
293
|
+
paramInfo.parent = id;
|
|
294
|
+
paramInfo.index = idx++;
|
|
295
|
+
paramInfo.role = "function-def-param" /* RoleInParent.FunctionDefinitionParameter */;
|
|
296
|
+
}
|
|
297
|
+
const bodyInfo = body.info;
|
|
298
|
+
bodyInfo.parent = id;
|
|
299
|
+
bodyInfo.index = idx;
|
|
300
|
+
bodyInfo.role = "function-def-body" /* RoleInParent.FunctionDefinitionBody */;
|
|
301
|
+
return decorated;
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function createFoldForFunctionParameter(info) {
|
|
305
|
+
return (data, name, defaultValue) => {
|
|
306
|
+
const id = info.getId(data);
|
|
307
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, defaultValue };
|
|
308
|
+
info.idMap.set(id, decorated);
|
|
309
|
+
const nameInfo = name.info;
|
|
310
|
+
nameInfo.parent = id;
|
|
311
|
+
nameInfo.role = "param-name" /* RoleInParent.ParameterName */;
|
|
312
|
+
if (defaultValue) {
|
|
313
|
+
const defaultInfo = defaultValue.info;
|
|
314
|
+
defaultInfo.parent = id;
|
|
315
|
+
defaultInfo.index = 1;
|
|
316
|
+
defaultInfo.role = "param-value" /* RoleInParent.ParameterDefaultValue */;
|
|
317
|
+
}
|
|
318
|
+
return decorated;
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function createFoldForFunctionArgument(info) {
|
|
322
|
+
return (data, name, value) => {
|
|
323
|
+
const id = info.getId(data);
|
|
324
|
+
const decorated = { ...data, info: { ...data.info, id, parent: undefined }, name, value };
|
|
325
|
+
info.idMap.set(id, decorated);
|
|
326
|
+
let idx = 0;
|
|
327
|
+
if (name) {
|
|
328
|
+
const nameInfo = name.info;
|
|
329
|
+
nameInfo.parent = id;
|
|
330
|
+
nameInfo.role = "arg-name" /* RoleInParent.ArgumentName */;
|
|
331
|
+
idx++; // adaptive, 0 for the value if there is no name!
|
|
332
|
+
}
|
|
333
|
+
if (value) {
|
|
334
|
+
const valueInfo = value.info;
|
|
335
|
+
valueInfo.parent = id;
|
|
336
|
+
valueInfo.index = idx;
|
|
337
|
+
valueInfo.role = "arg-value" /* RoleInParent.ArgumentValue */;
|
|
338
|
+
}
|
|
339
|
+
return decorated;
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=decorate.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
2
|
+
import { RNode } from '../model';
|
|
3
|
+
import { StatefulFoldFunctions } from './stateful-fold';
|
|
4
|
+
export type FoldFunctions<Info, Out> = Omit<StatefulFoldFunctions<Info, undefined, Out>, 'down'>;
|
|
5
|
+
/**
|
|
6
|
+
* Folds in old functional-fashion over the AST structure.
|
|
7
|
+
* <p>
|
|
8
|
+
* Internally implemented as a special case of a two-way fold (with the down part as an essential no-op)
|
|
9
|
+
*/
|
|
10
|
+
export declare function foldAst<Info, T>(ast: RNode<Info>, folds: DeepReadonly<FoldFunctions<Info, T>>): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.foldAst = void 0;
|
|
4
|
+
const stateful_fold_1 = require("./stateful-fold");
|
|
5
|
+
const down = () => undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Folds in old functional-fashion over the AST structure.
|
|
8
|
+
* <p>
|
|
9
|
+
* Internally implemented as a special case of a two-way fold (with the down part as an essential no-op)
|
|
10
|
+
*/
|
|
11
|
+
function foldAst(ast, folds) {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- just so we do not have to re-create
|
|
13
|
+
const statefulFolds = folds;
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
15
|
+
statefulFolds.down = down;
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
17
|
+
return (0, stateful_fold_1.foldAstStateful)(ast, undefined, statefulFolds);
|
|
18
|
+
}
|
|
19
|
+
exports.foldAst = foldAst;
|
|
20
|
+
//# sourceMappingURL=fold.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./fold"), exports);
|
|
18
|
+
__exportStar(require("./decorate"), exports);
|
|
19
|
+
__exportStar(require("./stateful-fold"), exports);
|
|
20
|
+
__exportStar(require("./visitor"), exports);
|
|
21
|
+
__exportStar(require("./role"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|