@@ -1706,7 +1706,7 @@ static void strict_ansi_3() |
1706 | 1706 | "#endif"; |
1707 | 1707 | simplecpp::DUI dui; |
1708 | 1708 | dui.std = "c99"; |
1709 | | - dui.undefined.insert("__STRICT_ANSI__"); |
| 1709 | + dui.defines.emplace_back("__STRICT_ANSI__", simplecpp::Define::Undef); |
1710 | 1710 | ASSERT_EQUALS("", preprocess(code, dui)); |
1711 | 1711 | } |
1712 | 1712 |
|
@@ -1717,7 +1717,7 @@ static void strict_ansi_4() |
1717 | 1717 | "#endif"; |
1718 | 1718 | simplecpp::DUI dui; |
1719 | 1719 | dui.std = "gnu99"; |
1720 | | - dui.defines.push_back("__STRICT_ANSI__"); |
| 1720 | + dui.defines.emplace_back("__STRICT_ANSI__"); |
1721 | 1721 | ASSERT_EQUALS("\nA", preprocess(code, dui)); |
1722 | 1722 | } |
1723 | 1723 |
|
@@ -1764,7 +1764,7 @@ static void ifA() |
1764 | 1764 | ASSERT_EQUALS("", preprocess(code)); |
1765 | 1765 |
|
1766 | 1766 | simplecpp::DUI dui; |
1767 | | - dui.defines.push_back("A=1"); |
| 1767 | + dui.defines.emplace_back("A=1"); |
1768 | 1768 | ASSERT_EQUALS("\nX", preprocess(code, dui)); |
1769 | 1769 | } |
1770 | 1770 |
|
@@ -1783,7 +1783,7 @@ static void ifDefined() |
1783 | 1783 | "#endif"; |
1784 | 1784 | simplecpp::DUI dui; |
1785 | 1785 | ASSERT_EQUALS("", preprocess(code, dui)); |
1786 | | - dui.defines.push_back("A=1"); |
| 1786 | + dui.defines.emplace_back("A=1"); |
1787 | 1787 | ASSERT_EQUALS("\nX", preprocess(code, dui)); |
1788 | 1788 | } |
1789 | 1789 |
|
@@ -1794,7 +1794,7 @@ static void ifDefinedNoPar() |
1794 | 1794 | "#endif"; |
1795 | 1795 | simplecpp::DUI dui; |
1796 | 1796 | ASSERT_EQUALS("", preprocess(code, dui)); |
1797 | | - dui.defines.push_back("A=1"); |
| 1797 | + dui.defines.emplace_back("A=1"); |
1798 | 1798 | ASSERT_EQUALS("\nX", preprocess(code, dui)); |
1799 | 1799 | } |
1800 | 1800 |
|
@@ -1806,7 +1806,7 @@ static void ifDefinedNested() |
1806 | 1806 | "#endif"; |
1807 | 1807 | simplecpp::DUI dui; |
1808 | 1808 | ASSERT_EQUALS("", preprocess(code, dui)); |
1809 | | - dui.defines.push_back("FOO=1"); |
| 1809 | + dui.defines.emplace_back("FOO=1"); |
1810 | 1810 | ASSERT_EQUALS("\n\nX", preprocess(code, dui)); |
1811 | 1811 | } |
1812 | 1812 |
|
@@ -1818,7 +1818,7 @@ static void ifDefinedNestedNoPar() |
1818 | 1818 | "#endif"; |
1819 | 1819 | simplecpp::DUI dui; |
1820 | 1820 | ASSERT_EQUALS("", preprocess(code, dui)); |
1821 | | - dui.defines.push_back("FOO=1"); |
| 1821 | + dui.defines.emplace_back("FOO=1"); |
1822 | 1822 | ASSERT_EQUALS("\n\nX", preprocess(code, dui)); |
1823 | 1823 | } |
1824 | 1824 |
|
@@ -1871,10 +1871,10 @@ static void ifLogical() |
1871 | 1871 | simplecpp::DUI dui; |
1872 | 1872 | ASSERT_EQUALS("", preprocess(code, dui)); |
1873 | 1873 | dui.defines.clear(); |
1874 | | - dui.defines.push_back("A=1"); |
| 1874 | + dui.defines.emplace_back("A=1"); |
1875 | 1875 | ASSERT_EQUALS("\nX", preprocess(code, dui)); |
1876 | 1876 | dui.defines.clear(); |
1877 | | - dui.defines.push_back("B=1"); |
| 1877 | + dui.defines.emplace_back("B=1"); |
1878 | 1878 | ASSERT_EQUALS("\nX", preprocess(code, dui)); |
1879 | 1879 | } |
1880 | 1880 |
|
@@ -2768,7 +2768,7 @@ static void userdef() |
2768 | 2768 | { |
2769 | 2769 | const char code[] = "#ifdef A\n123\n#endif\n"; |
2770 | 2770 | simplecpp::DUI dui; |
2771 | | - dui.defines.push_back("A=1"); |
| 2771 | + dui.defines.emplace_back("A=1"); |
2772 | 2772 | ASSERT_EQUALS("\n123", preprocess(code, dui)); |
2773 | 2773 | } |
2774 | 2774 |
|
@@ -3246,6 +3246,54 @@ static void safe_api() |
3246 | 3246 | #endif |
3247 | 3247 | } |
3248 | 3248 |
|
| 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 | + |
3249 | 3297 | static void fuzz_crash() |
3250 | 3298 | { |
3251 | 3299 | { |
@@ -3514,6 +3562,8 @@ int main(int argc, char **argv) |
3514 | 3562 |
|
3515 | 3563 | TEST_CASE(safe_api); |
3516 | 3564 |
|
| 3565 | + TEST_CASE(define_parse); |
| 3566 | + |
3517 | 3567 | TEST_CASE(fuzz_crash); |
3518 | 3568 |
|
3519 | 3569 | return numberOfFailedAssertions > 0 ? EXIT_FAILURE : EXIT_SUCCESS; |
|