2018-02-09 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.brendan / ptolemy2.C
blob669bd7914218abdb3d144a23e3004b9011e42364
1 // { dg-do run  }
2 // GROUPS passed ptolemy-bugs
3 #include <iostream>
5 class PTcl {
6 public:
7         int dispatcher(int which,int argc,char** argv);
8         // fns in the table
9         int one(int argc, char** argv);
10         int two(int argc, char** argv);
11         int three(int argc, char** argv);
14 // An InterpFuncP is a pointer to an PTcl function that takes an argc-argv
15 // argument list and returns TCL_OK or TCL_ERROR.
17 typedef int (PTcl::*InterpFuncP)(int,char**);
19 struct InterpTableEntry {
20         const char* name;
21         InterpFuncP func;
24 // Here is the function table and dispatcher function.
25 // These macros define entries for the table
27 #define quote(x) #x
28 #define ENTRY(verb) { quote(verb), &PTcl::verb }
30 static InterpTableEntry funcTable[] = {
31         ENTRY(one),
32         ENTRY(two),
33         ENTRY(three),
34         {0, 0}
37 int PTcl::dispatcher(int which, int argc, char** argv) {
38         return (this->*(funcTable[which].func))(argc, argv);
41 void printargs(char** argv) {
42 //      while (*argv) {
43 //              cout << " " << *argv++;
44 //      }
45 //      cout << "\n";
48 int PTcl::one(int, char** argv) {
49   std::cout << "FAIL\n";
50         printargs(argv);
51         return 1;
54 int PTcl::two(int, char** argv) {
55   std::cout << "PASS\n";
56         printargs(argv);
57         return 0;
60 int PTcl::three(int, char** argv) {
61   std::cout << "FAIL\n";
62         printargs(argv);
63         return 1;
66 int main (int argc, char** argv) {
67         PTcl obj;
68         return obj.dispatcher(1,argc,argv);