avoid objc_skip_offset()

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@29814 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2010-03-01 10:34:35 +00:00
parent 117316de2f
commit df6384cc18
4 changed files with 29 additions and 13 deletions

View file

@ -231,7 +231,7 @@ GSObjCFindVariable(id obj, const char *name,
NSUInteger s;
NSUInteger a;
NSGetSizeAndAlignment(enc,&s, &a);
NSGetSizeAndAlignment(enc, &s, &a);
*size = s;
}
if (offset != 0)

View file

@ -804,13 +804,13 @@ gs_protocol_selector(const char *types)
}
while (*types != '\0')
{
if (*types == '-')
if (*types == '+' || *types == '-')
{
types++;
}
if (*types == '+' || isdigit(*types))
while(isdigit(*types))
{
types = objc_skip_offset(types);
types++;
}
while (*types == _C_CONST || *types == _C_GCINVISIBLE)
{

View file

@ -496,13 +496,13 @@ gs_protocol_selector(const char *types)
}
while (*types != '\0')
{
if (*types == '-')
if (*types == '+' || *types == '-')
{
types++;
}
if (*types == '+' || isdigit(*types))
while(isdigit(*types))
{
types = objc_skip_offset(types);
types++;
}
while (*types == _C_CONST || *types == _C_GCINVISIBLE)
{

View file

@ -137,12 +137,28 @@ const char *
NSGetSizeAndAlignment(const char *typePtr,
NSUInteger *sizep, NSUInteger *alignp)
{
typePtr = objc_skip_offset (typePtr);
typePtr = objc_skip_type_qualifiers (typePtr);
if (sizep)
*sizep = objc_sizeof_type (typePtr);
if (alignp)
*alignp = objc_alignof_type (typePtr);
if (typePtr != NULL)
{
/* Skip any offset, but don't call objc_skip_offset() as that's buggy.
*/
if (*typePtr == '+' || *typePtr == '-')
{
typePtr++;
}
while (isdigit(*typePtr))
{
typePtr++;
}
typePtr = objc_skip_type_qualifiers (typePtr);
if (sizep)
{
*sizep = objc_sizeof_type (typePtr);
}
if (alignp)
{
*alignp = objc_alignof_type (typePtr);
}
}
return typePtr;
}