mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-29 16:01:38 +00:00
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:
parent
117316de2f
commit
df6384cc18
4 changed files with 29 additions and 13 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue