refactor(stmt): 还原 translate_with 直接属性访问(TPC 联合转换修复后)
TPC 6a67203 修复了联合类型转换 (X | t.CPtr)(arg) 后属性访问被丢弃的编译损坏,
9f7333b 引入的中间变量 workaround(call_ce/nm_cfn/ovn)不再需要,
还原为直接 ((ast.Call | t.CPtr)(ce)).func 等写法。
This commit is contained in:
1 parent
9f7333b0f2
commit
1f4b231134
1 file changed
+3
-9
@@ -261,10 +261,7 @@ class StmtGenMixin:
|
||||
cls_name: str = None
|
||||
ce: ast.AST | t.CPtr = item.context_expr
|
||||
if ce.kind() == ast.ASTKind.Call:
|
||||
# 注意:联合类型转换后必须经中间变量再取属性(直接
|
||||
# ((ast.Call|CPtr)(ce)).func 会被 TPC 编译损坏丢弃属性访问)
|
||||
call_ce: ast.Call | t.CPtr = (ast.Call | t.CPtr)(ce)
|
||||
cfn: ast.AST | t.CPtr = call_ce.func
|
||||
cfn: ast.AST | t.CPtr = ((ast.Call | t.CPtr)(ce)).func
|
||||
if cfn is not None:
|
||||
if cfn.kind() == ast.ASTKind.Attribute:
|
||||
ca: ast.Attribute | t.CPtr = (ast.Attribute | t.CPtr)(cfn)
|
||||
@@ -279,8 +276,7 @@ class StmtGenMixin:
|
||||
if cls_name is None:
|
||||
cls_name = ca.attr
|
||||
elif cfn.kind() == ast.ASTKind.Name:
|
||||
nm_cfn: ast.Name | t.CPtr = (ast.Name | t.CPtr)(cfn)
|
||||
cls_name = nm_cfn.id
|
||||
cls_name = ((ast.Name | t.CPtr)(cfn)).id
|
||||
# context 对象存入 __with_ctx(方法调用解析 self 用)
|
||||
ctx_alloca: llvmlite.Value | t.CPtr = llvmlite.build_alloca(
|
||||
builder, ctx_val.Ty)
|
||||
@@ -299,9 +295,7 @@ class StmtGenMixin:
|
||||
if item.optional_vars is not None:
|
||||
ov: ast.AST | t.CPtr = item.optional_vars
|
||||
if ov.kind() == ast.ASTKind.Name:
|
||||
# 联合类型转换后经中间变量再取属性(同 L264 注释,防 TPC 编译损坏)
|
||||
ovn: ast.Name | t.CPtr = (ast.Name | t.CPtr)(ov)
|
||||
asname: str = ovn.id
|
||||
asname: str = ((ast.Name | t.CPtr)(ov)).id
|
||||
if asname is not None:
|
||||
bind_val: llvmlite.Value | t.CPtr = enter_val
|
||||
if bind_val is None:
|
||||
|
||||
Reference in new issue
Block a user