From 8cd0e662977d4a0554b401c1ff237a7a75294a2f Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Sun, 8 Sep 2024 11:30:31 -0400 Subject: [PATCH] Revert "Implement `INCLUDE_ONCE` directive (#1481)" This reverts commit 5f07095f6dbe17bac516ee03936854840e2711ac. --- include/asm/fstack.hpp | 8 +------- man/rgbasm.5 | 12 +----------- src/asm/fstack.cpp | 28 ++++------------------------ src/asm/lexer.cpp | 1 - src/asm/parser.y | 12 +----------- test/asm/include-once.asm | 3 --- test/asm/include-once.inc | 1 - test/asm/test.sh | 5 +---- 8 files changed, 8 insertions(+), 62 deletions(-) delete mode 100644 test/asm/include-once.asm delete mode 100644 test/asm/include-once.inc diff --git a/include/asm/fstack.hpp b/include/asm/fstack.hpp index a85e98bc4..433652e3b 100644 --- a/include/asm/fstack.hpp +++ b/include/asm/fstack.hpp @@ -17,12 +17,6 @@ #include "asm/lexer.hpp" -enum IncludeType { - INCLUDE_NORMAL, - INCLUDE_PRE, - INCLUDE_ONCE -}; - struct FileStackNode { FileStackNodeType type; Either< @@ -70,7 +64,7 @@ void fstk_SetPreIncludeFile(std::string const &path); std::optional fstk_FindFile(std::string const &path); bool yywrap(); -void fstk_RunInclude(std::string const &path, IncludeType type); +void fstk_RunInclude(std::string const &path, bool updateStateNow); void fstk_RunMacro(std::string const ¯oName, std::shared_ptr macroArgs); void fstk_RunRept(uint32_t count, int32_t reptLineNo, ContentSpan const &span); void fstk_RunFor( diff --git a/man/rgbasm.5 b/man/rgbasm.5 index a0edd31d6..d59bbdad9 100644 --- a/man/rgbasm.5 +++ b/man/rgbasm.5 @@ -2158,17 +2158,7 @@ calls infinitely (or until you run out of memory, whichever comes first). INCLUDE "irq.inc" .Ed .Pp -You may also ensure a file only gets included once by using -.Ic INCLUDE_ONCE -instead of -.Ic INCLUDE . -This will skip including a file if it has already been included before (with -.Ic INCLUDE , -.Ic INCLUDE_ONCE , -or -.Fl P ) . -.Pp -You can implicitly +You may also implicitly .Ic INCLUDE a file before the source file with the .Fl P diff --git a/src/asm/fstack.cpp b/src/asm/fstack.cpp index b9fe272d8..551d25340 100644 --- a/src/asm/fstack.cpp +++ b/src/asm/fstack.cpp @@ -6,11 +6,9 @@ #include #include #include -#include #include #include #include -#include #include "error.hpp" #include "helpers.hpp" @@ -47,8 +45,8 @@ size_t maxRecursionDepth; // The first include path for `fstk_FindFile` to try is none at all static std::vector includePaths = {""}; + static std::string preIncludeName; -static std::set> includedFiles; std::string const &FileStackNode::dump(uint32_t curLineNo) const { if (data.holds>()) { @@ -293,11 +291,11 @@ static Context &newReptContext(int32_t reptLineNo, ContentSpan const &span, uint return context; } -void fstk_RunInclude(std::string const &path, IncludeType type) { +void fstk_RunInclude(std::string const &path, bool preInclude) { std::optional fullPath = fstk_FindFile(path); if (!fullPath) { - if (generatedMissingIncludes && type != INCLUDE_PRE) { + if (generatedMissingIncludes && !preInclude) { if (verbose) printf("Aborting (-MG) on INCLUDE file '%s' (%s)\n", path.c_str(), strerror(errno)); failedOnMissingInclude = true; @@ -307,24 +305,6 @@ void fstk_RunInclude(std::string const &path, IncludeType type) { return; } - // The pair of device ID and serial number uniquely identify a file, with `stat()` - // following symbolic links to identify the actual file. - struct stat statBuf; - if (stat(fullPath->c_str(), &statBuf) != 0) { - error("Failed to stat file '%s': %s\n", fullPath->c_str(), strerror(errno)); - return; - } - std::pair inode{statBuf.st_dev, statBuf.st_ino}; - - if (type == INCLUDE_ONCE && includedFiles.find(inode) != includedFiles.end()) { - if (verbose) { - printf("File '%s' already included, skipping INCLUDE_ONCE", path.c_str()); - } - return; - } - - includedFiles.insert(inode); - if (!newFileContext(*fullPath, false)) fatalerror("Failed to set up lexer for file include\n"); } @@ -415,5 +395,5 @@ void fstk_Init(std::string const &mainPath, size_t maxDepth) { maxRecursionDepth = maxDepth; if (!preIncludeName.empty()) - fstk_RunInclude(preIncludeName, INCLUDE_PRE); + fstk_RunInclude(preIncludeName, true); } diff --git a/src/asm/lexer.cpp b/src/asm/lexer.cpp index 69f48b55a..0ddc42a0f 100644 --- a/src/asm/lexer.cpp +++ b/src/asm/lexer.cpp @@ -256,7 +256,6 @@ static std::unordered_map ke {"INCHARMAP", T_(OP_INCHARMAP) }, {"INCLUDE", T_(POP_INCLUDE) }, - {"INCLUDE_ONCE", T_(POP_INCLUDE_ONCE) }, {"PRINT", T_(POP_PRINT) }, {"PRINTLN", T_(POP_PRINTLN) }, {"EXPORT", T_(POP_EXPORT) }, diff --git a/src/asm/parser.y b/src/asm/parser.y index 2c6dcabf9..f3d961249 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -236,7 +236,6 @@ %token POP_IF "IF" %token POP_INCBIN "INCBIN" %token POP_INCLUDE "INCLUDE" -%token POP_INCLUDE_ONCE "INCLUDE_ONCE" %token POP_LOAD "LOAD" %token POP_MACRO "MACRO" %token POP_NEWCHARMAP "NEWCHARMAP" @@ -465,7 +464,6 @@ line_directive: | for | break | include - | include_once | if // It's important that all of these require being at line start for `skipIfBlock` | elif @@ -1142,15 +1140,7 @@ export_def: include: label POP_INCLUDE string endofline { - fstk_RunInclude($3, INCLUDE_NORMAL); - if (failedOnMissingInclude) - YYACCEPT; - } -; - -include_once: - label POP_INCLUDE_ONCE string endofline { - fstk_RunInclude($3, INCLUDE_ONCE); + fstk_RunInclude($3, false); if (failedOnMissingInclude) YYACCEPT; } diff --git a/test/asm/include-once.asm b/test/asm/include-once.asm deleted file mode 100644 index db946d300..000000000 --- a/test/asm/include-once.asm +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE_ONCE "include-once.inc" -INCLUDE_ONCE "include-once.inc" -INCLUDE_ONCE "include-link.inc" diff --git a/test/asm/include-once.inc b/test/asm/include-once.inc deleted file mode 100644 index fc2da9c2b..000000000 --- a/test/asm/include-once.inc +++ /dev/null @@ -1 +0,0 @@ -DEF HELLO EQU 1 diff --git a/test/asm/test.sh b/test/asm/test.sh index b9b220a62..33edcd205 100755 --- a/test/asm/test.sh +++ b/test/asm/test.sh @@ -11,12 +11,9 @@ input="$(mktemp)" output="$(mktemp)" errput="$(mktemp)" -# Create a symbolic link for the `include-once.asm` test case. -ln include-once.inc include-link.inc - # Immediate expansion is the desired behavior. # shellcheck disable=SC2064 -trap "rm -f ${o@Q} ${gb@Q} ${input@Q} ${output@Q} ${errput@Q} include-link.inc" EXIT +trap "rm -f ${o@Q} ${gb@Q} ${input@Q} ${output@Q} ${errput@Q}" EXIT tests=0 failed=0