summaryrefslogtreecommitdiff
path: root/MLKRoot.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-07-06 20:08:58 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-07-06 20:08:58 +0200
commit5fa9211d806a675131b44cc49a694a4fd6a38f2a (patch)
tree380e4310115f92a9f1ea4c60234ea6a502548ddb /MLKRoot.m
parent83044ff2e19652611f0859efd21252fb483ad4ca (diff)
Implement STRING and FIND-PACKAGE.
Diffstat (limited to 'MLKRoot.m')
-rw-r--r--MLKRoot.m37
1 files changed, 25 insertions, 12 deletions
diff --git a/MLKRoot.m b/MLKRoot.m
index e3dca4f..4ba7ac7 100644
--- a/MLKRoot.m
+++ b/MLKRoot.m
@@ -26,6 +26,7 @@
#import "MLKInteger.h"
#import "MLKSingleFloat.h"
#import "MLKDoubleFloat.h"
+#import "NSObject-MLKPrinting.h"
#import "runtime-compatibility.h"
#import "util.h"
@@ -48,19 +49,8 @@ static id truify (BOOL value)
return (value ? (id) [cl intern:@"T"] : nil);
}
-static id stringify (id thing)
-{
- // FIXME.
- if (!thing)
- return @"NIL";
- if ([thing isKindOfClass:[NSString class]])
- return thing;
- else if ([thing isKindOfClass:[MLKSymbol class]])
- return [thing name];
-}
-
#define RETURN_VALUE(thing) \
- return [NSArray arrayWithObject:nullify(thing)];
+ { return [NSArray arrayWithObject:nullify(thing)]; }
@implementation MLKRoot
@@ -311,4 +301,27 @@ static id stringify (id thing)
RETURN_VALUE ([cl intern:@"T"]);
}
+
++(NSArray *) find_package:(NSArray *)args
+{
+ NSString *name = stringify (denullify ([args objectAtIndex:0]));
+ MLKPackage *package = [MLKPackage findPackage:name];
+
+ if (package)
+ {
+ RETURN_VALUE (package);
+ }
+ else
+ {
+ [NSException raise:@"MLKNoSuchPackageError"
+ format:@"The package %@ does not exist",
+ [name descriptionForLisp]];
+ return nil;
+ }
+}
+
++(NSArray *) string:(NSArray *)args
+{
+ RETURN_VALUE (stringify (denullify ([args objectAtIndex:0])));
+}
@end