Files
Viper_VRTE/ast/stmts.vp
T
TermiNexus 2992674783 feat(types): rowptr/REnum 迁移工作区快照 + GSList/PrintModule 临时 DBGCHAIN 护栏
把此前未提交的 rowptr 迁移整体入库(42 文件,含 ast/llvmlite/hashlib/json/zlib 等签名 rowptr 化)。临时诊断(用后移除):linkedlist.vp GSList[T].append 链完整性四检、__module.vp PrintModule Function.Params/param 指针野值护栏([DBGCHAIN] 前缀 + fflush + exit)。
2026-09-05 14:51:40 +08:00

1158 lines
37 KiB
Plaintext

import t, c
from stdint import *
import memhub
import string
from .base import (
AST, Stmt, ASTKind, ASTCtx, OpKind,
_init_ast, _copy_str, _set_parent_list,
_emit, _emit_str, _emit_int, _dump_list,
FLAG_IS_ASYNC, _op_name
)
# ============================================================
# Module Node
# ============================================================
@t.CVTable
class Module(AST):
"""Module(children: list[rowptr[AST]])"""
def __new__(self, pool: rowptr[memhub.MemManager]):
ptr: rowptr[Module] = pool.alloc(Module.__sizeof__())
if ptr:
string.memset(ptr, 0, Module.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager]):
_init_ast(self, pool, 0, 0)
def kind(self) -> int:
return ASTKind.Module
def type_name(self) -> str:
return "Module"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Module(body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Assign Node
# ============================================================
class Assign(Stmt):
"""Assign(targets: list[rowptr[AST]], value: AST)"""
targets: rowptr[list[rowptr[AST]]]
value: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
targets: rowptr[list[rowptr[AST]]], value: rowptr[AST]):
ptr: rowptr[Assign] = pool.alloc(Assign.__sizeof__())
if ptr:
string.memset(ptr, 0, Assign.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
targets: rowptr[list[rowptr[AST]]], value: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.targets = targets
self.value = value
_set_parent_list(targets, self)
def kind(self) -> int:
return ASTKind.Assign
def type_name(self) -> str:
return "Assign"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Assign(targets=")
pos = _dump_list(self.targets, buf, size, pos)
pos = _emit(buf, size, pos, ", value=")
if self.value is not None:
pos = self.value.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# If Node
# ============================================================
class If(Stmt):
"""If(test: AST, orelse: list[rowptr[AST]])"""
test: rowptr[AST]
orelse: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]]):
ptr: rowptr[If] = pool.alloc(If.__sizeof__())
if ptr:
string.memset(ptr, 0, If.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.test = test
self.orelse = orelse
_set_parent_list(orelse, self)
def kind(self) -> int:
return ASTKind.If
def type_name(self) -> str:
return "If"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "If(test=")
if self.test is not None:
pos = self.test.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ", orelse=")
pos = _dump_list(self.orelse, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# For Node
# ============================================================
class For(Stmt):
"""For(target: AST, iter: AST, orelse: list[rowptr[AST]], is_async: CInt)"""
target: rowptr[AST]
iter: rowptr[AST]
orelse: rowptr[list[rowptr[AST]]]
flags: int
def __new__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], iter: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]],
is_async: int):
ptr: rowptr[For] = pool.alloc(For.__sizeof__())
if ptr:
string.memset(ptr, 0, For.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], iter: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]],
is_async: int):
_init_ast(self, pool, 0, 0)
self.target = target
self.iter = iter
self.orelse = orelse
if is_async:
self.flags = FLAG_IS_ASYNC
else:
self.flags = 0
_set_parent_list(orelse, self)
def kind(self) -> int:
return ASTKind.For
def type_name(self) -> str:
return "For"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "For(target=")
if self.target is not None:
pos = self.target.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", iter=")
if self.iter is not None:
pos = self.iter.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# While Node
# ============================================================
class While(Stmt):
"""While(test: AST, orelse: list[rowptr[AST]])"""
test: rowptr[AST]
orelse: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]]):
ptr: rowptr[While] = pool.alloc(While.__sizeof__())
if ptr:
string.memset(ptr, 0, While.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST],
orelse: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.test = test
self.orelse = orelse
_set_parent_list(orelse, self)
def kind(self) -> int:
return ASTKind.While
def type_name(self) -> str:
return "While"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "While(test=")
if self.test is not None:
pos = self.test.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Return Node
# ============================================================
class Return(Stmt):
"""Return(value: AST | None)"""
value: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager], value: rowptr[AST]):
ptr: rowptr[Return] = pool.alloc(Return.__sizeof__())
if ptr:
string.memset(ptr, 0, Return.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager], value: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.value = value
def kind(self) -> int:
return ASTKind.Return
def type_name(self) -> str:
return "Return"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Return(value=")
if self.value is not None:
pos = self.value.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Expr Node (expression statement)
# ============================================================
class Expr(Stmt):
"""Expr(value: AST)"""
value: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager], value: rowptr[AST]):
ptr: rowptr[Expr] = pool.alloc(Expr.__sizeof__())
if ptr:
string.memset(ptr, 0, Expr.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager], value: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.value = value
def kind(self) -> int:
return ASTKind.Expr
def type_name(self) -> str:
return "Expr"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Expr(value=")
if self.value is not None:
pos = self.value.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# FunctionDef Node
# ============================================================
class FunctionDef(Stmt):
"""FunctionDef(name: str, args: AST,
decorator_list: list[rowptr[AST]], returns: AST, flags: CInt,
type_params: rowptr[list[str]] = None)
type_params: 泛型函数类型参数名列表(PEP 695 def f[T](...): 中的 [T]),
None 表示非泛型函数。"""
name: str
args: rowptr[AST]
decorator_list: rowptr[list[rowptr[AST]]]
returns: rowptr[AST]
flags: int
type_params: rowptr[list[str]]
def __new__(self, pool: rowptr[memhub.MemManager],
name: str, args: rowptr[AST],
decorator_list: rowptr[list[rowptr[AST]]],
returns: rowptr[AST], is_async: int):
ptr: rowptr[FunctionDef] = pool.alloc(FunctionDef.__sizeof__())
if ptr:
string.memset(ptr, 0, FunctionDef.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
name: str, args: rowptr[AST],
decorator_list: rowptr[list[rowptr[AST]]],
returns: rowptr[AST], is_async: int,
type_params: rowptr[list[str]] = None):
_init_ast(self, pool, 0, 0)
self.name = _copy_str(pool, name)
self.args = args
self.decorator_list = decorator_list
self.returns = returns
self.type_params = type_params
if is_async:
self.flags = FLAG_IS_ASYNC
else:
self.flags = 0
_set_parent_list(decorator_list, self)
def kind(self) -> int:
return ASTKind.FunctionDef
def type_name(self) -> str:
return "FunctionDef"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "FunctionDef(name='")
pos = _emit_str(buf, size, pos, self.name)
pos = _emit(buf, size, pos, "', args=")
if self.args is not None:
pos = self.args.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ", decorator_list=")
pos = _dump_list(self.decorator_list, buf, size, pos)
pos = _emit(buf, size, pos, ", returns=")
if self.returns is not None:
pos = self.returns.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Expression Node
# ============================================================
class Expression(AST):
"""Expression(body: AST)"""
body: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
body: rowptr[AST]):
ptr: rowptr[Expression] = pool.alloc(Expression.__sizeof__())
if ptr:
string.memset(ptr, 0, Expression.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
body: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.body = body
def kind(self) -> int:
return ASTKind.Expression
def type_name(self) -> str:
return "Expression"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Expression(body=")
if self.body is not None:
pos = self.body.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Interactive Node
# ============================================================
class Interactive(AST):
"""Interactive(body: AST)"""
body: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
body: rowptr[AST]):
ptr: rowptr[Interactive] = pool.alloc(Interactive.__sizeof__())
if ptr:
string.memset(ptr, 0, Interactive.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
body: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.body = body
def kind(self) -> int:
return ASTKind.Interactive
def type_name(self) -> str:
return "Interactive"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Interactive(body=")
if self.body is not None:
pos = self.body.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# FunctionType Node
# ============================================================
class FunctionType(AST):
"""FunctionType(argtypes: list[rowptr[AST]], returns: AST)"""
argtypes: rowptr[list[rowptr[AST]]]
returns: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
argtypes: rowptr[list[rowptr[AST]]],
returns: rowptr[AST]):
ptr: rowptr[FunctionType] = pool.alloc(FunctionType.__sizeof__())
if ptr:
string.memset(ptr, 0, FunctionType.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
argtypes: rowptr[list[rowptr[AST]]],
returns: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.argtypes = argtypes
self.returns = returns
def kind(self) -> int:
return ASTKind.FunctionType
def type_name(self) -> str:
return "FunctionType"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "FunctionType(argtypes=")
pos = _dump_list(self.argtypes, buf, size, pos)
pos = _emit(buf, size, pos, ", returns=")
if self.returns is not None:
pos = self.returns.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# ClassDef Node
# ============================================================
class ClassDef(Stmt):
"""ClassDef(name: str, bases: list[rowptr[AST]], keywords: list[rowptr[AST]],
decorator_list: list[rowptr[AST]], type_params: rowptr[list[str]])
type_params: 泛型类型参数名列表(PEP 695 class list[T]: 中的 [T]),
None 表示非泛型类。"""
name: str
bases: rowptr[list[rowptr[AST]]]
keywords: rowptr[list[rowptr[AST]]]
decorator_list: rowptr[list[rowptr[AST]]]
type_params: rowptr[list[str]]
def __new__(self, pool: rowptr[memhub.MemManager],
name: str,
bases: rowptr[list[rowptr[AST]]],
keywords: rowptr[list[rowptr[AST]]],
decorator_list: rowptr[list[rowptr[AST]]],
type_params: rowptr[list[str]] = None):
ptr: rowptr[ClassDef] = pool.alloc(ClassDef.__sizeof__())
if ptr:
string.memset(ptr, 0, ClassDef.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
name: str,
bases: rowptr[list[rowptr[AST]]],
keywords: rowptr[list[rowptr[AST]]],
decorator_list: rowptr[list[rowptr[AST]]],
type_params: rowptr[list[str]] = None):
_init_ast(self, pool, 0, 0)
self.name = _copy_str(pool, name)
self.bases = bases
self.keywords = keywords
self.decorator_list = decorator_list
self.type_params = type_params
_set_parent_list(decorator_list, self)
def kind(self) -> int:
return ASTKind.ClassDef
def type_name(self) -> str:
return "ClassDef"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "ClassDef(name='")
pos = _emit_str(buf, size, pos, self.name)
pos = _emit(buf, size, pos, "', bases=")
pos = _dump_list(self.bases, buf, size, pos)
pos = _emit(buf, size, pos, ", keywords=")
pos = _dump_list(self.keywords, buf, size, pos)
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ", decorator_list=")
pos = _dump_list(self.decorator_list, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Delete Node
# ============================================================
class Delete(Stmt):
"""Delete(targets: list[rowptr[AST]])"""
targets: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
targets: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Delete] = pool.alloc(Delete.__sizeof__())
if ptr:
string.memset(ptr, 0, Delete.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
targets: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.targets = targets
_set_parent_list(targets, self)
def kind(self) -> int:
return ASTKind.Delete
def type_name(self) -> str:
return "Delete"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Delete(targets=")
pos = _dump_list(self.targets, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# AugAssign Node
# ============================================================
class AugAssign(Stmt):
"""AugAssign(target: AST, op: CInt, value: AST)"""
target: rowptr[AST]
op: int
value: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], op: int, value: rowptr[AST]):
ptr: rowptr[AugAssign] = pool.alloc(AugAssign.__sizeof__())
if ptr:
string.memset(ptr, 0, AugAssign.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], op: int, value: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.target = target
self.op = op
self.value = value
def kind(self) -> int:
return ASTKind.AugAssign
def type_name(self) -> str:
return "AugAssign"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "AugAssign(target=")
if self.target is not None:
pos = self.target.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", op=")
pos = _emit(buf, size, pos, _op_name(self.op))
pos = _emit(buf, size, pos, ", value=")
if self.value is not None:
pos = self.value.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# AnnAssign Node
# ============================================================
class AnnAssign(Stmt):
"""AnnAssign(target: AST, annotation: AST, value: AST, simple: CInt)"""
target: rowptr[AST]
annotation: rowptr[AST]
value: rowptr[AST]
simple: int
def __new__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], annotation: rowptr[AST],
value: rowptr[AST], simple: int):
ptr: rowptr[AnnAssign] = pool.alloc(AnnAssign.__sizeof__())
if ptr:
string.memset(ptr, 0, AnnAssign.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
target: rowptr[AST], annotation: rowptr[AST],
value: rowptr[AST], simple: int):
_init_ast(self, pool, 0, 0)
self.target = target
self.annotation = annotation
self.value = value
self.simple = simple
def kind(self) -> int:
return ASTKind.AnnAssign
def type_name(self) -> str:
return "AnnAssign"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "AnnAssign(target=")
if self.target is not None:
pos = self.target.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", annotation=")
if self.annotation is not None:
pos = self.annotation.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", value=")
if self.value is not None:
pos = self.value.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", simple=")
pos = _emit_int(buf, size, pos, int64(self.simple))
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# With Node
# ============================================================
class With(Stmt):
"""With(items: list[rowptr[AST]], is_async: CInt)"""
items: rowptr[list[rowptr[AST]]]
flags: int
def __new__(self, pool: rowptr[memhub.MemManager],
items: rowptr[list[rowptr[AST]]],
is_async: int):
ptr: rowptr[With] = pool.alloc(With.__sizeof__())
if ptr:
string.memset(ptr, 0, With.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
items: rowptr[list[rowptr[AST]]],
is_async: int):
_init_ast(self, pool, 0, 0)
self.items = items
if is_async:
self.flags = FLAG_IS_ASYNC
else:
self.flags = 0
_set_parent_list(items, self)
def kind(self) -> int:
return ASTKind.With
def type_name(self) -> str:
return "With"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "With(items=")
pos = _dump_list(self.items, buf, size, pos)
pos = _emit(buf, size, pos, ", body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Raise Node
# ============================================================
class Raise(Stmt):
"""Raise(exc: AST, cause: AST)"""
exc: rowptr[AST]
cause: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
exc: rowptr[AST], cause: rowptr[AST]):
ptr: rowptr[Raise] = pool.alloc(Raise.__sizeof__())
if ptr:
string.memset(ptr, 0, Raise.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
exc: rowptr[AST], cause: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.exc = exc
self.cause = cause
def kind(self) -> int:
return ASTKind.Raise
def type_name(self) -> str:
return "Raise"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Raise(exc=")
if self.exc is not None:
pos = self.exc.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", cause=")
if self.cause is not None:
pos = self.cause.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Try Node
# ============================================================
class Try(Stmt):
"""Try(handlers: list[rowptr[AST]],
orelse: list[rowptr[AST]], finalbody: list[rowptr[AST]])"""
handlers: rowptr[list[rowptr[AST]]]
orelse: rowptr[list[rowptr[AST]]]
finalbody: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
handlers: rowptr[list[rowptr[AST]]],
orelse: rowptr[list[rowptr[AST]]],
finalbody: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Try] = pool.alloc(Try.__sizeof__())
if ptr:
string.memset(ptr, 0, Try.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
handlers: rowptr[list[rowptr[AST]]],
orelse: rowptr[list[rowptr[AST]]],
finalbody: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.handlers = handlers
self.orelse = orelse
self.finalbody = finalbody
_set_parent_list(handlers, self)
_set_parent_list(orelse, self)
_set_parent_list(finalbody, self)
def kind(self) -> int:
return ASTKind.Try
def type_name(self) -> str:
return "Try"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Try(body=")
pos = _dump_list(self.children, buf, size, pos)
pos = _emit(buf, size, pos, ", handlers=")
pos = _dump_list(self.handlers, buf, size, pos)
pos = _emit(buf, size, pos, ", orelse=")
pos = _dump_list(self.orelse, buf, size, pos)
pos = _emit(buf, size, pos, ", finalbody=")
pos = _dump_list(self.finalbody, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Assert Node
# ============================================================
class Assert(Stmt):
"""Assert(test: AST, msg: AST)"""
test: rowptr[AST]
msg: rowptr[AST]
def __new__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST], msg: rowptr[AST]):
ptr: rowptr[Assert] = pool.alloc(Assert.__sizeof__())
if ptr:
string.memset(ptr, 0, Assert.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
test: rowptr[AST], msg: rowptr[AST]):
_init_ast(self, pool, 0, 0)
self.test = test
self.msg = msg
def kind(self) -> int:
return ASTKind.Assert
def type_name(self) -> str:
return "Assert"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Assert(test=")
if self.test is not None:
pos = self.test.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", msg=")
if self.msg is not None:
pos = self.msg.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Global Node
# ============================================================
class Global(Stmt):
"""Global(names: list[rowptr[AST]])"""
names: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Global] = pool.alloc(Global.__sizeof__())
if ptr:
string.memset(ptr, 0, Global.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.names = names
_set_parent_list(names, self)
def kind(self) -> int:
return ASTKind.Global
def type_name(self) -> str:
return "Global"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Global(names=")
pos = _dump_list(self.names, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Nonlocal Node
# ============================================================
class Nonlocal(Stmt):
"""Nonlocal(names: list[rowptr[AST]])"""
names: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Nonlocal] = pool.alloc(Nonlocal.__sizeof__())
if ptr:
string.memset(ptr, 0, Nonlocal.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.names = names
_set_parent_list(names, self)
def kind(self) -> int:
return ASTKind.Nonlocal
def type_name(self) -> str:
return "Nonlocal"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Nonlocal(names=")
pos = _dump_list(self.names, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Pass Node
# ============================================================
class Pass(Stmt):
"""Pass()"""
def __new__(self, pool: rowptr[memhub.MemManager]):
ptr: rowptr[Pass] = pool.alloc(Pass.__sizeof__())
if ptr:
string.memset(ptr, 0, Pass.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager]):
_init_ast(self, pool, 0, 0)
def kind(self) -> int:
return ASTKind.Pass
def type_name(self) -> str:
return "Pass"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Pass()")
return pos
# ============================================================
# Break Node
# ============================================================
class Break(Stmt):
"""Break()"""
def __new__(self, pool: rowptr[memhub.MemManager]):
ptr: rowptr[Break] = pool.alloc(Break.__sizeof__())
if ptr:
string.memset(ptr, 0, Break.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager]):
_init_ast(self, pool, 0, 0)
def kind(self) -> int:
return ASTKind.Break
def type_name(self) -> str:
return "Break"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Break()")
return pos
# ============================================================
# Continue Node
# ============================================================
class Continue(Stmt):
"""Continue()"""
def __new__(self, pool: rowptr[memhub.MemManager]):
ptr: rowptr[Continue] = pool.alloc(Continue.__sizeof__())
if ptr:
string.memset(ptr, 0, Continue.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager]):
_init_ast(self, pool, 0, 0)
def kind(self) -> int:
return ASTKind.Continue
def type_name(self) -> str:
return "Continue"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Continue()")
return pos
# ============================================================
# Import Node
# ============================================================
class Import(Stmt):
"""Import(names: list[rowptr[AST]])"""
names: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Import] = pool.alloc(Import.__sizeof__())
if ptr:
string.memset(ptr, 0, Import.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
names: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.names = names
_set_parent_list(names, self)
def kind(self) -> int:
return ASTKind.Import
def type_name(self) -> str:
return "Import"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Import(names=")
pos = _dump_list(self.names, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# ImportFrom Node
# ============================================================
class ImportFrom(Stmt):
"""ImportFrom(module: str, names: list[rowptr[AST]], level: CInt)"""
module: str
names: rowptr[list[rowptr[AST]]]
level: int
def __new__(self, pool: rowptr[memhub.MemManager],
module: str,
names: rowptr[list[rowptr[AST]]],
level: int):
ptr: rowptr[ImportFrom] = pool.alloc(ImportFrom.__sizeof__())
if ptr:
string.memset(ptr, 0, ImportFrom.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
module: str,
names: rowptr[list[rowptr[AST]]],
level: int):
_init_ast(self, pool, 0, 0)
self.module = _copy_str(pool, module)
self.names = names
self.level = level
_set_parent_list(names, self)
def kind(self) -> int:
return ASTKind.ImportFrom
def type_name(self) -> str:
return "ImportFrom"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "ImportFrom(module='")
pos = _emit_str(buf, size, pos, self.module)
pos = _emit(buf, size, pos, "', names=")
pos = _dump_list(self.names, buf, size, pos)
pos = _emit(buf, size, pos, ", level=")
pos = _emit_int(buf, size, pos, int64(self.level))
pos = _emit(buf, size, pos, ")")
return pos
# ============================================================
# Match Node
# ============================================================
class Match(Stmt):
"""Match(subject: AST, cases: list[rowptr[AST]])"""
subject: rowptr[AST]
cases: rowptr[list[rowptr[AST]]]
def __new__(self, pool: rowptr[memhub.MemManager],
subject: rowptr[AST],
cases: rowptr[list[rowptr[AST]]]):
ptr: rowptr[Match] = pool.alloc(Match.__sizeof__())
if ptr:
string.memset(ptr, 0, Match.__sizeof__())
return ptr
def __init__(self, pool: rowptr[memhub.MemManager],
subject: rowptr[AST],
cases: rowptr[list[rowptr[AST]]]):
_init_ast(self, pool, 0, 0)
self.subject = subject
self.cases = cases
_set_parent_list(cases, self)
def kind(self) -> int:
return ASTKind.Match
def type_name(self) -> str:
return "Match"
def dump(self, buf: str, size: t.CSizeT,
pos: t.CSizeT) -> t.CSizeT:
pos = _emit(buf, size, pos, "Match(subject=")
if self.subject is not None:
pos = self.subject.dump(buf, size, pos)
else:
pos = _emit(buf, size, pos, "None")
pos = _emit(buf, size, pos, ", cases=")
pos = _dump_list(self.cases, buf, size, pos)
pos = _emit(buf, size, pos, ")")
return pos