UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

46 lines 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeDfShapeQuery = executeDfShapeQuery; const log_1 = require("../../../util/log"); const extract_cfg_1 = require("../../../control-flow/extract-cfg"); const shape_inference_1 = require("../../../abstract-interpretation/data-frame/shape-inference"); const parse_1 = require("../../../slicing/criterion/parse"); function executeDfShapeQuery({ dataflow: { graph }, ast, config }, queries) { if (queries.length !== 1 && queries.some(query => query.criterion === undefined)) { log_1.log.warn('The dataframe shape query expects only up to one query without slicing criterion, but got', queries.length); queries = [{ type: 'df-shape' }]; } const start = Date.now(); const cfg = (0, extract_cfg_1.extractCfg)(ast, config, graph); const domains = (0, shape_inference_1.inferDataFrameShapes)(cfg, graph, ast, config); if (queries.length === 1 && queries[0].criterion === undefined) { return { '.meta': { timing: Date.now() - start }, domains: domains }; } const result = new Map(); for (const query of queries) { if (query.criterion === undefined) { log_1.log.warn('Missing criterion in dataframe shape query'); continue; } else if (result.has(query.criterion)) { log_1.log.warn('Duplicate criterion in dataframe shape query:', query.criterion); continue; } const nodeId = (0, parse_1.slicingCriterionToId)(query.criterion, ast.idMap); const node = ast.idMap.get(nodeId); const value = (0, shape_inference_1.resolveIdToDataFrameShape)(node?.info.id, graph); result.set(query.criterion, value); } return { '.meta': { timing: Date.now() - start }, domains: result }; } //# sourceMappingURL=df-shape-query-executor.js.map