fix(gen): willFree 形参表访问先转 Arguments*,修复 TPC 侧 MemberLookupFailFast
FunctionDef.args 的字段静态类型是 AST*,直接写 fn.args.args 会在 AST 类上查 args(class_members=7 不含 args)。改为先 ast.Arguments*(fn.args) 再取 .args 列表,与 VpiReader / FuncGenMixin / ClassGenVTable 等既有写法一致。
This commit is contained in:
1 parent
97313e9e55
commit
d921dcd9e7
1 file changed
+8
-2
@@ -377,10 +377,16 @@ def _WillFreeArgIndex(fn: ast.FunctionDef*, arg: ast.AST*) -> int:
|
||||
if arg is None:
|
||||
fatal_error(arg, "@willFree(...) requires a parameter name or its 0-based position", "LifetimeError")
|
||||
return -1
|
||||
if fn.args is None or fn.args.args is None:
|
||||
# FunctionDef.args 的字段静态类型是 AST*(见 includes/ast/stmts.vp),必须先转成 Arguments*
|
||||
# 才能再取 .args 列表;直接写 fn.args.args 会去 AST 类查 'args' 触发 MemberLookupFailFast。
|
||||
if fn.args is None:
|
||||
fatal_error(arg, "@willFree(...) cannot be used here: the definition has no parameter list", "LifetimeError")
|
||||
return -1
|
||||
pl: list[ast.AST*]* = fn.args.args
|
||||
fargs: ast.Arguments* = ast.Arguments*(fn.args)
|
||||
if fargs is None or fargs.args is None:
|
||||
fatal_error(arg, "@willFree(...) cannot be used here: the definition has no parameter list", "LifetimeError")
|
||||
return -1
|
||||
pl: list[ast.AST*]* = fargs.args
|
||||
pn: sizet = len(pl)
|
||||
if arg.kind() == ast.ASTKind.Name:
|
||||
nma: ast.Name* = ast.Name*(arg)
|
||||
|
||||
Reference in new issue
Block a user