mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
Use GSSelectorTypesMatch() for types comparison where we are interested in types
but not qualifiers and stack layout information. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@35304 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
469b95d0e3
commit
91aea36304
7 changed files with 47 additions and 17 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2012-07-11 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/GSFFCallInvocation.m:
|
||||
* Source/NSKeyValueObserving.m:
|
||||
* Source/Additions/GSObjCRuntime.m:
|
||||
* Source/NSProtocolChecker.m:
|
||||
* Source/GSValue.m:
|
||||
* Source/NSValue.m:
|
||||
Use GSSelectorTypesMatch() for type comparisons.
|
||||
|
||||
2012-07-12 19:26-EDT Gregory John Casamento <greg.casamento@gmail.com>
|
||||
|
||||
* Source/NSFileManager.m: Correct misspelled ASSIGN which was
|
||||
|
|
|
@ -1293,7 +1293,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
|||
break;
|
||||
|
||||
case _C_STRUCT_B:
|
||||
if (strcmp(@encode(NSPoint), type) == 0)
|
||||
if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||
{
|
||||
NSPoint v;
|
||||
|
||||
|
@ -1310,7 +1310,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
|||
}
|
||||
val = [NSValue valueWithPoint: v];
|
||||
}
|
||||
else if (strcmp(@encode(NSRange), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||
{
|
||||
NSRange v;
|
||||
|
||||
|
@ -1327,7 +1327,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
|||
}
|
||||
val = [NSValue valueWithRange: v];
|
||||
}
|
||||
else if (strcmp(@encode(NSRect), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||
{
|
||||
NSRect v;
|
||||
|
||||
|
@ -1344,7 +1344,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
|||
}
|
||||
val = [NSValue valueWithRect: v];
|
||||
}
|
||||
else if (strcmp(@encode(NSSize), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||
{
|
||||
NSSize v;
|
||||
|
||||
|
@ -1740,7 +1740,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
|||
break;
|
||||
|
||||
case _C_STRUCT_B:
|
||||
if (strcmp(@encode(NSPoint), type) == 0)
|
||||
if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||
{
|
||||
NSPoint v = [val pointValue];
|
||||
|
||||
|
@ -1758,7 +1758,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
|||
(*imp)(self, sel, v);
|
||||
}
|
||||
}
|
||||
else if (strcmp(@encode(NSRange), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||
{
|
||||
NSRange v = [val rangeValue];
|
||||
|
||||
|
@ -1776,7 +1776,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
|||
(*imp)(self, sel, v);
|
||||
}
|
||||
}
|
||||
else if (strcmp(@encode(NSRect), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||
{
|
||||
NSRect v = [val rectValue];
|
||||
|
||||
|
@ -1794,7 +1794,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
|||
(*imp)(self, sel, v);
|
||||
}
|
||||
}
|
||||
else if (strcmp(@encode(NSSize), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||
{
|
||||
NSSize v = [val sizeValue];
|
||||
|
||||
|
|
|
@ -918,7 +918,8 @@ GSInvocationCallback (void *callback_data, va_alist args)
|
|||
const char *receiverTypes = [sig methodType];
|
||||
const char *runtimeTypes = sel_get_type (selector);
|
||||
|
||||
if (runtimeTypes == 0 || strcmp(receiverTypes, runtimeTypes) != 0)
|
||||
if (runtimeTypes == 0
|
||||
|| NO == GSSelectorTypesMatch(receiverTypes, runtimeTypes))
|
||||
{
|
||||
const char *runtimeName = sel_getName(selector);
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ typeSize(const char* type)
|
|||
return NO;
|
||||
if (object_getClass(aValue) != object_getClass(self))
|
||||
return NO;
|
||||
if (strcmp(objctype, ((GSValue*)aValue)->objctype) != 0)
|
||||
if (GSSelectorTypesMatch(objctype, ((GSValue*)aValue)->objctype))
|
||||
return NO;
|
||||
else
|
||||
{
|
||||
|
|
|
@ -535,22 +535,22 @@ replacementForClass(Class c)
|
|||
instanceMethodForSelector: @selector(setter:)];
|
||||
break;
|
||||
case _C_STRUCT_B:
|
||||
if (strcmp(@encode(NSRange), type) == 0)
|
||||
if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||
{
|
||||
imp = [[GSKVOSetter class]
|
||||
instanceMethodForSelector: @selector(setterRange:)];
|
||||
}
|
||||
else if (strcmp(@encode(NSPoint), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||
{
|
||||
imp = [[GSKVOSetter class]
|
||||
instanceMethodForSelector: @selector(setterPoint:)];
|
||||
}
|
||||
else if (strcmp(@encode(NSSize), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||
{
|
||||
imp = [[GSKVOSetter class]
|
||||
instanceMethodForSelector: @selector(setterSize:)];
|
||||
}
|
||||
else if (strcmp(@encode(NSRect), type) == 0)
|
||||
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||
{
|
||||
imp = [[GSKVOSetter class]
|
||||
instanceMethodForSelector: @selector(setterRect:)];
|
||||
|
|
|
@ -98,13 +98,15 @@
|
|||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"<%s -%@> not declared",
|
||||
protocol_getName(_myProtocol), NSStringFromSelector([anInvocation selector])];
|
||||
protocol_getName(_myProtocol),
|
||||
NSStringFromSelector([anInvocation selector])];
|
||||
}
|
||||
else
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"<%s +%@> not declared",
|
||||
protocol_getName(_myProtocol), NSStringFromSelector([anInvocation selector])];
|
||||
protocol_getName(_myProtocol),
|
||||
NSStringFromSelector([anInvocation selector])];
|
||||
}
|
||||
}
|
||||
[anInvocation invokeWithTarget: _myTarget];
|
||||
|
@ -114,7 +116,7 @@
|
|||
* returned value with the protocol checker.
|
||||
*/
|
||||
type = [[anInvocation methodSignature] methodReturnType];
|
||||
if (strcmp(type, @encode(id)) == 0)
|
||||
if (GSSelectorTypesMatch(type, @encode(id)))
|
||||
{
|
||||
id buf;
|
||||
|
||||
|
|
|
@ -175,6 +175,8 @@ static NSLock *placeholderLock;
|
|||
if (!type)
|
||||
return theClass;
|
||||
|
||||
/* Try for an exact type match.
|
||||
*/
|
||||
if (strcmp(@encode(id), type) == 0)
|
||||
theClass = nonretainedObjectValueClass;
|
||||
else if (strcmp(@encode(NSPoint), type) == 0)
|
||||
|
@ -188,6 +190,21 @@ static NSLock *placeholderLock;
|
|||
else if (strcmp(@encode(NSSize), type) == 0)
|
||||
theClass = sizeValueClass;
|
||||
|
||||
/* Try for equivalent types match.
|
||||
*/
|
||||
else if (GSSelectorTypesMatch(@encode(id), type))
|
||||
theClass = nonretainedObjectValueClass;
|
||||
else if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||
theClass = pointValueClass;
|
||||
else if (GSSelectorTypesMatch(@encode(void *), type))
|
||||
theClass = pointerValueClass;
|
||||
else if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||
theClass = rangeValueClass;
|
||||
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||
theClass = rectValueClass;
|
||||
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||
theClass = sizeValueClass;
|
||||
|
||||
return theClass;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue