Revert "Implement INCLUDE_ONCE directive (#1481)"

This reverts commit 5f07095f6d.
This commit is contained in:
Rangi42
2024-09-08 11:30:31 -04:00
parent 5f07095f6d
commit 8cd0e66297
8 changed files with 8 additions and 62 deletions

View File

@@ -6,11 +6,9 @@
#include <errno.h>
#include <inttypes.h>
#include <memory>
#include <set>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <utility>
#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<std::string> includePaths = {""};
static std::string preIncludeName;
static std::set<std::pair<dev_t, ino_t>> includedFiles;
std::string const &FileStackNode::dump(uint32_t curLineNo) const {
if (data.holds<std::vector<uint32_t>>()) {
@@ -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<std::string> 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<dev_t, ino_t> 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);
}

View File

@@ -256,7 +256,6 @@ static std::unordered_map<std::string, int, CaseInsensitive, CaseInsensitive> 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) },

View File

@@ -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;
}