#include_next support (Bernhard Fischer)

This commit is contained in:
bellard 2005-04-10 22:18:53 +00:00
parent 9825011ced
commit 8f2d519203
2 changed files with 14 additions and 4 deletions

13
tcc.c
View File

@ -2731,6 +2731,7 @@ static void preprocess(int is_bof)
define_undef(s);
break;
case TOK_INCLUDE:
case TOK_INCLUDE_NEXT:
ch = file->buf_ptr[0];
/* XXX: incorrect if comments : use next_nomacro with a special mode */
skip_spaces();
@ -2807,9 +2808,13 @@ static void preprocess(int is_bof)
buf1[size] = '\0';
pstrcat(buf1, sizeof(buf1), buf);
f = tcc_open(s1, buf1);
if (f)
if (f) {
if (tok == TOK_INCLUDE_NEXT)
tok = TOK_INCLUDE;
else
goto found;
}
}
if (s1->include_stack_ptr >= s1->include_stack + INCLUDE_STACK_SIZE)
error("#include recursion too deep");
/* now search in all the include paths */
@ -2824,9 +2829,13 @@ static void preprocess(int is_bof)
pstrcat(buf1, sizeof(buf1), "/");
pstrcat(buf1, sizeof(buf1), buf);
f = tcc_open(s1, buf1);
if (f)
if (f) {
if (tok == TOK_INCLUDE_NEXT)
tok = TOK_INCLUDE;
else
goto found;
}
}
error("include file '%s' not found", buf);
f = NULL;
found:

View File

@ -64,6 +64,7 @@
/* preprocessor only */
DEF(TOK_DEFINE, "define")
DEF(TOK_INCLUDE, "include")
DEF(TOK_INCLUDE_NEXT, "include_next")
DEF(TOK_IFDEF, "ifdef")
DEF(TOK_IFNDEF, "ifndef")
DEF(TOK_ELIF, "elif")