[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