1 /* /% C %/ */ 2 /*********************************************************************** 3 * cint (C/C++ interpreter) 4 ************************************************************************ 5 * CINT header file G__ci.h 6 ************************************************************************ 7 * Description: 8 * C/C++ interpreter header file 9 ************************************************************************ 10 * Copyright(c) 1995~2007 Masaharu Goto (root-cint@cern.ch) 11 * 12 * For the licensing terms see the file COPYING 13 * 14 ************************************************************************/ 15 16 #ifndef G__CI_H 17 #define G__CI_H 18 19 #ifndef G__CINT_VER6 20 #define G__CINT_VER6 1 21 #endif 22 23 #define G__CINTVERSION_V6 60030000 24 #define G__CINTVERSIONSTR_V6 "6.03.00, July 2, 2010" 25 #define G__CINTVERSION_V5 50180000 26 #define G__CINTVERSIONSTR_V5 "5.18.00, July 2, 2010" 27 28 #define G__ALWAYS 29 /* #define G__NEVER */ 30 /********************************************************************** 31 * SPECIAL CHANGES and CINT CORE COMPILATION SWITCH 32 **********************************************************************/ 33 34 #define G__NATIVELONGLONG 1 35 36 #ifndef G__CINT_VER6 37 #define G__OLDIMPLEMENTATION2187 38 #define G__OLDIMPLEMENTATION2184 39 #define G__OLDIMPLEMENTATION2182 40 #define G__OLDIMPLEMENTATION2177 41 #define G__OLDIMPLEMENTATION2172 42 #define G__OLDIMPLEMENTATION2171 43 #define G__OLDIMPLEMENTATION2170 44 #define G__OLDIMPLEMENTATION2169 45 #define G__OLDIMPLEMENTATION2163 46 #define G__OLDIMPLEMENTATION2162 47 #define G__OLDIMPLEMENTATION2161 48 #define G__OLDIMPLEMENTATION2160 49 #define G__OLDIMPLEMENTATION2159 50 #define G__OLDIMPLEMENTATION2156 51 #define G__OLDIMPLEMENTATION2155 52 #define G__OLDIMPLEMENTATION2154 53 #define G__OLDIMPLEMENTATION2153 54 #define G__OLDIMPLEMENTATION2152 55 #define G__OLDIMPLEMENTATION2151 56 #define G__OLDIMPLEMENTATION2150 57 #define G__OLDIMPLEMENTATION2148 58 #define G__OLDIMPLEMENTATION2147 59 #define G__OLDIMPLEMENTATION2146 60 #define G__OLDIMPLEMENTATION2143 61 #define G__OLDIMPLEMENTATION2142 62 #define G__OLDIMPLEMENTATION2141 63 #define G__OLDIMPLEMENTATION2140 64 #define G__OLDIMPLEMENTATION2138 65 #define G__OLDIMPLEMENTATION2137 66 #define G__OLDIMPLEMENTATION2136 67 #define G__OLDIMPLEMENTATION2135 68 #define G__OLDIMPLEMENTATION2134 69 #define G__OLDIMPLEMENTATION2133 70 #define G__OLDIMPLEMENTATION2132 71 #define G__OLDIMPLEMENTATION2131 72 #define G__OLDIMPLEMENTATION2129 73 #define G__OLDIMPLEMENTATION2128 74 #define G__OLDIMPLEMENTATION2127 75 #define G__OLDIMPLEMENTATION2122 76 #define G__OLDIMPLEMENTATION2117 77 #define G__OLDIMPLEMENTATION2116 78 /* #define G__OLDIMPLEMENTATION2115 */ 79 /* #define G__OLDIMPLEMENTATION2114 */ 80 #define G__OLDIMPLEMENTATION2112 81 #define G__OLDIMPLEMENTATION2111 82 #define G__OLDIMPLEMENTATION2110 83 #define G__OLDIMPLEMENTATION2109 84 #define G__OLDIMPLEMENTATION2105 85 #define G__OLDIMPLEMENTATION2102 86 #define G__OLDIMPLEMENTATION2089 87 #define G__OLDIMPLEMENTATION2087 88 #define G__OLDIMPLEMENTATION2084 89 #define G__OLDIMPLEMENTATION2075 90 #define G__OLDIMPLEMENTATION2074 91 #define G__OLDIMPLEMENTATION2073 92 #define G__OLDIMPLEMENTATION2067 93 #define G__OLDIMPLEMENTATION2066 94 #define G__OLDIMPLEMENTATION2062 95 #define G__OLDIMPLEMENTATION2058 96 /* #define G__OLDIMPLEMENTATION2057 */ 97 /* #define G__OLDIMPLEMENTATION2056 */ 98 #define G__OLDIMPLEMENTATION2054 99 #define G__OLDIMPLEMENTATION2051 100 #define G__OLDIMPLEMENTATION2042 101 #define G__OLDIMPLEMENTATION1073 102 #endif 103 104 #ifdef G__ROOT 105 /* Disable the new stack variable manager */ 106 #define G__OLDIMPLEMENTATION1073 107 #endif 108 109 /* Native long long, unsigned long long, long double implementation */ 110 #ifndef G__NATIVELONGLONG 111 #define G__OLDIMPLEMENTATION2189 112 #define G__OLDIMPLEMENTATION2192 113 #endif 114 115 /* Problem remains with autoloading if library is unloaded. Tried to fix it 116 * with 2015, but this has problem with ROOT. */ 117 #define G__OLDIMPLEMENTATION2015 118 119 120 /* If you have problem compiling dictionary with static member function, 121 * define following macro. */ 122 /* #define G__OLDIMPLEMENTATION1993 */ 123 124 /* 1987 fixes the same problem. Turned off because of redundancy. */ 125 #define G__OLDIMPLEMENTATION1986 126 127 /* suppress unused parameter warnings. optional */ 128 #ifndef G__SUPPRESS_UNUSEDPARA 129 #define G__OLDIMPLEMENTATION1911 130 #endif 131 132 /* &a, avoid uninitialized memory access */ 133 /* #define G__AVOID_PTR_UNINITACCESS */ /* Turned out this fix was wrong */ 134 #ifndef G__AVOID_PTR_UNINITACCESS 135 #define G__OLDIMPLEMENTATION1942 136 #endif 137 138 /* Define G__FIX1 if you have problem defining variable argument functions 139 * such as printf, fprintf, etc... in Windows */ 140 /* #define G__FIX1 */ 141 142 /* 1885 has side-effect in building ROOT */ 143 #define G__OLDIMPLEMENTATION1885 144 145 /* 1770 changes implementation of skipping function implementation during 146 * prerun. In order to activate new implementation, comment out following 147 * line */ 148 #define G__OLDIMPLEMENTATION1770 149 150 151 /* Change 1706, regarding function overriding, is very risky. So, this is 152 * deactivated for now. With this change turned on, loading and unloading 153 * of interpreted and compiled function can be done more robustly. */ 154 #define G__OLDIMPLEMENTATION1706 155 156 /* Rootcint's default link status has been changed from 5.15.57. 157 * Define following macro if new scheme has problems. */ 158 /* #define G__OLDIMPLEMENTATION1700 */ 159 160 /* For a machine which has unaddressable bool */ 161 #ifndef G__UNADDRESSABLEBOOL 162 #if defined(__APPLE__) && defined(__ppc__) 163 /* Fons, if you find problems, comment out G__BOOL4BYTE and uncomment 164 * G__UNADDRESSABLEBOOL. Thanks */ 165 #define G__BOOL4BYTE 166 /* #define G__UNADDRESSABLEBOOL */ 167 #endif 168 #endif 169 170 /* Speed up G__strip_quotation */ 171 #ifdef G__ROOT 172 #ifndef G__CPPCONSTSTRING 173 #define G__CPPCONSTSTRING 174 #endif 175 #endif 176 177 /* Activate pointer to member function handling in interpreted code. 178 * Seamless access of pointer to member between interpreted and compiled code 179 * is not implemented yet. */ 180 #ifndef G__PTR2MEMFUNC 181 #define G__PTR2MEMFUNC 182 #endif 183 184 /* 1649 is not ready yet */ 185 /* #define G__OLDIMPLEMENTATION1649 */ 186 187 /* Define following macro in order to disable iostream I/O redirection */ 188 /* #define G__OLDIMPLEMENTATION1635 */ 189 190 /* Define following macro to enable multi-thread safe libcint and DLL 191 * features. */ 192 /* #define G__MULTITHREADLIBCINT */ 193 194 /* Define G__ERRORCALLBACK to activat error message redirection. If 195 * G__ERRORCALLBACK is defined, a user can set a callback routine for 196 * handling error message by G__set_errmsgcallback() API */ 197 #ifndef G__ERRORCALLBACK 198 #define G__ERRORCALLBACK 199 #endif 200 201 /* 2001 masks G__ateval overloading resolution error. It turns out this is 202 * not a good way, the feature is turned off */ 203 #define G__OLDIMPLEMENTATION2001 204 205 /* Define following macros if you want to store where global variables 206 * and typedefs are defined in source files. Reason of not making this 207 * default is because it breaks DLL compatibility. */ 208 #define G__VARIABLEFPOS 209 #define G__TYPEDEFFPOS 210 211 /* If you use old g++ and having problem compiling dictionary with 212 * true pointer to function with const return value, define following 213 * macro to workaround the problem. */ 214 /* #define G__OLDIMPLEMENTATION1328 */ 215 216 /* Define G__CONSTNESSFLAG for activating function overloading by 217 * object constness. */ 218 #define G__CONSTNESSFLAG 219 #ifndef G__CONSTNESSFLAG 220 #define G__OLDIMPLEMENTATION1258 /* create func entry w/wo func constness */ 221 #define G__OLDIMPLEMENTATION1259 /* add isconst in G__value and set it */ 222 #define G__OLDIMPLEMENTATION1260 /* use isconst info for func overloading */ 223 #endif 224 225 /* New function overloading resolution algorithm which is closer to 226 * ANSI/ISO standard is implemented from cint5.14.35. This is a major 227 * change and there are some risks. Define following macro in order to 228 * use old algorithm. */ 229 /* #define G__OLDIMPLEMENTATION1290 */ 230 231 /* Define G__EXCEPTIONWRAPPER for activating C++ exception catching 232 * when calling precompiled function. It is better to define this macro 233 * in platform dependency file OTHMACRO flag. Reason of not making this 234 * default is because some old compilers may not support exception. */ 235 /* #define G__EXCEPTIONWRAPPER */ 236 237 /* Define G__STD_EXCEPTION for using std::exception in exception handler. 238 * If G__STD_EXCEPTION is defined, G__EXCEPTIONWRAPPER is also defined. */ 239 /* #define G__STD_EXCEPTION */ 240 241 /* If you define G__REFCONV in platform dependency file, bug fix for 242 * reference argument conversion is activated. This macro breaks DLL 243 * compatibility between cint5.14.14 and 5.14.15. If you define 244 * G__REFCONV, cint5.14.15 or newer version can load older DLL. But 245 * cint5.14.14 or older version can not load DLL that is created by 246 * cint5.14.15 or later cint. */ 247 #define G__REFCONV 248 249 /* This change activates bytecode compilation of class object 250 * instantiation in a function. Because the change includes some 251 * problems , it is turned off at this moment by defining following 252 * macro. */ 253 #ifdef G__OLDIMPLEMENTATION1073 254 /* define related macros here */ 255 #endif 256 257 /* Scott Snyder's modification Apr1999 9.Improvements for `variable' macros. 258 * Comment out line below to activate the change */ 259 #define G__OLDIMPLEMENTATION1062 260 261 /* Scott Snyder's modification Apr1999 10.More CRLF problems 262 * Comment out line below to activate the change */ 263 #define G__OLDIMPLEMENTATION1063 264 265 /* Scott Snyder's modification in macro.c around line 709. Apr1999 266 * Uncomment following line to use 969 version */ 267 /* #define G__OLDIMPLEMENTATION973 */ 268 269 270 /* Unlimited number of function arguments. THIS MODIFICATION IS TURNED OFF 271 * because the change did not work. I decided to keep the code somehow. */ 272 #define G__OLDIMPLEMENTATION834 273 274 /********************************************************************** 275 * END OF SPECIAL CHANGES and CINT CORE COMPILATION SWITCH 276 **********************************************************************/ 277 278 /************************************************************************** 279 * One of following macro has to be defined to fix DLL global function 280 * conflict problem. G__CPPIF_STATIC is recommended. Define G__CPPIF_PROJNAME 281 * only if G__CPPIF_STATIC has problem with your compiler. 282 **************************************************************************/ 283 #ifdef G__CPPIF_EXTERNC 284 #ifndef G__CPPIF_PROJNAME 285 #define G__CPPIF_PROJNAME 286 #endif 287 #ifdef G__CPPIF_STATIC 288 #undef G__CPPIF_STATIC 289 #endif 290 #endif 291 292 #ifndef G__CPPIF_PROJNAME 293 #ifndef G__CPPIF_STATIC 294 #define G__CPPIF_STATIC 295 #endif 296 #endif 297 298 /************************************************************************** 299 * G__reftype, var->reftype[], ifunc->reftype[] flag 300 **************************************************************************/ 301 #define G__PARANORMAL 0 302 #define G__PARAREFERENCE 1 303 #define G__PARAP2P 2 304 #define G__PARAP2P2P 3 305 306 #define G__PARAREF 100 307 #define G__PARAREFP2P 102 308 #define G__PARAREFP2P2P 103 309 310 /************************************************************************** 311 * if __MAKECINT__ is defined, do not include this file 312 * G__MAKECINT is automatically defined in makecint or G__makesetup script 313 **************************************************************************/ 314 #if (!defined(__MAKECINT__)) || defined(G__API) || defined(G__BC_DICT) 315 316 317 #ifdef __cplusplus 318 #ifndef G__ANSIHEADER 319 #define G__ANSIHEADER 320 #endif 321 #endif 322 323 #ifdef __SC__ 324 #ifndef G__SYMANTEC 325 #define G__SYMANTEC 326 #endif 327 #endif 328 329 #ifdef __QNX__ 330 #ifndef G__QNX 331 #define G__QNX 332 #endif 333 #endif 334 335 #ifdef _MSC_VER 336 #ifndef G__VISUAL 337 #define G__VISUAL 1 338 #endif 339 #ifndef G__MSC_VER 340 #define G__MSC_VER 341 #endif 342 #endif 343 344 #if defined(__BORLANDC__) || defined(__BCPLUSPLUS) || defined(__BCPLUSPLUS__) || defined(G__BORLANDCC5) 345 #ifndef G__BORLAND 346 #define G__BORLAND 347 #endif 348 #endif 349 350 #ifdef G__BORLANDCC5 351 #define G__SHAREDLIB 352 #define G__DLL_SYM_UNDERSCORE 353 #define G__WIN32 354 #define G__ANSI 355 #define G__P2FCAST 356 #define G__REDIRECTIO 357 #define G__DETECT_NEWDEL 358 #define G__POSIX 359 #define G__STD_EXCEPTION 360 #endif 361 362 #if defined(_WIN32) || defined(_WINDOWS) || defined(_Windows) || defined(_WINDOWS_) 363 #ifndef G__WIN32 364 #define G__WIN32 365 #endif 366 #endif 367 368 /* added by Fons Radamakers in 2000 Oct 2 */ 369 #if (defined(__linux) || defined(__linux__) || defined(linux)) && ! defined(__CINT__) 370 # include <features.h> 371 # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 372 # define G__NONSCALARFPOS2 373 # endif 374 #endif 375 376 /*********************************************************************** 377 * Native long long support 378 ***********************************************************************/ 379 #if defined(G__WIN32) && !defined(__CINT__) 380 typedef __int64 G__int64; 381 typedef unsigned __int64 G__uint64; 382 #else 383 typedef long long G__int64; 384 typedef unsigned long long G__uint64; 385 #endif 386 387 388 389 /*********************************************************************** 390 * Something that depends on platform 391 ***********************************************************************/ 392 393 #define ENABLE_CPP_EXCEPTIONS 1 394 395 /* Exception */ 396 #if defined(G__WIN32) && !defined(G__STD_EXCEPTION) 397 #define G__STD_EXCEPTION 398 #endif 399 #if defined(G__STD_EXCEPTION) && !defined(G__EXCEPTIONWRAPPER) && !defined(G__APIIF) 400 #define G__EXCEPTIONWRAPPER 401 #endif 402 403 /* Error redirection , G__fprinterr */ 404 #if defined(G__WIN32) && !defined(G__ERRORCALLBACK) 405 #define G__ERRORCALLBACK 406 #endif 407 #ifndef G__ERRORCALLBACK 408 #define G__OLDIMPLEMENTATION1485 409 #define G__OLDIMPLEMENTATION2000 410 #endif 411 412 /* temporary file generation */ 413 #if defined(G__WIN32) 414 #define G__TMPFILE 415 #endif 416 417 418 /*********************************************************************** 419 * Define G__EH_DUMMY_DELETE in order to avoid some compiler dependency 420 * about 'void operator delete(void*,[DLLID]_tag*);' 421 ***********************************************************************/ 422 #if defined(__HP_aCC) || defined(G__VISUAL) || defined(__INTEL_COMPILER) 423 #define G__EH_DUMMY_DELETE 424 #endif 425 426 #ifdef G__NONANSI 427 #ifdef G__ANSIHEADER 428 #undef G__ANSIHEADER 429 #endif 430 #endif 431 432 #ifndef G__IF_DUMMY 433 #define G__IF_DUMMY /* avoid compiler warning */ 434 #endif 435 436 #if defined(G__BORLAND) || defined(G__VISUAL) 437 #define G__DLLEXPORT __declspec(dllexport) 438 #define G__DLLIMPORT __declspec(dllimport) 439 #else 440 #define G__DLLEXPORT 441 #define G__DLLIMPORT 442 #endif 443 444 #if (defined(G__BORLAND)||defined(G__VISUAL)||defined(G__CYGWIN)) && defined(G__CINTBODY) && !defined(__CINT__) 445 #define G__EXPORT __declspec(dllexport) 446 #else 447 #define G__EXPORT 448 #endif 449 450 451 452 #if defined(G__SIGNEDCHAR) 453 typedef signed char G__SIGNEDCHAR_T; 454 #else 455 typedef char G__SIGNEDCHAR_T; 456 #endif 457 458 #include <math.h> 459 #include <stdio.h> 460 #include <string.h> 461 #include <stddef.h> 462 #include <stdlib.h> 463 #include <signal.h> 464 #include <assert.h> 465 #include <limits.h> 466 #include <setjmp.h> 467 /* #include <time.h> */ 468 #include <ctype.h> 469 #include <fcntl.h> 470 471 472 473 #if defined(__cplusplus) && !defined(__CINT__) 474 extern "C" { /* extern C 1 */ 475 #endif 476 477 #ifndef G__WIN32 478 #include <unistd.h> 479 #endif 480 481 #ifdef G__REGEXP 482 #include <regex.h> 483 #endif 484 485 #ifdef G__REGEXP1 486 #include <libgen.h> 487 #endif 488 489 #if defined(G__SUNOS4) 490 #include "src/sunos.h" 491 #elif defined(G__NEWSOS4) || defined(G__NEWSOS6) 492 #include "src/newsos.h" 493 #elif defined(G__NONANSI) 494 #include "src/sunos.h" 495 #endif 496 497 498 #define G__DUMPFILE 499 #define G__DOSHUGE 500 501 502 #ifndef G__REFCONV 503 #define G__OLDIMPLEMENTATION1167 504 #endif 505 506 507 /* Special typeinfo enhacement for Fons Rademaker's request */ 508 #define G__FONS_TYPEINFO 509 #define G__FONS_COMMENT 510 #define G__FONS_ROOTSPECIAL 511 #define G__ROOTSPECIAL 512 513 /********************************************************************** 514 * Function call stack 515 **********************************************************************/ 516 #define G__SHOWSTACK 517 #define G__VAARG 518 519 /************************************************************************** 520 * Dump function calls to '-d [dumpfile]', if G__DUMPFILE is defined. 521 * 522 **************************************************************************/ 523 524 /************************************************************************** 525 * Interpreter Security mode 526 * 527 **************************************************************************/ 528 #define G__SECURITY 529 530 #ifdef G__SECURITY 531 532 /* #include "include/security.h" */ 533 534 #define G__NOERROR 0x0000 535 #define G__RECOVERABLE 0x0001 536 #define G__DANGEROUS 0x0002 537 #define G__FATAL 0x0004 538 539 #ifdef G__64BIT 540 typedef unsigned int G__UINT32 ; 541 #else 542 typedef unsigned long G__UINT32 ; 543 #endif 544 545 #if (defined(G__SGICC) || defined(G__DECCXX)) && defined(G__ROOT) 546 #define G__CHECK(ITEM,COND,ACTION) \ 547 if((G__security=G__SECURE_LEVEL0)&&(G__security&ITEM) && (COND) && G__security_handle(ITEM)) ACTION 548 #else 549 #define G__CHECK(ITEM,COND,ACTION) \ 550 if((G__security&ITEM) && (COND) && G__security_handle(ITEM)) ACTION 551 #endif 552 553 #define G__CHECKDRANGE(p,low,up) \ 554 if(G__check_drange(p,low,up,G__double(libp->para[p]),result7,funcname)) \ 555 return(1) 556 557 #define G__CHECKLRANGE(p,low,up) \ 558 if(G__check_lrange(p,low,up,G__int(libp->para[p]),result7,funcname)) return(1) 559 560 #define G__CHECKTYPE(p,t1,t2) \ 561 if(G__check_type(p,t1,t2,&libp->para[p],result7,funcname)) return(1) 562 563 #define G__CHECKNONULL(p,t) \ 564 if(G__check_nonull(p,t,&libp->para[p],result7,funcname)) return(1) 565 566 #define G__CHECKNPARA(n) \ 567 if(n!=libp->paran) { \ 568 G__printerror(funcname,n,libp->paran); \ 569 *result7=G__null; \ 570 return(1); \ 571 } 572 573 #else /* G__SECURITY */ 574 575 #define G__CHECK(ITEM,COND,ACTION) NULL 576 #define G__CHECKDRANE(p,up,low) NULL 577 #define G__CHECKLRANE(p,up,low) NULL 578 #define G__CHECKNONULL(p) NULL 579 #define G__CHECKNPARA(n) NULL 580 581 #endif /* G__SECURITY */ 582 583 584 /************************************************************************** 585 * True pointer to global function 586 * 587 **************************************************************************/ 588 #define G__TRUEP2F 589 590 /************************************************************************** 591 * Whole function compilation 592 * 593 **************************************************************************/ 594 #define G__ASM_FUNC 595 #define G__ASM_WHOLEFUNC 596 597 /************************************************************************** 598 * C++ evolution has begun from revision 3.0.10. 599 * 600 * Define macro 'G__CPLUSPLUS' for C++ version. 601 * If G__CPLUSPLUS is not defined, all C++ features are turned off. In this 602 * case it must be compatible with 3.0.9. 603 **************************************************************************/ 604 #define G__CPLUSPLUS 605 606 607 608 #ifdef G__CPLUSPLUS 609 610 /********************************************************************** 611 * Object oriented feature of C++ 612 **********************************************************************/ 613 614 /* Create default assignment operator for new C++ linkage */ 615 /* #define G__DEFAULTASSIGNOPR */ 616 617 /* virtual base class */ 618 #define G__VIRTUALBASE 619 620 /* new inheritance implementation */ 621 #define G__NEWINHERIT 622 623 /* Friend class and function */ 624 #define G__FRIEND 625 626 /* Run time type information */ 627 #define G__TYPEINFO 628 629 /* new, delete operator */ 630 #define G__NEWDELETE 631 #define G__NEWDELETE_YET 632 633 /* destructor */ 634 #define G__DESTRUCTOR 635 636 /* constructor */ 637 #define G__CONSTRUCTOR 638 #define G__COPYCONSTRUCTOR 639 640 /* member function */ 641 #define G__MEMBERFUNC 642 643 /* keyword class */ 644 #define G__CLASS 645 646 /* member access control */ 647 #define G__ACCESS 648 649 #ifdef G__NEWINHERIT 650 #define G__PUBLIC 0x01 651 #define G__PROTECTED 0x02 652 #define G__PRIVATE 0x04 653 #define G__GRANDPRIVATE 0x08 654 #define G__PUBLIC_PROTECTED_PRIVATE 0x7 655 #define G__PUBLIC_PROTECTED 0x3 656 657 #else 658 #define G__PUBLIC 0 659 #define G__PROTECTED 1 660 #define G__PRIVATE 2 661 #define G__GRANDPRIVATE 3 662 #endif 663 664 /* inheritance */ 665 #define G__INHERIT 666 #define G__INHERIT1 667 #define G__INHERIT2 668 #define G__INHERIT3 669 #define G__INHERIT4 670 #define G__INHERIT5 671 672 #define G__EXPLICITCONV 673 674 #ifdef __CINT__ 675 typedef int (*G__IgnoreInclude)(); 676 #endif 677 678 /********************************************************************** 679 * Non object oriented feature of C++ 680 **********************************************************************/ 681 682 /*************************************************************** 683 * Implementation of function/operator overloading is not 684 * completed. It is very premature. 685 ***************************************************************/ 686 687 /* if G__OVERLOADOPERATOR is defined, G__OVERLOADFUNC must be also defined */ 688 #define G__OVERLOADOPERATOR 689 #define G__OVERLOADOPERATOR2 690 691 /* if G__OVERLOADFUNC is defined, G__IFUNCPARA must be also defined */ 692 #define G__OVERLOADFUNC 693 694 #define G__OVERLOADFUNC2 695 #define G__EXACT 1 696 #define G__PROMOTION 2 697 #define G__STDCONV 3 698 #define G__USERCONV 4 699 700 /* for struct,class,union return value */ 701 #define G__TEMPOBJECT 702 #define G__TEMPOBJECT2 703 704 /* reference type */ 705 #define G__REFERENCETYPE 706 707 /* improved version of reference type implementation */ 708 #define G__REFERENCETYPE2 709 710 /*************************************************************** 711 * Having default parameter for function 712 ***************************************************************/ 713 714 /* G__DEFAULTPARAMETER can be defined independently */ 715 #define G__DEFAULTPARAMETER 716 717 718 /*************************************************************** 719 * reading and storing parameter type for ANSI stype function 720 * header. This functionality itself can be added to non C++ 721 * version but it won't play essential part. For C++ version, 722 * function parameter information is needed for function/operator 723 * overloading. 724 ***************************************************************/ 725 726 /* G__IFUNCPARA can be defined independently */ 727 #define G__IFUNCPARA 728 729 /* C++ object linkage */ 730 #define G__CPPSTUB 5 731 #define G__CPPLINK -1 732 #define G__CPPLINK1 733 #define G__CPPLINK2 734 #define G__CPPLINK3 735 736 /* C object linkage same way as C++ */ 737 #define G__CSTUB 6 738 #define G__CLINK -2 739 740 /* define for Reflex cpp source code */ 741 #define R__CPPLINK -3 742 743 /* Link macro as function */ 744 #define G__MACROLINK (-5) 745 746 /* Link macro as function */ 747 #define G__METHODLINK (-6) 748 #define G__ONLYMETHODLINK 6 749 750 #define G__NOLINK 0 751 752 753 754 #else /* of G__CPLUSPLUS */ 755 756 /*************************************************************** 757 * new comment style // 758 ***************************************************************/ 759 #define G__NOCPPCOMMENT 760 761 #endif /* of G__CPLUSPLUS */ 762 763 /************************************************************************** 764 * Table and variable size 765 * 766 * CAUTION: 767 * Among constants below, changing following parameter cause DLL binary 768 * incompatibility. 769 * 770 * G__MAXFUNCPARA 771 * 772 * Other parameters can be changed while keeping DLL binary compatibility. 773 * 774 **************************************************************************/ 775 776 #define G__LONGBUF 1 777 778 #ifdef G__LONGLINE 779 #define G__ONELINE 1024 /* Length of subexpression,parameter,argument */ 780 #define G__ONELINEDICT 8 /* Length of subexpression,parameter,argument */ 781 #define G__MAXNAME G__LONGLINE /* Variable name */ 782 #else 783 #ifdef G__LONGBUF 784 #define G__LONGLINE 4096 /* Length of expression */ 785 #define G__ONELINE 4096 /* Length of subexpression,parameter,argument */ 786 #define G__ONELINEDICT 8 /* Length of subexpression,parameter,argument */ 787 #define G__MAXNAME 4096 /* Variable name */ 788 #else 789 #define G__LONGLINE 2048 /* Length of expression */ 790 #define G__ONELINE 1024 /* Length of subexpression,parameter,argument */ 791 #define G__MAXNAME 512 /* Variable name */ 792 #define G__ONELINEDICT 8 /* Length of subexpression,parameter,argument */ 793 #endif 794 #endif 795 796 #define G__LARGEBUF 6000 /* big temp buffer */ 797 #define G__MAXFILE 2000 /* Max interpreted source file */ 798 #define G__MAXFILENAME 1024 /* Max interpreted source file name length */ 799 #define G__MAXPARA 100 /* Number of argument for G__main(argc,argv) */ 800 #define G__MAXARG 100 /* Number of argument for G__init_cint(char *) */ 801 #define G__MAXFUNCPARA 40 /* Function argument */ 802 #define G__MAXVARDIM 10 /* Array dimension */ 803 #define G__LENPOST 10 /* length of file name extention */ 804 #define G__MAXBASE 50 /* maximum inheritable class */ 805 #define G__TAGNEST 20 /* depth of nested class */ 806 807 #ifndef G__MAXSTRUCT 808 #ifdef G__WIN32 809 #if defined(_MSC_VER) && (_MSC_VER>1300) 810 #define G__MAXSTRUCT 24000 /* struct table */ 811 #else 812 #define G__MAXSTRUCT 4000 /* struct table */ 813 #endif 814 #else 815 #define G__MAXSTRUCT 24000 /* struct table */ 816 #endif 817 #endif 818 819 #ifndef G__MAXTYPEDEF 820 #ifdef G__WIN32 821 #if defined(_MSC_VER) && (_MSC_VER>1300) 822 #define G__MAXTYPEDEF 24000 /* typedef table */ 823 #else 824 #define G__MAXTYPEDEF 8000 /* typedef table */ 825 #endif 826 #else 827 #define G__MAXTYPEDEF 24000 /* typedef table */ 828 #endif 829 #endif 830 831 /* G__MAXIFUNC and G__MEMDEPTH are not real limit 832 * They are depth of one page of function or variable list 833 * If the page gets full, more table is allocated. */ 834 #define G__MAXIFUNC 1 835 #define G__MEMDEPTH 1 836 837 838 /* #define G__HIST 1 */ 839 840 /************************************************************************** 841 * error handling 842 **************************************************************************/ 843 #define G__TIMEOUT 10 /* Timeout after segv,buserror,etc */ 844 845 /************************************************************************** 846 * variable identity 847 **************************************************************************/ 848 #define G__AUTO (-1) 849 #define G__LOCALSTATIC (-2) 850 #define G__LOCALSTATICBODY (-3) 851 #define G__COMPILEDGLOBAL (-4) 852 #define G__AUTOARYDISCRETEOBJ (-5) 853 #define G__USING_VARIABLE (-6) 854 #define G__USING_STATIC_VARIABLE (-7) 855 856 #define G__LOCAL 0 857 #ifdef G__MEMBERFUNC 858 #define G__MEMBER 2 859 #define G__GLOBAL 4 860 #define G__NOTHING 6 861 #else 862 #define G__GLOBAL 2 863 #endif 864 865 /************************************************************************** 866 * flag argument to G__getfunction() 867 **************************************************************************/ 868 #define G__TRYNORMAL 0 869 #define G__CALLMEMFUNC 1 870 #define G__TRYMEMFUNC 2 871 #define G__CALLCONSTRUCTOR 3 872 #define G__TRYCONSTRUCTOR 4 873 #define G__TRYDESTRUCTOR 5 874 #define G__CALLSTATICMEMFUNC 6 875 #define G__TRYUNARYOPR 7 876 #define G__TRYBINARYOPR 8 877 878 #ifndef G__OLDIMPLEMENTATINO1250 879 #define G__TRYIMPLICITCONSTRUCTOR 7 880 #endif 881 882 /************************************************************************** 883 * Scope operator category 884 **************************************************************************/ 885 #define G__NOSCOPEOPR 0 886 #define G__GLOBALSCOPE 1 887 #define G__CLASSSCOPE 2 888 889 /********************************************************************* 890 * variable length string buffer 891 *********************************************************************/ 892 #define G__LONGLONG 1 893 #define G__ULONGLONG 2 894 #define G__LONGDOUBLE 3 895 896 /************************************************************************** 897 * store environment for stub function casll 898 * 899 **************************************************************************/ 900 struct G__StoreEnv { 901 long store_struct_offset; 902 int store_tagnum; 903 int store_memberfunc_tagnum; 904 int store_exec_memberfunc; 905 }; 906 907 908 /************************************************************************** 909 * struct of pointer to pointer flag 910 * 911 * By histrorical reason, cint handles pointer to pointer in following manner. 912 * 913 * islower(buf.type)&&G__PARANORMAL==buf.obj.reftype.reftype :object 914 * isupper(buf.type)&&G__PARANORMAL==buf.obj.reftype.reftype :pointer to object 915 * isupper(buf.type)&&G__PARAP2P==buf.obj.reftype.reftype :pointer to pointer 916 * isupper(buf.type)&&G__PARAP2PP2==buf.obj.reftype.reftype :pointer to pointer 917 * to pointer 918 **************************************************************************/ 919 struct G__p2p { 920 long i; 921 int reftype; 922 }; 923 924 /************************************************************************** 925 * struct of internal data 926 * 927 **************************************************************************/ 928 struct G__DUMMY_FOR_CINT7 { 929 void* fTypeName; 930 unsigned int fModifiers; 931 }; 932 933 #ifdef __cplusplus 934 struct G__value { 935 #else 936 typedef struct { 937 #endif 938 union { 939 double d; 940 long i; /* used to be int */ 941 #if defined(G__PRIVATE_GVALUE) && !defined(_WIN32) 942 #if defined(private) && defined(ROOT_RVersion) 943 #define G__alt_private private 944 #undef private 945 #endif 946 private: 947 #endif 948 struct G__p2p reftype; 949 #if defined(G__PRIVATE_GVALUE) && !defined(_WIN32) 950 public: 951 #endif 952 char ch; 953 short sh; 954 int in; 955 float fl; 956 unsigned char uch; 957 unsigned short ush; 958 unsigned int uin; 959 unsigned long ulo; 960 G__int64 ll; 961 G__uint64 ull; 962 long double ld; 963 } obj; 964 #ifdef G__REFERENCETYPE2 965 long ref; 966 #endif 967 #if defined(G__PRIVATE_GVALUE) && !defined(_WIN32) 968 /*private:*/ 969 #if defined(G__alt_private) && defined(ROOT_RVersion) 970 #define private public 971 #endif 972 #endif 973 int type; 974 int tagnum; 975 int typenum; 976 #ifndef G__OLDIMPLEMENTATION1259 977 G__SIGNEDCHAR_T isconst; 978 #endif 979 struct G__DUMMY_FOR_CINT7 dummyForCint7; 980 #ifdef __cplusplus 981 } 982 #else 983 } G__value 984 #endif 985 ; 986 987 /************************************************************************** 988 * reference type argument for precompiled function 989 **************************************************************************/ 990 #define G__Mfloat(buf) (buf.obj.fl=(float)G__double(buf)) 991 #define G__Mdouble(buf) buf.obj.d 992 #define G__Mchar(buf) (buf.obj.ch=(char)buf.obj.i) 993 #define G__Mshort(buf) (buf.obj.sh=(short)buf.obj.i) 994 #define G__Mint(buf) (buf.obj.in=(int)buf.obj.i) 995 #define G__Mlong(buf) buf.obj.i 996 #define G__Muchar(buf) (buf.obj.uch=(unsigned char)buf.obj.i) 997 #define G__Mushort(buf) (buf.obj.ush=(unsigned short)buf.obj.i) 998 #define G__Muint(buf) (*(unsigned int*)(&buf.obj.i)) 999 #define G__Mulong(buf) (*(unsigned long*)(&buf.obj.i)) 1000 1001 1002 1003 /************************************************************************** 1004 * include file flags 1005 **************************************************************************/ 1006 #define G__USERHEADER 1 1007 #define G__SYSHEADER 2 1008 1009 1010 #ifndef G__ANSI 1011 #if (__GNUC__>=3) || defined(_STLPORT_VERSION) 1012 #define G__ANSI 1013 #endif 1014 #endif 1015 /* #define G__ANSI */ 1016 1017 #ifdef __cplusplus 1018 1019 #ifndef G__ANSI 1020 #define G__ANSI 1021 #endif 1022 #ifndef __CINT__ 1023 #define G__CONST const 1024 #else 1025 #define G__CONST 1026 #endif 1027 1028 #else /* __cplusplus */ 1029 1030 #define G__CONST 1031 1032 #endif /* __cplusplus */ 1033 1034 extern G__value G__null; 1035 1036 /************************************************************************** 1037 * struct for variable page buffer 1038 * 1039 **************************************************************************/ 1040 #ifndef __CINT__ 1041 #define G__VARSIZE 2 1042 #define G__CHARALLOC sizeof(char) 1043 #define G__SHORTALLOC sizeof(short) 1044 #define G__INTALLOC sizeof(int) 1045 #define G__LONGALLOC sizeof(long) 1046 #define G__FLOATALLOC sizeof(float) 1047 #define G__DOUBLEALLOC sizeof(double) 1048 #define G__P2MFALLOC G__sizep2memfunc 1049 #define G__LONGLONGALLOC sizeof(G__int64) 1050 #define G__LONGDOUBLEALLOC sizeof(long double) 1051 #endif /* __CINT__ */ 1052 1053 #ifdef G__TESTMAIN 1054 /* This is only needed for demonstration that cint interprets cint */ 1055 #define G__VARSIZE 2 1056 #define G__CHARALLOC sizeof(char) 1057 #define G__SHORTALLOC sizeof(short) 1058 #define G__INTALLOC sizeof(int) 1059 #define G__LONGALLOC sizeof(long) 1060 #define G__FLOATALLOC sizeof(float) 1061 #define G__DOUBLEALLOC sizeof(double) 1062 #define G__P2MFALLOC G__sizep2memfunc 1063 #endif 1064 1065 /************************************************************************** 1066 * CINT API function return value 1067 * 1068 **************************************************************************/ 1069 /* return value of G__init_cint() */ 1070 #define G__INIT_CINT_FAILURE (-1) 1071 #define G__INIT_CINT_SUCCESS 0 1072 #define G__INIT_CINT_SUCCESS_MAIN 1 1073 1074 /* return value of G__loadfile() */ 1075 #define G__LOADFILE_SUCCESS 0 1076 #define G__LOADFILE_DUPLICATE 1 1077 #define G__LOADFILE_FAILURE (-1) 1078 #define G__LOADFILE_FATAL (-2) 1079 1080 /* return value of G__unloadfile() */ 1081 #define G__UNLOADFILE_SUCCESS 0 1082 #define G__UNLOADFILE_FAILURE (-1) 1083 1084 /* return value of G__pause() */ 1085 #define G__PAUSE_NORMAL 0 1086 #define G__PAUSE_IGNORE 1 1087 #define G__PAUSE_STEPOVER 3 1088 #define G__PAUSE_ERROR_OFFSET 0x10 1089 1090 /* return value of G__interpretedp2f() */ 1091 #define G__NOSUCHFUNC 0 1092 #define G__UNKNOWNFUNC 0 1093 #define G__INTERPRETEDFUNC 1 1094 #define G__COMPILEDWRAPPERFUNC 2 1095 #define G__COMPILEDINTERFACEMETHOD 2 1096 #define G__COMPILEDTRUEFUNC 3 1097 #define G__BYTECODEFUNC 4 1098 1099 /* flags to set to G__ismain */ 1100 #define G__NOMAIN 0 1101 #define G__MAINEXIST 1 1102 #define G__TCLMAIN 2 1103 1104 /************************************************************************** 1105 * struct forward declaration; real ones are in common.h 1106 **************************************************************************/ 1107 struct G__ifunc_table; 1108 struct G__var_array; 1109 struct G__dictposition; 1110 struct G__comment_info; 1111 struct G__friendtag; 1112 #ifdef G__ASM_WHOLEFUNC 1113 struct G__bytecodefunc; 1114 #endif 1115 struct G__funcentry; 1116 struct G__ifunc_table; 1117 struct G__inheritance; 1118 struct G__var_array; 1119 struct G__tagtable; 1120 struct G__input_file; 1121 #ifdef G__CLINK 1122 struct G__tempobject_list; 1123 #endif 1124 struct G__va_list_para; 1125 1126 /********************************************************************* 1127 * return status flag 1128 *********************************************************************/ 1129 #define G__RETURN_NON 0 1130 #define G__RETURN_NORMAL 1 1131 #define G__RETURN_IMMEDIATE 2 1132 #define G__RETURN_TRY -1 1133 #define G__RETURN_EXIT1 4 1134 #define G__RETURN_EXIT2 5 1135 1136 /************************************************************************** 1137 * struct declaration to avoid error (compiler dependent) 1138 **************************************************************************/ 1139 struct G__ifunc_table; 1140 struct G__var_array; 1141 struct G__dictposition; /* decl in Api.h because of Cint7's having C++ content */ 1142 1143 /************************************************************************** 1144 * comment information 1145 * 1146 **************************************************************************/ 1147 struct G__comment_info { 1148 union { 1149 char *com; 1150 fpos_t pos; 1151 } p; 1152 int filenum; 1153 #ifdef __cplusplus 1154 G__comment_info() : filenum(0) { p.com = 0; }; 1155 #endif 1156 }; 1157 1158 /************************************************************************** 1159 * ROOT special requirement 1160 * 1161 **************************************************************************/ 1162 #define G__NOSTREAMER 0x01 1163 #define G__NOINPUTOPERATOR 0x02 1164 #define G__USEBYTECOUNT 0x04 1165 #define G__HASVERSION 0x08 1166 1167 struct G__RootSpecial { 1168 char* deffile; 1169 int defline; 1170 char* impfile; 1171 int impline; 1172 int version; 1173 unsigned int instancecount; 1174 unsigned int heapinstancecount; 1175 void* defaultconstructor; /* defaultconstructor wrapper/stub pointer */ 1176 struct G__ifunc_table* defaultconstructorifunc; /* defaultconstructor ifunc entry */ 1177 }; 1178 1179 /************************************************************************** 1180 * structure for friend function and class 1181 * 1182 **************************************************************************/ 1183 struct G__friendtag { 1184 short tagnum; 1185 struct G__friendtag *next; 1186 }; 1187 1188 /************************************************************************** 1189 * structure for function entry 1190 * 1191 **************************************************************************/ 1192 #define G__BYTECODE_NOTYET 1 1193 #define G__BYTECODE_FAILURE 2 1194 #define G__BYTECODE_SUCCESS 3 1195 #define G__BYTECODE_ANALYSIS 4 /* ON1164 */ 1196 1197 1198 /************************************************************************** 1199 * structure for function and array parameter 1200 * 1201 **************************************************************************/ 1202 struct G__param { 1203 int paran; 1204 G__value para[G__MAXFUNCPARA]; 1205 char parameter[G__MAXFUNCPARA][G__ONELINE]; 1206 }; 1207 1208 1209 #if defined(__cplusplus) && !defined(__CINT__) 1210 } /* extern C 1 */ 1211 #endif 1212 1213 /************************************************************************** 1214 * Interface Method type 1215 * 1216 **************************************************************************/ 1217 #if defined(__cplusplus) && defined(G__CPPIF_EXTERNC) && !defined(__CINT__) 1218 extern "C" { /* extern C 2 */ 1219 #endif 1220 1221 #if defined(G__ANSIHEADER) || defined(G__ANSI) 1222 typedef int (*G__InterfaceMethod)(G__value*,G__CONST char*,struct G__param*,int); 1223 #else 1224 typedef int (*G__InterfaceMethod)(); 1225 #endif 1226 1227 #ifdef __cplusplus 1228 typedef void (*G__incsetup)(void); 1229 #else /* __cplusplus */ 1230 typedef void (*G__incsetup)(); 1231 #endif /* __cplusplus */ 1232 1233 #if defined(__cplusplus) && defined(G__CPPIF_EXTERNC) && !defined(__CINT__) 1234 } /* extern C 2 */ 1235 #endif 1236 1237 #if defined(__cplusplus) && !defined(__CINT__) 1238 extern "C" { /* extern C 3 */ 1239 #endif 1240 1241 /************************************************************************** 1242 * structure for class inheritance 1243 * 1244 **************************************************************************/ 1245 #define G__ISDIRECTINHERIT 0x0001 1246 #define G__ISVIRTUALBASE 0x0002 1247 #define G__ISINDIRECTVIRTUALBASE 0x0004 1248 1249 1250 /************************************************************************** 1251 * structure for input file 1252 * 1253 **************************************************************************/ 1254 struct G__input_file { 1255 FILE *fp; 1256 int line_number; 1257 short filenum; 1258 char name[G__MAXFILENAME]; 1259 #ifndef G__OLDIMPLEMENTATION1649 1260 char *str; 1261 unsigned long pos; 1262 int vindex; 1263 #endif 1264 #ifdef __cplusplus 1265 G__input_file() : fp(0),line_number(-1),filenum(-1),str(0),pos(0),vindex(0) { name[0] = 0; } 1266 #endif 1267 }; 1268 1269 /************************************************************************** 1270 * make hash value 1271 * 1272 **************************************************************************/ 1273 1274 #define G__hash(string,hash,len) len=hash=0;while(string[len]!='\0')hash+=string[len++]; 1275 1276 1277 /************************************************************************** 1278 * Compiled class tagnum table 1279 * 1280 **************************************************************************/ 1281 typedef struct { 1282 #ifdef __cplusplus 1283 const char *tagname; 1284 #else 1285 char *tagname; 1286 #endif 1287 char tagtype; 1288 short tagnum; 1289 } G__linked_taginfo; 1290 1291 /************************************************************************** 1292 * Completion list and function pointer list 1293 * 1294 **************************************************************************/ 1295 typedef struct { 1296 char *name; 1297 void (*pfunc)(); 1298 } G__COMPLETIONLIST; 1299 1300 #define G__TEMPLATEMEMFUNC 1301 #ifdef G__TEMPLATEMEMFUNC 1302 /* Doubly linked list of long int, methods are described in tmplt.c */ 1303 struct G__IntList { 1304 long i; 1305 struct G__IntList *prev; 1306 struct G__IntList *next; 1307 }; 1308 1309 struct G__Definedtemplatememfunc { 1310 int line; 1311 int filenum; 1312 FILE *def_fp; 1313 fpos_t def_pos; 1314 struct G__Definedtemplatememfunc *next; 1315 }; 1316 #endif 1317 1318 struct G__Templatearg { 1319 int type; 1320 char *string; 1321 char *default_parameter; 1322 struct G__Templatearg *next; 1323 }; 1324 1325 struct G__Definedtemplateclass { 1326 char *name; 1327 int hash; 1328 int line; 1329 int filenum; 1330 FILE *def_fp; 1331 fpos_t def_pos; 1332 struct G__Templatearg *def_para; 1333 #ifdef G__TEMPLATEMEMFUNC 1334 struct G__Definedtemplatememfunc memfunctmplt; 1335 #endif 1336 struct G__Definedtemplateclass *next; 1337 int parent_tagnum; 1338 struct G__IntList *instantiatedtagnum; 1339 int isforwarddecl; 1340 int friendtagnum; 1341 struct G__Definedtemplateclass *specialization; 1342 struct G__Templatearg *spec_arg; 1343 }; 1344 1345 /******************************************************************** 1346 * include path by -I option 1347 * Used in G__main() and G__loadfile() 1348 ********************************************************************/ 1349 struct G__includepath { 1350 char *pathname; 1351 struct G__includepath *next; 1352 }; 1353 1354 1355 /************************************************************************** 1356 * pointer to function which is evaluated at pause 1357 **************************************************************************/ 1358 extern void (*G__atpause)(); 1359 1360 /************************************************************************** 1361 * pointer to function which is evaluated in G__genericerror() 1362 **************************************************************************/ 1363 extern void (*G__aterror)(); 1364 1365 /************************************************************************** 1366 * New handling of pointer to function 1367 * 1368 **************************************************************************/ 1369 #ifndef G__NONANSI 1370 #ifndef G__SUNOS4 1371 #define G__FUNCPOINTER 1372 #endif 1373 #endif 1374 1375 /************************************************************************** 1376 * Bug fix for struct allocation 1377 * 1378 **************************************************************************/ 1379 #define G__PVOID ((long)(-1)) 1380 #define G__PINVALID 0 1381 1382 /********************************************************************** 1383 * Multi-byte character handling in comment and string 1384 **********************************************************************/ 1385 #define G__MULTIBYTE 1386 1387 /************************************************************************** 1388 * ASSERTION MACRO 1389 * 1390 **************************************************************************/ 1391 #if defined(G__DEBUG) || defined(G__ASM_DBG) 1392 1393 #define G__ASSERT(f) \ 1394 if(!(f)) fprintf(G__serr \ 1395 ,"cint internal error: %s line %u FILE:%s LINE:%d\n" \ 1396 ,__FILE__,__LINE__,G__ifile.name,G__ifile.line_number) 1397 1398 1399 #else 1400 1401 #define G__ASSERT(f) /* NULL */ 1402 1403 #endif 1404 1405 1406 #ifndef __CINT__ 1407 /************************************************************************** 1408 * Exported Functions 1409 * 1410 **************************************************************************/ 1411 #ifdef G__ANSI 1412 #define G__P(funcparam) funcparam 1413 #else 1414 #define G__P(funcparam) () 1415 #endif 1416 1417 #if defined(G__DEBUG) && !defined(G__MEMTEST_C) 1418 #include "src/memtest.h" 1419 #endif 1420 1421 #ifndef G__WILDCARD 1422 #define G__WILDCARD 1423 #endif 1424 1425 /************************************************************************** 1426 * Variable argument, byte layout policy 1427 **************************************************************************/ 1428 #define G__VAARG_SIZE 1024 1429 1430 typedef struct { 1431 union { 1432 char d[G__VAARG_SIZE]; 1433 long i[G__VAARG_SIZE/sizeof(long)]; 1434 } x; 1435 } G__va_arg_buf; 1436 1437 1438 /* cross-compiling for iOS and iOS simulator (assumes host is Intel Mac OS X) */ 1439 #if defined(R__IOSSIM) || defined(R__IOS) 1440 #ifdef __x86_64__ 1441 #define R__x86_64 1 1442 #undef __x86_64__ 1443 #endif 1444 #ifdef __i386__ 1445 #define R__i386 1 1446 #undef __i386__ 1447 #endif 1448 #ifdef R__IOSSIM 1449 #define __i386__ 1 1450 #endif 1451 #ifdef R__IOS 1452 #define __arm__ 1 1453 #endif 1454 #endif 1455 1456 1457 #if (defined(__i386__) && (defined(__linux) || defined(__APPLE__))) || \ 1458 defined(_WIN32) || defined(G__CYGWIN) 1459 /********************************************** 1460 * Intel architecture, aligns in multiple of 4 1461 * |1111|22 |3 |44444444|55555555555555 | 1462 **********************************************/ 1463 #define G__VAARG_INC_COPY_N 4 1464 1465 #elif (defined(__linux)&&defined(__ia64__)) 1466 /********************************************** 1467 * Itanium/linux, aligns in multiple of 8 1468 **********************************************/ 1469 1470 #define G__VAARG_INC_COPY_N 8 1471 #define G__VAARG_PASS_BY_REFERENCE 8 1472 1473 #elif defined(__hpux) || defined(__hppa__) 1474 /********************************************** 1475 * HP-Precision Architecture, 1476 * Args > 8 bytes are passed by reference. Args > 4 and <= 8 are 1477 * right-justified in 8 bytes. Args <= 4 are right-justified in 1478 * 4 bytes. 1479 **********************************************/ 1480 /* #define G__VAARG_NOSUPPORT */ 1481 1482 #ifdef __ia64__ 1483 #define G__VAARG_INC_COPY_N 8 1484 #else 1485 #define G__VAARG_INC_COPY_N 4 1486 #endif 1487 #define G__VAARG_PASS_BY_REFERENCE 8 1488 1489 #elif defined(__x86_64__) && (defined(__linux) || defined(__APPLE__) || \ 1490 defined(__FreeBSD__) && defined(__sun)) 1491 /********************************************** 1492 * AMD64/EM64T 1493 * It turned out it is quite difficult to support this 1494 * platform as it uses registers for passing arguments (first 6 long 1495 * and first 8 double arguments in registers, the remaining on the stack) 1496 * for Linux/gcc. 1497 **********************************************/ 1498 1499 #define G__VAARG_INC_COPY_N 8 1500 /* #define G__VAARG_PASS_BY_REFERENCE 8 */ 1501 1502 #elif defined(__sparc) || defined(__sparc__) || defined(__SUNPRO_C) || \ 1503 defined(__SUNPRO_CC) 1504 /********************************************** 1505 * Sun Sparc architecture 1506 * Alignment is similar to Intel, but class/struct 1507 * objects are passed by reference 1508 **********************************************/ 1509 /* #define G__VAARG_NOSUPPORT */ 1510 1511 #define G__VAARG_INC_COPY_N 4 1512 #define G__VAARG_PASS_BY_REFERENCE 8 1513 1514 #elif (defined(__PPC__)||defined(__ppc__))&&(defined(_AIX)||defined(__APPLE__)) 1515 /********************************************** 1516 * PowerPC, AIX and Apple Mac 1517 * It turned out it is quite difficult if not impossible to support PowerPC. 1518 * PPC uses registers for passing arguments (general purpose 3-10, floating 1) 1519 **********************************************/ 1520 #if !defined(__GNUC__) 1521 /* Looks like gcc3.3 doesn't use registers. */ 1522 /*#define G__VAARG_NOSUPPORT*/ 1523 #define G__VAARG_INC_COPY_N 4 1524 #define G__VAARG_PASS_BY_REFERENCE 8 1525 #endif 1526 #define G__VAARG_INC_COPY_N 4 1527 #define G__VAARG_PASS_BY_REFERENCE 8 1528 1529 #elif (defined(__PPC__)||defined(__ppc__))&&(defined(__linux)||defined(__linux__)) 1530 /********************************************** 1531 * PowerPC, Linux 1532 **********************************************/ 1533 #define G__VAARG_INC_COPY_N 4 1534 #define G__VAARG_PASS_BY_REFERENCE 8 1535 1536 #elif (defined(__mips__)&&defined(__linux__)) 1537 /********************************************** 1538 * MIPS, Linux 1539 * 3 different calling conventions: 1540 * | mips | mipsn32 | mips64 1541 * | mipsel | mipsn32el | mips64el 1542 * ---------------------------+--------+--------------------- 1543 * G__VAARG_INC_COPY_N | 4 | 8 | 8 1544 * G__VAARG_PASS_BY_REFERENCE | 4 | 8 | 8 1545 * 1546 * Assuming that 1547 * G__VAARG_INC_COPY_N 1548 * is meant to be the size of the argument registers, 1549 * G__VAARG_PASS_BY_REFERENCE 1550 * is the number of arguments passed by reference through 1551 * registers. 1552 * 1553 * Thanks to Thiemo Seufer <ths@networkno.de> of Debian 1554 **********************************************/ 1555 # if _MIPS_SIM == _ABIO32 /* mips or mipsel */ 1556 # define G__VAARG_INC_COPY_N 4 1557 # define G__VAARG_PASS_BY_REFERENCE 4 1558 # elif _MIPS_SIM == _ABIN32 /* mipsn32 or mipsn32el */ 1559 # define G__VAARG_INC_COPY_N 8 1560 # define G__VAARG_PASS_BY_REFERENCE 8 1561 # elif _MIPS_SIM == _ABI64 /* mips64 or mips64el */ 1562 # define G__VAARG_INC_COPY_N 8 1563 # define G__VAARG_PASS_BY_REFERENCE 8 1564 # else 1565 # define G__VAARG_NOSUPPORT 1566 # endif 1567 #else 1568 /********************************************** 1569 * Other platforms, 1570 * Try copying object as value. 1571 **********************************************/ 1572 #define G__VAARG_NOSUPPORT 1573 #define G__VAARG_INC_COPY_N 4 1574 /* #define G__VAARG_PASS_BY_REFERENCE 8 */ 1575 1576 #endif 1577 1578 /* cross-compiling for iOS and iOS simulator (assumes host is Intel Mac OS X) */ 1579 #if defined(R__IOSSIM) || defined(R__IOS) 1580 #undef __i386__ 1581 #undef __arm__ 1582 #ifdef R__x86_64 1583 #define __x86_64__ 1 1584 #endif 1585 #ifdef R__i386 1586 #define __i386__ 1 1587 #endif 1588 #endif 1589 1590 struct G__va_list_para { 1591 struct G__param *libp; 1592 int i; 1593 }; 1594 1595 extern G__EXPORT G__value (*G__GetSpecialObject) (G__CONST char *name,void **ptr,void** ppdict); 1596 extern G__EXPORT int (*G__ScriptCompiler)(G__CONST char*,G__CONST char*); 1597 1598 typedef int (*G__IgnoreInclude) G__P((const char* fname,const char* expandedfname)); 1599 typedef void G__parse_hook_t (); 1600 1601 /********************************************** 1602 * Exported Functions 1603 * 1604 **********************************************/ 1605 1606 #ifndef G__DECL_API 1607 # ifndef G__MULTITHREADLIBCINT 1608 # ifdef __cplusplus 1609 # define G__DUMMYTOCHECKFORDUPLICATES_CONCAT(A,B) A##B 1610 # define G__DUMMYTOCHECKFORDUPLICATES(IDX) namespace{class G__DUMMYTOCHECKFORDUPLICATES_CONCAT(this_API_function_index_occurs_more_than_once_,IDX) {};} 1611 # else 1612 # define G__DUMMYTOCHECKFORDUPLICATES(IDX) 1613 # endif 1614 # define G__DECL_API(IDX, RET, NAME, ARGS) \ 1615 G__EXPORT RET NAME ARGS ; G__DUMMYTOCHECKFORDUPLICATES(IDX) 1616 # else 1617 # define G__DUMMYTOCHECKFORDUPLICATES(IDX) 1618 # define G__DECL_API(IDX, RET, NAME, ARGS) \ 1619 static RET (* NAME ) ARGS = 0; 1620 # endif 1621 #endif /*G__DECL_API*/ 1622 1623 #include "G__ci_fproto.h" 1624 1625 #ifdef G__MULTITHREADLIBCINT 1626 /* second round, now setting func ptrs */ 1627 1628 # undef G__DUMMYTOCHECKFORDUPLICATES 1629 # define G__DUMMYTOCHECKFORDUPLICATES(IDX) 1630 # ifdef G__MULTITHREADLIBCINTC 1631 # define G__SET_CINT_API_POINTERS_FUNCNAME G__SetCCintApiPointers 1632 # else 1633 # define G__SET_CINT_API_POINTERS_FUNCNAME G__SetCppCintApiPointers 1634 # endif 1635 # undef G__DECL_API 1636 # define G__DECL_API(IDX, RET, NAME, ARGS) \ 1637 NAME = (RET (*) ARGS) a[IDX]; 1638 1639 G__EXPORT void G__SET_CINT_API_POINTERS_FUNCNAME (void *a[G__NUMBER_OF_API_FUNCTIONS]) { 1640 #include "G__ci_fproto.h" 1641 } 1642 1643 #endif /* G__MULTITHREADLIBCINT */ 1644 /************************************************************************** 1645 * end of Exported Cint API functions 1646 **************************************************************************/ 1647 1648 #endif /* __CINT__ */ 1649 1650 #if defined(G__WIN32) 1651 #ifndef snprintf 1652 #define snprintf _snprintf 1653 #endif 1654 #endif 1655 1656 #if defined(G__WIN32) && (!defined(G__SYMANTEC)) && defined(G__CINTBODY) 1657 /* ON562 , this used to be test for G__SPECIALSTDIO */ 1658 /************************************************************************ 1659 * Dummy I/O function for all Win32 based application 1660 ************************************************************************/ 1661 #ifdef printf 1662 #undef printf 1663 #endif 1664 #ifdef fprintf 1665 #undef fprintf 1666 #endif 1667 #ifdef fputc 1668 #undef fputc 1669 #endif 1670 #ifdef putc 1671 #undef putc 1672 #endif 1673 #ifdef putchar 1674 #undef putchar 1675 #endif 1676 #ifdef fputs 1677 #undef fputs 1678 #endif 1679 #ifdef puts 1680 #undef puts 1681 #endif 1682 #ifdef fgets 1683 #undef fgets 1684 #endif 1685 #ifdef gets 1686 #undef gets 1687 #endif 1688 #ifdef tmpfile 1689 #undef tmpfile 1690 #endif 1691 #define printf G__printf 1692 #define fprintf G__fprintf 1693 #define fputc G__fputc 1694 #define putc G__fputc 1695 #define putchar G__putchar 1696 #define fputs G__fputs 1697 #define puts G__puts 1698 #define fgets G__fgets 1699 #define gets G__gets 1700 #define system G__system 1701 #define tmpfile G__tmpfile 1702 1703 int G__fputc G__P((int character,FILE *fp)); 1704 int G__putchar G__P((int character)); 1705 int G__fputs G__P((char *string,FILE *fp)); 1706 int G__puts G__P((char *string)); 1707 char *G__fgets G__P((char *string,int n,FILE *fp)); 1708 char *G__gets G__P((char *buffer)); 1709 int G__system G__P((char *com)); 1710 FILE *G__tmpfile(void); 1711 1712 #ifdef G__SPECIALSTDIO 1713 1714 /* THIS IS AN OLD WILDC++ IMPLEMENTATION */ 1715 /* signal causes problem in Windows-95 with Tcl/Tk */ 1716 #define signal(sigid,p2f) NULL 1717 #define alarm(time) NULL 1718 1719 #else /* G__SPECIALSTDIO */ 1720 1721 #ifdef signal 1722 #undef signal 1723 #endif 1724 #define signal G__signal 1725 #define alarm(time) NULL 1726 typedef void (*G__signaltype)(int,void (*)(int)); 1727 G__signaltype G__signal G__P((int sgnl,void (*f)(int))); 1728 1729 #endif /* G__SPECIALSTDIO */ 1730 1731 #endif /* WIN32 !SYMANTEC CINTBODY*/ 1732 /************************************************************************** 1733 * end of specialstdio or win32 1734 **************************************************************************/ 1735 1736 /***********************************************************************/ 1737 #if defined(__cplusplus) && !defined(__CINT__) 1738 } /* extern C 3 */ 1739 #endif 1740 1741 /***********************************************************************/ 1742 #if defined(__cplusplus) && !defined(__CINT__) 1743 /* Helper class to avoid compiler warning about casting function pointer 1744 ** to void pointer. 1745 */ 1746 class G__func2void { 1747 typedef void (*funcptr_t)(); 1748 1749 union funcptr_and_voidptr { 1750 typedef void (*funcptr_t)(); 1751 1752 funcptr_and_voidptr(void *val) : _read(val) {} 1753 1754 void *_read; 1755 funcptr_t _write; 1756 }; 1757 1758 funcptr_and_voidptr _tmp; 1759 public: 1760 template <typename T> 1761 G__func2void( T vfp ) : _tmp(0) { 1762 _tmp._write = ( funcptr_t )vfp; 1763 } 1764 1765 operator void* () const { 1766 return _tmp._read; 1767 } 1768 }; 1769 #elif !defined(__CINT__) 1770 typedef union { 1771 void *_read; 1772 void (*_write)(); 1773 } funcptr_and_voidptr; 1774 #endif /* __cplusplus && ! __CINT__*/ 1775 1776 #endif /* __MAKECINT__ */ 1777 /************************************************************************** 1778 * endif #ifndef G__MAKECINT 1779 **************************************************************************/ 1780 1781 1782 1783 #endif /* G__CI_H */ 1784