summaryrefslogtreecommitdiff
path: root/platform/darwin/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src')
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm36
-rw-r--r--platform/darwin/src/NSExpression+MGLPrivateAdditions.h2
-rw-r--r--platform/darwin/src/NSPredicate+MGLAdditions.h2
-rw-r--r--platform/darwin/src/NSPredicate+MGLAdditions.mm2
4 files changed, 20 insertions, 22 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm
index 933268efe4..a60b14b35d 100644
--- a/platform/darwin/src/NSExpression+MGLAdditions.mm
+++ b/platform/darwin/src/NSExpression+MGLAdditions.mm
@@ -258,6 +258,12 @@
return [self valueForKeyPath:@"mgl_jsonExpressionObject"];
}
+- (id)mgl_coalesce {
+ [NSException raise:NSInvalidArgumentException
+ format:@"Coalesce expressions lack underlying Objective-C implementations."];
+ return nil;
+}
+
@end
@implementation NSDictionary (MGLExpressionAdditions)
@@ -478,23 +484,17 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
} else if ([op isEqualToString:@"match"]) {
NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects[0]];
NSArray *matchOptions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)];
- NSExpression *defaultOption;
- if (matchOptions.count % 2) {
- defaultOption = [NSExpression mgl_expressionWithJSONObject:matchOptions.lastObject];
- matchOptions = [matchOptions subarrayWithRange:NSMakeRange(0, matchOptions.count - 1)];
- }
+
NSMutableArray *optionsArray = [NSMutableArray array];
NSEnumerator *optionsEnumerator = matchOptions.objectEnumerator;
- while (NSNumber *key = optionsEnumerator.nextObject) {
- NSMutableDictionary *option = [NSMutableDictionary dictionaryWithCapacity:1];
- NSExpression *valueExpression = optionsEnumerator.nextObject;
- option[key] = [NSExpression mgl_expressionWithJSONObject:valueExpression];
+ while (id object = optionsEnumerator.nextObject) {
+ NSExpression *option = [NSExpression mgl_expressionWithJSONObject:object];
[optionsArray addObject:option];
}
- NSExpression *optionsExpression = [NSExpression expressionForConstantValue:optionsArray];
+
return [NSExpression expressionForFunction:operand
- selectorName:@"mgl_matchWithOptions:default:"
- arguments:@[optionsExpression, defaultOption]];
+ selectorName:@"mgl_match:"
+ arguments:optionsArray];
} else if ([op isEqualToString:@"coalesce"]) {
NSMutableArray *expressions = [NSMutableArray array];
for (id operand in argumentObjects) {
@@ -693,17 +693,13 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
}];
[expressionObject addObject:self.operand.mgl_jsonExpressionObject];
return expressionObject;
- } else if ([function isEqualToString:@"mgl_matchWithOptions:default:"]) {
+ } else if ([function isEqualToString:@"mgl_match:"]) {
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"match", self.operand.mgl_jsonExpressionObject, nil];
- NSArray *optionsArray = self.arguments[0].constantValue;
- for (NSDictionary<id, NSExpression*> *options in optionsArray) {
- for (NSNumber *key in options.allKeys) {
- [expressionObject addObject:key];
- [expressionObject addObject:[options[key] mgl_jsonExpressionObject]];
- }
+
+ for (NSExpression *option in self.arguments) {
+ [expressionObject addObject:option.mgl_jsonExpressionObject];
}
- [expressionObject addObject:[self.arguments[1] mgl_jsonExpressionObject]];
return expressionObject;
} else if ([function isEqualToString:@"mgl_coalesce"]) {
NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"coalesce", nil];
diff --git a/platform/darwin/src/NSExpression+MGLPrivateAdditions.h b/platform/darwin/src/NSExpression+MGLPrivateAdditions.h
index 8d1b4d6af5..b16e2625a0 100644
--- a/platform/darwin/src/NSExpression+MGLPrivateAdditions.h
+++ b/platform/darwin/src/NSExpression+MGLPrivateAdditions.h
@@ -54,6 +54,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) id mgl_jsonExpressionObject;
+@property (nonatomic, readonly) id mgl_coalesce;
+
@end
@interface NSDictionary (MGLExpressionAdditions)
diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.h b/platform/darwin/src/NSPredicate+MGLAdditions.h
index d50029186c..6211e19e8a 100644
--- a/platform/darwin/src/NSPredicate+MGLAdditions.h
+++ b/platform/darwin/src/NSPredicate+MGLAdditions.h
@@ -16,6 +16,6 @@
@property (nonatomic, readonly) id mgl_jsonExpressionObject;
-- (id)mgl_matchWithOptions:(NSArray *)options default:(id)minimum;
+- (id)mgl_match:(NSExpression *)firstCase, ...;
@end
diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.mm b/platform/darwin/src/NSPredicate+MGLAdditions.mm
index 82a3c249a2..afd2bae9e1 100644
--- a/platform/darwin/src/NSPredicate+MGLAdditions.mm
+++ b/platform/darwin/src/NSPredicate+MGLAdditions.mm
@@ -324,7 +324,7 @@ NSArray *MGLSubpredicatesWithJSONObjects(NSArray *objects) {
return nil;
}
-- (id)mgl_matchWithOptions:(NSArray *)options default:(id)minimum {
+- (id)mgl_match:(NSExpression *)firstCase, ... {
[NSException raise:NSInvalidArgumentException
format:@"Match expressions lack underlying Objective-C implementations."];
return nil;