PIPS
module.c File Reference
#include <stdio.h>
#include <string.h>
#include "genC.h"
#include "text.h"
#include "constants.h"
#include "text-util.h"
#include "misc.h"
#include "linear.h"
#include "ri.h"
#include "ri-util.h"
#include "pipsdbm.h"
#include "workspace-util.h"
+ Include dependency graph for module.c:

Go to the source code of this file.

Functions

list module_declarations (entity m)
 High-level functions about modules, using pipsdbm and ri-util and some global variables assumed properly set. More...
 
list current_module_declarations ()
 
list module_entities (entity m)
 Return a list of all variables and functions accessible somewhere in a module. More...
 
entity module_entity_to_compilation_unit_entity (entity m)
 Retrieve the compilation unit containing a module definition. More...
 
bool language_module_p (entity m, string lid)
 
void AddEntityToCompilationUnit (entity e, entity cu)
 Add an entity to the current's module compilation unit declarations we have to generate its statement if none created before due to limitation of pipsmake, it is not always possible to make sure from pipsmake that this ressource is created. More...
 
void RemoveEntityFromCompilationUnit (entity e, entity cu)
 Remove an entity from the current's module compilation unit declarations. More...
 
void AddEntityToModuleCompilationUnit (entity e, entity module)
 
list module_to_all_declarations (entity m)
 
string compilation_unit_of_module (const char *module_name)
 The output is undefined if the module is referenced but not defined in the workspace, for instance because its code should be synthesized. More...
 
string module_name_to_input_file_name (const char *module_name)
 To be checked for static functions... More...
 

Function Documentation

◆ AddEntityToCompilationUnit()

void AddEntityToCompilationUnit ( entity  e,
entity  cu 
)

Add an entity to the current's module compilation unit declarations we have to generate its statement if none created before due to limitation of pipsmake, it is not always possible to make sure from pipsmake that this ressource is created.

For example in INLINING (!) we would like to tell pipsmake we need the CODE resource from all module callers.

Parameters
[in]eis the entity to add
[in]cuis the compilation unit

SG: when adding a new entity to compilation unit, one should check the entity is not already present but an entity with the same name may already be defined there so check this with a very costly test

Parameters
cuu

Definition at line 198 of file module.c.

198  {
200  const char* cum = module_local_name(cu);
201  if( c_module_p(cu) ) {
202  if(!db_resource_required_or_available_p(DBR_PARSED_CODE,cum))
203  {
204  bool compilation_unit_parser(const char*);
210  if(!entity_undefined_p(tmp))
214  }
215  if(!db_resource_required_or_available_p(DBR_CODE,cum))
216  {
217  bool controlizer(const char*);
222  controlizer(cum);
223  if(!entity_undefined_p(tmp))
227  }
228  s=(statement)db_get_memory_resource(DBR_CODE,cum,true);
229  }
230  /* SG: when adding a new entity to compilation unit,
231  * one should check the entity is not already present
232  * but an entity with the same name may already be defined there
233  * so check this with a very costly test*/
234  list cu_entities = entity_declarations(cu);
235  FOREACH(ENTITY,cue,cu_entities)
237  return;
239  if( c_module_p(cu) ) {
240  module_reorder(s);
241  db_put_or_update_memory_resource(DBR_CODE,cum,s,true);
242  db_touch_resource(DBR_CODE,cum);
243  if( typedef_entity_p(e) ) {
244  //keyword_typedef_table = (hash_table)db_get_memory_resource(DBR_DECLARATIONS, cum, true);
245  //put_new_typedef(entity_user_name(e));
246  // FI: I do not see why the global variable of the parsers should be reused here
247  // hash_table keyword_typedef_table = (hash_table)db_get_memory_resource(DBR_DECLARATIONS, cum, true);
248  set_keyword_typedef_table((hash_table) db_get_memory_resource(DBR_DECLARATIONS, cum, true));
249  //hash_put(keyword_typedef_table,strdup(cum),(void *) TK_NAMED_TYPE);
250  // FI; temporary
251  //hash_put(keyword_typedef_table,strdup(cum),(void *) 262);
253  //SG: we have to do this behind the back of pipsmake. Not Good for serialization, but otherwise it forces the recompilation of the parsed_code of the associated modules, not good :(
254  //DB_PUT_MEMORY_RESOURCE(DBR_DECLARATIONS, cum, keyword_typedef_table);
255  }
256 
257  }
258 }
bool db_resource_required_or_available_p(const char *rname, const char *oname)
from now on we must not know about the database internals?
Definition: database.c:505
bool db_touch_resource(const char *rname, const char *oname)
touch logical time for resource[owner], possibly behind the back of pipsdbm.
Definition: database.c:538
bool compilation_unit_parser(const char *module_name)
Definition: c_parser.c:746
struct _newgen_struct_statement_ * statement
Definition: cloning.h:21
bool controlizer(const char *module_name)
The old controlizer user interface.
Definition: module.c:224
void reset_current_module_entity(void)
Reset the current module entity.
Definition: static.c:97
void reset_current_module_statement(void)
Reset the current module statement.
Definition: static.c:221
statement set_current_module_statement(statement)
Set the current module statement.
Definition: static.c:165
statement get_current_module_statement(void)
Get the current module statement.
Definition: static.c:208
entity set_current_module_entity(entity)
static.c
Definition: static.c:66
entity get_current_module_entity(void)
Get the entity of the current module.
Definition: static.c:85
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
Definition: newgen_list.h:179
string db_get_memory_resource(const char *rname, const char *oname, bool pure)
Return the pointer to the resource, whatever it is.
Definition: database.c:755
void db_put_or_update_memory_resource(const char *rname, const char *oname, void *p, bool update_is_ok)
Put a resource into the current workspace database.
Definition: database.c:854
#define same_string_p(s1, s2)
bool module_reorder(statement body)
Reorder a module and recompute order to statement if any.
Definition: reorder.c:244
#define entity_declarations(e)
MISC: newgen shorthands.
const char * entity_user_name(entity e)
Since entity_local_name may contain PIPS special characters such as prefixes (label,...
Definition: entity.c:487
bool c_module_p(entity m)
Test if a module "m" is written in C.
Definition: entity.c:2777
bool typedef_entity_p(entity e)
Definition: entity.c:1902
const char * module_local_name(entity e)
Returns the module local user name.
Definition: entity.c:582
void set_keyword_typedef_table(hash_table)
Definition: static.c:263
void AddLocalEntityToDeclarations(entity, entity, statement)
Add the variable entity e to the list of variables of the function module.
Definition: variable.c:233
void declare_new_typedef(const string)
Definition: static.c:283
#define ENTITY(x)
ENTITY.
Definition: ri.h:2755
#define entity_undefined_p(x)
Definition: ri.h:2762
#define statement_undefined_p(x)
Definition: ri.h:2420
#define statement_undefined
Definition: ri.h:2419
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
Definition: statement.c:54

References AddLocalEntityToDeclarations(), c_module_p(), compilation_unit_parser(), controlizer(), db_get_memory_resource(), db_put_or_update_memory_resource(), db_resource_required_or_available_p(), db_touch_resource(), declare_new_typedef(), ENTITY, entity_declarations, entity_undefined_p, entity_user_name(), FOREACH, get_current_module_entity(), get_current_module_statement(), module_local_name(), module_reorder(), reset_current_module_entity(), reset_current_module_statement(), same_string_p, set_current_module_entity(), set_current_module_statement(), set_keyword_typedef_table(), statement_undefined, statement_undefined_p, and typedef_entity_p().

Referenced by AddEntityToModuleCompilationUnit(), outliner_independent_recursively(), and type_to_named_type().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ AddEntityToModuleCompilationUnit()

void AddEntityToModuleCompilationUnit ( entity  e,
entity  module 
)
Parameters
moduleodule

Definition at line 301 of file module.c.

302 {
305  FOREACH(ENTITY,se,tse) {
306  const char * eln = entity_local_name(se);
307  if(strstr(eln, DUMMY_STRUCT_PREFIX) || strstr(eln, DUMMY_UNION_PREFIX) ) {
308  continue;
309  }
311  }
312  gen_free_list(tse);
314 }
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
void gen_free_list(list l)
free the spine of the list
Definition: list.c:327
#define DUMMY_STRUCT_PREFIX
Definition: naming-local.h:87
#define DUMMY_UNION_PREFIX
Definition: naming-local.h:88
static char * module
Definition: pips.c:74
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
list type_supporting_entities(list, type)
Definition: type.c:4347
#define entity_type(x)
Definition: ri.h:2792
void AddEntityToCompilationUnit(entity e, entity cu)
Add an entity to the current's module compilation unit declarations we have to generate its statement...
Definition: module.c:198
entity module_entity_to_compilation_unit_entity(entity m)
Retrieve the compilation unit containing a module definition.
Definition: module.c:116

References AddEntityToCompilationUnit(), DUMMY_STRUCT_PREFIX, DUMMY_UNION_PREFIX, ENTITY, entity_local_name(), entity_type, FOREACH, gen_free_list(), module, module_entity_to_compilation_unit_entity(), NIL, and type_supporting_entities().

Referenced by dimensions_to_dma(), initialization_list_to_statements(), inline_expression_call(), make_dma_transfert(), outliner_file(), outliner_independent_recursively(), promote_local_entities(), step_parameter(), and wrap_argument().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compilation_unit_of_module()

string compilation_unit_of_module ( const char *  module_name)

The output is undefined if the module is referenced but not defined in the workspace, for instance because its code should be synthesized.

Fabien Coelho suggests to build a default compilation unit where all synthesized module codes would be located.

Parameters
module_nameodule_name

Definition at line 350 of file module.c.

351 {
353  pips_assert("only for C modules\n", entity_undefined_p(e) || c_module_p(e));
354 
355  // Should only be called for C modules.
357 
358  // The guard may not be sufficient...
359  // and this may crash in db_get_memory_resource()
360  if(db_resource_p(DBR_USER_FILE, module_name)) {
361  string source_file_name =
362  db_get_memory_resource(DBR_USER_FILE, module_name, true);
363  string simpler_file_name = pips_basename(source_file_name, PP_C_ED);
364 
365  // It is not clear how robust it is going to be
366  // when file name conflicts occur.
368  simpler_file_name);
369  free(simpler_file_name);
370  }
371 
372  return compilation_unit_name;
373 }
bool db_resource_p(const char *rname, const char *oname)
true if exists and in loaded or stored state.
Definition: database.c:524
string compilation_unit_name
cproto-generated files
Definition: c_parser.c:49
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
char * pips_basename(char *fullpath, char *suffix)
Definition: file.c:822
void free(void *)
#define asprintf
Definition: misc-local.h:225
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
Definition: misc-local.h:172
#define FILE_SEP_STRING
Definition: naming-local.h:41
#define string_undefined
Definition: newgen_types.h:40
entity module_name_to_entity(const char *mn)
This is an alias for local_name_to_top_level_entity.
Definition: entity.c:1479

References asprintf, c_module_p(), compilation_unit_name, db_get_memory_resource(), db_resource_p(), entity_undefined_p, FILE_SEP_STRING, free(), module_name(), module_name_to_entity(), pips_assert, pips_basename(), and string_undefined.

Referenced by actual_c_parser(), add_new_module_from_text(), build_real_resources(), cast_STEP_ARG(), create_module_with_statement(), entity_from_user_name(), entity_more_or_less_minimal_name(), freia_data2d_field(), generic_initializer(), inline_expression_call(), linearize_array_generic(), normalize_microcode(), outliner_file(), outliner_scan(), simd_memory_packing(), sort_parameters(), step_compile_generated_module(), step_parameter(), string_to_entity(), and update_referenced_entities().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ current_module_declarations()

list current_module_declarations ( void  )

Definition at line 78 of file module.c.

79 {
81  return module_declarations(m);
82 }
list module_declarations(entity m)
High-level functions about modules, using pipsdbm and ri-util and some global variables assumed prope...
Definition: module.c:58

References get_current_module_entity(), and module_declarations().

Referenced by add_declaration_information(), and module_to_value_mappings().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ language_module_p()

bool language_module_p ( entity  m,
string  lid 
)

FI: does not work with static functions

SG: must check if the ressource exist (not always the case)

SG: be positive ! (needed for Hpfc)

Parameters
lidid

Definition at line 166 of file module.c.

167 {
168  bool c_p = false;
169 
170  if(entity_module_p(m)) {
171  /* FI: does not work with static functions */
172  //string aufn = db_get_memory_resource(DBR_USER_FILE, entity_user_name(m), true);
173  /* SG: must check if the ressource exist (not always the case) */
174  const char* lname= module_local_name(m);
175  if( db_resource_p(DBR_USER_FILE,lname) )
176  {
177  string aufn = db_get_memory_resource(DBR_USER_FILE, module_local_name(m), true);
178  string n = strstr(aufn, lid);
179 
180  c_p = (n!=NULL);
181  }
182  else
183  c_p = true; /* SG: be positive ! (needed for Hpfc)*/
184  }
185  return c_p;
186 }
bool entity_module_p(entity e)
Definition: entity.c:683
static int lname(char *s, int look_for_entry)
check for keywords for subprograms return 0 if comment card, 1 if found name and put in arg string.
Definition: split_file.c:283

References db_get_memory_resource(), db_resource_p(), entity_module_p(), lname(), and module_local_name().

+ Here is the call graph for this function:

◆ module_declarations()

list module_declarations ( entity  m)

High-level functions about modules, using pipsdbm and ri-util and some global variables assumed properly set.

module.c

Retrieve all declarations linked to a module, but the local variables private to loops. Allocate and build a new list which will have to be freed by the caller.

This function has been implemented twice.

It may be useless because code_declarations() is supposed to contain all module declarations, regardless of where the declarations happens.

FI: maybe we should also look up the declarations in the compilation unit...

Definition at line 58 of file module.c.

59 {
61  if (list_undefined_p(dl))
62  {
65  }
66 
67  /* FI: maybe we should also look up the declarations in the compilation unit... */
68 
69  ifdebug(9) {
70  pips_debug(8, "Current module declarations:\n");
71  print_entities(dl);
72  fprintf(stderr, "\n");
73  }
74 
75  return gen_copy_seq(dl);
76 }
void set_current_module_declarations(list)
Definition: static.c:131
list get_current_module_declarations(void)
Definition: static.c:141
#define list_undefined_p(c)
Return if a list is undefined.
Definition: newgen_list.h:75
list gen_copy_seq(list l)
Copy a list structure.
Definition: list.c:501
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
void print_entities(list l)
Definition: entity.c:167
#define code_declarations(x)
Definition: ri.h:784
#define value_code(x)
Definition: ri.h:3067
#define entity_initial(x)
Definition: ri.h:2796
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
#define ifdebug(n)
Definition: sg.c:47

References code_declarations, entity_initial, fprintf(), gen_copy_seq(), get_current_module_declarations(), ifdebug, list_undefined_p, pips_debug, print_entities(), set_current_module_declarations(), and value_code.

Referenced by add_parameter_variable_to_module(), add_private_variable_to_module(), create_parameter_for_new_module(), current_module_declarations(), and module_entities().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ module_entities()

list module_entities ( entity  m)

Return a list of all variables and functions accessible somewhere in a module.

Make sure you only have entities in list cudl

Definition at line 85 of file module.c.

86 {
89  list mdl = module_declarations(m);
90 
91  pips_assert("compilation unit is an entity list.",
93  pips_assert("initial cudl is an entity list.", entity_list_p(cudl));
94  pips_assert("mdl is an entity list.", entity_list_p(mdl));
95 
96  cudl = gen_nconc(cudl, mdl);
97 
98  /* Make sure you only have entities in list cudl */
99  pips_assert("Final cudl is an entity list.", entity_list_p(cudl));
100 
101  return cudl;
102 }
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
Definition: list.c:344
bool entity_list_p(list el)
Checks that el only contains entity.
Definition: entity.c:1411

References code_declarations, entity_initial, entity_list_p(), gen_copy_seq(), gen_nconc(), module_declarations(), module_entity_to_compilation_unit_entity(), pips_assert, and value_code.

Referenced by entity_module_unambiguous_user_name().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ module_entity_to_compilation_unit_entity()

entity module_entity_to_compilation_unit_entity ( entity  m)

Retrieve the compilation unit containing a module definition.

The implementation is clumsy.

It would be nice to memoize the information as with get_current_module_entity().

It would be much nicer to keep a resource like INPUT_FILE_NAME, say COMPILATION_UNIT_NAME.

The entity returned may be undefined.

The resource does not always exist.

For Fortran code to start with.

For synthesized code too: initializer, outliner... (although pass outline might build a compilation unit...

Let's assume that synthesized module "foo" has "foo!" a compilation unit name and it never is a static function.

Definition at line 116 of file module.c.

117 {
119 
121  cu = m;
122  else if(!db_resource_p(DBR_USER_FILE, module_local_name(m))) {
123  /* The resource does not always exist.
124  *
125  * For Fortran code to start with.
126  *
127  * For synthesized code too: initializer, outliner... (although
128  * pass outline might build a compilation unit...
129  *
130  * Let's assume that synthesized module "foo" has "foo!" a
131  * compilation unit name and it never is a static function.
132  */
133  string name = strdup(concatenate(entity_name(m), FILE_SEP_STRING, NULL));
134  cu = gen_find_tabulated(name, entity_domain);
135  }
136  else {
137  // string aufn = db_get_memory_resource(DBR_USER_FILE, entity_user_name(m), true);
138  string aufn = db_get_memory_resource(DBR_USER_FILE, module_local_name(m), true);
139  string lufn = strrchr(aufn, '/')+1;
140 
141  if(lufn!=NULL) {
142  string n = strstr(lufn, PP_C_ED);
143  int l = n-lufn;
144  string cun = strndup(lufn, l);
145 
146  if(static_module_name_p(cun)) {
147  string end = strrchr(cun, FILE_SEP_CHAR);
148  *(end+1) = '\0';
150  }
151  else {
152  string ncun = strdup(concatenate(cun, FILE_SEP_STRING, NULL));
154  free(ncun);
155  }
156  free(cun);
157  }
158  else
159  pips_internal_error("Not implemented yet");
160  }
161  pips_assert("If defined, cu is a compilation unit",
163  return cu;
164 }
bool static_module_name_p(const char *name)
Check if the given name is a static module name.
Definition: entity_names.c:122
char end
Definition: gtk_status.c:82
#define pips_internal_error
Definition: misc-local.h:149
#define FILE_SEP_CHAR
Definition: naming-local.h:38
string concatenate(const char *,...)
Return the concatenation of the given strings.
Definition: string.c:183
void * gen_find_tabulated(const char *, int)
Definition: tabulated.c:218
entity local_name_to_top_level_entity(const char *n)
This function try to find a top-level entity from a local name.
Definition: entity.c:1450
bool compilation_unit_entity_p(entity e)
Check if the given module entity is a compilation unit.
Definition: module.c:87
#define entity_undefined
Definition: ri.h:2761
#define entity_name(x)
Definition: ri.h:2790
#define entity_domain
newgen_syntax_domain_defined
Definition: ri.h:410
char * strdup()
char * strndup(char const *s, size_t n)
A replacement function, for systems that lack strndup.
Definition: strndup.c:26

References compilation_unit_entity_p(), concatenate(), db_get_memory_resource(), db_resource_p(), end, entity_domain, entity_name, entity_undefined, entity_undefined_p, FILE_SEP_CHAR, FILE_SEP_STRING, free(), gen_find_tabulated(), local_name_to_top_level_entity(), module_local_name(), pips_assert, pips_internal_error, static_module_name_p(), strdup(), and strndup().

Referenced by AddEntityToModuleCompilationUnit(), ensure_comment_consistency(), module_entities(), outliner_parameters(), promote_local_entities(), and update_unstructured_declarations().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ module_name_to_input_file_name()

string module_name_to_input_file_name ( const char *  module_name)

To be checked for static functions...

Parameters
module_nameodule_name

Definition at line 376 of file module.c.

377 {
379  pips_assert("only for C modules\n", entity_undefined_p(e) || c_module_p(e));
380 
381  // Should only be called for C modules.
382  string input_file_name = string_undefined;
383 
384  // The guard may not be sufficient...
385  // and this may crash in db_get_memory_resource()
386  if(db_resource_p(DBR_USER_FILE, module_name)) {
387  string source_file_name =
388  db_get_memory_resource(DBR_USER_FILE, module_name, true);
389  string simpler_file_name = pips_basename(source_file_name, PP_C_ED);
390 
391  // It is not clear how robust it is going to be
392  // when file name conflicts occur.
393  (void) asprintf(&input_file_name, "%s/" WORKSPACE_SRC_SPACE "/%s.c",
394  db_get_current_workspace_directory(), simpler_file_name);
395  free(simpler_file_name);
396  }
397 
398  return input_file_name;
399 }
#define WORKSPACE_SRC_SPACE
Definition: pipsdbm-local.h:32
string db_get_current_workspace_directory(void)
Definition: workspace.c:96

References asprintf, c_module_p(), db_get_current_workspace_directory(), db_get_memory_resource(), db_resource_p(), entity_undefined_p, free(), module_name(), module_name_to_entity(), pips_assert, pips_basename(), string_undefined, and WORKSPACE_SRC_SPACE.

+ Here is the call graph for this function:

◆ module_to_all_declarations()

list module_to_all_declarations ( entity  m)

Definition at line 323 of file module.c.

324 {
326  bool c_module_p(entity);
327 
328  if(c_module_p(m)) {
329  //const char* module_name = entity_user_name(m);
330  const char* module_name = entity_local_name(m);
331  statement s = (statement) db_get_memory_resource(DBR_PARSED_CODE, module_name, true);
333 
334  FOREACH(ENTITY, e, sdl) {
335  if(!entity_is_argument_p(e, dl))
336  dl = gen_nconc(dl, CONS(ENTITY, e, NIL));
337  }
338  gen_free_list(sdl);
339  }
340 
341  return dl;
342 }
bool entity_is_argument_p(entity e, cons *args)
Definition: arguments.c:150
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
list statement_to_declarations(void *)
Get a list of all variables declared recursively within a statement.
Definition: statement.c:3253

References c_module_p(), code_declarations, CONS, db_get_memory_resource(), ENTITY, entity_initial, entity_is_argument_p(), entity_local_name(), FOREACH, gen_copy_seq(), gen_free_list(), gen_nconc(), module_name(), NIL, statement_to_declarations(), and value_code.

Referenced by all_data_to_precondition(), and generic_module_initial_pointer_values().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RemoveEntityFromCompilationUnit()

void RemoveEntityFromCompilationUnit ( entity  e,
entity  cu 
)

Remove an entity from the current's module compilation unit declarations.

Parameters
[in]eis the entity to remove
[in]cuis the compilation unit
Parameters
cuu

Definition at line 265 of file module.c.

265  {
267  const char* cum = module_local_name(cu);
268  if( c_module_p(cu) ) {
269  if(!db_resource_required_or_available_p(DBR_CODE,cum))
270  {
271  bool controlizer(const char*);
276  controlizer(cum);
277  if(!entity_undefined_p(tmp))
281  }
282  s=(statement)db_get_memory_resource(DBR_CODE,cum,true);
283  }
284 
285  // Remove entity from global declaration lists
287  // FIXME : s is only defined for c_module !!
289 
291  if( c_module_p(cu) ) {
292  module_reorder(s);
293  db_put_or_update_memory_resource(DBR_CODE,cum,s,true);
294  db_touch_resource(DBR_CODE,cum);
295  }
296 }
void gen_remove(list *cpp, const void *o)
remove all occurences of item o from list *cpp, which is thus modified.
Definition: list.c:685
statement remove_declaration_statement(statement, entity)
Declarations are not only lists of entities, but also statement to carry the line number,...
Definition: statement.c:2966
#define statement_declarations(x)
Definition: ri.h:2460

References c_module_p(), controlizer(), db_get_memory_resource(), db_put_or_update_memory_resource(), db_resource_required_or_available_p(), db_touch_resource(), entity_declarations, entity_undefined_p, gen_remove(), get_current_module_entity(), get_current_module_statement(), module_local_name(), module_reorder(), remove_declaration_statement(), reset_current_module_entity(), reset_current_module_statement(), set_current_module_entity(), set_current_module_statement(), statement_declarations, statement_undefined, and statement_undefined_p.

+ Here is the call graph for this function: