Author: rfm
Date: Sun Apr 9 14:45:18 2017
New Revision: 40462
URL: http://svn.gna.org/viewcvs/gnustep?rev=40462&view=rev
Log:
fixes for #47618
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/NSPredicate.m
libs/base/trunk/Tests/base/NSPredicate/basic.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=40462&r1=40461&r2=40462&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Sun Apr 9 14:45:18 2017
@@ -1,3 +1,9 @@
+2017-04-09 Richard Frith-Macdonald <[email protected]>
+
+ * Source/NSPredicate.m:
+ * Tests/base/NSPredicate/basic.m:
+ Fixes for bug #47618.
+
2017-04-09 Richard Frith-Macdonald <[email protected]>
* Headers/Foundation/NSTask.h:
Modified: libs/base/trunk/Source/NSPredicate.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSPredicate.m?rev=40462&r1=40461&r2=40462&view=diff
==============================================================================
--- libs/base/trunk/Source/NSPredicate.m (original)
+++ libs/base/trunk/Source/NSPredicate.m Sun Apr 9 14:45:18 2017
@@ -362,10 +362,10 @@
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
- (BOOL) evaluateWithObject: (id)object
- substitutionVariables: (GS_GENERIC_CLASS(NSDictionary, NSString*,
id)*)variables
+ substitutionVariables: (GS_GENERIC_CLASS(NSDictionary, NSString*,
id)*)variables
{
return [[self predicateWithSubstitutionVariables: variables]
- evaluateWithObject: object];
+ evaluateWithObject: object];
}
#endif
- (Class) classForCoder
@@ -898,15 +898,6 @@
BOOL leftIsNil;
BOOL rightIsNil;
- if (leftResult == evaluatedObjectExpression)
- {
- leftResult = object;
- }
- if (rightResult == evaluatedObjectExpression)
- {
- rightResult = object;
- }
-
leftIsNil = (leftResult == nil || [leftResult isEqual: [NSNull null]]);
rightIsNil = (rightResult == nil || [rightResult isEqual: [NSNull null]]);
if (leftIsNil || rightIsNil)
@@ -949,17 +940,29 @@
switch (_type)
{
case NSLessThanPredicateOperatorType:
- return ([leftResult compare: rightResult] == NSOrderedAscending)
- ? YES : NO;
+ {
+ double ld = [leftResult doubleValue];
+ double rd = [rightResult doubleValue];
+ return (ld < rd) ? YES : NO;
+ }
case NSLessThanOrEqualToPredicateOperatorType:
- return ([leftResult compare: rightResult] != NSOrderedDescending)
- ? YES : NO;
+ {
+ double ld = [leftResult doubleValue];
+ double rd = [rightResult doubleValue];
+ return (ld <= rd) ? YES : NO;
+ }
case NSGreaterThanPredicateOperatorType:
- return ([leftResult compare: rightResult] == NSOrderedDescending)
- ? YES : NO;
+ {
+ double ld = [leftResult doubleValue];
+ double rd = [rightResult doubleValue];
+ return (ld > rd) ? YES : NO;
+ }
case NSGreaterThanOrEqualToPredicateOperatorType:
- return ([leftResult compare: rightResult] != NSOrderedAscending)
- ? YES : NO;
+ {
+ double ld = [leftResult doubleValue];
+ double rd = [rightResult doubleValue];
+ return (ld >= rd) ? YES : NO;
+ }
case NSEqualToPredicateOperatorType:
return [leftResult isEqual: rightResult];
case NSNotEqualToPredicateOperatorType:
@@ -1070,11 +1073,6 @@
NSEnumerator *e;
id value;
- if (leftValue == evaluatedObjectExpression)
- {
- leftValue = object;
- }
-
if (![leftValue respondsToSelector: @selector(objectEnumerator)])
{
[NSException raise: NSInvalidArgumentException
@@ -1356,14 +1354,18 @@
- (id) expressionValueWithObject: (id)object
context: (NSMutableDictionary *)context
{
+ return object;
+}
+
+- (id) _expressionWithSubstitutionVariables: (NSDictionary *)variables
+{
return self;
}
-- (id) _expressionWithSubstitutionVariables: (NSDictionary *)variables
-{
- return self;
-}
-
+- (NSString *) keyPath
+{
+ return @"SELF";
+}
@end
@implementation GSVariableExpression
@@ -2525,10 +2527,17 @@
format: @"Invalid right keypath: %@", left];
}
- // concatenate
- left = [NSExpression expressionForKeyPath:
- [NSString stringWithFormat: @"%@.%@",
- [left keyPath], [right keyPath]]];
+ if (evaluatedObjectExpression != left)
+ {
+ // concatenate
+ left = [NSExpression expressionForKeyPath:
+ [NSString stringWithFormat: @"%@.%@",
+ [left keyPath], [right keyPath]]];
+ }
+ else
+ {
+ left = [NSExpression expressionForKeyPath: [right keyPath]];
+ }
}
else
{
Modified: libs/base/trunk/Tests/base/NSPredicate/basic.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSPredicate/basic.m?rev=40462&r1=40461&r2=40462&view=diff
==============================================================================
--- libs/base/trunk/Tests/base/NSPredicate/basic.m (original)
+++ libs/base/trunk/Tests/base/NSPredicate/basic.m Sun Apr 9 14:45:18 2017
@@ -205,6 +205,11 @@
p = [NSPredicate predicateWithFormat: @"SELF == 'aaa'"];
PASS([p evaluateWithObject: @"aaa"], "SELF equality works");
+ d = [NSDictionary dictionaryWithObjectsAndKeys:
+ @"2", @"foo", nil];
+ p = [NSPredicate predicateWithFormat: @"SELF.foo <= 2"];
+ PASS([p evaluateWithObject: d], "SELF.foo <= 2");
+
p = [NSPredicate predicateWithFormat:
@"%K like %@+$b+$c", @"$single", @"b\""];
PASS_EQUAL([p predicateFormat], @"$single LIKE (\"b\\\"\" + $b) + $c",
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs