上一版只在 lineno==0 时用 CurArg 兜底;实测该报错的节点自带行号且恰好等于当前函数定义行 (节点其实是 FunctionDef 本身,构造器内联路径把它传了下来),于是兜底没触发,错误位置与 栈帧都在定义行、被去重合并,看起来只剩一帧。 现把“节点位置不可信”判据放宽为:lineno==0,**或** lineno 等于最内层栈帧的行号(即函数 定义行)→ 两条都优先用 CurArg,报错精确指向调用处的实参表达式(如 `&_on_submit`)。
上一版只在 lineno==0 时用 CurArg 兜底;实测该报错的节点自带行号且恰好等于当前函数定义行 (节点其实是 FunctionDef 本身,构造器内联路径把它传了下来),于是兜底没触发,错误位置与 栈帧都在定义行、被去重合并,看起来只剩一帧。 现把“节点位置不可信”判据放宽为:lineno==0,**或** lineno 等于最内层栈帧的行号(即函数 定义行)→ 两条都优先用 CurArg,报错精确指向调用处的实参表达式(如 `&_on_submit`)。