@@ -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 (" \n A" , 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 (" \n X" , 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 (" \n X" , 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 (" \n X" , 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\n X" , 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\n X" , 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 (" \n X" , preprocess (code, dui));
18761876 dui.defines .clear ();
1877- dui.defines .push_back (" B=1" );
1877+ dui.defines .emplace_back (" B=1" );
18781878 ASSERT_EQUALS (" \n X" , preprocess (code, dui));
18791879}
18801880
@@ -2768,7 +2768,7 @@ static void userdef()
27682768{
27692769 const char code[] = " #ifdef A\n 123\n #endif\n " ;
27702770 simplecpp::DUI dui;
2771- dui.defines .push_back (" A=1" );
2771+ dui.defines .emplace_back (" A=1" );
27722772 ASSERT_EQUALS (" \n 123" , preprocess (code, dui));
27732773}
27742774
@@ -3246,6 +3246,41 @@ 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+
32493284static void fuzz_crash ()
32503285{
32513286 {
@@ -3514,6 +3549,8 @@ int main(int argc, char **argv)
35143549
35153550 TEST_CASE (safe_api);
35163551
3552+ TEST_CASE (define_parse);
3553+
35173554 TEST_CASE (fuzz_crash);
35183555
35193556 return numberOfFailedAssertions > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
0 commit comments