import t import stdio import testcheck import stdlib import memhub from conflict_node import Value # ============================================================ # 关键冲突点:全局变量名 'Value' 与类名 'Value' 相同 # # LlvmGenerator 预处理扫描会将 'Value' 注册为 IsVariable=True # 覆盖 SymbolTable 中的类条目。 # 之后 _get_or_create_struct('Value') 发现 IsVariable=True, # 返回 _TypedPointerType 而非 IdentifiedStructType, # 导致 _TryLoadStructFromStub 中 set_body 被跳过。 # ============================================================ Value: t.CPtr = None def test_value_struct_fields(): """验证 Value struct 有 6 个字段(Next + 5 自有)""" testcheck.section("Value struct field access (6 fields expected)") arena: bytes = stdlib.malloc(4096) if arena is None: testcheck.check(False, "malloc arena", "FAIL") return pool: memhub.MemBuddy | t.CPtr = memhub.MemBuddy(arena, 4096) node: Value | t.CPtr = pool.alloc(48) if node is None: testcheck.check(False, "alloc Value", "FAIL") return # 写入字段 0 (Next, 继承自 GSListNode) node.Next = None # 写入字段 1-5 (自有字段) node.Ty = None node.Name = None node.IsConst = 1 node.IntVal = 42 node.FloatVal = 3.14 # 读取验证 v: t.CInt = node.IntVal testcheck.check(v == 42, "Value.IntVal = 42", "expect 42") f: t.CDouble = node.FloatVal testcheck.check(f > 3.0 and f < 4.0, "Value.FloatVal = 3.14", "expect ~3.14") c: t.CInt = node.IsConst testcheck.check(c == 1, "Value.IsConst = 1", "expect 1") def main() -> t.CInt: testcheck.begin("G7: Minimal repro - class name 'Value' conflicts with variable") test_value_struct_fields() return testcheck.end()