UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

104 lines 6.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EmptyBuiltInMemory = exports.BuiltInMemory = exports.BuiltInProcessorMapper = exports.BuiltIn = void 0; exports.registerBuiltInFunctions = registerBuiltInFunctions; const known_call_handling_1 = require("../internal/process/functions/call/known-call-handling"); const built_in_access_1 = require("../internal/process/functions/call/built-in/built-in-access"); const built_in_if_then_else_1 = require("../internal/process/functions/call/built-in/built-in-if-then-else"); const built_in_assignment_1 = require("../internal/process/functions/call/built-in/built-in-assignment"); const built_in_special_bin_op_1 = require("../internal/process/functions/call/built-in/built-in-special-bin-op"); const built_in_pipe_1 = require("../internal/process/functions/call/built-in/built-in-pipe"); const built_in_for_loop_1 = require("../internal/process/functions/call/built-in/built-in-for-loop"); const built_in_repeat_loop_1 = require("../internal/process/functions/call/built-in/built-in-repeat-loop"); const built_in_while_loop_1 = require("../internal/process/functions/call/built-in/built-in-while-loop"); const identifier_1 = require("./identifier"); const assert_1 = require("../../util/assert"); const built_in_replacement_1 = require("../internal/process/functions/call/built-in/built-in-replacement"); const built_in_quote_1 = require("../internal/process/functions/call/built-in/built-in-quote"); const built_in_function_definition_1 = require("../internal/process/functions/call/built-in/built-in-function-definition"); const built_in_expression_list_1 = require("../internal/process/functions/call/built-in/built-in-expression-list"); const built_in_get_1 = require("../internal/process/functions/call/built-in/built-in-get"); const edge_1 = require("../graph/edge"); const built_in_library_1 = require("../internal/process/functions/call/built-in/built-in-library"); const built_in_source_1 = require("../internal/process/functions/call/built-in/built-in-source"); const built_in_apply_1 = require("../internal/process/functions/call/built-in/built-in-apply"); const built_in_config_1 = require("./built-in-config"); const default_builtin_config_1 = require("./default-builtin-config"); const built_in_list_1 = require("../internal/process/functions/call/built-in/built-in-list"); const built_in_vector_1 = require("../internal/process/functions/call/built-in/built-in-vector"); const built_in_rm_1 = require("../internal/process/functions/call/built-in/built-in-rm"); const built_in_eval_1 = require("../internal/process/functions/call/built-in/built-in-eval"); exports.BuiltIn = 'built-in'; function defaultBuiltInProcessor(name, args, rootId, data, config) { const { information: res, processedArguments } = (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, forceArgs: config.forceArgs }); if (config.returnsNthArgument !== undefined) { const arg = config.returnsNthArgument === 'last' ? processedArguments[args.length - 1] : processedArguments[config.returnsNthArgument]; if (arg !== undefined) { res.graph.addEdge(rootId, arg.entryPoint, edge_1.EdgeType.Returns); } } if (config.readAllArguments) { for (const arg of processedArguments) { if (arg) { res.graph.addEdge(rootId, arg.entryPoint, edge_1.EdgeType.Reads); } } } if (config.hasUnknownSideEffects) { if (typeof config.hasUnknownSideEffects !== 'boolean') { res.graph.markIdForUnknownSideEffects(rootId, config.hasUnknownSideEffects); } else { res.graph.markIdForUnknownSideEffects(rootId); } } if (config.cfg !== undefined) { res.exitPoints = [...res.exitPoints, { type: config.cfg, nodeId: rootId, controlDependencies: data.controlDependencies }]; } return res; } function registerBuiltInFunctions(both, names, processor, config) { for (const name of names) { (0, assert_1.guard)(processor !== undefined, `Processor for ${name} is undefined, maybe you have an import loop? You may run 'npm run detect-circular-deps' - although by far not all are bad`); const d = [{ type: identifier_1.ReferenceType.BuiltInFunction, definedAt: exports.BuiltIn, controlDependencies: undefined, processor: (name, args, rootId, data) => processor(name, args, rootId, data, config), config, name, nodeId: exports.BuiltIn }]; exports.BuiltInMemory.set(name, d); if (both) { exports.EmptyBuiltInMemory.set(name, d); } } } exports.BuiltInProcessorMapper = { 'builtin:default': defaultBuiltInProcessor, 'builtin:eval': built_in_eval_1.processEvalCall, 'builtin:apply': built_in_apply_1.processApply, 'builtin:expression-list': built_in_expression_list_1.processExpressionList, 'builtin:source': built_in_source_1.processSourceCall, 'builtin:access': built_in_access_1.processAccess, 'builtin:if-then-else': built_in_if_then_else_1.processIfThenElse, 'builtin:get': built_in_get_1.processGet, 'builtin:rm': built_in_rm_1.processRm, 'builtin:library': built_in_library_1.processLibrary, 'builtin:assignment': built_in_assignment_1.processAssignment, 'builtin:special-bin-op': built_in_special_bin_op_1.processSpecialBinOp, 'builtin:pipe': built_in_pipe_1.processPipe, 'builtin:function-definition': built_in_function_definition_1.processFunctionDefinition, 'builtin:quote': built_in_quote_1.processQuote, 'builtin:for-loop': built_in_for_loop_1.processForLoop, 'builtin:repeat-loop': built_in_repeat_loop_1.processRepeatLoop, 'builtin:while-loop': built_in_while_loop_1.processWhileLoop, 'builtin:replacement': built_in_replacement_1.processReplacementFunction, 'builtin:list': built_in_list_1.processList, 'builtin:vector': built_in_vector_1.processVector, }; exports.BuiltInMemory = new Map(); exports.EmptyBuiltInMemory = new Map(); (0, built_in_config_1.registerBuiltInDefinitions)(default_builtin_config_1.DefaultBuiltinConfig); //# sourceMappingURL=built-in.js.map