From 73903e25720a373028a2bf269c2aab27385c4692 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Mon, 1 Sep 2008 23:13:55 +0200 Subject: MLKForm class cluster: Add -freeVariables. --- MLKForm.m | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'MLKForm.m') diff --git a/MLKForm.m b/MLKForm.m index 2105ef8..3821886 100644 --- a/MLKForm.m +++ b/MLKForm.m @@ -85,6 +85,21 @@ return [NSArray array]; } +-(NSSet *) freeVariables +{ + NSMutableSet *freeVariables = [NSMutableSet set]; + NSArray *subforms = [self subforms]; + int i; + + for (i = 0; i < [subforms count]; i++) + { + MLKForm *subform = [subforms objectAtIndex:i]; + [freeVariables unionSet:[subform freeVariables]]; + } + + return freeVariables; +} + -(void) dealloc { LDESTROY (_form); @@ -121,6 +136,14 @@ { return self; } + +-(NSSet *) freeVariables +{ + if ([_context variableIsLexical:_form]) + return [NSSet setWithObject:_form]; + else + return [NSSet set]; +} @end @@ -617,6 +640,21 @@ return _lambdaListName; } +-(NSSet *) freeVariables +{ + id superfree = [super freeVariables]; + if ([superfree containsObject:_lambdaListName]) + { + NSMutableSet *freeVariables = [superfree mutableCopy]; + [freeVariables removeObject:_lambdaListName]; + return freeVariables; + } + else + { + return superfree; + } +} + -(void) dealloc { LDESTROY (_lambdaListName); @@ -773,6 +811,24 @@ return [[super subforms] arrayByAddingObjectsFromArray:_variableBindingForms]; } +-(NSSet *) freeVariables +{ + NSMutableSet *freeVariables = [[super freeVariables] mutableCopy]; + int i; + + for (i = 0; i < [_variableBindingForms count]; i++) + { + id symbol = [[_variableBindingForms objectAtIndex:i] name]; + if ([freeVariables containsObject:symbol] + && [_bodyContext variableIsLexical:symbol]) + { + [freeVariables removeObject:symbol]; + } + } + + return freeVariables; +} + -(void) dealloc { LDESTROY (_variableBindingForms); -- cgit v1.2.3