409 :(id)rootPList
410 named:(NSString *)name
411 subProperty:(id)subProperty
412 againstSchemaType:(id)subSchema
414 tentative:(BOOL)tentative
415 error:(NSError **)outError
416 stop:(BOOL *)outStop
417{
419 NSError *error =
nil;
420 NSDictionary *resolvedSpecifier =
nil;
421 NSAutoreleasePool *pool =
nil;
422
423 assert(outStop != NULL);
424
425 pool = [[NSAutoreleasePool alloc] init];
426
428
429 @try
430 {
432
433 resolvedSpecifier = [self resolveSchemaType:subSchema atPath:keyPath error:&error];
434 if (resolvedSpecifier !=
nil) type =
StringToSchemaType([resolvedSpecifier objectForKey:
@"type"], &error);
435
436 #define VERIFY_CASE(T) case kType##T: error = Verify_##T(self, subProperty, resolvedSpecifier, rootPList, name, keyPath, tentative, outStop); break;
437
438 switch (type)
439 {
454
456
457 *outStop = YES;
458 }
459 }
460 @catch (NSException *exception)
461 {
463 }
464
466
468 {
470 {
471 *outStop = ![self delegateVerifierWithPropertyList:rootPList
472 named:name
473 failedForProperty:subProperty
474 withError:error
475 expectedType:subSchema];
476 }
477 else if (tentative) *outStop = YES;
478 }
479
480 if (outError != NULL && error !=
nil)
481 {
482 *outError = [error retain];
483 [pool release];
484 [error autorelease];
485 }
486 else
487 {
488 [pool release];
489 }
490
492}
static SchemaType StringToSchemaType(NSString *string, NSError **outError)
#define DebugDumpPopIndent()
#define DebugDumpIndent()
#define DebugDumpPushIndent()
static BOOL IsFailureAlreadyReportedError(NSError *error)