From f5544eed800bed6a78f40719125988ba95a83b91 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 7 Oct 2026 19:02:56 +0800 Subject: [PATCH] =?UTF-8?q?chore(syntax):=20DefineTest/FormatStringTest=20?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=88=B0=20cif/defined()=20=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DefineTest 的条件编译用例(基础/elif-else/cifdef-cifndef/平台宏/嵌套/表达式/跨模块/守卫)全部改写为 cif-celif-celse + defined();FormatStringTest 的 isptr 判断由 c.CIf 改为 cif;README 同步新语法口径。 --- DefineTest/App/main.vp | 198 ++++++++++++++++++----------------- FormatStringTest/App/main.vp | 4 +- README.md | 2 +- 3 files changed, 103 insertions(+), 101 deletions(-) diff --git a/DefineTest/App/main.vp b/DefineTest/App/main.vp index a6a12f3..553a2ed 100644 --- a/DefineTest/App/main.vp +++ b/DefineTest/App/main.vp @@ -8,7 +8,7 @@ import testcheck # ============================================================ -# DefineTest: CDefine constants/macros, c.CIf family, platmacro. +# DefineTest: CDefine constants/macros, cif/celif/celse chains, defined(), platmacro. # Prints results for manual inspection. # ============================================================ @@ -140,127 +140,129 @@ def test_define_combined() -> CInt: def test_cif_basic() -> CInt: - if c.CIf(ENABLED): + cif ENABLED: print(1) - else: + celse: print(0) - if c.CIf(DISABLED): + cif DISABLED: print(0) - else: + celse: print(1) - if c.CIf(MAX_SIZE > 512): + cif MAX_SIZE > 512: print(1) - else: + celse: print(0) - if c.CIf(MIN_VAL > 0): + cif MIN_VAL > 0: print(0) - else: + celse: print(1) return 0 def test_cif_elif_else() -> CInt: - val: CInt32T = 2 - if c.CIf(val == 1): + # A cif chain can only be pruned at compile time, so the chain selector must be a CDefine + # constant (a runtime variable is rejected). + define VAL = 2 + cif VAL == 1: print(1) - elif c.CIf(val == 2): + celif VAL == 2: print(2) - elif c.CIf(val == 3): + celif VAL == 3: print(3) - else: + celse: print(0) - if c.CIf(val > 10): + cif VAL > 10: print(10) - elif c.CIf(val > 5): + celif VAL > 5: print(5) - else: - print(val) + celse: + print(VAL) return 0 def test_cifdef_cifndef() -> CInt: - if c.CIfdef(MAX_SIZE): + cif defined(MAX_SIZE): print(MAX_SIZE) - else: + celse: print(0) - if c.CIfdef(UNDEFINED_MACRO_XYZ): + cif defined(UNDEFINED_MACRO_XYZ): print(0) - else: + celse: print(1) - if c.CIfndef(UNDEFINED_MACRO_XYZ): + cif not defined(UNDEFINED_MACRO_XYZ): print(1) - else: + celse: print(0) - if c.CIfndef(MAX_SIZE): + cif not defined(MAX_SIZE): print(0) - else: + celse: print(1) return 0 def test_cif_platform() -> CInt: - if c.CIfdef(_WIN32): + cif defined(_WIN32): print(1) - else: + celse: print(0) - if c.CIfdef(__x86_64__): + cif defined(__x86_64__): print(1) - else: + celse: print(0) - if c.CIf(SIZEOF_VOID_P == 8): + cif SIZEOF_VOID_P == 8: print(8) - elif c.CIf(SIZEOF_VOID_P == 4): + celif SIZEOF_VOID_P == 4: print(4) - else: + celse: print(0) return 0 def test_cif_nested() -> CInt: - if c.CIf(ENABLED): - if c.CIf(MAX_SIZE > 512): + cif ENABLED: + cif MAX_SIZE > 512: print(1) - else: + celse: print(0) - if c.CIfdef(PAGE_SIZE): + cif defined(PAGE_SIZE): print(PAGE_SIZE) - else: + celse: print(0) - else: + celse: print(0) return 0 def test_cif_expr() -> CInt: - if c.CIf(MASK_BYTE & 0x0F): + cif MASK_BYTE & 0x0F: print(1) - else: + celse: print(0) - if c.CIf((MAX_SIZE >> SHIFT_BITS) > 0): + cif (MAX_SIZE >> SHIFT_BITS) > 0: print(1) - else: + celse: print(0) - if c.CIf(ENABLED and MAX_SIZE > 0): + cif ENABLED and MAX_SIZE > 0: print(1) - else: + celse: print(0) - if c.CIf(DISABLED or MAX_SIZE > 0): + cif DISABLED or MAX_SIZE > 0: print(1) - else: + celse: print(0) return 0 def test_platmacro_platform() -> CInt: - if c.CIfdef(platmacro.IS_WINDOWS): + cif defined(platmacro.IS_WINDOWS): print(1) - else: + celse: print(0) - if c.CIf(platmacro.IS_WINDOWS == 1): + cif platmacro.IS_WINDOWS == 1: print(1) - else: + celse: print(0) - if c.CIf(platmacro.IS_LINUX == 0): + cif platmacro.IS_LINUX == 0: print(1) - else: + celse: print(0) - if c.CIf(platmacro.IS_X86_64 == 1): + cif platmacro.IS_X86_64 == 1: print(1) - else: + celse: print(0) return 0 @@ -274,32 +276,32 @@ def test_platmacro_sizes() -> CInt: return 0 def test_platmacro_endian() -> CInt: - if c.CIf(platmacro.IS_LITTLE_ENDIAN == 1): + cif platmacro.IS_LITTLE_ENDIAN == 1: print(1) - else: + celse: print(0) - if c.CIf(platmacro.IS_BIG_ENDIAN == 0): + cif platmacro.IS_BIG_ENDIAN == 0: print(1) - else: + celse: print(0) - if c.CIf(platmacro.BYTE_ORDER_LE == 1): + cif platmacro.BYTE_ORDER_LE == 1: print(1) - else: + celse: print(0) return 0 def test_platmacro_features() -> CInt: - if c.CIf(platmacro.HAS_SSE2 == 1): + cif platmacro.HAS_SSE2 == 1: print(1) - else: + celse: print(0) - if c.CIf(platmacro.HAS_AVX == 1): + cif platmacro.HAS_AVX == 1: print(1) - else: + celse: print(0) - if c.CIf(platmacro.HAS_NEON == 0): + cif platmacro.HAS_NEON == 0: print(1) - else: + celse: print(0) return 0 @@ -307,72 +309,72 @@ def test_platmacro_align() -> CInt: print(platmacro.ALIGNOF_INT) print(platmacro.ALIGNOF_PTR) print(platmacro.ALIGNOF_DOUBLE) - if c.CIf(platmacro.ALIGNOF_PTR == 8): + cif platmacro.ALIGNOF_PTR == 8: print(1) - else: + celse: print(0) return 0 def test_cifdef_cross_module() -> CInt: - if c.CIfdef(platmacro.IS_WINDOWS): - if c.CIf(platmacro.PTR_SIZE == 8): + cif defined(platmacro.IS_WINDOWS): + cif platmacro.PTR_SIZE == 8: print(64) - else: + celse: print(32) - else: + celse: print(0) - if c.CIfndef(platmacro.IS_ARM64): + cif not defined(platmacro.IS_ARM64): print(1) - else: + celse: print(0) - if c.CIfdef(platmacro.HAS_AVX2): + cif defined(platmacro.HAS_AVX2): print(1) - else: + celse: print(0) return 0 def test_cifdef_guard() -> CInt: define MY_HEADER_GUARD = 1 - if c.CIfndef(MY_HEADER_GUARD): + cif not defined(MY_HEADER_GUARD): print(0) - else: + celse: print(1) - if c.CIfdef(MY_HEADER_GUARD): + cif defined(MY_HEADER_GUARD): print(1) - else: + celse: print(0) return 0 def test_cifdef_undefined() -> CInt: - if c.CIfndef(NONEXISTENT_MACRO_ABC): + cif not defined(NONEXISTENT_MACRO_ABC): print(1) - else: + celse: print(0) - if c.CIfndef(THIS_IS_ALSO_NOT_DEFINED): + cif not defined(THIS_IS_ALSO_NOT_DEFINED): print(1) - else: + celse: print(0) - if c.CIfdef(NONEXISTENT_MACRO_ABC): + cif defined(NONEXISTENT_MACRO_ABC): print(0) - else: + celse: print(1) return 0 def test_cifdef_complex() -> CInt: - if c.CIfdef(platmacro.IS_WINDOWS) and c.CIf(platmacro.PTR_SIZE == 8): + cif defined(platmacro.IS_WINDOWS) and platmacro.PTR_SIZE == 8: print(1) - else: + celse: print(0) - if c.CIfndef(platmacro.IS_ARM64) and c.CIf(platmacro.IS_X86_64 == 1): + cif not defined(platmacro.IS_ARM64) and platmacro.IS_X86_64 == 1: print(1) - else: + celse: print(0) - if c.CIfdef(platmacro.HAS_SSE2): - if c.CIfdef(platmacro.HAS_AVX): + cif defined(platmacro.HAS_SSE2): + cif defined(platmacro.HAS_AVX): print(2) - else: + celse: print(1) - else: + celse: print(0) return 0 @@ -381,7 +383,7 @@ def main() -> int: w32.win32console.SetConsoleCP(65001) w32.win32console.SetConsoleOutputCP(65001) - testcheck.begin("DefineTest: CDefine 宏与 c.CIf 测试") + testcheck.begin("DefineTest: CDefine 宏与 cif 测试") testcheck.section("CDefine 基础") test_basic_define() @@ -394,7 +396,7 @@ def main() -> int: test_define_string() test_define_combined() - testcheck.section("c.CIf") + testcheck.section("cif / celif / celse") test_cif_basic() test_cif_elif_else() test_cifdef_cifndef() @@ -409,7 +411,7 @@ def main() -> int: test_platmacro_features() test_platmacro_align() - testcheck.section("c.CIfdef 综合") + testcheck.section("defined() 综合") test_cifdef_cross_module() test_cifdef_guard() test_cifdef_undefined() diff --git a/FormatStringTest/App/main.vp b/FormatStringTest/App/main.vp index d0a1cb6..0e843c9 100644 --- a/FormatStringTest/App/main.vp +++ b/FormatStringTest/App/main.vp @@ -37,9 +37,9 @@ export def main() -> int: # &s is i8** (char**); implicit pointer casts require matching depth, so annotate str*. ptr_var: str* = &s val_var: int = 42 - if c.CIf(ctraits.isptr(ptr_var)): + cif ctraits.isptr(ptr_var): print("ptr_var is pointer") - if c.CIf(not ctraits.isptr(val_var)): + cif not ctraits.isptr(val_var): print("val_var is not pointer") testcheck.section("placeholder") diff --git a/README.md b/README.md index 408d540..635b2b0 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ | 29 | [OopInheritTest](OopInheritTest/App/main.vp) | OOP 继承多态:@t.CVTable 虚方法覆盖、链式调用、运算符重载、三层继承 | 虚分派、运算符重载、链式调用 | | 30 | [MemhubTest](MemhubTest/App/main.vp) | MemManager 多态:基类指针虚分派 alloc/free、calloc 内部调虚函数 | 虚方法多态、继承体系 | | 31 | [EnumTest](EnumTest/App/main.vp) | 枚举:CEnum 取值 + REnum 携带数据变体,match/case 解构字段 | CEnum、REnum、match 解构 | -| 32 | [DefineTest](DefineTest/App/main.vp) | 编译期宏:CDefine 常量/宏函数、c.CIf/CIfdef/CIfndef 条件编译、platmacro 平台宏 | 编译期宏、条件编译、平台探测 | +| 32 | [DefineTest](DefineTest/App/main.vp) | 编译期宏:CDefine 常量/宏函数、`cif`/`celif`/`celse` 条件编译(`defined()` 谓词)、platmacro 平台宏 | 编译期宏、条件编译、平台探测 | | 33 | [ClosureTest](ClosureTest/App/main.vp) | 闭包作用域:global/nonlocal 嵌套/lambda 捕获/循环变量/global 数组 | 闭包、nonlocal/global、lambda | | 34 | [ClosureTest2](ClosureTest2/App/main.vp) | 闭包进阶:nonlocal 条件分支/多变量 swap/引用 vs 值捕获/三层嵌套/结构体修改 | 引用捕获语义、多层级 nonlocal | | 35 | [G3](G3/App/main.vp) | GSListNode F-bounded 泛型继承:`class Node(GSListNode[Node])` 链遍历求和 | 递归泛型/自引用特化 |