From ed8175dab556e968e3e5e46674f8f3feb5483cfc Mon Sep 17 00:00:00 2001 From: Zeex Date: Sat, 29 Mar 2014 17:41:24 +0700 Subject: [PATCH] Revert "Don't generate automatic include guards" This reverts commit 05e34102d4949a7992f836db13085a85dea7c82c. Conflicts: source/compiler/sc2.c --- source/compiler/sc2.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/source/compiler/sc2.c b/source/compiler/sc2.c index 5abad0c..45fcb70 100644 --- a/source/compiler/sc2.c +++ b/source/compiler/sc2.c @@ -231,6 +231,8 @@ static void check_empty(const unsigned char *lptr) static void doinclude(int silent) { char name[_MAX_PATH]; + char symname[sNAMEMAX]; + char *ptr; char c; int i, result; @@ -260,9 +262,27 @@ static void doinclude(int silent) if (c!='\0') check_empty(lptr+1); /* verify that the rest of the line is whitespace */ - result=plungefile(name,(c!='>'),TRUE); - if (!result && !silent) - error(100,name); /* cannot read from ... (fatal error) */ + /* create a symbol from the name of the include file; this allows the system + * to test for multiple inclusions + */ + strcpy(symname,"_inc_"); + if ((ptr=strrchr(name,DIRSEP_CHAR))!=NULL) + strlcat(symname,ptr+1,sizeof symname); + else + strlcat(symname,name,sizeof symname); + if (find_symbol(&glbtab,symname,fcurrent,-1,NULL)==NULL) { + /* constant is not present, so this file has not been included yet */ + + /* Include files between "..." or without quotes are read from the current + * directory, or from a list of "include directories". Include files + * between <...> are only read from the list of include directories. + */ + result=plungefile(name,(c!='>'),TRUE); + if (result) + add_constant(symname,1,sGLOBAL,0); + else if (!silent) + error(100,name); /* cannot read from ... (fatal error) */ + } /* if */ } /* readline