diff options
| author | Bill Spitzak <spitzak@gmail.com> | 1999-08-05 08:01:40 +0000 |
|---|---|---|
| committer | Bill Spitzak <spitzak@gmail.com> | 1999-08-05 08:01:40 +0000 |
| commit | 16a999efd0f14f0a99fb01c4e8484ace744fd416 (patch) | |
| tree | b8fc60dab27eeb0e74bbfd075f971cb93d61334a /fluid/code.cxx | |
| parent | 243525a9036b6221408bcf7ba234d6385d3a9c60 (diff) | |
Fixed so that a public declaration like #include "Foo" is written to the
header file in the correct order, before anything written by an later
object in the fl file. It used to write the extern callback definitions
first, this would fail if they used a type that was in the header file.
This also simplified the (still messy) code by getting rid of the
write_declare() virtual function.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.0@637 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'fluid/code.cxx')
| -rw-r--r-- | fluid/code.cxx | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fluid/code.cxx b/fluid/code.cxx index f21dc7459..5d2270951 100644 --- a/fluid/code.cxx +++ b/fluid/code.cxx @@ -1,5 +1,5 @@ // -// "$Id: code.cxx,v 1.9.2.1 1999/07/31 08:00:09 bill Exp $" +// "$Id: code.cxx,v 1.9.2.2 1999/08/05 08:01:39 bill Exp $" // // Code output routines for the Fast Light Tool Kit (FLTK). // @@ -104,9 +104,9 @@ const char* indent() { //////////////////////////////////////////////////////////////// // declarations/include files: -// These are sorted in alphabetical order and only included once each: -// Relies on '#' being less than any letter to put #include first. -// I use a binary tree to sort these out. +// Each string generated by write_declare is written only once to +// the header file. This is done by keeping a binary tree of all +// the calls so far and not printing it if it is in the tree. struct included { char *text; @@ -120,7 +120,6 @@ struct included { included::~included() { delete left; - fprintf(header_file,"%s\n",text); free((void *)text); delete right; } @@ -139,6 +138,7 @@ int write_declare(const char *format, ...) { else if (i < 0) p = &((*p)->left); else p = &((*p)->right); } + fprintf(header_file,"%s\n",buf); *p = new included(buf); return 1; } @@ -278,13 +278,11 @@ int write_code(const char *s, const char *t) { fprintf(header_file, "#define %s\n", define_name); } - Fl_Type *p; - for (p = Fl_Type::first; p; p = p->next) p->write_declare(); - delete included_root; included_root = 0; + write_declare("#include <FL/Fl.H>"); if (t && include_H_from_C) write_c("#include \"%s\"\n", filename_name(t)); - for (p = Fl_Type::first; p;) { + for (Fl_Type* p = Fl_Type::first; p;) { // write all static data for this & all children first p->write_static(); for (Fl_Type* q = p->next; q && q->level > p->level; q = q->next) @@ -293,6 +291,8 @@ int write_code(const char *s, const char *t) { p = write_code(p); } + delete included_root; included_root = 0; + if (!s) return 1; int x = fclose(code_file); code_file = 0; @@ -304,7 +304,6 @@ int write_code(const char *s, const char *t) { //////////////////////////////////////////////////////////////// -void Fl_Type::write_declare() {} void Fl_Type::write_static() {} void Fl_Type::write_code1() { write_h("// Header for %s\n", title()); @@ -313,5 +312,5 @@ void Fl_Type::write_code1() { void Fl_Type::write_code2() {} // -// End of "$Id: code.cxx,v 1.9.2.1 1999/07/31 08:00:09 bill Exp $". +// End of "$Id: code.cxx,v 1.9.2.2 1999/08/05 08:01:39 bill Exp $". // |
