[pypy-commit] pypy fix-tpname: different approach for making _ast classes heaptypes

bdkearns noreply at buildbot.pypy.org
Fri May 2 05:48:59 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: fix-tpname
Changeset: r71181:f84ebaac41fd
Date: 2014-05-01 23:48 -0400
http://bitbucket.org/pypy/pypy/changeset/f84ebaac41fd/

Log:	different approach for making _ast classes heaptypes

diff --git a/pypy/interpreter/astcompiler/ast.py b/pypy/interpreter/astcompiler/ast.py
--- a/pypy/interpreter/astcompiler/ast.py
+++ b/pypy/interpreter/astcompiler/ast.py
@@ -2803,6 +2803,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(mod)),
 )
+mod.typedef.heaptype = True
 
 def Module_get_body(space, w_self):
     if not w_self.initialization_state & 1:
@@ -2850,6 +2851,7 @@
     __new__=interp2app(get_AST_new(Module)),
     __init__=interp2app(Module_init),
 )
+Module.typedef.heaptype = True
 
 def Interactive_get_body(space, w_self):
     if not w_self.initialization_state & 1:
@@ -2897,6 +2899,7 @@
     __new__=interp2app(get_AST_new(Interactive)),
     __init__=interp2app(Interactive_init),
 )
+Interactive.typedef.heaptype = True
 
 def Expression_get_body(space, w_self):
     if w_self.w_dict is not None:
@@ -2950,6 +2953,7 @@
     __new__=interp2app(get_AST_new(Expression)),
     __init__=interp2app(Expression_init),
 )
+Expression.typedef.heaptype = True
 
 def Suite_get_body(space, w_self):
     if not w_self.initialization_state & 1:
@@ -2997,6 +3001,7 @@
     __new__=interp2app(get_AST_new(Suite)),
     __init__=interp2app(Suite_init),
 )
+Suite.typedef.heaptype = True
 
 def stmt_get_lineno(space, w_self):
     if w_self.w_dict is not None:
@@ -3062,6 +3067,7 @@
     col_offset=typedef.GetSetProperty(stmt_get_col_offset, stmt_set_col_offset, stmt_del_col_offset, cls=stmt),
     __new__=interp2app(get_AST_new(stmt)),
 )
+stmt.typedef.heaptype = True
 
 def FunctionDef_get_name(space, w_self):
     if w_self.w_dict is not None:
@@ -3190,6 +3196,7 @@
     __new__=interp2app(get_AST_new(FunctionDef)),
     __init__=interp2app(FunctionDef_init),
 )
+FunctionDef.typedef.heaptype = True
 
 def ClassDef_get_name(space, w_self):
     if w_self.w_dict is not None:
@@ -3314,6 +3321,7 @@
     __new__=interp2app(get_AST_new(ClassDef)),
     __init__=interp2app(ClassDef_init),
 )
+ClassDef.typedef.heaptype = True
 
 def Return_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -3367,6 +3375,7 @@
     __new__=interp2app(get_AST_new(Return)),
     __init__=interp2app(Return_init),
 )
+Return.typedef.heaptype = True
 
 def Delete_get_targets(space, w_self):
     if not w_self.initialization_state & 4:
@@ -3414,6 +3423,7 @@
     __new__=interp2app(get_AST_new(Delete)),
     __init__=interp2app(Delete_init),
 )
+Delete.typedef.heaptype = True
 
 def Assign_get_targets(space, w_self):
     if not w_self.initialization_state & 4:
@@ -3491,6 +3501,7 @@
     __new__=interp2app(get_AST_new(Assign)),
     __init__=interp2app(Assign_init),
 )
+Assign.typedef.heaptype = True
 
 def AugAssign_get_target(space, w_self):
     if w_self.w_dict is not None:
@@ -3604,6 +3615,7 @@
     __new__=interp2app(get_AST_new(AugAssign)),
     __init__=interp2app(AugAssign_init),
 )
+AugAssign.typedef.heaptype = True
 
 def Print_get_dest(space, w_self):
     if w_self.w_dict is not None:
@@ -3710,6 +3722,7 @@
     __new__=interp2app(get_AST_new(Print)),
     __init__=interp2app(Print_init),
 )
+Print.typedef.heaptype = True
 
 def For_get_target(space, w_self):
     if w_self.w_dict is not None:
@@ -3841,6 +3854,7 @@
     __new__=interp2app(get_AST_new(For)),
     __init__=interp2app(For_init),
 )
+For.typedef.heaptype = True
 
 def While_get_test(space, w_self):
     if w_self.w_dict is not None:
@@ -3942,6 +3956,7 @@
     __new__=interp2app(get_AST_new(While)),
     __init__=interp2app(While_init),
 )
+While.typedef.heaptype = True
 
 def If_get_test(space, w_self):
     if w_self.w_dict is not None:
@@ -4043,6 +4058,7 @@
     __new__=interp2app(get_AST_new(If)),
     __init__=interp2app(If_init),
 )
+If.typedef.heaptype = True
 
 def With_get_context_expr(space, w_self):
     if w_self.w_dict is not None:
@@ -4150,6 +4166,7 @@
     __new__=interp2app(get_AST_new(With)),
     __init__=interp2app(With_init),
 )
+With.typedef.heaptype = True
 
 def Raise_get_type(space, w_self):
     if w_self.w_dict is not None:
@@ -4263,6 +4280,7 @@
     __new__=interp2app(get_AST_new(Raise)),
     __init__=interp2app(Raise_init),
 )
+Raise.typedef.heaptype = True
 
 def TryExcept_get_body(space, w_self):
     if not w_self.initialization_state & 4:
@@ -4358,6 +4376,7 @@
     __new__=interp2app(get_AST_new(TryExcept)),
     __init__=interp2app(TryExcept_init),
 )
+TryExcept.typedef.heaptype = True
 
 def TryFinally_get_body(space, w_self):
     if not w_self.initialization_state & 4:
@@ -4429,6 +4448,7 @@
     __new__=interp2app(get_AST_new(TryFinally)),
     __init__=interp2app(TryFinally_init),
 )
+TryFinally.typedef.heaptype = True
 
 def Assert_get_test(space, w_self):
     if w_self.w_dict is not None:
@@ -4512,6 +4532,7 @@
     __new__=interp2app(get_AST_new(Assert)),
     __init__=interp2app(Assert_init),
 )
+Assert.typedef.heaptype = True
 
 def Import_get_names(space, w_self):
     if not w_self.initialization_state & 4:
@@ -4559,6 +4580,7 @@
     __new__=interp2app(get_AST_new(Import)),
     __init__=interp2app(Import_init),
 )
+Import.typedef.heaptype = True
 
 def ImportFrom_get_module(space, w_self):
     if w_self.w_dict is not None:
@@ -4667,6 +4689,7 @@
     __new__=interp2app(get_AST_new(ImportFrom)),
     __init__=interp2app(ImportFrom_init),
 )
+ImportFrom.typedef.heaptype = True
 
 def Exec_get_body(space, w_self):
     if w_self.w_dict is not None:
@@ -4780,6 +4803,7 @@
     __new__=interp2app(get_AST_new(Exec)),
     __init__=interp2app(Exec_init),
 )
+Exec.typedef.heaptype = True
 
 def Global_get_names(space, w_self):
     if not w_self.initialization_state & 4:
@@ -4827,6 +4851,7 @@
     __new__=interp2app(get_AST_new(Global)),
     __init__=interp2app(Global_init),
 )
+Global.typedef.heaptype = True
 
 def Expr_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -4880,6 +4905,7 @@
     __new__=interp2app(get_AST_new(Expr)),
     __init__=interp2app(Expr_init),
 )
+Expr.typedef.heaptype = True
 
 def Pass_init(space, w_self, __args__):
     w_self = space.descr_self_interp_w(Pass, w_self)
@@ -4897,6 +4923,7 @@
     __new__=interp2app(get_AST_new(Pass)),
     __init__=interp2app(Pass_init),
 )
+Pass.typedef.heaptype = True
 
 def Break_init(space, w_self, __args__):
     w_self = space.descr_self_interp_w(Break, w_self)
@@ -4914,6 +4941,7 @@
     __new__=interp2app(get_AST_new(Break)),
     __init__=interp2app(Break_init),
 )
+Break.typedef.heaptype = True
 
 def Continue_init(space, w_self, __args__):
     w_self = space.descr_self_interp_w(Continue, w_self)
@@ -4931,6 +4959,7 @@
     __new__=interp2app(get_AST_new(Continue)),
     __init__=interp2app(Continue_init),
 )
+Continue.typedef.heaptype = True
 
 def expr_get_lineno(space, w_self):
     if w_self.w_dict is not None:
@@ -4996,6 +5025,7 @@
     col_offset=typedef.GetSetProperty(expr_get_col_offset, expr_set_col_offset, expr_del_col_offset, cls=expr),
     __new__=interp2app(get_AST_new(expr)),
 )
+expr.typedef.heaptype = True
 
 def BoolOp_get_op(space, w_self):
     if w_self.w_dict is not None:
@@ -5073,6 +5103,7 @@
     __new__=interp2app(get_AST_new(BoolOp)),
     __init__=interp2app(BoolOp_init),
 )
+BoolOp.typedef.heaptype = True
 
 def BinOp_get_left(space, w_self):
     if w_self.w_dict is not None:
@@ -5186,6 +5217,7 @@
     __new__=interp2app(get_AST_new(BinOp)),
     __init__=interp2app(BinOp_init),
 )
+BinOp.typedef.heaptype = True
 
 def UnaryOp_get_op(space, w_self):
     if w_self.w_dict is not None:
@@ -5269,6 +5301,7 @@
     __new__=interp2app(get_AST_new(UnaryOp)),
     __init__=interp2app(UnaryOp_init),
 )
+UnaryOp.typedef.heaptype = True
 
 def Lambda_get_args(space, w_self):
     if w_self.w_dict is not None:
@@ -5350,6 +5383,7 @@
     __new__=interp2app(get_AST_new(Lambda)),
     __init__=interp2app(Lambda_init),
 )
+Lambda.typedef.heaptype = True
 
 def IfExp_get_test(space, w_self):
     if w_self.w_dict is not None:
@@ -5463,6 +5497,7 @@
     __new__=interp2app(get_AST_new(IfExp)),
     __init__=interp2app(IfExp_init),
 )
+IfExp.typedef.heaptype = True
 
 def Dict_get_keys(space, w_self):
     if not w_self.initialization_state & 4:
@@ -5534,6 +5569,7 @@
     __new__=interp2app(get_AST_new(Dict)),
     __init__=interp2app(Dict_init),
 )
+Dict.typedef.heaptype = True
 
 def Set_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
@@ -5581,6 +5617,7 @@
     __new__=interp2app(get_AST_new(Set)),
     __init__=interp2app(Set_init),
 )
+Set.typedef.heaptype = True
 
 def ListComp_get_elt(space, w_self):
     if w_self.w_dict is not None:
@@ -5658,6 +5695,7 @@
     __new__=interp2app(get_AST_new(ListComp)),
     __init__=interp2app(ListComp_init),
 )
+ListComp.typedef.heaptype = True
 
 def SetComp_get_elt(space, w_self):
     if w_self.w_dict is not None:
@@ -5735,6 +5773,7 @@
     __new__=interp2app(get_AST_new(SetComp)),
     __init__=interp2app(SetComp_init),
 )
+SetComp.typedef.heaptype = True
 
 def DictComp_get_key(space, w_self):
     if w_self.w_dict is not None:
@@ -5842,6 +5881,7 @@
     __new__=interp2app(get_AST_new(DictComp)),
     __init__=interp2app(DictComp_init),
 )
+DictComp.typedef.heaptype = True
 
 def GeneratorExp_get_elt(space, w_self):
     if w_self.w_dict is not None:
@@ -5919,6 +5959,7 @@
     __new__=interp2app(get_AST_new(GeneratorExp)),
     __init__=interp2app(GeneratorExp_init),
 )
+GeneratorExp.typedef.heaptype = True
 
 def Yield_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -5972,6 +6013,7 @@
     __new__=interp2app(get_AST_new(Yield)),
     __init__=interp2app(Yield_init),
 )
+Yield.typedef.heaptype = True
 
 def Compare_get_left(space, w_self):
     if w_self.w_dict is not None:
@@ -6073,6 +6115,7 @@
     __new__=interp2app(get_AST_new(Compare)),
     __init__=interp2app(Compare_init),
 )
+Compare.typedef.heaptype = True
 
 def Call_get_func(space, w_self):
     if w_self.w_dict is not None:
@@ -6234,6 +6277,7 @@
     __new__=interp2app(get_AST_new(Call)),
     __init__=interp2app(Call_init),
 )
+Call.typedef.heaptype = True
 
 def Repr_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -6287,6 +6331,7 @@
     __new__=interp2app(get_AST_new(Repr)),
     __init__=interp2app(Repr_init),
 )
+Repr.typedef.heaptype = True
 
 def Num_get_n(space, w_self):
     if w_self.w_dict is not None:
@@ -6339,6 +6384,7 @@
     __new__=interp2app(get_AST_new(Num)),
     __init__=interp2app(Num_init),
 )
+Num.typedef.heaptype = True
 
 def Str_get_s(space, w_self):
     if w_self.w_dict is not None:
@@ -6391,6 +6437,7 @@
     __new__=interp2app(get_AST_new(Str)),
     __init__=interp2app(Str_init),
 )
+Str.typedef.heaptype = True
 
 def Attribute_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -6503,6 +6550,7 @@
     __new__=interp2app(get_AST_new(Attribute)),
     __init__=interp2app(Attribute_init),
 )
+Attribute.typedef.heaptype = True
 
 def Subscript_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -6616,6 +6664,7 @@
     __new__=interp2app(get_AST_new(Subscript)),
     __init__=interp2app(Subscript_init),
 )
+Subscript.typedef.heaptype = True
 
 def Name_get_id(space, w_self):
     if w_self.w_dict is not None:
@@ -6698,6 +6747,7 @@
     __new__=interp2app(get_AST_new(Name)),
     __init__=interp2app(Name_init),
 )
+Name.typedef.heaptype = True
 
 def List_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
@@ -6775,6 +6825,7 @@
     __new__=interp2app(get_AST_new(List)),
     __init__=interp2app(List_init),
 )
+List.typedef.heaptype = True
 
 def Tuple_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
@@ -6852,6 +6903,7 @@
     __new__=interp2app(get_AST_new(Tuple)),
     __init__=interp2app(Tuple_init),
 )
+Tuple.typedef.heaptype = True
 
 def Const_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -6904,6 +6956,7 @@
     __new__=interp2app(get_AST_new(Const)),
     __init__=interp2app(Const_init),
 )
+Const.typedef.heaptype = True
 
 expr_context.typedef = typedef.TypeDef("expr_context",
     AST.typedef,
@@ -6911,6 +6964,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(expr_context)),
 )
+expr_context.typedef.heaptype = True
 
 _Load.typedef = typedef.TypeDef("Load",
     expr_context.typedef,
@@ -6918,6 +6972,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Load)),
 )
+_Load.typedef.heaptype = True
 
 _Store.typedef = typedef.TypeDef("Store",
     expr_context.typedef,
@@ -6925,6 +6980,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Store)),
 )
+_Store.typedef.heaptype = True
 
 _Del.typedef = typedef.TypeDef("Del",
     expr_context.typedef,
@@ -6932,6 +6988,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Del)),
 )
+_Del.typedef.heaptype = True
 
 _AugLoad.typedef = typedef.TypeDef("AugLoad",
     expr_context.typedef,
@@ -6939,6 +6996,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_AugLoad)),
 )
+_AugLoad.typedef.heaptype = True
 
 _AugStore.typedef = typedef.TypeDef("AugStore",
     expr_context.typedef,
@@ -6946,6 +7004,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_AugStore)),
 )
+_AugStore.typedef.heaptype = True
 
 _Param.typedef = typedef.TypeDef("Param",
     expr_context.typedef,
@@ -6953,6 +7012,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Param)),
 )
+_Param.typedef.heaptype = True
 
 slice.typedef = typedef.TypeDef("slice",
     AST.typedef,
@@ -6960,6 +7020,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(slice)),
 )
+slice.typedef.heaptype = True
 
 def Ellipsis_init(space, w_self, __args__):
     w_self = space.descr_self_interp_w(Ellipsis, w_self)
@@ -6977,6 +7038,7 @@
     __new__=interp2app(get_AST_new(Ellipsis)),
     __init__=interp2app(Ellipsis_init),
 )
+Ellipsis.typedef.heaptype = True
 
 def Slice_get_lower(space, w_self):
     if w_self.w_dict is not None:
@@ -7090,6 +7152,7 @@
     __new__=interp2app(get_AST_new(Slice)),
     __init__=interp2app(Slice_init),
 )
+Slice.typedef.heaptype = True
 
 def ExtSlice_get_dims(space, w_self):
     if not w_self.initialization_state & 1:
@@ -7137,6 +7200,7 @@
     __new__=interp2app(get_AST_new(ExtSlice)),
     __init__=interp2app(ExtSlice_init),
 )
+ExtSlice.typedef.heaptype = True
 
 def Index_get_value(space, w_self):
     if w_self.w_dict is not None:
@@ -7190,6 +7254,7 @@
     __new__=interp2app(get_AST_new(Index)),
     __init__=interp2app(Index_init),
 )
+Index.typedef.heaptype = True
 
 boolop.typedef = typedef.TypeDef("boolop",
     AST.typedef,
@@ -7197,6 +7262,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(boolop)),
 )
+boolop.typedef.heaptype = True
 
 _And.typedef = typedef.TypeDef("And",
     boolop.typedef,
@@ -7204,6 +7270,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_And)),
 )
+_And.typedef.heaptype = True
 
 _Or.typedef = typedef.TypeDef("Or",
     boolop.typedef,
@@ -7211,6 +7278,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Or)),
 )
+_Or.typedef.heaptype = True
 
 operator.typedef = typedef.TypeDef("operator",
     AST.typedef,
@@ -7218,6 +7286,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(operator)),
 )
+operator.typedef.heaptype = True
 
 _Add.typedef = typedef.TypeDef("Add",
     operator.typedef,
@@ -7225,6 +7294,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Add)),
 )
+_Add.typedef.heaptype = True
 
 _Sub.typedef = typedef.TypeDef("Sub",
     operator.typedef,
@@ -7232,6 +7302,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Sub)),
 )
+_Sub.typedef.heaptype = True
 
 _Mult.typedef = typedef.TypeDef("Mult",
     operator.typedef,
@@ -7239,6 +7310,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Mult)),
 )
+_Mult.typedef.heaptype = True
 
 _Div.typedef = typedef.TypeDef("Div",
     operator.typedef,
@@ -7246,6 +7318,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Div)),
 )
+_Div.typedef.heaptype = True
 
 _Mod.typedef = typedef.TypeDef("Mod",
     operator.typedef,
@@ -7253,6 +7326,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Mod)),
 )
+_Mod.typedef.heaptype = True
 
 _Pow.typedef = typedef.TypeDef("Pow",
     operator.typedef,
@@ -7260,6 +7334,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Pow)),
 )
+_Pow.typedef.heaptype = True
 
 _LShift.typedef = typedef.TypeDef("LShift",
     operator.typedef,
@@ -7267,6 +7342,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_LShift)),
 )
+_LShift.typedef.heaptype = True
 
 _RShift.typedef = typedef.TypeDef("RShift",
     operator.typedef,
@@ -7274,6 +7350,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_RShift)),
 )
+_RShift.typedef.heaptype = True
 
 _BitOr.typedef = typedef.TypeDef("BitOr",
     operator.typedef,
@@ -7281,6 +7358,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_BitOr)),
 )
+_BitOr.typedef.heaptype = True
 
 _BitXor.typedef = typedef.TypeDef("BitXor",
     operator.typedef,
@@ -7288,6 +7366,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_BitXor)),
 )
+_BitXor.typedef.heaptype = True
 
 _BitAnd.typedef = typedef.TypeDef("BitAnd",
     operator.typedef,
@@ -7295,6 +7374,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_BitAnd)),
 )
+_BitAnd.typedef.heaptype = True
 
 _FloorDiv.typedef = typedef.TypeDef("FloorDiv",
     operator.typedef,
@@ -7302,6 +7382,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_FloorDiv)),
 )
+_FloorDiv.typedef.heaptype = True
 
 unaryop.typedef = typedef.TypeDef("unaryop",
     AST.typedef,
@@ -7309,6 +7390,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(unaryop)),
 )
+unaryop.typedef.heaptype = True
 
 _Invert.typedef = typedef.TypeDef("Invert",
     unaryop.typedef,
@@ -7316,6 +7398,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Invert)),
 )
+_Invert.typedef.heaptype = True
 
 _Not.typedef = typedef.TypeDef("Not",
     unaryop.typedef,
@@ -7323,6 +7406,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Not)),
 )
+_Not.typedef.heaptype = True
 
 _UAdd.typedef = typedef.TypeDef("UAdd",
     unaryop.typedef,
@@ -7330,6 +7414,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_UAdd)),
 )
+_UAdd.typedef.heaptype = True
 
 _USub.typedef = typedef.TypeDef("USub",
     unaryop.typedef,
@@ -7337,6 +7422,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_USub)),
 )
+_USub.typedef.heaptype = True
 
 cmpop.typedef = typedef.TypeDef("cmpop",
     AST.typedef,
@@ -7344,6 +7430,7 @@
     _attributes=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(cmpop)),
 )
+cmpop.typedef.heaptype = True
 
 _Eq.typedef = typedef.TypeDef("Eq",
     cmpop.typedef,
@@ -7351,6 +7438,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Eq)),
 )
+_Eq.typedef.heaptype = True
 
 _NotEq.typedef = typedef.TypeDef("NotEq",
     cmpop.typedef,
@@ -7358,6 +7446,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_NotEq)),
 )
+_NotEq.typedef.heaptype = True
 
 _Lt.typedef = typedef.TypeDef("Lt",
     cmpop.typedef,
@@ -7365,6 +7454,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Lt)),
 )
+_Lt.typedef.heaptype = True
 
 _LtE.typedef = typedef.TypeDef("LtE",
     cmpop.typedef,
@@ -7372,6 +7462,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_LtE)),
 )
+_LtE.typedef.heaptype = True
 
 _Gt.typedef = typedef.TypeDef("Gt",
     cmpop.typedef,
@@ -7379,6 +7470,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Gt)),
 )
+_Gt.typedef.heaptype = True
 
 _GtE.typedef = typedef.TypeDef("GtE",
     cmpop.typedef,
@@ -7386,6 +7478,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_GtE)),
 )
+_GtE.typedef.heaptype = True
 
 _Is.typedef = typedef.TypeDef("Is",
     cmpop.typedef,
@@ -7393,6 +7486,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_Is)),
 )
+_Is.typedef.heaptype = True
 
 _IsNot.typedef = typedef.TypeDef("IsNot",
     cmpop.typedef,
@@ -7400,6 +7494,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_IsNot)),
 )
+_IsNot.typedef.heaptype = True
 
 _In.typedef = typedef.TypeDef("In",
     cmpop.typedef,
@@ -7407,6 +7502,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_In)),
 )
+_In.typedef.heaptype = True
 
 _NotIn.typedef = typedef.TypeDef("NotIn",
     cmpop.typedef,
@@ -7414,6 +7510,7 @@
     _fields=_FieldsWrapper([]),
     __new__=interp2app(get_AST_new(_NotIn)),
 )
+_NotIn.typedef.heaptype = True
 
 def comprehension_get_target(space, w_self):
     if w_self.w_dict is not None:
@@ -7521,6 +7618,7 @@
     __new__=interp2app(get_AST_new(comprehension)),
     __init__=interp2app(comprehension_init),
 )
+comprehension.typedef.heaptype = True
 
 def excepthandler_get_lineno(space, w_self):
     if w_self.w_dict is not None:
@@ -7586,6 +7684,7 @@
     col_offset=typedef.GetSetProperty(excepthandler_get_col_offset, excepthandler_set_col_offset, excepthandler_del_col_offset, cls=excepthandler),
     __new__=interp2app(get_AST_new(excepthandler)),
 )
+excepthandler.typedef.heaptype = True
 
 def ExceptHandler_get_type(space, w_self):
     if w_self.w_dict is not None:
@@ -7693,6 +7792,7 @@
     __new__=interp2app(get_AST_new(ExceptHandler)),
     __init__=interp2app(ExceptHandler_init),
 )
+ExceptHandler.typedef.heaptype = True
 
 def arguments_get_args(space, w_self):
     if not w_self.initialization_state & 1:
@@ -7828,6 +7928,7 @@
     __new__=interp2app(get_AST_new(arguments)),
     __init__=interp2app(arguments_init),
 )
+arguments.typedef.heaptype = True
 
 def keyword_get_arg(space, w_self):
     if w_self.w_dict is not None:
@@ -7910,6 +8011,7 @@
     __new__=interp2app(get_AST_new(keyword)),
     __init__=interp2app(keyword_init),
 )
+keyword.typedef.heaptype = True
 
 def alias_get_name(space, w_self):
     if w_self.w_dict is not None:
@@ -7994,4 +8096,5 @@
     __new__=interp2app(get_AST_new(alias)),
     __init__=interp2app(alias_init),
 )
-
+alias.typedef.heaptype = True
+
diff --git a/pypy/interpreter/astcompiler/tools/asdl_py.py b/pypy/interpreter/astcompiler/tools/asdl_py.py
--- a/pypy/interpreter/astcompiler/tools/asdl_py.py
+++ b/pypy/interpreter/astcompiler/tools/asdl_py.py
@@ -352,6 +352,7 @@
         if needs_init:
             self.emit("__init__=interp2app(%s_init)," % (name,), 1)
         self.emit(")")
+        self.emit("%s.typedef.heaptype = True" % name)
         self.emit("")
 
     def make_init(self, name, fields):
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -22,6 +22,7 @@
         else:
             bases = [__base]
         self.bases = bases
+        self.heaptype = False
         self.hasdict = '__dict__' in rawdict
         self.weakrefable = '__weakref__' in rawdict
         self.doc = rawdict.pop('__doc__', None)
diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py
--- a/pypy/objspace/std/typeobject.py
+++ b/pypy/objspace/std/typeobject.py
@@ -997,7 +997,7 @@
     w_self.weakrefable = w_self.instancetypedef.weakrefable
     w_self.w_doc = w_self.space.wrap(w_self.instancetypedef.doc)
     ensure_common_attributes(w_self)
-    w_self.flag_heaptype = '__module__' in w_self.instancetypedef.rawdict
+    w_self.flag_heaptype = w_self.instancetypedef.heaptype
 
 def ensure_common_attributes(w_self):
     ensure_static_new(w_self)


More information about the pypy-commit mailing list