[pypy-svn] r13458 - pypy/dist/pypy/rpython/test

arigo at codespeak.net arigo at codespeak.net
Wed Jun 15 22:56:39 CEST 2005

Author: arigo
Date: Wed Jun 15 22:56:38 2005
New Revision: 13458

Actually, you don't need so many strange '._obj0' accesses to fish the
information.  All names starting with '_' are meant to be hidden and not used
from outside.  There are some exception that are ok to use in some specific
cases.  Note that at places like that we usually cannot remove the '_' because
it might collide with an attribute or field name defined by the caller.  Some
guidelines of '_' attributes that are kind of ok to use:

* '_obj' on a _ptr object *in special cases only*.  Normally, the _struct and
  other classes are only an implementation detail; no instance of _struct
  should ever escape lltype.  The _ptr provides an interface to all low-level
  operations on them.  (Something missing now is an interface to access
  attributes of _func and _pyobject; right now there is no other way than via

* '_name', '_names', '_flds' on a Struct, to introspect its shape.

Other attributes should have accessor functions, e.g. don't read '_TYPE' but
call typeOf(), which works for primitive objects too.  From the type, you can
fish for most information: '.TO' to dereference a Ptr, '.OF' to get at the
items of an Array, or '.fieldname' to get at the type of a field in a Struct.  
FuncTypes have an ARGS list and a RESULT.

Modified: pypy/dist/pypy/rpython/test/test_interp.py
--- pypy/dist/pypy/rpython/test/test_interp.py	(original)
+++ pypy/dist/pypy/rpython/test/test_interp.py	Wed Jun 15 22:56:38 2005
@@ -1,6 +1,7 @@
 import py
+from pypy.rpython.lltype import typeOf
 from pypy.rpython.rtyper import RPythonTyper 
 from pypy.rpython.interp import LLInterpreter, RPythonError
 from pypy.translator.translator import Translator 
@@ -55,7 +56,7 @@
         val1 = t(3)
         val2 = t(4)
         gcres = interpret(comparisons, [val1, val2])
-        res = [getattr(gcres._obj0, x) for x in gcres._obj0._TYPE._names]
+        res = [getattr(gcres, x) for x in typeOf(gcres).TO._names]
         assert res == [True, True, False, True, False, False]
 def XXXtest_some_builtin(): 

More information about the Pypy-commit mailing list