Initial import of TransPyV

This commit is contained in:
Viper
2026-07-19 13:18:46 +08:00
commit e7eaf3e9a1
75 changed files with 23037 additions and 0 deletions

111
Test/App/ptr_test.py Normal file
View File

@@ -0,0 +1,111 @@
import stdio
import t, c
# ============================================================
# 简单指针 + 逻辑测试
# ============================================================
def ptr_test() -> int:
# 逻辑测试if 语句
x: int = 10
if x:
stdio.printf("if: x is truthy\n")
if 1 == 1:
stdio.printf("if: 1==1 is truthy\n")
# While 循环 + 累加
i: int = 0
total: int = 0
while i < 5:
total = total + i
i = i + 1
stdio.printf("while: total=%d i=%d\n", total, i)
# For 循环
for j in range(5):
stdio.printf("for: j=%d\n", j)
# Break 测试
for k in range(10):
if k == 3:
break
stdio.printf("break: k=%d\n", k)
# Continue 测试
for m in range(5):
if m == 2:
continue
stdio.printf("continue: m=%d\n", m)
# 布尔运算 and短路求值
if x > 5 and x < 100:
stdio.printf("bool: x>5 and x<100 is true\n")
# 布尔运算 or短路求值
if x > 100 or x > 5:
stdio.printf("bool: x>100 or x>5 is true\n")
# ============================================================
# 指针 + c.Deref / c.DerefAs 测试
# ============================================================
# 字符串遍历: while c.Deref(p) != 0
s: str = "hello"
sp: str = s
slen: int = 0
while c.Deref(sp) != 0:
slen = slen + 1
sp = sp + 1
stdio.printf("ptr: len(hello)=%d\n", slen)
# c.DerefAs 写入字符(使用 c.Addr 获取栈变量地址,字符串字面量是只读的)
v: int = 65 # 'A'
px: str = c.Addr(v)
c.DerefAs(px, 88) # *px = 88
stdio.printf("ptr: after DerefAs v=%d\n", v)
# 遍历字符串并累加字符值
p2: str = "ABC"
total_ch: int = 0
while c.Deref(p2) != 0:
total_ch = total_ch + c.Deref(p2)
p2 = p2 + 1
stdio.printf("ptr: sum(A,B,C)=%d\n", total_ch)
# ============================================================
# c.Load 测试: *a = *b加载源指针的值存储到目标指针
# ============================================================
# 基本复制: v2 = v1
v1: int = 42
v2: int = 0
c.Load(c.Addr(v2), c.Addr(v1))
stdio.printf("ptr: c.Load v2=%d (expected 42)\n", v2)
if v2 != 42:
stdio.printf("[FAIL] c.Load expected 42 got %d\n", v2)
return 1
# 覆盖已有值: v3 = v4
v3: int = 100
v4: int = 200
c.Load(c.Addr(v3), c.Addr(v4))
stdio.printf("ptr: c.Load overwrite v3=%d (expected 200)\n", v3)
if v3 != 200:
stdio.printf("[FAIL] c.Load overwrite expected 200 got %d\n", v3)
return 1
# 验证源不被修改: v5 保持原值
v5: int = 999
v6: int = 0
c.Load(c.Addr(v6), c.Addr(v5))
stdio.printf("ptr: c.Load src unchanged v5=%d v6=%d (expected 999, 999)\n", v5, v6)
if v5 != 999:
stdio.printf("[FAIL] c.Load src changed v5=%d\n", v5)
return 1
if v6 != 999:
stdio.printf("[FAIL] c.Load dst expected 999 got %d\n", v6)
return 1
return 0