diff options
-rw-r--r-- | MLKRoot.m | 37 | ||||
-rw-r--r-- | util.h | 18 |
2 files changed, 43 insertions, 12 deletions
@@ -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 @@ -1,4 +1,5 @@ #include "runtime-compatibility.h" +#include <Foundation/NSException.h> #include <Foundation/NSNull.h> #define DEFINE_GMP_OPERATION(SIGNATURE, TYPE, GMPOP, OBJTYPE, CONSTRUCTOR) \ @@ -18,6 +19,7 @@ static id nullify (id value) __attribute__ ((pure, unused)); static id denullify (id value) __attribute__ ((pure, unused)); +static id stringify (id value) __attribute__ ((pure, unused)); static id nullify (id value) { @@ -34,3 +36,19 @@ static id denullify (id value) else return value; } + +static id stringify (id thing) +{ + // FIXME: Some cases may be missing. + if (!thing) + return @"NIL"; + if ([thing isKindOfClass:[NSString class]]) + return thing; + else if ([thing isKindOfClass:[MLKSymbol class]]) + return [thing name]; + + [NSException raise:@"MLKTypeError" format:@"Can't coerce %@ to a string.", + [thing descriptionForLisp]]; + + return nil; +} |