diff --git a/src/parse/CppFileMerger.ts b/src/parse/CppFileMerger.ts index 505337c..45331a3 100644 --- a/src/parse/CppFileMerger.ts +++ b/src/parse/CppFileMerger.ts @@ -31,8 +31,13 @@ export default class CppFileMerger { .sort((a, b) => a.localeCompare(b)) .map(file => `#include <${file}>`) .join(EOL); + const systemPragmas = Array.from(this.parser.getSystemPragmas()) + .sort((a, b) => a.localeCompare(b)) + .map(setting => `#pragma ${setting}`) + .join(EOL); const finalContent = [ + systemPragmas, systemIncludesContent, content, sourceFilesContent diff --git a/src/parse/CppFileParser.ts b/src/parse/CppFileParser.ts index 896d7e6..965b3cd 100644 --- a/src/parse/CppFileParser.ts +++ b/src/parse/CppFileParser.ts @@ -11,6 +11,12 @@ export default class CppFileParser { private static readonly localIncludeRegExp = /^#include "([^"]+)"/; private static readonly systemIncludeRegExp = /^#include <([^>]+)>/; private static readonly pragmaOnceRegExp = /^#pragma once/; + private static readonly pragmaRegExp = /^#pragma (.+)/; + private systemPragmas = new Set(); + + public getSystemPragmas(): Set { + return this.systemPragmas; + } public parse(fileContent: string): ParseResult { const fileLines = fileContent.split(EOL); @@ -26,6 +32,12 @@ export default class CppFileParser { continue; } + const systemPragma = CppFileParser.pragmaRegExp.exec(line)?.[1]; + if (systemPragma) { + this.systemPragmas.add(systemPragma); + continue; + } + const systemInclude = CppFileParser.systemIncludeRegExp.exec(line)?.[1]; if (systemInclude) { systemIncludes.add(systemInclude);