refactor(pproc): 重构预处理器条件编译逻辑
- 提取条件判断逻辑到独立函数 scc_pproc_parse_if_need_skip - 使用辅助函数 in_if, in_elif, in_else, in_endif 简化条件处理 - 添加宏 __SCC_PPROC_LOG_PNT 统一错误和警告处理逻辑 - 增加嵌套条件测试用例验证非活动状态下的正确行为
This commit is contained in:
@@ -417,6 +417,50 @@ static void test_simple_number_conditional_if(void) {
|
||||
" foo\n bar\n");
|
||||
}
|
||||
|
||||
static void test_conditional_nested_inactive(void) {
|
||||
TEST_CASE("nested conditional when outer inactive");
|
||||
CHECK_PP_OUTPUT_EXACT("#ifdef NOT_DEFINED\n"
|
||||
"#if 1\n"
|
||||
"should not appear\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"after\n",
|
||||
"after\n");
|
||||
CHECK_PP_OUTPUT_EXACT("#define A\n"
|
||||
"#ifdef A\n"
|
||||
" #ifdef B\n"
|
||||
" B defined\n"
|
||||
" #else\n"
|
||||
" B not defined\n"
|
||||
" #endif\n"
|
||||
"#else\n"
|
||||
" A not defined\n"
|
||||
"#endif\n",
|
||||
" B not defined\n");
|
||||
CHECK_PP_OUTPUT_EXACT("#undef A\n"
|
||||
"#ifdef A\n"
|
||||
" #ifdef B\n"
|
||||
" B defined\n"
|
||||
" #else\n"
|
||||
" B not defined\n"
|
||||
" #endif\n"
|
||||
"#else\n"
|
||||
" A not defined\n"
|
||||
"#endif\n",
|
||||
" A not defined\n");
|
||||
CHECK_PP_OUTPUT_EXACT("#if 0\n"
|
||||
"#ifdef X\n"
|
||||
"X defined\n"
|
||||
"#elifdef Y\n"
|
||||
"Y defined\n"
|
||||
"#else\n"
|
||||
"none\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"end\n",
|
||||
"end\n");
|
||||
}
|
||||
|
||||
static void test_variadic_macros(void) {
|
||||
TEST_CASE("variadic macros with __VA_ARGS__");
|
||||
|
||||
@@ -560,6 +604,7 @@ TEST_LIST = {
|
||||
TEST_LIST_CASE(hard_test_define_func_macros),
|
||||
TEST_LIST_CASE(test_conditional_ifdef),
|
||||
TEST_LIST_CASE(test_simple_number_conditional_if),
|
||||
TEST_LIST_CASE(test_conditional_nested_inactive),
|
||||
TEST_LIST_CASE(test_variadic_macros),
|
||||
TEST_LIST_CASE(test_gnu_comma_variadic_deletion),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user