[pypy-svn] r68534 - in pypy/trunk/pypy/translator/c: . src

afa at codespeak.net afa at codespeak.net
Fri Oct 16 14:35:17 CEST 2009


Author: afa
Date: Fri Oct 16 14:35:17 2009
New Revision: 68534

Modified:
   pypy/trunk/pypy/translator/c/primitive.py
   pypy/trunk/pypy/translator/c/src/llgroup.h
Log:
Fix compilation error with msvc: "initializer is not a constant".
Use an offsetof-like construction instead.


Modified: pypy/trunk/pypy/translator/c/primitive.py
==============================================================================
--- pypy/trunk/pypy/translator/c/primitive.py	(original)
+++ pypy/trunk/pypy/translator/c/primitive.py	Fri Oct 16 14:35:17 2009
@@ -143,10 +143,9 @@
     if isinstance(value, Symbolic):
         if isinstance(value, llgroup.GroupMemberOffset):
             groupnode = db.getcontainernode(value.grpptr._as_obj())
-            structnode = db.getcontainernode(value.member._as_obj())
-            return 'GROUP_MEMBER_OFFSET(%s, %s)' % (
-                groupnode.name,
-                structnode.name,
+            return 'GROUP_MEMBER_OFFSET(%s, member%s)' % (
+                cdecl(groupnode.implementationtypename, ''),
+                value.index,
                 )
         else:
             raise Exception("unimplemented symbolic %r" % value)

Modified: pypy/trunk/pypy/translator/c/src/llgroup.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/llgroup.h	(original)
+++ pypy/trunk/pypy/translator/c/src/llgroup.h	Fri Oct 16 14:35:17 2009
@@ -1,9 +1,8 @@
 #ifndef _PYPY_LL_GROUP_H_
 #define _PYPY_LL_GROUP_H_
 
-
-#define GROUP_MEMBER_OFFSET(group, membername)  \
-  ((unsigned short)((((char*)&membername) - ((char*)&group)) / sizeof(long)))
+#define GROUP_MEMBER_OFFSET(grouptype, membername)  \
+    ((unsigned short)(&(((grouptype*)NULL))->membername) / sizeof(long))
 
 #define _OP_GET_GROUP_MEMBER(groupptr, compactoffset)  \
   (((char*)groupptr) + ((long)compactoffset)*sizeof(long))



More information about the Pypy-commit mailing list