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