 
 		private function eval(expression:String):*
 		{
-			return runtime.eval(reader.read(expression));
+			reader.load(expression);
+
+			var sexp:*;
+			var result:*;
+
+			while (reader.hasTokens() && (sexp = reader.parse()))
+			{
+				result = runtime.eval(sexp);
+			}
+
+			return result;
 		}
 
 		private function assert(expression:String, result:*):void 
 		{
-			assertThat(expression, eval(expression), equalTo(result));
+			assertThat(expression, eval(expression), result is Matcher ? result : equalTo(result));
 		}
 
 		private function ignore(expression:String):void 

			eval(<![CDATA[

				(label a-plus-abs-b (quote (lambda (a b)
  					((if (> b 0) (quote +) (quote -)) a b))))

				]]>.toString());


			assert(<![CDATA[

				(if (and (> b a) (< b (* a b)))
					b
					a)
				
				]]>.toString(), eval('b'));

