mirror of
https://github.com/gnustep/libs-base.git
synced 2025-06-02 01:21:08 +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
be9d4f89fe
commit
1c8f36b122
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>
|
2012-07-12 19:26-EDT Gregory John Casamento <greg.casamento@gmail.com>
|
||||||
|
|
||||||
* Source/NSFileManager.m: Correct misspelled ASSIGN which was
|
* Source/NSFileManager.m: Correct misspelled ASSIGN which was
|
||||||
|
|
|
@ -1293,7 +1293,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case _C_STRUCT_B:
|
case _C_STRUCT_B:
|
||||||
if (strcmp(@encode(NSPoint), type) == 0)
|
if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||||
{
|
{
|
||||||
NSPoint v;
|
NSPoint v;
|
||||||
|
|
||||||
|
@ -1310,7 +1310,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
||||||
}
|
}
|
||||||
val = [NSValue valueWithPoint: v];
|
val = [NSValue valueWithPoint: v];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSRange), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||||
{
|
{
|
||||||
NSRange v;
|
NSRange v;
|
||||||
|
|
||||||
|
@ -1327,7 +1327,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
||||||
}
|
}
|
||||||
val = [NSValue valueWithRange: v];
|
val = [NSValue valueWithRange: v];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSRect), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||||
{
|
{
|
||||||
NSRect v;
|
NSRect v;
|
||||||
|
|
||||||
|
@ -1344,7 +1344,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
||||||
}
|
}
|
||||||
val = [NSValue valueWithRect: v];
|
val = [NSValue valueWithRect: v];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSSize), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||||
{
|
{
|
||||||
NSSize v;
|
NSSize v;
|
||||||
|
|
||||||
|
@ -1740,7 +1740,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case _C_STRUCT_B:
|
case _C_STRUCT_B:
|
||||||
if (strcmp(@encode(NSPoint), type) == 0)
|
if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||||
{
|
{
|
||||||
NSPoint v = [val pointValue];
|
NSPoint v = [val pointValue];
|
||||||
|
|
||||||
|
@ -1758,7 +1758,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
||||||
(*imp)(self, sel, v);
|
(*imp)(self, sel, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSRange), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||||
{
|
{
|
||||||
NSRange v = [val rangeValue];
|
NSRange v = [val rangeValue];
|
||||||
|
|
||||||
|
@ -1776,7 +1776,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
||||||
(*imp)(self, sel, v);
|
(*imp)(self, sel, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSRect), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||||
{
|
{
|
||||||
NSRect v = [val rectValue];
|
NSRect v = [val rectValue];
|
||||||
|
|
||||||
|
@ -1794,7 +1794,7 @@ GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
|
||||||
(*imp)(self, sel, v);
|
(*imp)(self, sel, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSSize), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||||
{
|
{
|
||||||
NSSize v = [val sizeValue];
|
NSSize v = [val sizeValue];
|
||||||
|
|
||||||
|
|
|
@ -918,7 +918,8 @@ GSInvocationCallback (void *callback_data, va_alist args)
|
||||||
const char *receiverTypes = [sig methodType];
|
const char *receiverTypes = [sig methodType];
|
||||||
const char *runtimeTypes = sel_get_type (selector);
|
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);
|
const char *runtimeName = sel_getName(selector);
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ typeSize(const char* type)
|
||||||
return NO;
|
return NO;
|
||||||
if (object_getClass(aValue) != object_getClass(self))
|
if (object_getClass(aValue) != object_getClass(self))
|
||||||
return NO;
|
return NO;
|
||||||
if (strcmp(objctype, ((GSValue*)aValue)->objctype) != 0)
|
if (GSSelectorTypesMatch(objctype, ((GSValue*)aValue)->objctype))
|
||||||
return NO;
|
return NO;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -535,22 +535,22 @@ replacementForClass(Class c)
|
||||||
instanceMethodForSelector: @selector(setter:)];
|
instanceMethodForSelector: @selector(setter:)];
|
||||||
break;
|
break;
|
||||||
case _C_STRUCT_B:
|
case _C_STRUCT_B:
|
||||||
if (strcmp(@encode(NSRange), type) == 0)
|
if (GSSelectorTypesMatch(@encode(NSRange), type))
|
||||||
{
|
{
|
||||||
imp = [[GSKVOSetter class]
|
imp = [[GSKVOSetter class]
|
||||||
instanceMethodForSelector: @selector(setterRange:)];
|
instanceMethodForSelector: @selector(setterRange:)];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSPoint), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSPoint), type))
|
||||||
{
|
{
|
||||||
imp = [[GSKVOSetter class]
|
imp = [[GSKVOSetter class]
|
||||||
instanceMethodForSelector: @selector(setterPoint:)];
|
instanceMethodForSelector: @selector(setterPoint:)];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSSize), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSSize), type))
|
||||||
{
|
{
|
||||||
imp = [[GSKVOSetter class]
|
imp = [[GSKVOSetter class]
|
||||||
instanceMethodForSelector: @selector(setterSize:)];
|
instanceMethodForSelector: @selector(setterSize:)];
|
||||||
}
|
}
|
||||||
else if (strcmp(@encode(NSRect), type) == 0)
|
else if (GSSelectorTypesMatch(@encode(NSRect), type))
|
||||||
{
|
{
|
||||||
imp = [[GSKVOSetter class]
|
imp = [[GSKVOSetter class]
|
||||||
instanceMethodForSelector: @selector(setterRect:)];
|
instanceMethodForSelector: @selector(setterRect:)];
|
||||||
|
|
|
@ -98,13 +98,15 @@
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
[NSException raise: NSInvalidArgumentException
|
||||||
format: @"<%s -%@> not declared",
|
format: @"<%s -%@> not declared",
|
||||||
protocol_getName(_myProtocol), NSStringFromSelector([anInvocation selector])];
|
protocol_getName(_myProtocol),
|
||||||
|
NSStringFromSelector([anInvocation selector])];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
[NSException raise: NSInvalidArgumentException
|
||||||
format: @"<%s +%@> not declared",
|
format: @"<%s +%@> not declared",
|
||||||
protocol_getName(_myProtocol), NSStringFromSelector([anInvocation selector])];
|
protocol_getName(_myProtocol),
|
||||||
|
NSStringFromSelector([anInvocation selector])];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[anInvocation invokeWithTarget: _myTarget];
|
[anInvocation invokeWithTarget: _myTarget];
|
||||||
|
@ -114,7 +116,7 @@
|
||||||
* returned value with the protocol checker.
|
* returned value with the protocol checker.
|
||||||
*/
|
*/
|
||||||
type = [[anInvocation methodSignature] methodReturnType];
|
type = [[anInvocation methodSignature] methodReturnType];
|
||||||
if (strcmp(type, @encode(id)) == 0)
|
if (GSSelectorTypesMatch(type, @encode(id)))
|
||||||
{
|
{
|
||||||
id buf;
|
id buf;
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,8 @@ static NSLock *placeholderLock;
|
||||||
if (!type)
|
if (!type)
|
||||||
return theClass;
|
return theClass;
|
||||||
|
|
||||||
|
/* Try for an exact type match.
|
||||||
|
*/
|
||||||
if (strcmp(@encode(id), type) == 0)
|
if (strcmp(@encode(id), type) == 0)
|
||||||
theClass = nonretainedObjectValueClass;
|
theClass = nonretainedObjectValueClass;
|
||||||
else if (strcmp(@encode(NSPoint), type) == 0)
|
else if (strcmp(@encode(NSPoint), type) == 0)
|
||||||
|
@ -188,6 +190,21 @@ static NSLock *placeholderLock;
|
||||||
else if (strcmp(@encode(NSSize), type) == 0)
|
else if (strcmp(@encode(NSSize), type) == 0)
|
||||||
theClass = sizeValueClass;
|
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;
|
return theClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue