Cleans up internal data predicates.
Cleans up all the data predicates.
Obtains from analysis internal structures the information on exported predicates regarding the current module and related modules. Returns in Callers and Imported the list of basenames of related modules whose registry information has been updated.
As gen_registry_info/3, but also returns Info.
Writes on disk the registry information of the modules loaded into Ciaopp or related to modules loaded into Ciaopp. This information is updated by gen_registry_info/3. This predicate must be called after performing intermodular preprocessing (analysis, specialization...), even if save_registry_info/3 has been used.
Writes on disk the registry information of the modules related to the current module (CurrBase) which have been modified. This information is updated by gen_registry_info/3. Even if this predicate is used, save_registry_info/2 must be used after performing intermodular preprocessing.
Gets the information about version names of specialized predicates belonging to the list of imported modules from the current module, and puts them into the specializer's abstract executability table.
Removes the *.reg files associated to Bases.
Reads the registry file of Module and loads it into registry/2, erasing any previous registry information for that module. Base must be the absolute file name, but excluding file extension.
Data predicate to locally store information about the registry of one or several modules. Module is the name of the module for which Registry is an entry in the registry file. It corresponds to the global answer table as it is described in [PCH03], or other auxiliary information (e.g., types).
Gets the list of imported modules from the current module. This list is obtained from the itf information of the current module, and is stored in imported_module/1.
HeaderTerm is a term read from the registry header of module Module. Data predicate to store the header terms of every registry file read. The list of registry header terms depends on the registry file version, and is stored in registry_header_format/2
Adds an element Caller (formed by either a tuple (SgCaller,Caller_s,Base) or an atom '$query') to OldList, a list of intermodular dependencies. Added will be instantiated to 'y' if Caller is actually added to NewList, and 'n' if it was already in OldList.
Adds a new entry to changed_module/6. Module registry info has been changed as a result of analyzing SourceModule, and the relatioship between SourceModule and Module is Mode (imported, caller or current).
Succeeds if a registry entry marked with Mark can be used when the success policy SP is applied, and the analysis results can be improved by reanalysing the module.
Succeeds if a registry entry marked with Mark cannot be used when the success policy SP is applied.
Obtains the list of modules to analyze. This list is formed by the modules which have their .reg file outdated, or if the module is not completely analyzed (some of the entries in the .reg file are marked or invalid). For those modules which have no .reg file, the parents of the module are included in the list (as there are no call patterns for those modules without .reg file).
The structure of the elements in the list is a term (Mod,Depth,Force), where Mod stands for the module name, Depth is the maximum depth without cycles in the intermodular graph, and Force marks those modules which must be completely reanalyzed (only useful for the parents of the modules with no reg file).
AbsInt can be either an abstract domain name or a list of abstract domains.
Obtains ModList, the list of modules in the program unit whose top-level module is TopLevelFile. This list is formed by the modules which appear in the top-down modular graph traversal with registries set to read_write mode (and including library modules if process_libraries flag is set to 'on'.
Obtains CycleList, the list of cycles in the program unit whose top-level module is TopLevelFile. A cycle is a ciclic dependency in the module dependency graph. Every element of CycleList is a list of the modules which belong to each cycle. Modules not belonging to any cycle are represented as one-element lists. CycleList is sorted as a post-order traversal of the inter-cycle dependency graph.
The modules included in CycleList are those which appear in the top-down modular graph traversal with registries set to read_write mode (and including library modules if process_libraries flag is set to 'on'.)
Given the top-level module of a program, TopLevelFile, obtains in ModList the list of pairs (module,depth) with all modules in the modular graph with their maximal depth (without cycles). All the modules in a cycle have the same depth.
Module is the name of the module for the predicate to which call pattern Sg corresponds.
Checks if there is any invalid state in the program unit starting from TopLevel, and marks transitively as invalid all affected entries in any module of the program unit. This predicate is useful only in manual analysis of modular programs.
Marks as 'invalid' all registry entries in BaseList which transitively depend on invalid entries.
Succeeds if module in Base can be processed by intermodular preprocessing tools. This predicate may have to load the registry file of that module, in order to check that the module has read-write mode.
Succeeds if the registry of module Mod with base name Base is empty for the abstract domain AbsInt.
Returns a list of tuples (IM,IMBase,Sg), where Sg is an imported call of module IM (basename IMBase). Only the imported calls from processable modules are considered.
Enumerates the CPs of the exported predicate of the current module(s).