可用的回归测试通过的标准版本

This commit is contained in:
2026-06-18 00:39:43 +08:00
parent bffb0cb6b7
commit e02c867edf
365 changed files with 22562 additions and 24532 deletions

View File

@@ -65,12 +65,12 @@ class ForHandle(BaseHandle):
return
if not isinstance(EndVal.type, ir.IntType):
if isinstance(EndVal.type, ir.PointerType) and isinstance(EndVal.type.pointee, ir.IntType):
EndVal = Gen._load(EndVal, name="load_end")
EndVal = Gen._load(EndVal, name="Load_end")
else:
EndVal = Gen.builder.ptrtoint(EndVal, ir.IntType(64), name="end")
if StartVal and not isinstance(StartVal.type, ir.IntType):
if isinstance(StartVal.type, ir.PointerType) and isinstance(StartVal.type.pointee, ir.IntType):
StartVal = Gen._load(StartVal, name="load_start")
StartVal = Gen._load(StartVal, name="Load_start")
else:
StartVal = Gen.builder.ptrtoint(StartVal, ir.IntType(64), name="start")
else:
@@ -111,7 +111,7 @@ class ForHandle(BaseHandle):
if isinstance(LoopVar.type, ir.PointerType) and isinstance(LoopVar.type.pointee, ir.IntType) and LoopVar.type.pointee == EndVal.type and isinstance(EndVal.type, ir.IntType) and StartVal.type == LoopVar.type.pointee and EndVal.type == StartVal.type:
Gen._store(StartVal, LoopVar)
else:
NewVar = Gen._alloca_entry(EndVal.type, name=TargetName)
NewVar = Gen._allocaEntry(EndVal.type, name=TargetName)
if StartVal.type != EndVal.type:
if isinstance(EndVal.type, ir.IntType) and isinstance(StartVal.type, ir.IntType):
if StartVal.type.width < EndVal.type.width:
@@ -122,7 +122,7 @@ class ForHandle(BaseHandle):
Gen.variables[TargetName] = NewVar
LoopVar = NewVar
else:
LoopVar = Gen._alloca_entry(EndVal.type, name=TargetName)
LoopVar = Gen._allocaEntry(EndVal.type, name=TargetName)
Gen.variables[TargetName] = LoopVar
Gen._store(StartVal, LoopVar)
if StepVal and isinstance(StepVal.type, ir.IntType) and isinstance(EndVal.type, ir.IntType):
@@ -186,7 +186,7 @@ class ForHandle(BaseHandle):
for name in Node.names:
if name in Gen._reg_values and name not in Gen.variables:
OldVal = Gen._reg_values[name]
var = Gen._alloca_entry(OldVal.type, name=name)
var = Gen._allocaEntry(OldVal.type, name=name)
Gen._store(OldVal, var)
Gen.variables[name] = var
del Gen._reg_values[name]
@@ -275,7 +275,7 @@ class ForHandle(BaseHandle):
extra_params.append((var_name, var.type))
elif var_name in Gen._reg_values:
OldVal = Gen._reg_values[var_name]
var = Gen._alloca_entry(OldVal.type, name=var_name)
var = Gen._allocaEntry(OldVal.type, name=var_name)
Gen._store(OldVal, var)
Gen.variables[var_name] = var
del Gen._reg_values[var_name]
@@ -292,7 +292,7 @@ class ForHandle(BaseHandle):
Gen.variables[var_name] = found_var
extra_params.append((var_name, found_var.type))
else:
var = Gen._alloca_entry(ir.IntType(32), name=var_name)
var = Gen._allocaEntry(ir.IntType(32), name=var_name)
Gen.variables[var_name] = var
extra_params.append((var_name, var.type))
if extra_params:
@@ -334,11 +334,11 @@ class ForHandle(BaseHandle):
TargetName = Node.target.id
ElemType = ArrPtr.type.pointee.element
ArrayCount = ArrPtr.type.pointee.count
IdxVal = Gen._alloca_entry(ir.IntType(32), name=f"arr_idx")
IdxVal = Gen._allocaEntry(ir.IntType(32), name=f"arr_idx")
Gen.builder.store(ir.Constant(ir.IntType(32), 0), IdxVal)
if TargetName in Gen._reg_values:
del Gen._reg_values[TargetName]
LoopVar = Gen._alloca_entry(ElemType, name=TargetName)
LoopVar = Gen._allocaEntry(ElemType, name=TargetName)
Gen.variables[TargetName] = LoopVar
Gen._store(ir.Constant(ElemType, None), LoopVar)
CondBB = Gen.func.append_basic_block(name="arrfor.cond")
@@ -383,13 +383,13 @@ class ForHandle(BaseHandle):
if not isinstance(Node.target, ast.Name):
return
TargetName = Node.target.id
Gen._unregister_temp_ptr(StrVal)
Gen._UnregisterTempPtr(StrVal)
PtrVal = Gen.builder.alloca(ir.IntType(8).as_pointer(), name=f"str_ptr_copy")
Gen.builder.store(StrVal, PtrVal)
CharType = ir.IntType(8)
if TargetName in Gen._reg_values:
del Gen._reg_values[TargetName]
LoopVar = Gen._alloca_entry(CharType, name=TargetName)
LoopVar = Gen._allocaEntry(CharType, name=TargetName)
Gen.variables[TargetName] = LoopVar
Gen._store(ir.Constant(CharType, 0), LoopVar)
CondBB = Gen.func.append_basic_block(name="strfor.cond")
@@ -436,21 +436,21 @@ class ForHandle(BaseHandle):
IterVal = self.HandleExprLlvm(Node.iter)
if not IterVal:
return
Gen._unregister_temp_ptr(IterVal)
Gen._UnregisterTempPtr(IterVal)
if isinstance(IterVal.type, ir.PointerType) and isinstance(IterVal.type.pointee, ir.IntType) and IterVal.type.pointee.width == 8:
IterVal = Gen.builder.bitcast(IterVal, ir.PointerType(Gen.structs[ClassName]), name=f"cast_{ClassName}")
IterCall = Gen._get_function(f'{ClassName}.__iter__')
IterResult = Gen.builder.call(IterCall, [IterVal], name=f"call_{ClassName}.__iter__")
Gen._unregister_temp_ptr(IterResult)
Gen._UnregisterTempPtr(IterResult)
if isinstance(IterResult.type, ir.PointerType) and isinstance(IterResult.type.pointee, ir.IntType) and IterResult.type.pointee.width == 8:
IterResult = Gen.builder.bitcast(IterResult, ir.PointerType(Gen.structs[ClassName]), name=f"cast_iter_{ClassName}")
NextCall = Gen._get_function(f'{ClassName}.__next__')
StopFlagPtr = Gen._alloca_entry(ir.IntType(1), name="stop_iter_flag")
StopFlagPtr = Gen._allocaEntry(ir.IntType(1), name="stop_iter_flag")
Gen.builder.store(ir.Constant(ir.IntType(1), 0), StopFlagPtr)
NextReturnType = NextCall.function_type.return_type
if TargetName in Gen._reg_values:
del Gen._reg_values[TargetName]
LoopVar = Gen._alloca_entry(NextReturnType, name=TargetName)
LoopVar = Gen._allocaEntry(NextReturnType, name=TargetName)
Gen.variables[TargetName] = LoopVar
CondBB = Gen.func.append_basic_block(name="iter.cond")
BodyBB = Gen.func.append_basic_block(name="iter.body")
@@ -469,7 +469,7 @@ class ForHandle(BaseHandle):
and isinstance(last_param_type.pointee, ir.PointerType)
and isinstance(last_param_type.pointee.pointee, ir.IntType)
and last_param_type.pointee.pointee.width == 8):
null_msg = Gen._alloca_entry(ir.PointerType(ir.IntType(8)), name="eh_msg_out_null")
null_msg = Gen._allocaEntry(ir.PointerType(ir.IntType(8)), name="eh_msg_out_null")
NextCallArgs.append(null_msg)
NextVal = Gen.builder.call(NextCall, NextCallArgs, name=f"call_{ClassName}.__next__")
StopFlag = Gen.builder.load(StopFlagPtr, name="stop_flag")