可用的回归测试通过的标准版本
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user