Browse Source

fix problem parsing quoted commas in a manifest parameter

David Rose 21 years ago
parent
commit
77f6853877
1 changed files with 33 additions and 0 deletions
  1. 33 0
      dtool/src/cppparser/cppPreprocessor.cxx

+ 33 - 0
dtool/src/cppparser/cppPreprocessor.cxx

@@ -1616,6 +1616,7 @@ extract_manifest_args(const string &name, int num_args,
       c = get();
       c = get();
     }
     }
     args.push_back(arg);
     args.push_back(arg);
+
   } else {
   } else {
     // Skip paren.
     // Skip paren.
     c = get();
     c = get();
@@ -1625,6 +1626,23 @@ extract_manifest_args(const string &name, int num_args,
         args.push_back(arg);
         args.push_back(arg);
         arg = "";
         arg = "";
 
 
+      } else if (c == '"' || c == '\'') {
+        // Quoted string or character.
+        int quote_mark = c;
+        arg += c;
+        c = get();
+        while (c != EOF && c != quote_mark && c != '\n') {
+          if (c == '\\') {
+            arg += c;
+            c = get();
+          }
+          if (c != EOF) {
+            arg += c;
+            c = get();
+          }
+        }
+        arg += c;
+
       } else if (c == '(') {
       } else if (c == '(') {
         // Nested parens.
         // Nested parens.
         int paren_level = 1;
         int paren_level = 1;
@@ -1723,6 +1741,21 @@ extract_manifest_args_inline(const string &name, int num_args,
       p++;
       p++;
     }
     }
     args.push_back(expr.substr(q, p - q));
     args.push_back(expr.substr(q, p - q));
+
+  } else if (expr[p] == '"' || expr[p] == '\'') {
+    // Quoted string or character.
+    int quote_mark = expr[p];
+    p++;
+    while (p < expr.size() && expr[p] != quote_mark && expr[p] != '\n') {
+      if (expr[p] == '\\') {
+        p++;
+      }
+      if (p < expr.size()) {
+        p++;
+      }
+    }
+    p++;
+    
   } else {
   } else {
     // Skip paren.
     // Skip paren.
     p++;
     p++;