支持 tls 关键字,全面准备清退 t, c
This commit is contained in:
1 parent
6e17716a69
commit
3242560d02
74 files changed
+524
-576
No files matched your search
+46
-47
@@ -1,4 +1,3 @@
|
||||
import t, c
|
||||
from stdint import *
|
||||
import ast
|
||||
import mlirlite
|
||||
@@ -687,52 +686,52 @@ def _WillFreeArgIndex(fn: ast.FunctionDef*, arg: ast.AST*) -> int:
|
||||
return idx
|
||||
|
||||
|
||||
def get_param_escapes_hard(name: str) -> int:
|
||||
"""本文件函数"硬逃逸位"掩码(全局写 / 返回形参 / 传递闭包 / base 未定的字段写);0 = 无记录"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escapes_hard(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_escapes_hard_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版硬逃逸位:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escapes_hard_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
# ---- 声明式指令(@life(escape/noescape))的最终裁决掩码 ----
|
||||
# 契约表与推断表分开:调用点在所有推断/裁剪之后最后套用,任何推导都不能推翻。
|
||||
def get_param_escape_force(name: str) -> int:
|
||||
"""`@life(escape(...))` 强制逃逸位掩码;0 = 无该标注"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escape_force(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_noescape_force(name: str) -> int:
|
||||
"""`@life(noescape(...))` 强制不逃逸位掩码;0 = 无该标注"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_noescape_force(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_escape_force_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版 `@life(escape(...))` 掩码:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escape_force_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_noescape_force_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版 `@life(noescape(...))` 掩码:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_noescape_force_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
# escape_leak_line - **错误路径专用**:被调者第 want_pi 号形参的"首个逃逸写入点"行号。
|
||||
# 只在 fail-fast 报错时调用(会重扫一次被调者函数体);跨模块拿不到 AST 时返回 0。
|
||||
def escape_leak_line(name: str, want_pi: int) -> int:
|
||||
"""形参 want_pi 的逃逸点行号;0 = 未知(含跨模块)"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.escape_leak_line(name, want_pi)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_escapes_hard(name: str) -> int:
|
||||
"""本文件函数"硬逃逸位"掩码(全局写 / 返回形参 / 传递闭包 / base 未定的字段写);0 = 无记录"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escapes_hard(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_escapes_hard_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版硬逃逸位:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escapes_hard_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
# ---- 声明式指令(@life(escape/noescape))的最终裁决掩码 ----
|
||||
# 契约表与推断表分开:调用点在所有推断/裁剪之后最后套用,任何推导都不能推翻。
|
||||
def get_param_escape_force(name: str) -> int:
|
||||
"""`@life(escape(...))` 强制逃逸位掩码;0 = 无该标注"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escape_force(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_noescape_force(name: str) -> int:
|
||||
"""`@life(noescape(...))` 强制不逃逸位掩码;0 = 无该标注"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_noescape_force(name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_escape_force_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版 `@life(escape(...))` 掩码:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_escape_force_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_noescape_force_method(pool: memhub.MemBuddy*, class_name: str, method_name: str) -> int:
|
||||
"""方法版 `@life(noescape(...))` 掩码:查 "Class.method" 并沿 MRO 回退"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_noescape_force_method(pool, class_name, method_name)
|
||||
return 0
|
||||
|
||||
|
||||
# escape_leak_line - **错误路径专用**:被调者第 want_pi 号形参的"首个逃逸写入点"行号。
|
||||
# 只在 fail-fast 报错时调用(会重扫一次被调者函数体);跨模块拿不到 AST 时返回 0。
|
||||
def escape_leak_line(name: str, want_pi: int) -> int:
|
||||
"""形参 want_pi 的逃逸点行号;0 = 未知(含跨模块)"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.escape_leak_line(name, want_pi)
|
||||
return 0
|
||||
|
||||
|
||||
def get_param_willfree(name: str) -> int:
|
||||
"""本文件函数的 willFree 形参掩码(第 k 位=第 k 个形参在本调用后失效);无记录返回 0"""
|
||||
if _g_gen is not None: return _g_gen.StructGen.get_param_willfree(name)
|
||||
|
||||
Reference in new issue
Block a user