Bladeren bron

LibCpp: Add option in Preprocessor to keep #include's in processed text

Itamar 4 jaren geleden
bovenliggende
commit
0522a4360b
2 gewijzigde bestanden met toevoegingen van 12 en 1 verwijderingen
  1. 10 1
      Userland/Libraries/LibCpp/Preprocessor.cpp
  2. 2 0
      Userland/Libraries/LibCpp/Preprocessor.h

+ 10 - 1
Userland/Libraries/LibCpp/Preprocessor.cpp

@@ -22,11 +22,20 @@ const String& Preprocessor::process()
 {
     for (; m_line_index < m_lines.size(); ++m_line_index) {
         auto& line = m_lines[m_line_index];
+
+        bool include_in_processed_text = false;
         if (line.starts_with("#")) {
-            handle_preprocessor_line(line);
+            auto keyword = handle_preprocessor_line(line);
+            if (m_options.keep_include_statements && keyword == "include")
+                include_in_processed_text = true;
         } else if (m_state == State::Normal) {
+            include_in_processed_text = true;
+        }
+
+        if (include_in_processed_text) {
             m_builder.append(line);
         }
+
         m_builder.append("\n");
     }
 

+ 2 - 0
Userland/Libraries/LibCpp/Preprocessor.h

@@ -33,6 +33,7 @@ public:
     const Definitions& definitions() const { return m_definitions; }
 
     void set_ignore_unsupported_keywords(bool ignore) { m_options.ignore_unsupported_keywords = ignore; }
+    void set_keep_include_statements(bool keep) { m_options.keep_include_statements = keep; }
 
 private:
     using PreprocessorKeyword = StringView;
@@ -61,6 +62,7 @@ private:
 
     struct Options {
         bool ignore_unsupported_keywords { false };
+        bool keep_include_statements { false };
     } m_options;
 };
 }