@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
34 lines • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processSymbol = processSymbol;
const process_value_1 = require("./process-value");
const convert_values_1 = require("../../../r-bridge/lang-4.x/convert-values");
const graph_1 = require("../../graph/graph");
const vertex_1 = require("../../graph/vertex");
const identifier_1 = require("../../environments/identifier");
/**
* Process a symbol node in the AST for dataflow analysis.
* If the symbol is `NULL` or `NA`, it is processed as a value.
* Otherwise, it is treated as an unknown reference.
*/
function processSymbol(symbol, data) {
if (symbol.content === convert_values_1.RNull || symbol.content === convert_values_1.RNa) {
return (0, process_value_1.processValue)(symbol, data);
}
const sid = symbol.info.id;
return {
unknownReferences: [{ nodeId: sid, name: symbol.content, cds: data.cds, type: identifier_1.ReferenceType.Unknown }],
in: [],
out: [],
environment: data.environment,
graph: new graph_1.DataflowGraph(data.completeAst.idMap).addVertex({
tag: vertex_1.VertexType.Use,
id: sid,
cds: data.cds
}, data.ctx.env.makeCleanEnv()),
entryPoint: sid,
exitPoints: [{ nodeId: sid, type: 0 /* ExitPointType.Default */, cds: data.cds }],
hooks: []
};
}
//# sourceMappingURL=process-symbol.js.map