From 21454cb18220e26e79adcadf0d45b53b88a8ef09 Mon Sep 17 00:00:00 2001 From: Tishj Date: Sat, 17 Dec 2022 13:48:08 +0100 Subject: [PATCH] store system pragmas, prepend them to the rest of the file content --- src/parse/CppFileMerger.ts | 5 +++++ src/parse/CppFileParser.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/parse/CppFileMerger.ts b/src/parse/CppFileMerger.ts index 72b3722..7673b39 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 d50190e..df75c8b 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);