Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2.1 of the GNU Lesser General Public License 00007 as published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU Lesser General Public 00021 License along with this program; if not, write the Free Software 00022 Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, 00023 USA. 00024 00025 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00026 Mountain View, CA 94043, or: 00027 00028 http://www.sgi.com 00029 00030 For further information regarding this notice, see: 00031 00032 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00033 00034 */ 00035 00036 00037 static char USMID[] = "@(#) libcif/ciffree.c 30.5 07/26/96 07:19:13"; 00038 00039 00040 /* 00041 * Cif_Free releases all space associated with a CIF record structure. The 00042 * structure itself is free'd and any associated space is also released. 00043 */ 00044 00045 #define CIF_VERSION 3 00046 00047 #ifdef _ABSOFT 00048 #include "cif.h" 00049 #else 00050 #include <cif.h> 00051 #endif 00052 00053 #include <stdio.h> 00054 #include <string.h> 00055 #include <stdlib.h> 00056 00057 #include "cif_int.h" 00058 00059 void Cif_Free 00060 #ifdef __STDC__ 00061 (struct Cif_generic *cr) 00062 #else 00063 (cr) 00064 struct Cif_generic *cr; 00065 #endif 00066 { 00067 00068 register int i; 00069 00070 switch (cr->rectype) { 00071 case CIF_CALLSITE: 00072 if (CIFCS(cr)->argids != NULL) 00073 (void) free ( (char *)CIFCS(cr)->argids ); 00074 break; 00075 00076 case CIF_CDIR: 00077 if (CIFCDIR(cr)->ids != NULL) 00078 (void) free ( (char *)CIFCDIR(cr)->ids ); 00079 break; 00080 00081 case CIF_CDIR_DOSHARED: 00082 if (CIFCDIRDO(cr)->ids != NULL) 00083 (void) free ( (char *)CIFCDIRDO(cr)->ids ); 00084 break; 00085 00086 case CIF_GEOMETRY: 00087 if (CIFGEOM(cr)->dim != NULL) 00088 (void) free ( (char *)CIFGEOM(cr)->dim ); 00089 if (CIFGEOM(cr)->name != (char *) NULL) 00090 (void) free ( (char *)CIFGEOM(cr)->name ); 00091 break; 00092 00093 00094 case CIF_COMBLK: 00095 if (_cif_version == 1) { /* must use v1 cif records */ 00096 (void) free ( (char *)CIFCB1(cr)->name ); 00097 } 00098 else { /* use v2 cif records */ 00099 (void) free ( (char *)CIFCB(cr)->name ); 00100 } 00101 break; 00102 00103 case CIF_CONST: 00104 (void) free ( (char *)CIFCON(cr)->name ); 00105 (void) free ( (char *)CIFCON(cr)->value ); 00106 if (CIFCON(cr)->origform) 00107 (void) free ( (char *)CIFCON(cr)->oform ); 00108 break; 00109 00110 case CIF_ENTRY: 00111 if (CIFENTRY(cr)->argids != NULL) 00112 (void) free ( (char *)CIFENTRY(cr)->argids ); 00113 (void) free ( (char *)CIFENTRY(cr)->name ); 00114 break; 00115 00116 case CIF_FILE: 00117 (void) free ( (char *)CIFFILE(cr)->name ); 00118 break; 00119 00120 case CIF_LABEL: 00121 (void) free ( (char *)CIFLABEL(cr)->name ); 00122 break; 00123 00124 case CIF_ORIG_CMD: 00125 (void) free ( (char *)CIFOCMD(cr)->name ); 00126 break; 00127 00128 case CIF_MESSAGE: 00129 if (_cif_version < 3) { /* must use v1 cif records */ 00130 for (i = 0; i < (int) CIFMSG1(cr)->nargs; i++) 00131 (void) free ((char *)CIFMSG1(cr)->args[i] ); 00132 if (CIFMSG1(cr)->args != NULL) 00133 (void) free ((char *)CIFMSG1(cr)->args); 00134 } 00135 else { /* Version 3 CIF */ 00136 for (i = 0; i < (int) CIFMSG(cr)->nargs; i++) 00137 (void) free ((char *)CIFMSG(cr)->args[i] ); 00138 if (CIFMSG(cr)->args != NULL) 00139 (void) free ((char *)CIFMSG(cr)->args); 00140 (void) free ( (char *)CIFMSG(cr)->name ); 00141 } 00142 break; 00143 00144 case CIF_MISC_OPTS: 00145 if (_cif_version == 1) { /* must use v1 cif records */ 00146 00147 if (CIFMO1(cr)->msgno != NULL) 00148 (void) free ((char *)CIFMO1(cr)->msgno); 00149 for (i = 0; i < (int) CIFMO(cr)->ncdirs; i++) 00150 (void) free (CIFMO(cr)->cdirs[i] ); 00151 if (CIFMO1(cr)->cdirs != NULL) 00152 (void) free ((char *)CIFMO1(cr)->cdirs); 00153 if (CIFMO1(cr)->objname != NULL) 00154 (void) free ((char *)CIFMO1(cr)->objname); 00155 if (CIFMO1(cr)->calname != NULL) 00156 (void) free ((char *)CIFMO1(cr)->calname); 00157 if (CIFMO1(cr)->inname != NULL) 00158 (void) free ((char *)CIFMO1(cr)->inname); 00159 00160 } 00161 else { /* v2 records */ 00162 00163 if (CIFMO(cr)->msgno != NULL) 00164 (void) free ((char *)CIFMO(cr)->msgno); 00165 for (i = 0; i < (int) CIFMO(cr)->ncdirs; i++) 00166 (void) free (CIFMO(cr)->cdirs[i] ); 00167 for (i = 0; i < (int) CIFMO(cr)->numincs; i++) 00168 (void) free (CIFMO(cr)->incdirs[i] ); 00169 if (CIFMO(cr)->cdirs != NULL) 00170 (void) free ((char *)CIFMO(cr)->cdirs); 00171 if (CIFMO(cr)->objname != NULL) 00172 (void) free ((char *)CIFMO(cr)->objname); 00173 if (CIFMO(cr)->calname != NULL) 00174 (void) free ((char *)CIFMO(cr)->calname); 00175 if (CIFMO(cr)->inname != NULL) 00176 (void) free ((char *)CIFMO(cr)->inname); 00177 if (CIFMO(cr)->lname != NULL) 00178 (void) free ((char *)CIFMO(cr)->lname); 00179 } 00180 00181 break; 00182 00183 case CIF_NAMELIST: 00184 (void) free ( (char *)CIFNL(cr)->name); 00185 (void) free ((char *)CIFNL(cr)->ids); 00186 break; 00187 00188 case CIF_ND_MSG: 00189 for (i = 0; i < (int) CIFNMSG(cr)->nargs; i++) 00190 (void) free ((char *)CIFNMSG(cr)->args[i] ); 00191 if (CIFNMSG(cr)->args != NULL) 00192 (void) free ((char *)CIFNMSG(cr)->args); 00193 break; 00194 00195 case CIF_OBJECT: 00196 if (_cif_version == 1) { /* must use v1 cif records */ 00197 if (CIFOBJ1(cr)->name != NULL) 00198 (void) free ( (char *)CIFOBJ1(cr)->name); 00199 if (CIFOBJ1(cr)->ndims > 0) 00200 (void) free ( (char *)CIFOBJ1(cr)->dim ); 00201 } 00202 else { /* use v2 cif records */ 00203 if (CIFOBJ(cr)->name != NULL) 00204 (void) free ( (char *)CIFOBJ(cr)->name); 00205 if (CIFOBJ(cr)->ndims > 0) 00206 (void) free ( (char *)CIFOBJ(cr)->dim ); 00207 } 00208 break; 00209 00210 case CIF_UNIT: 00211 (void) free ( (char *)CIFUNIT(cr)->name); 00212 break; 00213 00214 case CIF_ENDUNIT: 00215 (void) free ( (char *)CIFENDU(cr)->name); 00216 break; 00217 00218 case CIF_USAGE: 00219 if (_cif_version == 1) { /* must use v1 cif records */ 00220 (void) free ( (char *)CIFUSAGE1(cr)->use); 00221 } 00222 else { /* use v2 cif records */ 00223 (void) free ( (char *)CIFUSAGE(cr)->use); 00224 if (CIFUSAGE(cr)->nmembs > 0) { 00225 (void) free ( (char *)CIFUSAGE(cr)->membs); 00226 } 00227 } 00228 break; 00229 00230 case CIF_FILEDIR: 00231 for (i = 0; i < (int) CIFFDIR(cr)->nunits; i++) 00232 (void) free ( (char *)(CIFFDIR(cr)->ut)[i].name ); 00233 (void) free ( (char *)CIFFDIR(cr)->ut); 00234 break; 00235 00236 case CIF_UNITDIR: 00237 (void) free ( (char *)CIFUDIR(cr)->ur); 00238 break; 00239 00240 case CIF_C_TAG: 00241 (void) free ((char *)CIFCTAG(cr)->memids); 00242 (void) free ((char *)CIFCTAG(cr)->name); 00243 break; 00244 00245 case CIF_C_OPTS: 00246 for (i = 0; i < (int) CIFCOPTS(cr)->nincs; i++) 00247 (void) free ((char *)(CIFCOPTS(cr)->incs)[i]); 00248 for (i = 0; i < (int) CIFCOPTS(cr)->ndefs; i++) 00249 (void) free ((char *)(CIFCOPTS(cr)->defs)[i]); 00250 for (i = 0; i < (int) CIFCOPTS(cr)->nudefs; i++) 00251 (void) free ((char *)(CIFCOPTS(cr)->udefs)[i]); 00252 (void) free ((char *)CIFCOPTS(cr)->name); 00253 (void) free ((char *)CIFCOPTS(cr)->incs); 00254 (void) free ((char *)CIFCOPTS(cr)->defs); 00255 (void) free ((char *)CIFCOPTS(cr)->udefs); 00256 break; 00257 00258 case CIF_C_MESSAGE: 00259 if (_cif_version == 1) { /* must use v1 cif records */ 00260 00261 for (i = 0; i < (int) CIFCMSG1(cr)->nargs; i++) 00262 (void) free ((char *)(CIFCMSG1(cr)->args)[i]); 00263 (void) free ((char *)CIFCMSG1(cr)->args); 00264 00265 } 00266 else { /* use v2 cif records */ 00267 00268 for (i = 0; i < (int) CIFCMSG(cr)->nargs; i++) 00269 (void) free ((char *)(CIFCMSG(cr)->args)[i]); 00270 (void) free ((char *)CIFCMSG(cr)->args); 00271 00272 } 00273 00274 break; 00275 00276 case CIF_C_CONST: 00277 (void) free ((char *)CIFCCON(cr)->value); 00278 break; 00279 00280 case CIF_C_ENTRY: 00281 00282 if (_cif_version == 1) { /* must use v1 cif records */ 00283 00284 (void) free ((char *)CIFCENTRY1(cr)->mods); 00285 (void) free ((char *)CIFCENTRY1(cr)->argids); 00286 (void) free ((char *)CIFCENTRY1(cr)->name); 00287 00288 } 00289 else { /* use v2 cif records */ 00290 00291 (void) free ((char *)CIFCENTRY(cr)->mods); 00292 (void) free ((char *)CIFCENTRY(cr)->argids); 00293 (void) free ((char *)CIFCENTRY(cr)->name); 00294 00295 } 00296 00297 break; 00298 00299 case CIF_C_OBJECT: 00300 (void) free ((char *)CIFCOBJ(cr)->mods); 00301 (void) free ((char *)CIFCOBJ(cr)->name); 00302 break; 00303 00304 case CIF_C_LINT_DIRECTIVE: 00305 (void) free ((char *)CIFCLDIR(cr)->name); 00306 break; 00307 00308 case CIF_C_MACRO_DEF: 00309 (void) free ((char *)CIFCMDEF(cr)->name); 00310 break; 00311 00312 case CIF_C_ENTRY_END: 00313 (void) free ((char *)CIFCEEND(cr)->name); 00314 break; 00315 00316 00317 case CIF_F90_CALLSITE: 00318 if (CIFF90CS(cr)->argids != NULL) 00319 (void) free ((char *)CIFF90CS(cr)->argids); 00320 if (CIFF90CS(cr)->nmembs != NULL) 00321 (void) free ((char *)CIFF90CS(cr)->nmembs); 00322 if (CIFF90CS(cr)->membs != NULL) 00323 (void) free ((char *)CIFF90CS(cr)->membs); 00324 if (CIFF90CS(cr)->rank == 1 && 00325 CIFF90CS(cr)->ranks != NULL) 00326 (void) free ((char *)CIFF90CS(cr)->ranks); 00327 00328 break; 00329 00330 case CIF_F90_SCOPE_INFO: 00331 if (CIFF90SI(cr)->entryids != NULL) 00332 (void) free ((char *)CIFF90SI(cr)->entryids); 00333 break; 00334 00335 case CIF_F90_COMBLK: 00336 (void) free ((char *)CIFF90CB(cr)->name); 00337 break; 00338 00339 case CIF_F90_CONST: 00340 (void) free ((char *)CIFF90CON(cr)->value); 00341 break; 00342 00343 case CIF_F90_ENTRY: 00344 if (CIFF90ENTRY(cr)->argids != NULL) 00345 (void) free ((char *)CIFF90ENTRY(cr)->argids); 00346 00347 (void) free ((char *)CIFF90ENTRY(cr)->name); 00348 break; 00349 00350 case CIF_F90_DERIVED_TYPE: 00351 if (_cif_version == 2) { /* must use v2 cif records */ 00352 (void) free ((char *)CIFF90DTYPE2(cr)->name); 00353 if (CIFF90DTYPE2(cr)->memids != NULL) 00354 (void) free ((char *)CIFF90DTYPE2(cr)->memids); 00355 } 00356 else { /* Version 3 CIF */ 00357 (void) free ((char *)CIFF90DTYPE(cr)->name); 00358 if (CIFF90DTYPE(cr)->memids != NULL) 00359 (void) free ((char *)CIFF90DTYPE(cr)->memids); 00360 } 00361 00362 break; 00363 00364 case CIF_F90_LABEL: 00365 (void) free ((char *)CIFF90LABEL(cr)->name); 00366 break; 00367 00368 case CIF_F90_NAMELIST: 00369 (void) free ((char *)CIFF90NL(cr)->name); 00370 if (CIFF90NL(cr)->ids != NULL) 00371 (void) free ((char *)CIFF90NL(cr)->ids); 00372 break; 00373 00374 case CIF_F90_OBJECT: 00375 (void) free ((char *)CIFF90OBJ(cr)->name); 00376 if (CIFF90OBJ(cr)->dim != NULL) 00377 (void) free ((char *)CIFF90OBJ(cr)->dim); 00378 break; 00379 00380 00381 case CIF_F90_MISC_OPTS: 00382 if (CIFF90MO(cr)->cifname != NULL) 00383 (void) free ((char *)CIFF90MO(cr)->cifname); 00384 00385 for (i = 0; i < (int) CIFF90MO(cr)->ncdirs; i++) 00386 (void) free (CIFF90MO(cr)->cdirs[i] ); 00387 if (CIFF90MO(cr)->cdirs != NULL) 00388 (void) free ((char *)CIFF90MO(cr)->cdirs); 00389 00390 for (i = 0; i < (int) CIFF90MO(cr)->nPdirs; i++) 00391 (void) free (CIFF90MO(cr)->Pdirs[i] ); 00392 for (i = 0; i < (int) CIFF90MO(cr)->npdirs; i++) 00393 (void) free (CIFF90MO(cr)->pdirs[i] ); 00394 if (CIFF90MO(cr)->cdirs != NULL) 00395 (void) free ((char *)CIFF90MO(cr)->cdirs); 00396 00397 if (CIFF90MO(cr)->objname != NULL) 00398 (void) free ((char *)CIFF90MO(cr)->objname); 00399 if (CIFF90MO(cr)->calname != NULL) 00400 (void) free ((char *)CIFF90MO(cr)->calname); 00401 if (CIFF90MO(cr)->inname != NULL) 00402 (void) free ((char *)CIFF90MO(cr)->inname); 00403 break; 00404 00405 case CIF_F90_OPT_OPTS: 00406 if (CIFF90OPTOPT(cr)->lopts != NULL) 00407 (void) free ((char *)CIFF90OPTOPT(cr)->lopts); 00408 break; 00409 00410 case CIF_F90_INT_BLOCK: 00411 if (_cif_version == 2) { /* must use v2 cif records */ 00412 if (CIFF90IB2(cr)->name != NULL) 00413 (void) free ((char *)CIFF90IB2(cr)->name); 00414 if (CIFF90IB2(cr)->procids != NULL) 00415 (void) free ((char *)CIFF90IB2(cr)->procids); 00416 } 00417 else { /* VErsion 3 CIF */ 00418 if (CIFF90IB(cr)->name != NULL) 00419 (void) free ((char *)CIFF90IB(cr)->name); 00420 if (CIFF90IB(cr)->procids != NULL) 00421 (void) free ((char *)CIFF90IB(cr)->procids); 00422 } 00423 break; 00424 00425 case CIF_BE_NODE: 00426 if (_cif_version == 2) { /* must use v2 cif records */ 00427 if ((char *)CIFBENODE2(cr)->succs != (char *) NULL) { 00428 (void) free ((char *)CIFBENODE2(cr)->succs); 00429 } 00430 if ((char *)CIFBENODE2(cr)->lines != (char *) NULL) { 00431 (void) free ((char *)CIFBENODE2(cr)->lines); 00432 } 00433 if ((char *)CIFBENODE2(cr)->label != (char *) NULL) { 00434 (void) free ((char *)CIFBENODE2(cr)->label); 00435 } 00436 } else { 00437 if ((char *)CIFBENODE(cr)->succs != (char *) NULL) { 00438 (void) free ((char *)CIFBENODE(cr)->succs); 00439 } 00440 if ((char *)CIFBENODE(cr)->fid != (char *) NULL) { 00441 (void) free ((char *)CIFBENODE(cr)->fid); 00442 } 00443 if ((char *)CIFBENODE(cr)->lines != (char *) NULL) { 00444 (void) free ((char *)CIFBENODE(cr)->lines); 00445 } 00446 if ((char *)CIFBENODE(cr)->label != (char *) NULL) { 00447 (void) free ((char *)CIFBENODE(cr)->label); 00448 } 00449 } 00450 break; 00451 00452 case CIF_BE_FID: 00453 if ((char *)CIFBEFID(cr)->fid != (char *) NULL) { 00454 (void) free ((char *)CIFBEFID(cr)->fid); 00455 } 00456 break; 00457 00458 case CIF_CC_TYPE: 00459 if (CIFCCTYPE(cr)->name != NULL) { 00460 (void) free (CIFCCTYPE(cr)->name); 00461 } 00462 if (CIFCCTYPE(cr)->mem != NULL) { 00463 (void) free ((char *)CIFCCTYPE(cr)->mem); 00464 } 00465 break; 00466 00467 case CIF_CC_ENTRY: 00468 if (CIFCCENT(cr)->name != NULL) { 00469 (void) free (CIFCCENT(cr)->name); 00470 } 00471 if (CIFCCENT(cr)->param != NULL) { 00472 (void) free ((char *)CIFCCENT(cr)->param); 00473 } 00474 break; 00475 00476 case CIF_CC_OBJ: 00477 if (CIFCCOBJ(cr)->name != NULL) { 00478 (void) free (CIFCCOBJ(cr)->name); 00479 } 00480 break; 00481 00482 case CIF_CC_ENUM: 00483 if (CIFCCENUM(cr)->name != NULL) { 00484 (void) free (CIFCCENUM(cr)->name); 00485 } 00486 if (CIFCCENUM(cr)->value != NULL) { 00487 (void) free (CIFCCENUM(cr)->value); 00488 } 00489 break; 00490 00491 case CIF_CC_EXPR: 00492 if (CIFCCEXPR(cr)->oper != NULL) { 00493 (void) free ((char *)CIFCCEXPR(cr)->oper); 00494 } 00495 break; 00496 00497 00498 default: 00499 break; 00500 } 00501 00502 (void) free ((char *)cr); 00503 return; 00504 }