Minor bug correction in class parser.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@20387 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2004-11-27 14:14:55 +00:00
parent 2543fee8fb
commit f5d1828901
2 changed files with 57 additions and 60 deletions

View file

@ -1,3 +1,8 @@
2004-11-27 09:17 Gregory John Casamento <greg_casamento@yahoo.com>
* GormObjCHeaderParser/OCClass.m: Condensed parse methods into
parse. Corrected a minor issue.
2004-11-27 05:53 Gregory John Casamento <greg_casamento@yahoo.com> 2004-11-27 05:53 Gregory John Casamento <greg_casamento@yahoo.com>
* GormObjCHeaderParser/OCClass.h * GormObjCHeaderParser/OCClass.h

View file

@ -116,36 +116,38 @@
ASSIGN(classString, resultString); ASSIGN(classString, resultString);
} }
- (void) _parseClass - (void) parse
{ {
NSScanner *scanner = [NSScanner scannerWithString: classString]; NSScanner *scanner = [NSScanner scannerWithString: classString];
NSScanner *iscan = nil;
NSString *interfaceLine = nil; NSString *interfaceLine = nil;
NSString *methodsString = nil;
NSString *ivarsString = nil;
NSScanner *methodScan = nil;
[scanner scanUpToString: @"@interface" intoString: NULL]; // look ahead... [scanner scanUpToString: @"@interface" intoString: NULL]; // look ahead...
[scanner scanUpToString: @"\n" intoString: &interfaceLine]; [scanner scanUpToString: @"\n" intoString: &interfaceLine];
scanner = [NSScanner scannerWithString: interfaceLine]; // reset scanner... iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner...
if(NSEqualRanges([interfaceLine rangeOfString: @":"],NSMakeRange(NSNotFound,0)) == NO) if(NSEqualRanges([interfaceLine rangeOfString: @":"],NSMakeRange(NSNotFound,0)) == NO)
{ {
[scanner scanUpToAndIncludingString: @"@interface" intoString: NULL]; [iscan scanUpToAndIncludingString: @"@interface" intoString: NULL];
[scanner scanUpToString: @":" intoString: &className]; [iscan scanUpToString: @":" intoString: &className];
RETAIN(className); RETAIN(className);
[scanner scanString: @":" intoString: NULL]; [iscan scanString: @":" intoString: NULL];
[scanner scanUpToString: @" " intoString: &superClassName]; [iscan scanUpToString: @" " intoString: &superClassName];
RETAIN(superClassName); RETAIN(superClassName);
} }
else // category... else // category...
{ {
[scanner scanUpToAndIncludingString: @"@interface" intoString: NULL]; [iscan scanUpToAndIncludingString: @"@interface" intoString: NULL];
[scanner scanUpToString: @" " intoString: &className]; [iscan scanUpToString: @" " intoString: &className];
RETAIN(className); RETAIN(className);
[self setIsCategory: YES]; isCategory = YES;
} }
}
- (void) _parseIVars if(isCategory == NO)
{ {
NSScanner *scanner = [NSScanner scannerWithString: classString]; NSScanner *ivarScan = nil;
NSString *ivarsString = nil;
// put the ivars into a a string... // put the ivars into a a string...
[scanner scanUpToAndIncludingString: @"{" intoString: NULL]; [scanner scanUpToAndIncludingString: @"{" intoString: NULL];
@ -153,54 +155,44 @@
[scanner scanString: @"}" intoString: NULL]; [scanner scanString: @"}" intoString: NULL];
// scan each ivar... // scan each ivar...
scanner = [NSScanner scannerWithString: ivarsString]; ivarScan = [NSScanner scannerWithString: ivarsString];
while(![scanner isAtEnd]) while(![ivarScan isAtEnd])
{ {
NSString *ivarLine = nil; NSString *ivarLine = nil;
OCIVar *ivar = nil; OCIVar *ivar = nil;
[scanner scanUpToString: @";" intoString: &ivarLine]; [ivarScan scanUpToString: @";" intoString: &ivarLine];
[scanner scanString: @";" intoString: NULL]; [ivarScan scanString: @";" intoString: NULL];
ivar = AUTORELEASE([[OCIVar alloc] initWithString: ivarLine]); ivar = AUTORELEASE([[OCIVar alloc] initWithString: ivarLine]);
[ivar parse]; [ivar parse];
[ivars addObject: ivar]; [ivars addObject: ivar];
} }
} }
- (void) _parseMethods
{
NSScanner *scanner = [NSScanner scannerWithString: classString];
NSString *methodsString = nil;
// put the methods into a a string... // put the methods into a a string...
[scanner scanUpToAndIncludingString: @"{" intoString: NULL]; if(ivarsString != nil)
[scanner scanUpToString: @"}" intoString: NULL]; {
[scanner scanString: @"}" intoString: NULL];
[scanner scanUpToString: @"@end" intoString: &methodsString]; [scanner scanUpToString: @"@end" intoString: &methodsString];
}
else //
{
scanner = [NSScanner scannerWithString: classString];
[scanner scanUpToAndIncludingString: interfaceLine intoString: NULL];
[scanner scanUpToString: @"@end" intoString: &methodsString];
}
// scan each method... // scan each method...
scanner = [NSScanner scannerWithString: methodsString]; methodScan = [NSScanner scannerWithString: methodsString];
while(![scanner isAtEnd]) while(![methodScan isAtEnd])
{ {
NSString *methodLine = nil; NSString *methodLine = nil;
OCMethod *method = nil; OCMethod *method = nil;
[scanner scanUpToString: @";" intoString: &methodLine]; [methodScan scanUpToString: @";" intoString: &methodLine];
[scanner scanString: @";" intoString: NULL]; [methodScan scanString: @";" intoString: NULL];
method = AUTORELEASE([[OCMethod alloc] initWithString: methodLine]); method = AUTORELEASE([[OCMethod alloc] initWithString: methodLine]);
[method parse]; [method parse];
[methods addObject: method]; [methods addObject: method];
} }
} }
- (void) parse
{
// [self _strip];
[self _parseClass];
if([self isCategory] == NO)
{
[self _parseIVars];
}
[self _parseMethods];
}
@end @end