Home | History | Annotate | Line # | Download | only in gdb.cp
      1  1.1  christos #include <stddef.h>
      2  1.1  christos 
      3  1.1  christos class foo {
      4  1.1  christos public:
      5  1.1  christos   foo  (int);
      6  1.1  christos   foo  (int, const char *);
      7  1.1  christos   foo  (foo&);
      8  1.1  christos   ~foo ();
      9  1.1  christos   void foofunc (int);
     10  1.1  christos   void foofunc (int, signed char *);
     11  1.1  christos   int ifoo;
     12  1.1  christos   const char *ccpfoo;
     13  1.1  christos 
     14  1.1  christos int overload1arg (void);
     15  1.1  christos int overload1arg (char);
     16  1.1  christos int overload1arg (signed char);
     17  1.1  christos int overload1arg (unsigned char);
     18  1.1  christos int overload1arg (short);
     19  1.1  christos int overload1arg (unsigned short);
     20  1.1  christos int overload1arg (int);
     21  1.1  christos int overload1arg (unsigned int);
     22  1.1  christos int overload1arg (long);
     23  1.1  christos int overload1arg (unsigned long);
     24  1.1  christos int overload1arg (float);
     25  1.1  christos int overload1arg (double);
     26  1.1  christos 
     27  1.1  christos int overload1arg (int*);
     28  1.1  christos int overload1arg (void*);
     29  1.1  christos 
     30  1.1  christos int overloadfnarg (void);
     31  1.1  christos int overloadfnarg (int);
     32  1.1  christos int overloadfnarg (int, int (*) (int));
     33  1.1  christos 
     34  1.1  christos int overloadargs (int a1);
     35  1.1  christos int overloadargs (int a1, int a2);
     36  1.1  christos int overloadargs (int a1, int a2, int a3);
     37  1.1  christos int overloadargs (int a1, int a2, int a3, int a4);
     38  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5);
     39  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6);
     40  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7);
     41  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8);
     42  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
     43  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
     44  1.1  christos                    int a8, int a9, int a10);
     45  1.1  christos int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
     46  1.1  christos                    int a8, int a9, int a10, int a11);
     47  1.1  christos 
     48  1.1  christos };
     49  1.1  christos 
     50  1.1  christos struct K {
     51  1.1  christos   static int staticoverload ();
     52  1.1  christos   static int staticoverload (int);
     53  1.1  christos   static int staticoverload (int, int);
     54  1.1  christos };
     55  1.1  christos 
     56  1.1  christos namespace N {
     57  1.1  christos   int nsoverload () { return 1; }
     58  1.1  christos   int nsoverload (int x) { return x; }
     59  1.1  christos   int nsoverload (int x, int y) { return x + y; }
     60  1.1  christos };
     61  1.1  christos 
     62  1.1  christos int intToChar (char c) { return 297; }
     63  1.1  christos 
     64  1.1  christos void marker1()
     65  1.1  christos {}
     66  1.1  christos 
     67  1.1  christos // Now test how overloading and namespaces interact.
     68  1.1  christos 
     69  1.1  christos class dummyClass {};
     70  1.1  christos 
     71  1.1  christos dummyClass dummyInstance;
     72  1.1  christos 
     73  1.1  christos int overloadNamespace(int i)
     74  1.1  christos {
     75  1.1  christos   return 1;
     76  1.1  christos }
     77  1.1  christos 
     78  1.1  christos int overloadNamespace(dummyClass d)
     79  1.1  christos {
     80  1.1  christos   return 2;
     81  1.1  christos }
     82  1.1  christos 
     83  1.1  christos namespace XXX {
     84  1.1  christos   int overloadNamespace (char c)
     85  1.1  christos   {
     86  1.1  christos     return 3;
     87  1.1  christos   }
     88  1.1  christos 
     89  1.1  christos   void marker2() {}
     90  1.1  christos }
     91  1.1  christos 
     92  1.1  christos class A {};
     93  1.1  christos class B: public A {};
     94  1.1  christos class C: public B {};
     95  1.1  christos class D: C {};
     96  1.6  christos class E {};
     97  1.6  christos class F {};
     98  1.1  christos 
     99  1.1  christos int bar (A) { return 11; }
    100  1.1  christos int bar (B) { return 22; }
    101  1.1  christos 
    102  1.6  christos int bar2 (E &, A &) { return 33; }
    103  1.6  christos int bar2 (F &, B &) { return 44; }
    104  1.6  christos 
    105  1.1  christos int intintfunc (int x) { return x; }
    106  1.1  christos 
    107  1.1  christos int main ()
    108  1.1  christos {
    109  1.1  christos     char arg2 = 2;
    110  1.1  christos     signed char arg3 =3;
    111  1.1  christos     unsigned char arg4 =4;
    112  1.1  christos     short arg5 =5;
    113  1.1  christos     unsigned short arg6 =6;
    114  1.1  christos     int arg7 =7;
    115  1.1  christos     unsigned int arg8 =8;
    116  1.1  christos     long arg9 =9;
    117  1.1  christos     unsigned long arg10 =10;
    118  1.1  christos     float arg11 =100.0;
    119  1.1  christos     double arg12 = 200.0;
    120  1.1  christos     int arg13 = 200;
    121  1.1  christos     char arg14 = 'a';
    122  1.1  christos 
    123  1.1  christos     A a;
    124  1.1  christos     B b;
    125  1.1  christos     C c;
    126  1.1  christos     D d;
    127  1.6  christos     E e;
    128  1.6  christos     F f;
    129  1.1  christos 
    130  1.1  christos     bar (a);
    131  1.1  christos     bar (b);
    132  1.1  christos     bar (c);
    133  1.1  christos 
    134  1.6  christos     bar2 (e, b);
    135  1.6  christos     bar2 (f, b);
    136  1.6  christos 
    137  1.1  christos     char *str = (char *) "A";
    138  1.1  christos     foo foo_instance1(111);
    139  1.1  christos     foo foo_instance2(222, str);
    140  1.1  christos     foo foo_instance3(foo_instance2);
    141  1.1  christos 
    142  1.1  christos     // Some calls to ensure all the functions are emitted.
    143  1.1  christos     K::staticoverload();
    144  1.1  christos     K::staticoverload(2);
    145  1.1  christos     K::staticoverload(2, 3);
    146  1.1  christos     N::nsoverload();
    147  1.1  christos     N::nsoverload(2);
    148  1.1  christos     N::nsoverload(2, 3);
    149  1.1  christos 
    150  1.1  christos     overloadNamespace (1);
    151  1.1  christos     overloadNamespace (dummyInstance);
    152  1.1  christos     XXX::overloadNamespace ('a');
    153  1.1  christos 
    154  1.1  christos     // Verify that intToChar should work:
    155  1.1  christos     intToChar(1);
    156  1.1  christos 
    157  1.1  christos     marker1(); // marker1-returns-here
    158  1.1  christos     XXX::marker2(); // marker1-returns-here
    159  1.1  christos 
    160  1.1  christos     return 0;
    161  1.1  christos }
    162  1.1  christos 
    163  1.1  christos foo::foo  (int i)                  { ifoo = i; ccpfoo = NULL; }
    164  1.1  christos foo::foo  (int i, const char *ccp) { ifoo = i; ccpfoo = ccp; }
    165  1.1  christos foo::foo  (foo& afoo)              { ifoo = afoo.ifoo; ccpfoo = afoo.ccpfoo;}
    166  1.1  christos foo::~foo ()                       {}
    167  1.1  christos 
    168  1.1  christos 
    169  1.1  christos /* Some functions to test overloading by varying one argument type. */
    170  1.1  christos 
    171  1.1  christos int foo::overload1arg (void)                {  return 1; }
    172  1.1  christos int foo::overload1arg (char arg)            { arg = 0; return 2;}
    173  1.1  christos int foo::overload1arg (signed char arg)     { arg = 0; return 3;}
    174  1.1  christos int foo::overload1arg (unsigned char arg)   { arg = 0; return 4;}
    175  1.1  christos int foo::overload1arg (short arg)           { arg = 0; return 5;}
    176  1.1  christos int foo::overload1arg (unsigned short arg)  { arg = 0; return 6;}
    177  1.1  christos int foo::overload1arg (int arg)             { arg = 0; return 7;}
    178  1.1  christos int foo::overload1arg (unsigned int arg)    { arg = 0; return 8;}
    179  1.1  christos int foo::overload1arg (long arg)            { arg = 0; return 9;}
    180  1.1  christos int foo::overload1arg (unsigned long arg)   { arg = 0; return 10;}
    181  1.1  christos int foo::overload1arg (float arg)           { arg = 0; return 11;}
    182  1.1  christos int foo::overload1arg (double arg)          { arg = 0; return 12;}
    183  1.1  christos int foo::overload1arg (int* arg)            { arg = 0; return 13;}
    184  1.1  christos int foo::overload1arg (void* arg)           { arg = 0; return 14;}
    185  1.1  christos 
    186  1.1  christos /* Test to see that we can explicitly request overloaded functions
    187  1.1  christos    with function pointers in the prototype. */
    188  1.1  christos 
    189  1.1  christos int foo::overloadfnarg (void) { return ifoo * 20; }
    190  1.1  christos int foo::overloadfnarg (int arg) { arg = 0; return 13;}
    191  1.1  christos int foo::overloadfnarg (int arg, int (*foo) (int))    { return foo(arg); }
    192  1.1  christos 
    193  1.1  christos /* Some functions to test overloading by varying argument count. */
    194  1.1  christos 
    195  1.1  christos int foo::overloadargs (int a1)
    196  1.1  christos { a1 = 0;
    197  1.1  christos return 1;}
    198  1.1  christos 
    199  1.1  christos int foo::overloadargs (int a1, int a2)
    200  1.1  christos { a1 = a2 = 0;
    201  1.1  christos return 2;}
    202  1.1  christos 
    203  1.1  christos int foo::overloadargs (int a1, int a2, int a3)
    204  1.1  christos { a1 = a2 = a3 = 0;
    205  1.1  christos return 3;}
    206  1.1  christos 
    207  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4)
    208  1.1  christos { a1 = a2 = a3 = a4 = 0;
    209  1.1  christos return 4;}
    210  1.1  christos 
    211  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5)
    212  1.1  christos { a1 = a2 = a3 = a4 = a5 = 0;
    213  1.1  christos return 5;}
    214  1.1  christos 
    215  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6)
    216  1.1  christos { a1 = a2 = a3 = a4 = a5 = a6 = 0;
    217  1.1  christos return 6;}
    218  1.1  christos 
    219  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7)
    220  1.1  christos { a1 = a2 = a3 = a4 = a5 = a6 = a7 = 0;
    221  1.1  christos return 7;}
    222  1.1  christos 
    223  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
    224  1.1  christos                    int a8)
    225  1.1  christos { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = 0;
    226  1.1  christos return 8;}
    227  1.1  christos 
    228  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
    229  1.1  christos                    int a8, int a9)
    230  1.1  christos {
    231  1.1  christos   a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = 0;
    232  1.1  christos   return 9;
    233  1.1  christos }
    234  1.1  christos 
    235  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
    236  1.1  christos                    int a8, int a9, int a10)
    237  1.1  christos                         { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
    238  1.1  christos                           a10 = 0; return 10;}
    239  1.1  christos 
    240  1.1  christos int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
    241  1.1  christos                    int a8, int a9, int a10, int a11)
    242  1.1  christos                         { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
    243  1.1  christos                           a10 = a11 = 0; return 11;}
    244  1.1  christos 
    245  1.1  christos 
    246  1.1  christos 
    247  1.1  christos int K::staticoverload () { return 1; }
    248  1.1  christos int K::staticoverload (int x) { return x; }
    249  1.1  christos int K::staticoverload (int x, int y) { return x + y; }
    250