summaryrefslogtreecommitdiff
path: root/fluid
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2006-09-24 19:24:12 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2006-09-24 19:24:12 +0000
commit174c006fd527f02fe5ec4b5121aa88847e503052 (patch)
tree04c41511f69a7d373f497e18442721505710e06b /fluid
parentad40154ca3130e6b4731f57294b6caa4f59b782d (diff)
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
Diffstat (limited to 'fluid')
-rw-r--r--fluid/Fl_Widget_Type.cxx24
1 files changed, 18 insertions, 6 deletions
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;
+ }
}
}