Commit 97e1393d authored by Maxime Perrotin's avatar Maxime Perrotin

Sync with subversion

parent 82de8cbd
Pipeline #350 skipped
...@@ -42,6 +42,7 @@ endif ...@@ -42,6 +42,7 @@ endif
# strip $(exec) # strip $(exec)
install: install:
$(MAKE)
cp buildsupport `ocarina-config --prefix`/bin/ cp buildsupport `ocarina-config --prefix`/bin/
cp misc/driveGnuPlotsStreams.pl `ocarina-config --prefix`/bin/ cp misc/driveGnuPlotsStreams.pl `ocarina-config --prefix`/bin/
......
This diff is collapsed.
...@@ -34,7 +34,8 @@ package Imported_Routines is ...@@ -34,7 +34,8 @@ package Imported_Routines is
Id : String; Id : String;
LenId : Integer; LenId : Integer;
Node_Name : String; Node_Name : String;
Len_Node : Integer); Len_Node : Integer;
Coverage : Integer);
procedure C_New_Processor (Name : String; procedure C_New_Processor (Name : String;
Name_Len : Integer; Name_Len : Integer;
......
This diff is collapsed.
...@@ -73,6 +73,15 @@ int ada_gw_preamble(FV * fv) ...@@ -73,6 +73,15 @@ int ada_gw_preamble(FV * fv)
FOREACH(i, Interface, fv->interfaces, { FOREACH(i, Interface, fv->interfaces, {
FOREACH(p, Parameter, i->in, ADD_TO_SET(ASN1_Module, modules, p->asn1_module)); FOREACH(p, Parameter, i->in, ADD_TO_SET(ASN1_Module, modules, p->asn1_module));
FOREACH(p, Parameter, i->out, ADD_TO_SET(ASN1_Module, modules, p->asn1_module)); FOREACH(p, Parameter, i->out, ADD_TO_SET(ASN1_Module, modules, p->asn1_module));
FOREACH(cp, Context_Parameter, fv->context_parameters, {
if (strcmp (cp->type.name, "Taste-directive") &&
strcmp (cp->type.name, "Simulink-Tunable-Parameter") &&
strcmp (cp->type.name, "Timer")) {
ADD_TO_SET(ASN1_Module,
modules,
asn2underscore(cp->type.module, strlen(cp->type.module)));
}
});
}); });
FOREACH(m, ASN1_Module, modules, { FOREACH(m, ASN1_Module, modules, {
...@@ -99,7 +108,7 @@ int ada_gw_preamble(FV * fv) ...@@ -99,7 +108,7 @@ int ada_gw_preamble(FV * fv)
"\t%s : asn1Scc%s := context_%s.%s_ctxt.%s;\n" "\t%s : asn1Scc%s := context_%s.%s_ctxt.%s;\n"
"\tpragma export(C, %s, \"%s_%s\");\n", "\tpragma export(C, %s, \"%s_%s\");\n",
cp->name, cp->name,
cp->type.name, asn2underscore(cp->type.name, strlen(cp->type.name)),
fv->name, fv->name,
fv->name, fv->name,
cp->name, cp->name,
......
/* Buildsupport is (c) 2008-2015 European Space Agency /* Buildsupport is (c) 2008-2016 European Space Agency
* contact: maxime.perrotin@esa.int * contact: maxime.perrotin@esa.int
* License is LGPL, check LICENSE file */ * License is LGPL, check LICENSE file */
/* build_c_skeletons.c /* build_c_skeletons.c
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
this program generates empty C functions respecting the interfaces defined this program generates empty C functions respecting the interfaces defined
in the interface view. it provides functions to invoke RI. in the interface view. it provides functions to invoke RI.
updated 10/06/2016: properly align params and use FOREACH
updated 20/04/2009 to disable in case "-onlycv" flag is set updated 20/04/2009 to disable in case "-onlycv" flag is set
updated 8/10/2009 to rename the user_code.h/c to FV_name.h/c like in the Ada backend updated 8/10/2009 to rename the user_code.h/c to FV_name.h/c like in the Ada backend
*/ */
...@@ -58,7 +59,7 @@ void c_gw_preamble(FV * fv) ...@@ -58,7 +59,7 @@ void c_gw_preamble(FV * fv)
/* b. user_code.c preamble (if applicable) */ /* b. user_code.c preamble (if applicable) */
if (NULL != user_code_c) { if (NULL != user_code_c) {
fprintf(user_code_c, fprintf(user_code_c,
"/* Functions to be filled by the user (never overwritten by buildsupport tool) */\n\n"); "/* User code: This file will not be overwritten by TASTE. */\n\n");
fprintf(user_code_c, "#include \"%s.h\"\n\n", fv->name); fprintf(user_code_c, "#include \"%s.h\"\n\n", fv->name);
...@@ -92,12 +93,14 @@ int Init_C_GW_Backend(FV * fv, bool generateC) ...@@ -92,12 +93,14 @@ int Init_C_GW_Backend(FV * fv, bool generateC)
strlen(fv->system_ast->context->output)); strlen(fv->system_ast->context->output));
} }
build_string(&path, fv->name, strlen(fv->name)); build_string(&path, fv->name, strlen(fv->name));
build_string(&filename, fv->name, strlen(fv->name)); build_string(&filename, fv->name, strlen(fv->name));
build_string(&filename, ".h", strlen(".h")); build_string(&filename, ".h", strlen(".h"));
create_file(path, filename, &user_code_h);
create_file(path, filename, &user_code_h);
filename[strlen(filename) - 1] = 'c'; /* change from .h to .c */ filename[strlen(filename) - 1] = 'c'; /* change from .h to .c */
if (cpp == fv->language) {
build_string(&filename, "c", 1); /* change from .c to .cc */
}
if (!file_exists(path, filename) && true == generateC) if (!file_exists(path, filename) && true == generateC)
create_file(path, filename, &user_code_c); create_file(path, filename, &user_code_c);
...@@ -131,79 +134,92 @@ void close_c_gw_files() ...@@ -131,79 +134,92 @@ void close_c_gw_files()
*/ */
void add_PI_to_C_gw(Interface * i) void add_PI_to_C_gw(Interface * i)
{ {
Parameter_list *tmp;
if (NULL == user_code_h) if (NULL == user_code_h)
return; return;
fprintf(user_code_h, "void %s_PI_%s(", i->parent_fv->name, i->name); char *signature = make_string("void %s_PI_%s(",
if (NULL != user_code_c) i->parent_fv->name,
fprintf(user_code_c, "void %s_PI_%s(", i->parent_fv->name, i->name);
i->name);
tmp = i->in; size_t sig_len = strlen(signature);
char *sep = make_string(",\n%*s", sig_len, "");
bool comma = false;
while (NULL != tmp) { fprintf(user_code_h, "%s", signature);
fprintf(user_code_h, "%sconst asn1Scc%s *",
(tmp != i->in) ? ", " : "", tmp->value->type);
if (NULL != user_code_c)
fprintf(user_code_c, "%sconst asn1Scc%s *IN_%s",
(tmp != i->in) ? ", " : "",
tmp->value->type, tmp->value->name);
tmp = tmp->next;
}
tmp = i->out; if (NULL != user_code_c) {
fprintf(user_code_c, "%s", signature);
while (NULL != tmp) {
fprintf(user_code_h, "%sasn1Scc%s *",
(tmp != i->out
|| (tmp == i->out
&& NULL != i->in)) ? ", " : "", tmp->value->type);
if (NULL != user_code_c)
fprintf(user_code_c, "%sasn1Scc%s *OUT_%s",
(tmp != i->out
|| (tmp == i->out
&& NULL != i->in)) ? ", " : "", tmp->value->type,
tmp->value->name);
tmp = tmp->next;
} }
FOREACH (p, Parameter, i->in, {
char *sort = make_string("%sconst asn1Scc%s *",
comma? sep: "",
p->type);
fprintf(user_code_h, "%s", sort);
if(NULL != user_code_c) {
fprintf(user_code_c, "%sIN_%s",
sort,
p->name);
}
free(sort);
comma = true;
});
FOREACH (p, Parameter, i->out, {
char *sort = make_string("%sasn1Scc%s *",
comma? sep: "",
p->type);
fprintf(user_code_h, "%s", sort);
if(NULL != user_code_c) {
fprintf(user_code_c, "%sOUT_%s",
sort,
p->name);
}
free(sort);
comma = true;
});
fprintf(user_code_h, ");\n\n"); fprintf(user_code_h, ");\n\n");
if (NULL != user_code_c) if (NULL != user_code_c)
fprintf(user_code_c, ")\n{\n /* Write your code here! */\n}\n\n"); fprintf(user_code_c, ")\n{\n /* Write your code here! */\n}\n\n");
free(signature);
free(sep);
} }
/* Declaration of the RI in user_code.h */ /* Declaration of the RI in user_code.h */
void add_RI_to_C_gw(Interface * i) void add_RI_to_C_gw(Interface * i)
{ {
Parameter_list *tmp;
if (NULL == user_code_h) if (NULL == user_code_h)
return; return;
fprintf(user_code_h, "extern void %s_RI_%s(", i->parent_fv->name, char *signature = make_string("extern void %s_RI_%s(",
i->name); i->parent_fv->name,
i->name);
tmp = i->in; size_t sig_len = strlen(signature);
char *sep = make_string(",\n%*s", sig_len, "");
bool comma = false;
while (NULL != tmp) { fprintf(user_code_h, "%s", signature);
fprintf(user_code_h, "%sconst asn1Scc%s *",
(tmp != i->in) ? ", " : "", tmp->value->type);
tmp = tmp->next;
}
tmp = i->out; FOREACH (p, Parameter, i->in, {
fprintf(user_code_h, "%sconst asn1Scc%s *",
comma? sep: "",
p->type);
comma = true;
});
while (NULL != tmp) { FOREACH (p, Parameter, i->out, {
fprintf(user_code_h, "%sasn1Scc%s *", fprintf(user_code_h,"%sconst asn1Scc%s *",
(tmp != i->out comma? sep: "",
|| (tmp == i->out p->type);
&& NULL != i->in)) ? ", " : "", tmp->value->type); comma = true;
tmp = tmp->next; });
}
fprintf(user_code_h, ");\n\n"); fprintf(user_code_h, ");\n\n");
free(signature);
free(sep);
} }
/* Add timer declarations to the C code skeletons */ /* Add timer declarations to the C code skeletons */
......
/* Buildsupport is (c) 2008-2015 European Space Agency /* Buildsupport is (c) 2008-2016 European Space Agency
* contact: maxime.perrotin@esa.int * contact: maxime.perrotin@esa.int
* License is LGPL, check LICENSE file */ * License is LGPL, check LICENSE file */
/* build_script.c /* build_script.c
this backend generates parts of the build_sample.sh script that are project-specific. this backend generates the build script that generates the binary files
1st version 20 may 2009 1st version 20 may 2009
...@@ -105,20 +105,34 @@ void Create_script() ...@@ -105,20 +105,34 @@ void Create_script()
fprintf (script, "SKELS=\"%s\"\n\n", OUTPUT_PATH); fprintf (script, "SKELS=\"%s\"\n\n", OUTPUT_PATH);
fprintf (script, "# Update the data view with local paths\n"
"taste-update-data-view\n\n");
/* OpenGEODE-specific: call code generator on the fly */
FOREACH (fv, FV, get_system_ast()->functions, {
if (sdl == fv->language) {
fprintf(script,
"# Generate code for OpenGEODE function %s\n"
"cd \"$SKELS\"/%s && "
"opengeode --toAda %s.pr system_structure.pr "
"&& cd $OLDPWD\n\n",
fv->name, fv->name, fv->name);
}
});
/* Remove old zip files and create fresh new ones from user code */ /* Remove old zip files and create fresh new ones from user code */
fprintf (script, "cd \"$SKELS\"\n");
FOREACH (fv, FV, get_system_ast()->functions, { FOREACH (fv, FV, get_system_ast()->functions, {
//if (sdl != fv->language PUT BACK WHEN OPENGEODE FULLY SUPPORTED //if (sdl != fv->language PUT BACK WHEN OPENGEODE FULLY SUPPORTED
if (vhdl != fv->language if (vhdl != fv->language
&& gui != fv->language && gui != fv->language
&& rtds != fv->language && rtds != fv->language
&& NULL == fv->zipfile) { && NULL == fv->zipfile) {
fprintf (script, "rm -f %s.zip\n", fv->name); fprintf (script,
fprintf (script, "zip %s %s/*\n", fv->name, fv->name); "cd \"$SKELS\" && rm -f %s.zip && "
"zip %s %s/* && cd $OLDPWD\n\n",
fv->name, fv->name, fv->name);
} }
}) })
fprintf (script, "cd \"$OLDPWD\"\n\n");
fprintf (script, "[ ! -z \"$CLEANUP\" ] && rm -rf binary\n\n"); fprintf (script, "[ ! -z \"$CLEANUP\" ] && rm -rf binary\n\n");
...@@ -215,11 +229,21 @@ void Create_script() ...@@ -215,11 +229,21 @@ void Create_script()
} }
}) })
/* If node is configured with code coverage flag, set the option */
FOREACH (process, Process, get_system_ast()->processes, {
if (true == process->coverage) {
fprintf(script,
" \\\n\t--nodeOptions %s@gcov=on",
process->name);
}
});
/* Let user add custom orchestrator flags */
fprintf (script, " \\\n\t$ORCHESTRATOR_OPTIONS\n"); fprintf (script, " \\\n\t$ORCHESTRATOR_OPTIONS\n");
close_file(&script); close_file(&script);
if (chmod ("build-script.sh", S_IRWXG | S_IRWXO | S_IRWXU)) { if (chmod ("build-script.sh", S_IRWXG | S_IRWXO | S_IRWXU)) {
fprintf (stderr, "Warning: Unable to change mode of build-script.sh to make it executable\n"); fprintf (stderr, "Warning: Unable to change mode of build-script.sh to make it executable\n");
} }
} }
......
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
*/ */
#define ID "$Id$"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -319,7 +317,7 @@ void Set_Context_Variable (char *name, size_t len1, char *type, size_t len2, ...@@ -319,7 +317,7 @@ void Set_Context_Variable (char *name, size_t len1, char *type, size_t len2,
{ {
Context_Parameter *cp = NULL; Context_Parameter *cp = NULL;
unsigned int i = 0; unsigned int i = 0;
cp = (Context_Parameter *) malloc (sizeof (Context_Parameter)); cp = (Context_Parameter *) malloc (sizeof (Context_Parameter));
assert (NULL != cp); assert (NULL != cp);
...@@ -334,7 +332,7 @@ void Set_Context_Variable (char *name, size_t len1, char *type, size_t len2, ...@@ -334,7 +332,7 @@ void Set_Context_Variable (char *name, size_t len1, char *type, size_t len2,
/* First check the validity of the ASN.1 module name */ /* First check the validity of the ASN.1 module name */
if (!strncmp (mod, "nomodule", len4)) { if (!strncmp (mod, "nomodule", len4)) {
ERROR ("** Error: The dataview you are using was generated using an old version\n"); ERROR ("** Error: The dataview you are using was generated using an old version\n");
ERROR (" of the toolchain. You must update it by calling asn2aadlPlus.py <file.asn>.\n"); ERROR (" of the toolchain. You must update it by calling taste-update-data-view\n");
exit (-1); exit (-1);
} }
/* Temporary for the SMP2 support until version of taste-IV withtout obj suffixes */ /* Temporary for the SMP2 support until version of taste-IV withtout obj suffixes */
...@@ -503,7 +501,8 @@ void New_Process(char *procname, ...@@ -503,7 +501,8 @@ void New_Process(char *procname,
char *procid, char *procid,
size_t lenid, size_t lenid,
char *node, char *node,
size_t lennode) size_t lennode,
bool coverage)
{ {
Create_Process(&process); Create_Process(&process);
...@@ -520,6 +519,7 @@ void New_Process(char *procname, ...@@ -520,6 +519,7 @@ void New_Process(char *procname,
old_cpu_name); old_cpu_name);
//free(old_cpu_name); //free(old_cpu_name);
} }
process->coverage = coverage;
} }
} }
...@@ -907,7 +907,7 @@ void Add_RI(char *ri, size_t length, ...@@ -907,7 +907,7 @@ void Add_RI(char *ri, size_t length,
RI); RI);
} }
/* add an IN parameter to the list */ /* add an IN parameter to the list (name respects the case) */
void Add_In_Param(char *name, size_t l1, void Add_In_Param(char *name, size_t l1,
char *type, size_t l2, char *type, size_t l2,
char *module, size_t l3, char *module, size_t l3,
...@@ -917,8 +917,14 @@ void Add_In_Param(char *name, size_t l1, ...@@ -917,8 +917,14 @@ void Add_In_Param(char *name, size_t l1,
Create_Parameter(&parameter); Create_Parameter(&parameter);
assert (NULL != parameter && NULL != interface); assert (NULL != parameter && NULL != interface);
char *param_name = name;
build_string(&(parameter->name), name, l1); if (0 == system_ast->context->keep_case) {
// user does not want to keep case of the parameters
param_name = string_to_lower(name);
}
build_string(&(parameter->name), param_name, l1);
build_string(&(parameter->type), type, l2); build_string(&(parameter->type), type, l2);
build_string(&(parameter->asn1_module), module, l3); build_string(&(parameter->asn1_module), module, l3);
build_string(&(parameter->asn1_filename), filename, l4); build_string(&(parameter->asn1_filename), filename, l4);
...@@ -938,8 +944,14 @@ void Add_Out_Param(char *name, size_t l1, ...@@ -938,8 +944,14 @@ void Add_Out_Param(char *name, size_t l1,
Create_Parameter(&parameter); Create_Parameter(&parameter);
assert (NULL != parameter && NULL != interface); assert (NULL != parameter && NULL != interface);
char *param_name = name;
if (0 == system_ast->context->keep_case) {
// user does not want to keep case of the parameters
param_name = string_to_lower(name);
}
build_string(&(parameter->name), name, l1); build_string(&(parameter->name), param_name, l1);
build_string(&(parameter->type), type, l2); build_string(&(parameter->type), type, l2);
build_string(&(parameter->asn1_module), module, l3); build_string(&(parameter->asn1_module), module, l3);
build_string(&(parameter->asn1_filename), filename, l4); build_string(&(parameter->asn1_filename), filename, l4);
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
static FILE *h = NULL, *cfile = NULL; static FILE *h = NULL, *cfile = NULL;
extern void Check_If_A_Calling_Thread_Has_No_Async_RI(FV *, int *);
/* Adds header to files */ /* Adds header to files */
void c_wrappers_preamble(FV * fv) void c_wrappers_preamble(FV * fv)
{ {
...@@ -224,10 +222,10 @@ void add_sync_PI_to_c_wrappers(Interface * i) ...@@ -224,10 +222,10 @@ void add_sync_PI_to_c_wrappers(Interface * i)
fprintf(h, "----------------------------------------------------*/\n"); fprintf(h, "----------------------------------------------------*/\n");
fprintf(h, "void sync_%s_%s(int", i->parent_fv->name, i->name); fprintf(h, "void sync_%s_%s(int", i->parent_fv->name, i->name);
FOREACH(p, Parameter, i->in, { FOREACH(p, Parameter, i->in, {
(void) p; fprintf(h, ", void *, int");}); (void) p; fprintf(h, ", void *, size_t");});
FOREACH(p, Parameter, i->out, { FOREACH(p, Parameter, i->out, {
(void) p; fprintf(h, ", void *, int *");}); (void) p; fprintf(h, ", void *, size_t *");});
fprintf(h, ");\n\n"); fprintf(h, ");\n\n");
...@@ -241,11 +239,11 @@ void add_sync_PI_to_c_wrappers(Interface * i) ...@@ -241,11 +239,11 @@ void add_sync_PI_to_c_wrappers(Interface * i)
fprintf(cfile, "void sync_%s_%s(int calling_thread", fprintf(cfile, "void sync_%s_%s(int calling_thread",
i->parent_fv->name, i->name); i->parent_fv->name, i->name);
FOREACH(p, Parameter, i->in, { FOREACH(p, Parameter, i->in, {
fprintf(cfile, ", void *%s, int %s_len", p->name, p->name); fprintf(cfile, ", void *%s, size_t %s_len", p->name, p->name);
}); });
FOREACH(p, Parameter, i->out, { FOREACH(p, Parameter, i->out, {
fprintf(cfile, ", void *%s, int *%s_len", p->name, p->name); fprintf(cfile, ", void *%s, size_t *%s_len", p->name, p->name);
}); });
fprintf(cfile, ")\n{\n"); fprintf(cfile, ")\n{\n");
...@@ -592,8 +590,8 @@ void Generate_C_CallingStack(FV * fv) ...@@ -592,8 +590,8 @@ void Generate_C_CallingStack(FV * fv)
if (2 > count) if (2 > count)
return; return;
fprintf(h, "static int %s_stack[%d] = {0};\n\n", fv->name, count); fprintf(cfile, "static int %s_stack[%d] = {0};\n\n", fv->name, count);
/* /*
In C we would need a semaphore to protect the stack. In C we would need a semaphore to protect the stack.
TO BE INVESTIGATED (we could create a new function with protected interfaces at system level) TO BE INVESTIGATED (we could create a new function with protected interfaces at system level)
But when we are already in a protected function there is no risk to be preempted by a higher But when we are already in a protected function there is no risk to be preempted by a higher
...@@ -610,6 +608,7 @@ void Generate_C_CallingStack(FV * fv) ...@@ -610,6 +608,7 @@ void Generate_C_CallingStack(FV * fv)
fprintf(cfile, fprintf(cfile,
"#ifdef __unix__\n\tprintf(\"### STACK ERROR (GET TOP EMPTY STACK) in %s\\n\");\n#endif\n", "#ifdef __unix__\n\tprintf(\"### STACK ERROR (GET TOP EMPTY STACK) in %s\\n\");\n#endif\n",
fv->name); fv->name);
fprintf(cfile, "return -1;\n");
fprintf(cfile, "}\n\n"); fprintf(cfile, "}\n\n");
/* push function */ /* push function */
......
/* Buildsupport is (c) 2008-2015 European Space Agency /* Buildsupport is (c) 2008-2016 European Space Agency
* contact: maxime.perrotin@esa.int * contact: maxime.perrotin@esa.int
* License is LGPL, check LICENSE file */ * License is LGPL, check LICENSE file */
/* Practical functions used by the backends */ /* Practical functions used by the backends */
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <dirent.h> #include <dirent.h>
#include <stdbool.h>
#include "practical_functions.h" #include "practical_functions.h"
...@@ -21,12 +22,16 @@ ...@@ -21,12 +22,16 @@
char *asn2underscore(char *s, size_t len) char *asn2underscore(char *s, size_t len)
{ {
unsigned int i = 0; unsigned int i = 0;
char *result = (char*) malloc(len + 1);
for (i = 0; i < (unsigned int)len; i++) assert(NULL != result);
if ('-' == s[i])
s[i] = '_'; for (i = 0; i < (unsigned int)len; i++) {
result[i] = ('-' == s[i])? '_': s[i];
}
result[len] = '\0';
return s; return result;
} }
/* Convert a string to lowercase - create a new string */ /* Convert a string to lowercase - create a new string */
...@@ -349,6 +354,7 @@ void Create_Process(Process ** p) ...@@ -349,6 +354,7 @@ void Create_Process(Process ** p)
(*p)->bindings = NULL; (*p)->bindings = NULL;
(*p)->drivers = NULL; (*p)->drivers = NULL;
(*p)->connections = 0; (*p)->connections = 0;
(*p)->coverage = false;
} }
} }
...@@ -930,7 +936,6 @@ void Clear_FV(FV * fv) ...@@ -930,7 +936,6 @@ void Clear_FV(FV * fv)
free(fv->name); free(fv->name);
fv->name = NULL; fv->name = NULL;
} }
if (NULL != fv->nameWithCase) { if (NULL != fv->nameWithCase) {
free(fv->nameWithCase); free(fv->nameWithCase);
fv->nameWithCase = NULL; fv->nameWithCase = NULL;
...@@ -986,8 +991,6 @@ void Clear_System(System * s) ...@@ -986,8 +991,6 @@ void Clear_System(System * s)
Clear_FV_List(s->functions); Clear_FV_List(s->functions);
//Clear_Processes_List(s->processes);
Clear_Packages_List(s->packages); Clear_Packages_List(s->packages);
Clear_Connections_List(s->connections); Clear_Connections_List(s->connections);
...@@ -1157,23 +1160,6 @@ void Add_With_RI_Wrapper_to_Ada(Interface * i, FILE ** file) ...@@ -1157,23 +1160,6 @@ void Add_With_RI_Wrapper_to_Ada(Interface * i, FILE ** file)
} }
/*
* Check if there is at least one cyclic PI in a function
*/
void IsThereAtLeastOneCyclicPI(Interface * i, int *res)
{
if (PI == i->direction && cyclic == i->rcm)
*res = 1;