UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

32 lines 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeHigherOrderQuery = executeHigherOrderQuery; const higher_order_function_1 = require("../../../dataflow/fn/higher-order-function"); const vertex_1 = require("../../../dataflow/graph/vertex"); const df_helper_1 = require("../../../dataflow/graph/df-helper"); const query_function_filter_1 = require("../../query-function-filter"); /** * Execute higher-order function inspection queries on the given analyzer. */ async function executeHigherOrderQuery({ analyzer }, queries) { const start = Date.now(); const filterFor = await query_function_filter_1.QueryFunctionFilter.criteria(queries, analyzer); const graph = (await analyzer.dataflow()).graph; const fns = graph.verticesOfType(vertex_1.VertexType.FunctionDefinition) .filter(([, v]) => filterFor.size === 0 || filterFor.has(v.id)); let invertedGraph; if (filterFor.size === 0 || filterFor.size > 10) { invertedGraph = df_helper_1.Dataflow.invertGraph(graph, analyzer.inspectContext().env.makeCleanEnv()); } const result = {}; for (const [id] of fns) { result[id] = (0, higher_order_function_1.isFunctionHigherOrder)(id, graph, analyzer.inspectContext(), invertedGraph); } return { '.meta': { timing: Date.now() - start }, higherOrder: result }; } //# sourceMappingURL=inspect-higher-order-query-executor.js.map