summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MLKCons.h5
-rw-r--r--MLKCons.m21
-rw-r--r--MLKSymbol.h2
-rw-r--r--MLKSymbol.m8
4 files changed, 36 insertions, 0 deletions
diff --git a/MLKCons.h b/MLKCons.h
index c727c39..d343e3f 100644
--- a/MLKCons.h
+++ b/MLKCons.h
@@ -34,5 +34,10 @@
-(void) setCar:(id)value;
-(void) setCdr:(id)value;
+-(NSString *)bareDescriptionForLisp; // description without
+ // parentheses, for internal use
+ // only
+-(NSString *)descriptionForLisp;
+
-(void) dealloc;
@end
diff --git a/MLKCons.m b/MLKCons.m
index fbfecb7..aee322a 100644
--- a/MLKCons.m
+++ b/MLKCons.m
@@ -18,6 +18,8 @@
#import "MLKCons.h"
+#import <Foundation/NSString.h>
+
@implementation MLKCons
+(MLKCons*) cons:(id)car with:(id)cdr
@@ -54,6 +56,25 @@
ASSIGN (_cdr, value);
}
+-(NSString *)bareDescriptionForLisp
+{
+ if (!_cdr)
+ return [NSString stringWithFormat:@"%@", [_car descriptionForLisp]];
+ else if (![_cdr isKindOfClass:[MLKCons class]])
+ return [NSString stringWithFormat:@"%@ %@",
+ [_car descriptionForLisp],
+ [_cdr bareDescriptionForLisp]];
+ else
+ return [NSString stringWithFormat:@"%@ . %@",
+ [_car descriptionForLisp],
+ [_cdr descriptionForLisp]];
+}
+
+-(NSString *)descriptionForLisp
+{
+ return [NSString stringWithFormat:@"(%@)", [self bareDescriptionForLisp]];
+}
+
-(void) dealloc
{
RELEASE (_car);
diff --git a/MLKSymbol.h b/MLKSymbol.h
index 6fe3eb6..82526d2 100644
--- a/MLKSymbol.h
+++ b/MLKSymbol.h
@@ -33,5 +33,7 @@
-(MLKPackage *) homePackage;
-(void) setHomePackage:(MLKPackage *)aPackage;
+-(NSString *)descriptionForLisp;
+
-(void) dealloc;
@end
diff --git a/MLKSymbol.m b/MLKSymbol.m
index 3443e37..42a7141 100644
--- a/MLKSymbol.m
+++ b/MLKSymbol.m
@@ -18,6 +18,8 @@
#import "MLKSymbol.h"
+#import <Foundation/NSString.h>
+
@implementation MLKSymbol
-(MLKSymbol *) initWithName:(id)aName package:(id)aPackage
@@ -43,6 +45,12 @@
ASSIGN (homePackage, aPackage);
}
+-(NSString *)descriptionForLisp
+{
+ // FIXME: This is wrong in more than one way.
+ return [NSString stringWithFormat:@"|%@|", name];
+}
+
-(void) dealloc
{
RELEASE (name);