summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-09-02 11:59:47 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-09-02 11:59:47 +0200
commit84597fcf74fc74672fe664456e62ec6be5f2b066 (patch)
tree770e3e4dc9a4424a11358f91e6c593babaa890d0
parent5117dba9fcf4b23f94fc9b5896ffdb4876c422b3 (diff)
Add classes MLKNoSuchSymbolError, MLKStreamError, and MLKUnboundVariableError.
-rw-r--r--GNUmakefile15
-rw-r--r--MLKNoSuchSymbolError.h35
-rw-r--r--MLKNoSuchSymbolError.m45
-rw-r--r--MLKStreamError.h30
-rw-r--r--MLKStreamError.m40
-rw-r--r--MLKThrowException.h12
-rw-r--r--MLKThrowException.m21
-rw-r--r--MLKUnboundVariableError.h36
-rw-r--r--MLKUnboundVariableError.m44
9 files changed, 257 insertions, 21 deletions
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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "MLKPackage.h"
+
+#import <Foundation/NSException.h>
+#import <Foundation/NSString.h>
+
+
+@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 <http://www.gnu.org/licenses/>.
+ */
+
+#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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Foundation/NSException.h>
+
+
+@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 <http://www.gnu.org/licenses/>.
+ */
+
+#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 <http://www.gnu.org/licenses/>.
*/
-#include <Foundation/NSException.h>
+#import "MLKSymbol.h"
-@class MLKSymbol;
+#include <Foundation/NSException.h>
@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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "MLKEnvironment.h"
+#import "MLKSymbol.h"
+
+#import <Foundation/NSException.h>
+#import <Foundation/NSString.h>
+
+
+@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 <http://www.gnu.org/licenses/>.
+ */
+
+#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