Add support for atomic type qualifiers.

Fixes #101.
main
Frederik Seiffert 7 years ago committed by David Chisnall
parent a2463192d0
commit ae6a777742

@ -21,7 +21,7 @@ size_t objc_alignof_type (const char *type);
const char *objc_skip_type_qualifiers (const char *type) const char *objc_skip_type_qualifiers (const char *type)
{ {
static const char *type_qualifiers = "rnNoORV"; static const char *type_qualifiers = "rnNoORVA";
while('\0' != *type && strchr(type_qualifiers, *type)) while('\0' != *type && strchr(type_qualifiers, *type))
{ {
type++; type++;

@ -109,7 +109,7 @@ static const char *skip_irrelevant_type_info(const char *t)
{ {
default: return t; default: return t;
case 'r': case 'n': case 'N': case 'o': case 'O': case 'R': case 'r': case 'n': case 'N': case 'o': case 'O': case 'R':
case 'V': case '!': case '0'...'9': case 'V': case 'A': case '!': case '0'...'9':
return skip_irrelevant_type_info(t+1); return skip_irrelevant_type_info(t+1);
} }
} }

@ -183,7 +183,7 @@ struct objc_slot *objc_msg_lookup_sender(id *receiver, SEL selector, id sender)
const char *t = selector->types; const char *t = selector->types;
// Skip type qualifiers // Skip type qualifiers
while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t || while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t ||
'O' == *t || 'R' == *t || 'V' == *t) 'O' == *t || 'R' == *t || 'V' == *t || 'A' == *t)
{ {
t++; t++;
} }
@ -219,7 +219,7 @@ static struct objc_slot2* objc_slot_lookup(id *receiver, SEL selector)
const char *t = selector->types; const char *t = selector->types;
// Skip type qualifiers // Skip type qualifiers
while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t || while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t ||
'O' == *t || 'R' == *t || 'V' == *t) 'O' == *t || 'R' == *t || 'V' == *t || 'A' == *t)
{ {
t++; t++;
} }
@ -253,7 +253,7 @@ struct objc_slot2 *objc_slot_lookup_version(id *receiver, SEL selector, uint64_t
const char *t = selector->types; const char *t = selector->types;
// Skip type qualifiers // Skip type qualifiers
while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t || while ('r' == *t || 'n' == *t || 'N' == *t || 'o' == *t ||
'O' == *t || 'R' == *t || 'V' == *t) 'O' == *t || 'R' == *t || 'V' == *t || 'A' == *t)
{ {
t++; t++;
} }

Loading…
Cancel
Save