]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Ignore number parsing errors while skipping definitions.
authorMike Pall <mike>
Sat, 17 Dec 2011 14:02:53 +0000 (15:02 +0100)
committerMike Pall <mike>
Sat, 17 Dec 2011 14:02:53 +0000 (15:02 +0100)
src/lj_cparse.c
src/lj_cparse.h

index 09b1ca06d07c087d139322d277064f725a71595d..4f562dfff2540144fb70f8ffc5f230146f3734bf 100644 (file)
@@ -187,7 +187,7 @@ static CPToken cp_integer(CPState *cp)
       break;
     cp_get(cp);
   }
-  if (lj_char_isident(cp->c))
+  if (lj_char_isident(cp->c) && !(cp->mode & CPARSE_MODE_SKIP))
     cp_errmsg(cp, cp->c, LJ_ERR_XNUMBER);
   return CTOK_INTEGER;
 }
@@ -1593,12 +1593,14 @@ static void cp_decl_func(CPState *cp, CPDecl *fdecl)
   cp_check(cp, ')');
   if (cp_opt(cp, '{')) {  /* Skip function definition. */
     int level = 1;
+    cp->mode |= CPARSE_MODE_SKIP;
     for (;;) {
       if (cp->tok == '{') level++;
       else if (cp->tok == '}' && --level == 0) break;
       else if (cp->tok == CTOK_EOF) cp_err_token(cp, '}');
       cp_next(cp);
     }
+    cp->mode &= ~CPARSE_MODE_SKIP;
     cp->tok = ';';  /* Ok for cp_decl_multi(), error in cp_decl_single(). */
   }
   info |= (fdecl->fattr & ~CTMASK_CID);
index 535bc46198690f688576761aa8b73911c2eed043..c9477003687be1a78f2788d7c84d9b6e1ca77d37 100644 (file)
@@ -23,6 +23,7 @@
 #define CPARSE_MODE_DIRECT     4       /* Accept direct declarators. */
 #define CPARSE_MODE_FIELD      8       /* Accept field width in bits, too. */
 #define CPARSE_MODE_NOIMPLICIT 16      /* Reject implicit declarations. */
+#define CPARSE_MODE_SKIP       32      /* Skip definitions, ignore errors. */
 
 typedef int CPChar;    /* C parser character. Unsigned ext. from char. */
 typedef int CPToken;   /* C parser token. */