[pypy-svn] r16321 - pypy/dist/pypy/module/_sre

nik at codespeak.net nik at codespeak.net
Tue Aug 23 19:26:50 CEST 2005


Author: nik
Date: Tue Aug 23 19:26:49 2005
New Revision: 16321

Modified:
   pypy/dist/pypy/module/_sre/interp_sre.py
Log:
some more typedef trickery for W_State that hopefully makes specialization
succeed.


Modified: pypy/dist/pypy/module/_sre/interp_sre.py
==============================================================================
--- pypy/dist/pypy/module/_sre/interp_sre.py	(original)
+++ pypy/dist/pypy/module/_sre/interp_sre.py	Tue Aug 23 19:26:49 2005
@@ -2,6 +2,7 @@
 # XXX is it allowed to import app-level module like this?
 from pypy.module._sre.app_info import CODESIZE
 from pypy.interpreter.typedef import GetSetProperty, TypeDef
+from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
 from pypy.interpreter.gateway import interp2app
 
 import sys
@@ -55,7 +56,7 @@
         self.marks = []
         self.lastindex = -1
         self.marks_stack = []
-        self.context_stack = self.space.newlist([])
+        self.w_context_stack = self.space.newlist([])
         self.w_repeat = self.space.w_None
 
     def set_mark(self, w_mark_nr, w_position):
@@ -104,27 +105,39 @@
     def lower(self, w_char_ord):
         return getlower(self.space, w_char_ord, self.space.wrap(self.flags))
 
+def interp_attrproperty_int(name, cls):
+    "NOT_RPYTHON: initialization-time only"
+    def fget(space, obj):
+        return space.wrap(getattr(obj, name))
+    def fset(space, obj, w_value):
+        return setattr(obj, name, space.int_w(w_value))
+    return GetSetProperty(fget, fset, cls=cls)
+
+def interp_attrproperty_obj_w(name, cls):
+    "NOT_RPYTHON: initialization-time only"
+    def fget(space, obj):
+        return getattr(obj, name)
+    def fset(space, obj, w_value):
+        return setattr(state, name, w_value)
+    return GetSetProperty(fget, fset, cls=cls)
+
 W_State.typedef = TypeDef("W_State",
-    string = GetSetProperty(lambda space, state: state.w_string,
-        lambda space, state, value: setattr(state, "w_string", value)),
-    start = GetSetProperty(lambda space, state: space.wrap(state.start),
-        lambda space, state, value: setattr(state, "start", space.int_w(value))),
-    end = GetSetProperty(lambda space, state: space.wrap(state.end)),
-    string_position = GetSetProperty(lambda space, state: space.wrap(state.string_position),
-        lambda space, state, value: setattr(state, "string_position", space.int_w(value))),
-    pos = GetSetProperty(lambda space, state: space.wrap(state.pos)),
-    lastindex = GetSetProperty(lambda space, state: space.wrap(state.lastindex)),
-    context_stack = GetSetProperty(lambda space, state: state.context_stack),
-    repeat = GetSetProperty(lambda space, state: state.w_repeat,
-        lambda space, state, value: setattr(state, "w_repeat", value)),
-    reset = interp2app(W_State.reset, unwrap_spec = ["self"]),
+    string = interp_attrproperty_obj_w("w_string", W_State),
+    start = interp_attrproperty_int("start", W_State),
+    end = interp_attrproperty_int("end", W_State),
+    string_position = interp_attrproperty_int("string_position", W_State),
+    pos = interp_attrproperty("pos", W_State),
+    lastindex = interp_attrproperty("lastindex", W_State),
+    context_stack = interp_attrproperty_w("w_context_stack", W_State),
+    repeat = interp_attrproperty_obj_w("w_repeat", W_State),
+    reset = interp2app(W_State.reset),
     set_mark = interp2app(W_State.set_mark),
     get_marks = interp2app(W_State.get_marks),
     create_regs = interp2app(W_State.create_regs),
-    marks_push = interp2app(W_State.marks_push, unwrap_spec = ["self"]),
-    marks_pop = interp2app(W_State.marks_pop, unwrap_spec = ["self"]),
-    marks_pop_keep = interp2app(W_State.marks_pop_keep, unwrap_spec = ["self"]),
-    marks_pop_discard = interp2app(W_State.marks_pop_discard, unwrap_spec = ["self"]),
+    marks_push = interp2app(W_State.marks_push),
+    marks_pop = interp2app(W_State.marks_pop),
+    marks_pop_keep = interp2app(W_State.marks_pop_keep),
+    marks_pop_discard = interp2app(W_State.marks_pop_discard),
     lower = interp2app(W_State.lower),
 )
 



More information about the Pypy-commit mailing list