VapourSynth-llvmexpr
Loading...
Searching...
No Matches
infix2postfix::Preprocessor::Impl Class Reference

Public Member Functions

 Impl (std::string source)
void addPredefinedMacro (std::string name, const std::string &value)
PreprocessResult process ()

Detailed Description

Definition at line 1752 of file Preprocessor.cpp.

Constructor & Destructor Documentation

◆ Impl()

infix2postfix::Preprocessor::Impl::Impl ( std::string source)
inlineexplicit

Definition at line 1754 of file Preprocessor.cpp.

1754: source(std::move(source)) {}

Member Function Documentation

◆ addPredefinedMacro()

void infix2postfix::Preprocessor::Impl::addPredefinedMacro ( std::string name,
const std::string & value )
inline

Definition at line 1756 of file Preprocessor.cpp.

1756 {
1757 PreprocessorTokenizer tokenizer(value);
1758 std::vector<Token> body_tokens = tokenizer.tokenize();
1759
1760 std::erase_if(body_tokens, [](const Token& t) {
1761 return t.type == TokenType::EndOfFile;
1762 });
1763
1764 preprocessor::Macro macro;
1765 macro.name = std::move(name);
1766 macro.is_function_like = false;
1767 macro.body = std::move(body_tokens);
1768
1769 macros.define(std::move(macro));
1770 }
preprocessor_detail::PreprocessorTokenizer PreprocessorTokenizer
preprocessor_detail::Token Token
TokenType type

References infix2postfix::preprocessor::Macro::name, infix2postfix::preprocessor_detail::PreprocessorTokenizer::tokenize(), and infix2postfix::Token::type.

◆ process()

PreprocessResult infix2postfix::Preprocessor::Impl::process ( )
inline

Definition at line 1772 of file Preprocessor.cpp.

1772 {
1773 output_lines.clear();
1774 line_mappings.clear();
1775 errors.clear();
1776 conditional_stack.clear();
1777 current_output_line = 1;
1778 included_libraries.clear();
1779 library_line_count = 0;
1780
1781 PreprocessorTokenizer tokenizer(source);
1782 std::vector<Token> tokens = tokenizer.tokenize();
1783
1784 processTokens(tokens);
1785
1786 if (!conditional_stack.empty()) {
1787 addError(std::format(
1788 "Unclosed @ifdef/@ifndef directive started at line {}",
1789 conditional_stack.back().start_line),
1790 tokens.empty() ? 0 : tokens.back().line);
1791 }
1792
1793 PreprocessResult result;
1794 result.success = errors.empty();
1795 result.errors = errors;
1796 result.line_map = line_mappings;
1797 result.library_line_count = library_line_count;
1798
1799 std::ostringstream oss;
1800 for (size_t i = 0; i < output_lines.size(); ++i) {
1801 oss << output_lines[i];
1802 if (i < output_lines.size() - 1) {
1803 oss << '\n';
1804 }
1805 }
1806 result.source = oss.str();
1807
1808 return result;
1809 }

References infix2postfix::PreprocessResult::errors, infix2postfix::PreprocessResult::library_line_count, infix2postfix::PreprocessResult::line_map, infix2postfix::PreprocessResult::source, infix2postfix::PreprocessResult::success, and infix2postfix::preprocessor_detail::PreprocessorTokenizer::tokenize().


The documentation for this class was generated from the following file: