From b08ce880822875d4bef103719179501d6ba38730 Mon Sep 17 00:00:00 2001 From: seyko Date: Tue, 21 Apr 2015 15:46:29 +0300 Subject: [PATCH] "#pragma once" implementation --- tccpp.c | 4 +++- tcctok.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tccpp.c b/tccpp.c index 4d9430d1..b26dbeec 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1478,6 +1478,8 @@ static void pragma_parse(TCCState *s1) } next(); skip(')'); + } else if (tok == TOK_once) { + add_cached_include(s1, file->filename, TOK_once); } else { tcc_warning("unknown #pragma %s", get_tok_str(tok, &tokc)); } @@ -1618,7 +1620,7 @@ ST_FUNC void preprocess(int is_bof) } e = search_cached_include(s1, buf1); - if (e && define_find(e->ifndef_macro)) { + if (e && (define_find(e->ifndef_macro) || e->ifndef_macro == TOK_once)) { /* no need to parse the include because the 'ifndef macro' is defined */ #ifdef INC_DEBUG diff --git a/tcctok.h b/tcctok.h index ace81dcb..3de3ae2d 100644 --- a/tcctok.h +++ b/tcctok.h @@ -157,6 +157,7 @@ DEF(TOK_lib, "lib") DEF(TOK_push_macro, "push_macro") DEF(TOK_pop_macro, "pop_macro") + DEF(TOK_once, "once") /* builtin functions or variables */ #ifndef TCC_ARM_EABI -- 2.11.4.GIT