Home | History | Annotate | Line # | Download | only in gdb.cp
      1   1.1  christos /* This test script is part of GDB, the GNU debugger.
      2   1.1  christos 
      3  1.11  christos    Copyright 1999-2024 Free Software Foundation, Inc.
      4   1.1  christos 
      5   1.1  christos    This program is free software; you can redistribute it and/or modify
      6   1.1  christos    it under the terms of the GNU General Public License as published by
      7   1.1  christos    the Free Software Foundation; either version 3 of the License, or
      8   1.1  christos    (at your option) any later version.
      9   1.1  christos 
     10   1.1  christos    This program is distributed in the hope that it will be useful,
     11   1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12   1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13   1.1  christos    GNU General Public License for more details.
     14   1.1  christos 
     15   1.1  christos    You should have received a copy of the GNU General Public License
     16   1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     17   1.1  christos 
     18   1.1  christos #include <iostream>
     19   1.1  christos 
     20   1.1  christos using namespace std;
     21   1.1  christos 
     22   1.1  christos void marker1()
     23   1.1  christos {
     24   1.1  christos   return;
     25   1.1  christos }
     26   1.1  christos 
     27   1.1  christos class A1 {
     28   1.1  christos   int x;
     29   1.1  christos   int y;
     30   1.1  christos 
     31   1.1  christos friend ostream& operator<<(ostream& outs, A1 one);
     32   1.1  christos 
     33   1.1  christos public:
     34   1.1  christos 
     35   1.1  christos   A1(int a, int b)
     36   1.1  christos   {
     37   1.1  christos    x=a;
     38   1.1  christos    y=b;
     39   1.1  christos   }
     40   1.1  christos 
     41   1.1  christos A1 operator+=(int value);
     42   1.1  christos A1 operator+(const A1&);
     43   1.1  christos A1 operator-(const A1&);
     44   1.1  christos A1 operator%(const A1&);
     45   1.1  christos int operator==(const A1&);
     46   1.1  christos int operator!=(const A1&);
     47   1.1  christos int operator&&(const A1&);
     48   1.1  christos int operator||(const A1&);
     49   1.1  christos A1 operator<<(int);
     50   1.1  christos A1 operator>>(int);
     51   1.1  christos A1 operator|(const A1&);
     52   1.1  christos A1 operator^(const A1&);
     53   1.1  christos A1 operator&(const A1&);
     54   1.1  christos int operator<(const A1&);
     55   1.1  christos int operator<=(const A1&);
     56   1.1  christos int operator>=(const A1&);
     57   1.1  christos int operator>(const A1&);
     58   1.1  christos A1 operator*(const A1&);
     59   1.1  christos A1 operator/(const A1&);
     60   1.1  christos A1 operator=(const A1&);
     61   1.1  christos 
     62   1.1  christos A1 operator~();
     63   1.1  christos A1 operator+();
     64   1.1  christos A1 operator-();
     65   1.1  christos int operator!();
     66   1.1  christos A1 operator++();
     67   1.1  christos A1 operator++(int);
     68   1.1  christos A1 operator--();
     69   1.1  christos A1 operator--(int);
     70   1.1  christos 
     71   1.1  christos };
     72   1.1  christos 
     73   1.1  christos 
     74   1.1  christos A1 A1::operator+(const A1& second)
     75   1.1  christos {
     76   1.1  christos  A1 sum(0,0);
     77   1.1  christos  sum.x = x + second.x;
     78   1.1  christos  sum.y = y + second.y;
     79   1.1  christos 
     80   1.1  christos  return (sum);
     81   1.1  christos }
     82   1.1  christos 
     83   1.1  christos A1 A1::operator*(const A1& second)
     84   1.1  christos {
     85   1.1  christos  A1 product(0,0);
     86   1.1  christos  product.x = this->x * second.x;
     87   1.1  christos  product.y = this->y * second.y;
     88   1.1  christos 
     89   1.1  christos  return product;
     90   1.1  christos }
     91   1.1  christos 
     92   1.1  christos A1 A1::operator-(const A1& second)
     93   1.1  christos {
     94   1.1  christos  A1 diff(0,0);
     95   1.1  christos  diff.x = x - second.x;
     96   1.1  christos  diff.y = y - second.y;
     97   1.1  christos 
     98   1.1  christos  return diff;
     99   1.1  christos }
    100   1.1  christos 
    101   1.1  christos A1 A1::operator/(const A1& second)
    102   1.1  christos {
    103   1.1  christos  A1 div(0,0);
    104   1.1  christos  div.x = x / second.x;
    105   1.1  christos  div.y = y / second.y;
    106   1.1  christos 
    107   1.1  christos  return div;
    108   1.1  christos }
    109   1.1  christos 
    110   1.1  christos A1 A1::operator%(const A1& second)
    111   1.1  christos {
    112   1.1  christos  A1 rem(0,0);
    113   1.1  christos  rem.x = x % second.x;
    114   1.1  christos  rem.y = y % second.y;
    115   1.1  christos 
    116   1.1  christos  return rem;
    117   1.1  christos }
    118   1.1  christos 
    119   1.1  christos int A1::operator==(const A1& second)
    120   1.1  christos {
    121   1.1  christos  int a = (x == second.x);
    122   1.1  christos  int b = (y == second.y);
    123   1.1  christos 
    124   1.1  christos  return (a && b);
    125   1.1  christos }
    126   1.1  christos 
    127   1.1  christos int A1::operator!=(const A1& second)
    128   1.1  christos {
    129   1.1  christos  int a = (x != second.x);
    130   1.1  christos  int b = (y != second.y);
    131   1.1  christos 
    132   1.1  christos  return (a || b);
    133   1.1  christos }
    134   1.1  christos 
    135   1.1  christos int A1::operator&&(const A1& second)
    136   1.1  christos {
    137   1.1  christos  return ( x && second.x);
    138   1.1  christos }
    139   1.1  christos 
    140   1.1  christos int A1::operator||(const A1& second)
    141   1.1  christos {
    142   1.1  christos  return ( x || second.x);
    143   1.1  christos }
    144   1.1  christos 
    145   1.1  christos A1 A1::operator<<(int value)
    146   1.1  christos {
    147   1.1  christos  A1 lshft(0,0);
    148   1.1  christos  lshft.x = x << value;
    149   1.1  christos  lshft.y = y << value;
    150   1.1  christos 
    151   1.1  christos  return lshft;
    152   1.1  christos }
    153   1.1  christos 
    154   1.1  christos A1 A1::operator>>(int value)
    155   1.1  christos {
    156   1.1  christos  A1 rshft(0,0);
    157   1.1  christos  rshft.x = x >> value;
    158   1.1  christos  rshft.y = y >> value;
    159   1.1  christos 
    160   1.1  christos  return rshft;
    161   1.1  christos }
    162   1.1  christos 
    163   1.1  christos A1 A1::operator|(const A1& second)
    164   1.1  christos {
    165   1.1  christos  A1 abitor(0,0);
    166   1.1  christos  abitor.x = x | second.x;
    167   1.1  christos  abitor.y = y | second.y;
    168   1.1  christos 
    169   1.1  christos  return abitor;
    170   1.1  christos }
    171   1.1  christos 
    172   1.1  christos A1 A1::operator^(const A1& second)
    173   1.1  christos {
    174   1.1  christos  A1 axor(0,0);
    175   1.1  christos  axor.x = x ^ second.x;
    176   1.1  christos  axor.y = y ^ second.y;
    177   1.1  christos 
    178   1.1  christos  return axor;
    179   1.1  christos }
    180   1.1  christos 
    181   1.1  christos A1 A1::operator&(const A1& second)
    182   1.1  christos {
    183   1.1  christos  A1 abitand(0,0);
    184   1.1  christos  abitand.x = x & second.x;
    185   1.1  christos  abitand.y = y & second.y;
    186   1.1  christos 
    187   1.1  christos  return abitand;
    188   1.1  christos }
    189   1.1  christos 
    190   1.1  christos int A1::operator<(const A1& second)
    191   1.1  christos {
    192   1.1  christos  A1 b(0,0);
    193   1.1  christos  b.x = 3;
    194   1.1  christos  return (x < second.x);
    195   1.1  christos }
    196   1.1  christos 
    197   1.1  christos int A1::operator<=(const A1& second)
    198   1.1  christos {
    199   1.1  christos  return (x <= second.x);
    200   1.1  christos }
    201   1.1  christos 
    202   1.1  christos int A1::operator>=(const A1& second)
    203   1.1  christos {
    204   1.1  christos  return (x >= second.x);
    205   1.1  christos }
    206   1.1  christos 
    207   1.1  christos int A1::operator>(const A1& second)
    208   1.1  christos {
    209   1.1  christos  return (x > second.x);
    210   1.1  christos }
    211   1.1  christos 
    212   1.1  christos int A1::operator!(void)
    213   1.1  christos {
    214   1.1  christos  return (!x);
    215   1.1  christos }
    216   1.1  christos 
    217   1.1  christos A1 A1::operator-(void)
    218   1.1  christos {
    219   1.1  christos  A1 neg(0,0);
    220   1.1  christos  neg.x = -x;
    221   1.1  christos  neg.y = -y;
    222   1.1  christos 
    223   1.1  christos  return (neg);
    224   1.1  christos }
    225   1.1  christos 
    226   1.1  christos A1 A1::operator+(void)
    227   1.1  christos {
    228   1.1  christos  A1 pos(0,0);
    229   1.1  christos  pos.x = +x;
    230   1.1  christos  pos.y = +y;
    231   1.1  christos 
    232   1.1  christos  return (pos);
    233   1.1  christos }
    234   1.1  christos 
    235   1.1  christos A1 A1::operator~(void)
    236   1.1  christos {
    237   1.1  christos  A1 acompl(0,0);
    238   1.1  christos  acompl.x = ~x;
    239   1.1  christos  acompl.y = ~y;
    240   1.1  christos 
    241   1.1  christos  return (acompl);
    242   1.1  christos }
    243   1.1  christos 
    244   1.1  christos A1 A1::operator++() // pre increment
    245   1.1  christos {
    246   1.1  christos  x = x +1;
    247   1.1  christos 
    248   1.1  christos  return (*this);
    249   1.1  christos }
    250   1.1  christos 
    251   1.1  christos A1 A1::operator++(int) // post increment
    252   1.1  christos {
    253   1.1  christos  y = y +1;
    254   1.1  christos 
    255   1.1  christos  return (*this);
    256   1.1  christos }
    257   1.1  christos 
    258   1.1  christos A1 A1::operator--() // pre decrement
    259   1.1  christos {
    260   1.1  christos  x = x -1;
    261   1.1  christos 
    262   1.1  christos  return (*this);
    263   1.1  christos }
    264   1.1  christos 
    265   1.1  christos A1 A1::operator--(int) // post decrement
    266   1.1  christos {
    267   1.1  christos  y = y -1;
    268   1.1  christos 
    269   1.1  christos  return (*this);
    270   1.1  christos }
    271   1.1  christos 
    272   1.1  christos 
    273   1.1  christos A1 A1::operator=(const A1& second)
    274   1.1  christos {
    275   1.1  christos 
    276   1.1  christos  x = second.x;
    277   1.1  christos  y = second.y;
    278   1.1  christos 
    279   1.1  christos  return (*this);
    280   1.1  christos }
    281   1.1  christos 
    282   1.1  christos A1 A1::operator+=(int value)
    283   1.1  christos {
    284   1.1  christos 
    285   1.1  christos  x += value;
    286   1.1  christos  y += value;
    287   1.1  christos 
    288   1.1  christos  return (*this);
    289   1.1  christos }
    290   1.1  christos 
    291   1.1  christos ostream& operator<<(ostream& outs, A1 one)
    292   1.1  christos {
    293   1.1  christos  return (outs << endl << "x = " << one.x << endl << "y = " << one.y << endl << "-------" << endl);
    294   1.1  christos }
    295   1.1  christos 
    296   1.1  christos class A2 {
    297   1.1  christos   public:
    298   1.1  christos A2 operator+();
    299   1.1  christos };
    300   1.1  christos 
    301   1.1  christos A2 A2::operator+()
    302   1.1  christos {
    303   1.1  christos   return A2 ();
    304   1.1  christos }
    305   1.1  christos 
    306   1.1  christos class Member
    307   1.1  christos {
    308   1.1  christos public:
    309   1.1  christos   int z;
    310  1.12  christos 
    311  1.12  christos   int operator() ();
    312  1.12  christos   int operator() (int);
    313   1.1  christos };
    314   1.1  christos 
    315  1.12  christos int Member::operator() ()
    316  1.12  christos {
    317  1.12  christos   return z;
    318  1.12  christos }
    319  1.12  christos 
    320  1.12  christos int Member::operator() (int value)
    321  1.12  christos {
    322  1.12  christos   return value * z;
    323  1.12  christos }
    324  1.12  christos 
    325   1.1  christos bool operator== (const Member &m1, const Member &m2)
    326   1.1  christos {
    327   1.1  christos   return m1.z == m2.z;
    328   1.1  christos }
    329   1.1  christos 
    330   1.1  christos class Container
    331   1.1  christos {
    332   1.1  christos public:
    333   1.1  christos   Member m;
    334   1.1  christos 
    335   1.1  christos   Member& operator* ();
    336   1.1  christos };
    337   1.1  christos 
    338   1.1  christos Member& Container::operator* ()
    339   1.1  christos {
    340   1.1  christos   return this->m;
    341   1.1  christos }
    342   1.1  christos 
    343   1.1  christos int main (void)
    344   1.1  christos {
    345   1.1  christos  A1 one(2,3);
    346   1.1  christos  A1 two(4,5);
    347   1.1  christos  A1 three(0,0);
    348   1.1  christos  Container c;
    349   1.1  christos  Member mem1, mem2;
    350   1.1  christos  int val;
    351  1.12  christos  Member Container::* mptr = &Container::m;
    352   1.1  christos 
    353   1.1  christos  mem1.z = 5;
    354   1.1  christos  mem2.z = 7;
    355  1.12  christos  c.m.z = 8;
    356   1.1  christos 
    357   1.1  christos  marker1(); // marker1-returns-here
    358   1.1  christos  cout << one; // marker1-returns-here
    359   1.1  christos  cout << two;
    360   1.1  christos  three = one + two;
    361   1.1  christos  cout << "+ " <<  three;
    362   1.1  christos  three = one - two;
    363   1.1  christos  cout <<  "- " << three;
    364   1.1  christos  three = one * two;
    365   1.1  christos  cout <<"* " <<  three;
    366   1.1  christos  three = one / two;
    367   1.1  christos  cout << "/ " << three;
    368   1.1  christos  three = one % two;
    369   1.1  christos  cout << "% " << three;
    370   1.1  christos  three = one | two;
    371   1.1  christos  cout << "| " <<three;
    372   1.1  christos  three = one ^ two;
    373   1.1  christos  cout << "^ " <<three;
    374   1.1  christos  three = one & two;
    375   1.1  christos  cout << "& "<< three;
    376   1.1  christos 
    377   1.1  christos  val = one && two;
    378   1.1  christos  cout << "&& " << val << endl << "-----"<<endl;
    379   1.1  christos  val = one || two;
    380   1.1  christos  cout << "|| " << val << endl << "-----"<<endl;
    381   1.1  christos  val = one == two;
    382   1.1  christos  cout << " == " << val << endl << "-----"<<endl;
    383   1.1  christos  val = one != two;
    384   1.1  christos  cout << "!= " << val << endl << "-----"<<endl;
    385   1.1  christos  val = one >= two;
    386   1.1  christos  cout << ">= " << val << endl << "-----"<<endl;
    387   1.1  christos  val = one <= two;
    388   1.1  christos  cout << "<= " << val << endl << "-----"<<endl;
    389   1.1  christos  val = one < two;
    390   1.1  christos  cout << "< " << val << endl << "-----"<<endl;
    391   1.1  christos  val = one > two;
    392   1.1  christos  cout << "> " << val << endl << "-----"<<endl;
    393   1.1  christos 
    394   1.1  christos  three = one << 2;
    395   1.1  christos  cout << "lsh " << three;
    396   1.1  christos  three = one >> 2;
    397   1.1  christos  cout << "rsh " << three;
    398   1.1  christos 
    399   1.1  christos  three = one;
    400   1.1  christos  cout << " = "<< three;
    401   1.1  christos  three += 5;
    402   1.1  christos  cout << " += "<< three;
    403   1.1  christos 
    404   1.1  christos  val = (!one);
    405   1.1  christos  cout << "! " << val << endl << "-----"<<endl;
    406   1.1  christos  three = (+one);
    407   1.1  christos  cout << "+ " << three;
    408   1.1  christos  three = (-one);
    409   1.1  christos  cout << "- " << three;
    410   1.1  christos  three = (~one);
    411   1.1  christos  cout << " ~" << three;
    412   1.1  christos  three++;
    413   1.1  christos  cout << "postinc " << three;
    414   1.1  christos  three--;
    415   1.1  christos  cout << "postdec " << three;
    416   1.1  christos 
    417   1.1  christos  --three;
    418   1.1  christos  cout << "predec " << three;
    419   1.1  christos  ++three;
    420   1.1  christos  cout << "preinc " << three;
    421   1.1  christos 
    422  1.12  christos  val = mem1 ();
    423  1.12  christos  cout << "funcall " << val << endl;
    424  1.12  christos  val = mem1 (10);
    425  1.12  christos  cout << "funcall 2 " << val << endl;
    426  1.12  christos  val = (c.*mptr) (11);
    427  1.12  christos  cout << "funcall 3 " << val << endl;
    428  1.12  christos 
    429   1.1  christos  (*c).z = 1;
    430   1.1  christos 
    431   1.1  christos  return 0;
    432   1.1  christos 
    433   1.1  christos }
    434