@@ -1706,7 +1706,7 @@ static void strict_ansi_3()
17061706 "#endif";
17071707 simplecpp::DUI dui;
17081708 dui.std = "c99";
1709- dui.undefined.insert ("__STRICT_ANSI__");
1709+ dui.defines.emplace_back ("__STRICT_ANSI__", simplecpp::Define::Undef );
17101710 ASSERT_EQUALS("", preprocess(code, dui));
17111711}
17121712
@@ -1717,7 +1717,7 @@ static void strict_ansi_4()
17171717 "#endif";
17181718 simplecpp::DUI dui;
17191719 dui.std = "gnu99";
1720- dui.defines.push_back ("__STRICT_ANSI__");
1720+ dui.defines.emplace_back ("__STRICT_ANSI__");
17211721 ASSERT_EQUALS("\nA", preprocess(code, dui));
17221722}
17231723
@@ -1764,7 +1764,7 @@ static void ifA()
17641764 ASSERT_EQUALS("", preprocess(code));
17651765
17661766 simplecpp::DUI dui;
1767- dui.defines.push_back ("A=1");
1767+ dui.defines.emplace_back ("A=1");
17681768 ASSERT_EQUALS("\nX", preprocess(code, dui));
17691769}
17701770
@@ -1783,7 +1783,7 @@ static void ifDefined()
17831783 "#endif";
17841784 simplecpp::DUI dui;
17851785 ASSERT_EQUALS("", preprocess(code, dui));
1786- dui.defines.push_back ("A=1");
1786+ dui.defines.emplace_back ("A=1");
17871787 ASSERT_EQUALS("\nX", preprocess(code, dui));
17881788}
17891789
@@ -1794,7 +1794,7 @@ static void ifDefinedNoPar()
17941794 "#endif";
17951795 simplecpp::DUI dui;
17961796 ASSERT_EQUALS("", preprocess(code, dui));
1797- dui.defines.push_back ("A=1");
1797+ dui.defines.emplace_back ("A=1");
17981798 ASSERT_EQUALS("\nX", preprocess(code, dui));
17991799}
18001800
@@ -1806,7 +1806,7 @@ static void ifDefinedNested()
18061806 "#endif";
18071807 simplecpp::DUI dui;
18081808 ASSERT_EQUALS("", preprocess(code, dui));
1809- dui.defines.push_back ("FOO=1");
1809+ dui.defines.emplace_back ("FOO=1");
18101810 ASSERT_EQUALS("\n\nX", preprocess(code, dui));
18111811}
18121812
@@ -1818,7 +1818,7 @@ static void ifDefinedNestedNoPar()
18181818 "#endif";
18191819 simplecpp::DUI dui;
18201820 ASSERT_EQUALS("", preprocess(code, dui));
1821- dui.defines.push_back ("FOO=1");
1821+ dui.defines.emplace_back ("FOO=1");
18221822 ASSERT_EQUALS("\n\nX", preprocess(code, dui));
18231823}
18241824
@@ -1871,10 +1871,10 @@ static void ifLogical()
18711871 simplecpp::DUI dui;
18721872 ASSERT_EQUALS("", preprocess(code, dui));
18731873 dui.defines.clear();
1874- dui.defines.push_back ("A=1");
1874+ dui.defines.emplace_back ("A=1");
18751875 ASSERT_EQUALS("\nX", preprocess(code, dui));
18761876 dui.defines.clear();
1877- dui.defines.push_back ("B=1");
1877+ dui.defines.emplace_back ("B=1");
18781878 ASSERT_EQUALS("\nX", preprocess(code, dui));
18791879}
18801880
@@ -2768,7 +2768,7 @@ static void userdef()
27682768{
27692769 const char code[] = "#ifdef A\n123\n#endif\n";
27702770 simplecpp::DUI dui;
2771- dui.defines.push_back ("A=1");
2771+ dui.defines.emplace_back ("A=1");
27722772 ASSERT_EQUALS("\n123", preprocess(code, dui));
27732773}
27742774
@@ -3246,6 +3246,54 @@ static void safe_api()
32463246#endif
32473247}
32483248
3249+ static void define_parse()
3250+ {
3251+ {
3252+ const simplecpp::Define define = simplecpp::Define::parse("-DDEF");
3253+ ASSERT_EQUALS("DEF", define.name);
3254+ ASSERT_EQUALS("", define.value);
3255+ ASSERT_EQUALS(false, define.undef);
3256+ }
3257+ {
3258+ const simplecpp::Define define = simplecpp::Define::parse("-DDEF=1");
3259+ ASSERT_EQUALS("DEF", define.name);
3260+ ASSERT_EQUALS("1", define.value);
3261+ ASSERT_EQUALS(false, define.undef);
3262+ }
3263+ {
3264+ const simplecpp::Define define = simplecpp::Define::parse("-UDEF");
3265+ ASSERT_EQUALS("DEF", define.name);
3266+ ASSERT_EQUALS("", define.value);
3267+ ASSERT_EQUALS(true, define.undef);
3268+ }
3269+
3270+ {
3271+ const simplecpp::Define define = simplecpp::Define::parse("DEF", false);
3272+ ASSERT_EQUALS("DEF", define.name);
3273+ ASSERT_EQUALS("", define.value);
3274+ ASSERT_EQUALS(false, define.undef);
3275+ }
3276+ {
3277+ const simplecpp::Define define = simplecpp::Define::parse("DEF=1", false);
3278+ ASSERT_EQUALS("DEF", define.name);
3279+ ASSERT_EQUALS("1", define.value);
3280+ ASSERT_EQUALS(false, define.undef);
3281+ }
3282+ {
3283+ const simplecpp::Define define = simplecpp::Define::parse("-D__has_builtin(x)=(1)", true);
3284+ ASSERT_EQUALS("__has_builtin(x)", define.name);
3285+ ASSERT_EQUALS("(1)", define.value);
3286+ ASSERT_EQUALS(false, define.undef);
3287+ }
3288+ {
3289+ const simplecpp::Define define = simplecpp::Define::parse("__has_builtin(x)=(1)", false);
3290+ ASSERT_EQUALS("__has_builtin(x)", define.name);
3291+ ASSERT_EQUALS("(1)", define.value);
3292+ ASSERT_EQUALS(false, define.undef);
3293+ }
3294+ // -UDEF=0
3295+ }
3296+
32493297static void fuzz_crash()
32503298{
32513299 {
@@ -3514,6 +3562,8 @@ int main(int argc, char **argv)
35143562
35153563 TEST_CASE(safe_api);
35163564
3565+ TEST_CASE(define_parse);
3566+
35173567 TEST_CASE(fuzz_crash);
35183568
35193569 return numberOfFailedAssertions > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
0 commit comments