diff options
Diffstat (limited to 'gdb/testsuite/gdb.python/py-xmethods.cc')
-rw-r--r-- | gdb/testsuite/gdb.python/py-xmethods.cc | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.python/py-xmethods.cc b/gdb/testsuite/gdb.python/py-xmethods.cc new file mode 100644 index 0000000..96637d8 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-xmethods.cc @@ -0,0 +1,170 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <iostream> + +using namespace std; + +namespace dop +{ + +class A +{ +public: + int a; + int array [10]; + virtual ~A (); + int operator+ (const A &obj); + int operator- (const A &obj); + virtual int geta (void); +}; + +A::~A () { } + +int +A::operator+ (const A &obj) +{ + cout << "From CC <A_plus_A>:" << endl; + return a + obj.a; +} + +int +A::operator- (const A &obj) +{ + cout << "From CC <A_minus_A>:" << endl; + return a - obj.a; +} + +int +A::geta (void) +{ + cout << "From CC A::geta:" << endl; + return a; +} + +class B : public A +{ +public: + virtual int geta (void); +}; + +int +B::geta (void) +{ + cout << "From CC B::geta:" << endl; + return 2 * a; +} + +typedef B Bt; + +typedef Bt Btt; + +class E : public A +{ +public: + /* This class has a member named 'a', while the base class also has a + member named 'a'. When one invokes A::geta(), A::a should be + returned and not E::a as the 'geta' method is defined on class 'A'. + This class tests this aspect of debug methods. */ + int a; +}; + +template <typename T> +class G +{ + public: + template <typename T1> + int size_diff (); + + template <int M> + int size_mul (); + + template <typename T1> + T mul(const T1 t1); + + public: + T t; +}; + +template <typename T> +template <typename T1> +int +G<T>::size_diff () +{ + cout << "From CC G<>::size_diff:" << endl; + return sizeof (T1) - sizeof (T); +} + +template <typename T> +template <int M> +int +G<T>::size_mul () +{ + cout << "From CC G<>::size_mul:" << endl; + return M * sizeof (T); +} + +template <typename T> +template <typename T1> +T +G<T>::mul (const T1 t1) +{ + cout << "From CC G<>::mul:" << endl; + return t1 * t; +} + +} // namespaxe dop + +using namespace dop; + +int main(void) +{ + A a1, a2; + a1.a = 5; + a2.a = 10; + + B b1; + b1.a = 30; + A *a_ptr = &b1; + + Bt bt; + bt.a = 40; + + Btt btt; + btt.a = -5; + + G<int> g, *g_ptr; + g.t = 5; + g_ptr = &g; + + E e; + E &e_ref = e; + E *e_ptr = &e; + e.a = 1000; + e.A::a = 100; + + int diff = g.size_diff<float> (); + int smul = g.size_mul<2> (); + int mul = g.mul (1.0); + + for (int i = 0; i < 10; i++) + { + a1.array[i] = a2.array[i] = i; + } + + return 0; /* Break here. */ +} |