]> granicus.if.org Git - graphviz/commitdiff
Handle C99/m4 #line directives as well.
authorerg <devnull@localhost>
Wed, 30 Jan 2008 21:24:13 +0000 (21:24 +0000)
committererg <devnull@localhost>
Wed, 30 Jan 2008 21:24:13 +0000 (21:24 +0000)
lib/agraph/scan.l
lib/cgraph/scan.l
lib/graph/lexer.c

index bd462f9fce26455cbd2d1dc1c27df1363aa08137..e17e4936856231ea9c0ef8e322c0631115980028 100644 (file)
@@ -108,10 +108,12 @@ storeFileName (char* fname, int len)
  */
 static void ppDirective ()
 {
-    int cnt, lineno;
+    int r, cnt, lineno;
     char buf[2];
-    int r = sscanf(yytext + 1, "%d %1[\"]%n", &lineno, buf, &cnt);
+    char* s = yytext + 1;  /* skip initial # */
 
+    if (strncmp(s, "line", 4) == 0) s += 4;
+    r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt);
     if (r > 0) { /* got line number */ 
        line_num = lineno - 1;
        if (r > 1) { /* saw quote */
index a9cf107e1ca30c65626ffc532011af591a286b70..895872783acf0f38b7983741a78bef913ec1a08c 100644 (file)
@@ -104,14 +104,16 @@ storeFileName (char* fname, int len)
  */
 static void ppDirective ()
 {
-    int cnt, lineno;
+    int r, cnt, lineno;
     char buf[2];
-    int r = sscanf(yytext + 1, "%d %1[\"]%n", &lineno, buf, &cnt);
+    char* s = yytext + 1;  /* skip initial # */
 
+    if (strncmp(s, "line", 4) == 0) s += 4;
+    r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt);
     if (r > 0) { /* got line number */ 
        line_num = lineno - 1;
        if (r > 1) { /* saw quote */
-           char* p = yytext + 1 + cnt;
+           char* p = s + cnt;
            char* e = p;
            while (*e && (*e != '"')) e++; 
            if (e != p) {
index f1ba84e14de5d52ec181a04fe572ec57359a9233..79a49767a4990712410f1c309d864e72a12dad7d 100644 (file)
@@ -262,14 +262,17 @@ static char *lex_gets(void)
        if (clp[len - 1] == '\n') {     /* have physical line */
            if ((clp[0] == '#') && (curlen == 0)) {
                /* comment line or cpp line sync */
-               int cnt;
+               int r, cnt;
                char buf[2];
-               int r = sscanf(clp + 1, "%d %1[\"]%n", &Line_number, buf, &cnt);
+                char* s = clp + 1;
+
+               if (strncmp(s, "line", 4) == 0) s += 4;
+               r = sscanf(s, "%d %1[\"]%n", &Line_number, buf, &cnt);
                if (r <= 0) Line_number++;
                else { /* got line number */ 
                    Line_number--;
                    if (r > 1) { /* saw quote */
-                       char* p = clp + 1 + cnt;
+                       char* p = s + cnt;
                        char* e = p;
                        while (*e && (*e != '"')) e++; 
                        if (e != p) {