From 2e6a328757dfa7b4f68c334df76f17193f6a9ff6 Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 31 Oct 2008 23:43:44 +0000 Subject: [PATCH] Added code to parse literal strings. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@27001 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 1 + Source/NSPredicate.m | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 269f4701e..495d0b66e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * Tools/gdomap.c: Improve error messages and information about the -a option. + * Source/NSPredicate.m: parse literal strings 2008-10-29 Richard Frith-Macdonald diff --git a/Source/NSPredicate.m b/Source/NSPredicate.m index 51a0ba77c..1cafe30c7 100644 --- a/Source/NSPredicate.m +++ b/Source/NSPredicate.m @@ -756,6 +756,12 @@ case NSCustomSelectorPredicateOperatorType: comp = NSStringFromSelector(_selector); break; + case NSContainsPredicateOperatorType: + comp = @"CONTAINS"; + break; + case NSBetweenPredicateOperatorType: + comp = @"BETWEEN"; + break; } switch (_options) { @@ -2061,15 +2067,35 @@ if ([self scanString: @"\"" intoString: NULL]) { - NSString *str = @"string constant"; - + NSCharacterSet *skip = [self charactersToBeSkipped]; + NSString *str = nil; + + [self setCharactersToBeSkipped: nil]; + if ([self scanUpToString: @"\"" intoString: &str] == NO) + { + [self setCharactersToBeSkipped: skip]; + [NSException raise: NSInvalidArgumentException + format: @"Invalid double quoted literal at %u", location]; + } + [self setCharactersToBeSkipped: skip]; + [self scanString: @"\"" intoString: NULL]; return [NSExpression expressionForConstantValue: str]; } if ([self scanString: @"'" intoString: NULL]) { - NSString *str = @"string constant"; + NSCharacterSet *skip = [self charactersToBeSkipped]; + NSString *str = nil; + [self setCharactersToBeSkipped: nil]; + if ([self scanUpToString: @"'" intoString: &str] == NO) + { + [self setCharactersToBeSkipped: skip]; + [NSException raise: NSInvalidArgumentException + format: @"Invalid single quoted literal at %u", location]; + } + [self setCharactersToBeSkipped: skip]; + [self scanString: @"'" intoString: NULL]; return [NSExpression expressionForConstantValue: str]; }