From 59c7ea31e1c8ced6ebf9174ca6ea226322068366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Tue, 4 Jul 2017 08:43:21 +0200 Subject: [PATCH] Handle string literals in macro definition --- src/libclang/libclang_parser.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/libclang/libclang_parser.cpp b/src/libclang/libclang_parser.cpp index aa25b1e..c2c3e65 100644 --- a/src/libclang/libclang_parser.cpp +++ b/src/libclang/libclang_parser.cpp @@ -231,8 +231,15 @@ libclang_compile_config::libclang_compile_config(const libclang_compilation_data if (flag == "-I") add_flag(std::move(flag) + get_full_path(dir, args)); else if (flag == "-D" || flag == "-U") + { // preprocessor options - add_flag(std::move(flag) + std::move(args)); + for (auto c : args) + if (c == '"') + flag += "\\\""; + else + flag += c; + add_flag(std::move(flag)); + } else if (flag == "-std") // standard add_flag(std::move(flag) + "=" + std::move(args)); @@ -294,7 +301,16 @@ void libclang_compile_config::do_add_macro_definition(std::string name, std::str { auto str = "-D" + std::move(name); if (!definition.empty()) - str += "=" + std::move(definition); + { + str += "="; + for (auto c : definition) + { + if (c == '"') + str += "\\\""; + else + str += c; + } + } add_flag(std::move(str)); }