MCPcopy Create free account
hub / github.com/Singular/Singular / iiAddCproc

Function iiAddCproc

Singular/iplib.cc:1072–1145  ·  view source on GitHub ↗

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/

Source from the content-addressed store, hash-verified

1070
1071/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
1072int iiAddCproc(const char *libname, const char *procname, BOOLEAN pstatic,
1073 BOOLEAN(*func)(leftv res, leftv v))
1074{
1075 procinfov pi;
1076 idhdl h;
1077
1078 #ifndef SING_NDEBUG
1079 int dummy;
1080 if (IsCmd(procname,dummy))
1081 {
1082 Werror(">>%s< is a reserved name",procname);
1083 return 0;
1084 }
1085 #endif
1086
1087 h=IDROOT->get(procname,0);
1088 if ((h!=NULL)
1089 && (IDTYP(h)==PROC_CMD))
1090 {
1091 pi = IDPROC(h);
1092 #if 0
1093 if ((pi->language == LANG_SINGULAR)
1094 &&(BVERBOSE(V_REDEFINE)))
1095 Warn("extend `%s`",procname);
1096 #endif
1097 }
1098 else
1099 {
1100 h = enterid(procname,0, PROC_CMD, &IDROOT, TRUE);
1101 }
1102 if ( h!= NULL )
1103 {
1104 pi = IDPROC(h);
1105 if((pi->language == LANG_SINGULAR)
1106 ||(pi->language == LANG_NONE))
1107 {
1108 omfree(pi->libname);
1109 pi->libname = omStrDup(libname);
1110 omfree(pi->procname);
1111 pi->procname = omStrDup(procname);
1112 pi->language = LANG_C;
1113 pi->ref = 1;
1114 pi->is_static = pstatic;
1115 pi->data.o.function = func;
1116 }
1117 else if(pi->language == LANG_C)
1118 {
1119 if(pi->data.o.function == func)
1120 {
1121 pi->ref++;
1122 }
1123 else
1124 {
1125 omfree(pi->libname);
1126 pi->libname = omStrDup(libname);
1127 omfree(pi->procname);
1128 pi->procname = omStrDup(procname);
1129 pi->language = LANG_C;

Callers 3

iiAddCprocTopFunction · 0.85
flint_mod_initFunction · 0.85
siInitFunction · 0.85

Calls 6

IsCmdFunction · 0.85
WerrorFunction · 0.85
WarnFunction · 0.85
enteridFunction · 0.85
WarnSFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected