diff options
| author | Bill Spitzak <spitzak@gmail.com> | 2000-02-05 09:20:46 +0000 |
|---|---|---|
| committer | Bill Spitzak <spitzak@gmail.com> | 2000-02-05 09:20:46 +0000 |
| commit | 7482800177743f80d790e74e0baea49192eb6be4 (patch) | |
| tree | 2ba6b205d520c4da6d07adade22ba14150c7277b | |
| parent | 1e5596293b39e64adcffe45a0bb4b6fcd4a1df13 (diff) | |
Produces correct destructor for nested classes, patch from Alexandr Shevtsow
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.0@999 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | fluid/Fl_Function_Type.cxx | 13 | ||||
| -rw-r--r-- | fluid/Fl_Menu_Type.cxx | 16 | ||||
| -rw-r--r-- | fluid/Fl_Type.h | 6 | ||||
| -rw-r--r-- | fluid/Fl_Widget_Type.cxx | 18 |
4 files changed, 27 insertions, 26 deletions
diff --git a/fluid/Fl_Function_Type.cxx b/fluid/Fl_Function_Type.cxx index a3225a076..290f7389b 100644 --- a/fluid/Fl_Function_Type.cxx +++ b/fluid/Fl_Function_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Function_Type.cxx,v 1.15.2.11 2000/01/05 03:17:26 bill Exp $" +// "$Id: Fl_Function_Type.cxx,v 1.15.2.12 2000/02/05 09:20:44 bill Exp $" // // C function type code for the Fast Light Tool Kit (FLTK). // @@ -216,7 +216,7 @@ void Fl_Function_Type::write_code1() { } else rtype = "void"; } - const char* k = class_name(); + const char* k = class_name(0); if (k) { write_public(public_); if (name()[0] == '~') @@ -468,7 +468,7 @@ void Fl_Decl_Type::write_code1() { // lose all trailing semicolons so I can add one: const char* e = c+strlen(c); while (e>c && e[-1]==';') e--; - if (class_name()) { + if (class_name(1)) { write_public(public_); write_h(" %.*s;\n", e-c, c); } else { @@ -554,13 +554,14 @@ void Fl_DeclBlock_Type::write_code2() { //////////////////////////////////////////////////////////////// -const char* Fl_Type::class_name() const { +const char* Fl_Type::class_name(const int need_nest) const { Fl_Type* p = parent; while (p) { if (p->is_class()) { // see if we are nested in another class, we must fully-qualify name: // this is lame but works... - const char* q = p->class_name(); + const char* q = 0; + if(need_nest) q=p->class_name(need_nest); if (q) { static char buffer[256]; if (q != buffer) strcpy(buffer, q); @@ -664,5 +665,5 @@ void Fl_Class_Type::write_code2() { } // -// End of "$Id: Fl_Function_Type.cxx,v 1.15.2.11 2000/01/05 03:17:26 bill Exp $". +// End of "$Id: Fl_Function_Type.cxx,v 1.15.2.12 2000/02/05 09:20:44 bill Exp $". // diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx index fe71853ac..cdf4c4946 100644 --- a/fluid/Fl_Menu_Type.cxx +++ b/fluid/Fl_Menu_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Menu_Type.cxx,v 1.16.2.4 1999/08/09 13:53:54 mike Exp $" +// "$Id: Fl_Menu_Type.cxx,v 1.16.2.5 2000/02/05 09:20:45 bill Exp $" // // Menu item code for the Fast Light Tool Kit (FLTK). // @@ -132,7 +132,7 @@ void Fl_Menu_Item_Type::write_static() { while (*d && !is_id(*d)) d++; } const char* cn = callback_name(); - const char* k = class_name(); + const char* k = class_name(1); if (k) { write_c("\ninline void %s::%s_i(Fl_Menu_*", k, cn); } else { @@ -163,7 +163,7 @@ void Fl_Menu_Item_Type::write_static() { // okay, when we hit last item in the menu we have to write the // entire array out: int level; - const char* k = class_name(); + const char* k = class_name(1); if (k) { write_c("\nFl_Menu_Item %s::%s[] = {\n", k, menu_name(level)); } else @@ -216,7 +216,7 @@ void Fl_Menu_Item_Type::write_item() { else write_c(", 0, "); if (callback()) { - const char* k = is_name(callback()) ? 0 : class_name(); + const char* k = is_name(callback()) ? 0 : class_name(1); if (k) { write_c(" (Fl_Callback*)%s::%s,", k, callback_name()); } else { @@ -237,7 +237,7 @@ void Fl_Menu_Item_Type::write_code1() { int i; const char* name = menu_name(i); if (!prev->is_menu_item()) { // for first menu item, declare the array - if (class_name()) + if (class_name(1)) write_h(" static Fl_Menu_Item %s[];\n", name); else write_h("extern Fl_Menu_Item %s[];\n", name); @@ -245,7 +245,7 @@ void Fl_Menu_Item_Type::write_code1() { const char *c = array_name(this); if (c) { - if (class_name()) { + if (class_name(1)) { write_public(public_); write_h(" static Fl_Menu_Item *%s;\n", c); } else @@ -253,7 +253,7 @@ void Fl_Menu_Item_Type::write_code1() { } if (callback()) { - if (!is_name(callback()) && class_name()) { + if (!is_name(callback()) && class_name(1)) { const char* cn = callback_name(); const char* ut = user_data_type() ? user_data_type() : "void*"; write_public(0); @@ -439,5 +439,5 @@ void shortcut_in_cb(Shortcut_Button* i, void* v) { } // -// End of "$Id: Fl_Menu_Type.cxx,v 1.16.2.4 1999/08/09 13:53:54 mike Exp $". +// End of "$Id: Fl_Menu_Type.cxx,v 1.16.2.5 2000/02/05 09:20:45 bill Exp $". // diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h index ca3df08b1..1aa63951f 100644 --- a/fluid/Fl_Type.h +++ b/fluid/Fl_Type.h @@ -1,5 +1,5 @@ // -// "$Id: Fl_Type.h,v 1.5.2.5 1999/09/10 16:40:17 bill Exp $" +// "$Id: Fl_Type.h,v 1.5.2.6 2000/02/05 09:20:46 bill Exp $" // // Widget type header file for the Fast Light Tool Kit (FLTK). // @@ -123,7 +123,7 @@ public: virtual int is_decl_block() const; virtual int is_class() const; - const char* class_name() const; + const char* class_name(const int need_nest) const; }; class Fl_Function_Type : public Fl_Type { @@ -528,5 +528,5 @@ int storestring(const char *n, const char * & p, int nostrip=0); extern int include_H_from_C; // -// End of "$Id: Fl_Type.h,v 1.5.2.5 1999/09/10 16:40:17 bill Exp $". +// End of "$Id: Fl_Type.h,v 1.5.2.6 2000/02/05 09:20:46 bill Exp $". // diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index 121f1a222..128b2ca6f 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Widget_Type.cxx,v 1.15.2.8 1999/12/17 18:34:56 bill Exp $" +// "$Id: Fl_Widget_Type.cxx,v 1.15.2.9 2000/02/05 09:20:46 bill Exp $" // // Widget type code for the Fast Light Tool Kit (FLTK). // @@ -1198,9 +1198,9 @@ const char *array_name(Fl_Widget_Type *o) { int sawthis = 0; Fl_Type *t = o->prev; Fl_Type *tp = o; - const char *cn = o->class_name(); - for (; t && t->class_name() == cn; tp = t, t = t->prev); - for (t = tp; t && t->class_name() == cn; t = t->next) { + const char *cn = o->class_name(1); + for (; t && t->class_name(1) == cn; tp = t, t = t->prev); + for (t = tp; t && t->class_name(1) == cn; t = t->next) { if (t == o) {sawthis=1; continue;} const char *e = t->name(); if (!e) continue; @@ -1234,7 +1234,7 @@ void Fl_Widget_Type::write_static() { write_declare("extern void %s(%s*, %s);", callback(), t, user_data_type() ? user_data_type() : "void*"); const char* c = array_name(this); - const char* k = class_name(); + const char* k = class_name(1); if (c && !k) { write_c("\n"); if (!public_) write_c("static "); @@ -1293,12 +1293,12 @@ void Fl_Widget_Type::write_code1() { const char* t = subclassname(this); const char *c = array_name(this); if (c) { - if (class_name()) { + if (class_name(1)) { write_public(public_); write_h(" %s *%s;\n", t, c); } } - if (class_name() && callback() && !is_name(callback())) { + if (class_name(1) && callback() && !is_name(callback())) { const char* cn = callback_name(); const char* ut = user_data_type() ? user_data_type() : "void*"; write_public(0); @@ -1399,7 +1399,7 @@ void Fl_Widget_Type::write_widget_code() { if (c != fc) write_c("%so->textcolor(%d);\n",indent(), c); }} const char* ud = user_data(); - if (class_name() && !parent->is_widget()) ud = "this"; + if (class_name(1) && !parent->is_widget()) ud = "this"; if (callback()) { write_c("%so->callback((Fl_Callback*)%s", indent(), callback_name()); if (ud) @@ -1746,5 +1746,5 @@ int Fl_Widget_Type::read_fdesign(const char* name, const char* value) { } // -// End of "$Id: Fl_Widget_Type.cxx,v 1.15.2.8 1999/12/17 18:34:56 bill Exp $". +// End of "$Id: Fl_Widget_Type.cxx,v 1.15.2.9 2000/02/05 09:20:46 bill Exp $". // |
