From 174c006fd527f02fe5ec4b5121aa88847e503052 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sun, 24 Sep 2006 19:24:12 +0000 Subject: Update "o" variable detection code to handle more cases (STR #1429) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5487 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- fluid/Fl_Widget_Type.cxx | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'fluid') diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index 8d936830e..68ea38bd9 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -1985,12 +1985,24 @@ void Fl_Widget_Type::write_code1() { if (!varused) { for (int n=0; n < NUM_EXTRA_CODE; n++) - if (extra_code(n) && !isdeclare(extra_code(n)) && - (ptr = strstr(extra_code(n), "o->")) != NULL && - (ptr == extra_code(n) || - (!isalnum(ptr[-1] & 255) && ptr[-1] != '_'))) { - varused = 1; - break; + if (extra_code(n) && !isdeclare(extra_code(n))) + { + int instring = 0; + int inname = 0; + for (ptr = extra_code(n); *ptr; ptr ++) + if (instring) { + if (*ptr == '\\') ptr++; + else if (*ptr == '\"') instring = 0; + } else if (inname && !isalnum(*ptr & 255)) inname = 0; + else if (*ptr == '\"') instring = 1; + else if (!strncmp(ptr, "o->", 3) || !strncmp(ptr, "o)", 2) || + !strncmp(ptr, "o,", 2) || !strncmp(ptr, "o ", 2)) break; + else if (isalnum(*ptr & 255)) inname = 1; + + if (*ptr) { + varused = 1; + break; + } } } -- cgit v1.2.3