From 84597fcf74fc74672fe664456e62ec6be5f2b066 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Tue, 2 Sep 2008 11:59:47 +0200 Subject: Add classes MLKNoSuchSymbolError, MLKStreamError, and MLKUnboundVariableError. --- GNUmakefile | 15 ++++++++------- MLKNoSuchSymbolError.h | 35 +++++++++++++++++++++++++++++++++++ MLKNoSuchSymbolError.m | 45 +++++++++++++++++++++++++++++++++++++++++++++ MLKStreamError.h | 30 ++++++++++++++++++++++++++++++ MLKStreamError.m | 40 ++++++++++++++++++++++++++++++++++++++++ MLKThrowException.h | 12 ++++++------ MLKThrowException.m | 21 +++++++++++++-------- MLKUnboundVariableError.h | 36 ++++++++++++++++++++++++++++++++++++ MLKUnboundVariableError.m | 44 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 257 insertions(+), 21 deletions(-) create mode 100644 MLKNoSuchSymbolError.h create mode 100644 MLKNoSuchSymbolError.m create mode 100644 MLKStreamError.h create mode 100644 MLKStreamError.m create mode 100644 MLKUnboundVariableError.h create mode 100644 MLKUnboundVariableError.m diff --git a/GNUmakefile b/GNUmakefile index b3bce46..3fe3533 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -72,15 +72,16 @@ ToiletKit_OBJC_FILES = functions.m globals.m MLKArray.m \ MLKForeignProcedure.m MLKForm.m MLKInteger.m \ MLKInterpretedClosure.m MLKInterpreter.m \ MLKLexicalContext.m MLKLexicalEnvironment.m \ - MLKNumber.m MLKPackage.m MLKParenReader.m \ - MLKQuoteReader.m MLKRatio.m MLKReader.m \ - MLKReadtable.m MLKReaderError.m MLKRoot.m \ - MLKSemicolonReader.m MLKSharpsignColonReader.m \ - MLKSingleFloat.m MLKStreamStream.m \ + MLKNoSuchSymbolError.m MLKNumber.m MLKPackage.m \ + MLKParenReader.m MLKQuoteReader.m MLKRatio.m \ + MLKReader.m MLKReadtable.m MLKReaderError.m \ + MLKRoot.m MLKSemicolonReader.m \ + MLKSharpsignColonReader.m MLKSingleFloat.m \ + MLKStreamError.m MLKStreamStream.m \ MLKStringInputStream.m MLKStringOutputStream.m \ MLKStringReader.m MLKSymbol.m MLKThrowException.m \ - MLKValuesFunction.m NSObject-MLKPrinting.m \ - NSString-MLKPrinting.m + MLKUnboundVariableError.m MLKValuesFunction.m \ + NSObject-MLKPrinting.m NSString-MLKPrinting.m ToiletKit_OBJCFLAGS = -Wall ToiletKit_LDFLAGS = -lgmp -lffi -ldl diff --git a/MLKNoSuchSymbolError.h b/MLKNoSuchSymbolError.h new file mode 100644 index 0000000..bbefb21 --- /dev/null +++ b/MLKNoSuchSymbolError.h @@ -0,0 +1,35 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKPackage.h" + +#import +#import + + +@interface MLKNoSuchSymbolError : NSException +{ + MLKPackage *_package; + NSString *_symbolName; +} + +-(id) initWithPackage:(MLKPackage *)package + symbolName:(NSString *)name; + +-(void) dealloc; +@end diff --git a/MLKNoSuchSymbolError.m b/MLKNoSuchSymbolError.m new file mode 100644 index 0000000..1df60ef --- /dev/null +++ b/MLKNoSuchSymbolError.m @@ -0,0 +1,45 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKNoSuchSymbolError.h" +#import "runtime-compatibility.h" +#import "util.h" + + +@implementation MLKNoSuchSymbolError +-(id) initWithPackage:(MLKPackage *)package + symbolName:(NSString *)name +{ + self = [super initWithName:@"MLKNoSuchSymbolError" + reason:[NSString stringWithFormat: + @"The package %@ does not contain a symbol named %@.", + self, + name] + userInfo:nil]; + LASSIGN (_symbolName, name); + LASSIGN (_package, package); + return self; +} + +-(void) dealloc +{ + LDESTROY (_symbolName); + LDESTROY (_package); + [super dealloc]; +} +@end diff --git a/MLKStreamError.h b/MLKStreamError.h new file mode 100644 index 0000000..e9951d0 --- /dev/null +++ b/MLKStreamError.h @@ -0,0 +1,30 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import + + +@interface MLKStreamError : NSException +{ + id _stream; +} + +-(id) initWithStream:(id)stream; + +-(void) dealloc; +@end diff --git a/MLKStreamError.m b/MLKStreamError.m new file mode 100644 index 0000000..e647039 --- /dev/null +++ b/MLKStreamError.m @@ -0,0 +1,40 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKStreamError.h" +#import "runtime-compatibility.h" +#import "util.h" + + +@implementation MLKStreamError +-(id) initWithStream:(id)stream; +{ + self = [super initWithName:@"MLKStreamError" + reason:[NSString stringWithFormat: + @"Tried to read beyond the end of file."] + userInfo:nil]; + LASSIGN (_stream, stream); + return self; +} + +-(void) dealloc +{ + LDESTROY (_stream); + [super dealloc]; +} +@end diff --git a/MLKThrowException.h b/MLKThrowException.h index b2321e7..1541302 100644 --- a/MLKThrowException.h +++ b/MLKThrowException.h @@ -16,22 +16,22 @@ * along with this program. If not, see . */ -#include +#import "MLKSymbol.h" -@class MLKSymbol; +#include @interface MLKThrowException : NSException { MLKSymbol *_catchTag; - id _value; + NSArray *_values; } --(MLKThrowException *) initWithCatchTag:(MLKSymbol *)catchTag - value:(id)value; +-(id) initWithCatchTag:(MLKSymbol *)catchTag + values:(NSArray *)values; -(MLKSymbol *) catchTag; --(id) value; +-(NSArray *) thrownValues; -(void) dealloc; @end diff --git a/MLKThrowException.m b/MLKThrowException.m index 2c512a7..b306aec 100644 --- a/MLKThrowException.m +++ b/MLKThrowException.m @@ -22,12 +22,17 @@ @implementation MLKThrowException --(MLKThrowException *) initWithCatchTag:(MLKSymbol *)catchTag - value:(id)value +-(id) initWithCatchTag:(MLKSymbol *)catchTag + values:(NSArray *)values { - self = [super init]; + self = [super initWithName:@"MLKThrowException" + reason:[NSString stringWithFormat: + @"THROW: tag %@, values %@.", + MLKPrintToString(catchTag), + MLKPrintToString(values)] + userInfo:nil]; LASSIGN (_catchTag, catchTag); - LASSIGN (_value, value); + LASSIGN (_values, values); return self; } @@ -36,15 +41,15 @@ return _catchTag; } --(id) value +-(NSArray *) thrownValues { - return _value; + return _values; } -(void) dealloc { - LRELEASE (_catchTag); - LRELEASE (_value); + LDESTROY (_catchTag); + LDESTROY (_values); [super dealloc]; } @end diff --git a/MLKUnboundVariableError.h b/MLKUnboundVariableError.h new file mode 100644 index 0000000..782dbe3 --- /dev/null +++ b/MLKUnboundVariableError.h @@ -0,0 +1,36 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKEnvironment.h" +#import "MLKSymbol.h" + +#import +#import + + +@interface MLKUnboundVariableError : NSException +{ + MLKSymbol *_symbol; + MLKEnvironment *_env; +} + +-(id) initWithSymbol:(MLKSymbol *)symbol + inEnvironment:(MLKEnvironment *)env; + +-(void) dealloc; +@end diff --git a/MLKUnboundVariableError.m b/MLKUnboundVariableError.m new file mode 100644 index 0000000..2408e0d --- /dev/null +++ b/MLKUnboundVariableError.m @@ -0,0 +1,44 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKUnboundVariableError.h" +#import "runtime-compatibility.h" +#import "util.h" + + +@implementation MLKUnboundVariableError +-(id) initWithSymbol:(MLKSymbol *)symbol + inEnvironment:(MLKEnvironment *)env +{ + self = [super initWithName:@"MLKUnboundVariableError" + reason:[NSString stringWithFormat: + @"The variable %@ is unbound.", + MLKPrintToString(symbol)] + userInfo:nil]; + LASSIGN (_symbol, symbol); + LASSIGN (_env, env); + return self; +} + +-(void) dealloc +{ + LDESTROY (_env); + LDESTROY (_symbol); + [super dealloc]; +} +@end -- cgit v1.2.3