- added some error checking, so that we get more usefull error messages than asserts
authorIngo Ruhnke <grumbel@gmx.de>
Fri, 26 Mar 2004 15:17:10 +0000 (15:17 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Fri, 26 Mar 2004 15:17:10 +0000 (15:17 +0000)
SVN-Revision: 372

src/lispreader.cpp

index 7981189..df34a9e 100644 (file)
@@ -26,7 +26,7 @@
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
-
+#include "setup.h"
 #include "lispreader.h"
 
 #define TOKEN_ERROR                   -1
@@ -1041,6 +1041,8 @@ LispReader::read_int (const char* name, int* i)
   lisp_object_t* obj = search_for (name);
   if (obj)
     {
+      if (!lisp_integer_p(lisp_car(obj)))
+        st_abort("LispReader expected type integer at token: ", name);
       *i = lisp_integer(lisp_car(obj));
       return true;
     }
@@ -1066,6 +1068,8 @@ LispReader::read_float (const char* name, float* f)
   lisp_object_t* obj = search_for (name);
   if (obj)
     {
+      if (!lisp_real_p(lisp_car(obj)) && !lisp_integer_p(lisp_car(obj)))
+        st_abort("LispReader expected type real at token: ", name);
       *f = lisp_real(lisp_car(obj));
       return true;
     }
@@ -1080,6 +1084,8 @@ LispReader::read_string_vector (const char* name, std::vector<std::string>* vec)
     {
       while(!lisp_nil_p(obj))
         {
+          if (!lisp_string_p(lisp_car(obj)))
+            st_abort("LispReader expected type string at token: ", name);
           vec->push_back(lisp_string(lisp_car(obj)));
           obj = lisp_cdr(obj);
         }
@@ -1096,6 +1102,8 @@ LispReader::read_int_vector (const char* name, std::vector<int>* vec)
     {
       while(!lisp_nil_p(obj))
         {
+          if (!lisp_integer_p(lisp_car(obj)))
+            st_abort("LispReader expected type integer at token: ", name);
           vec->push_back(lisp_integer(lisp_car(obj)));
           obj = lisp_cdr(obj);
         }
@@ -1126,7 +1134,8 @@ LispReader::read_string (const char* name, std::string* str)
   lisp_object_t* obj = search_for (name);
   if (obj)
     {
-
+      if (!lisp_string_p(lisp_car(obj)))
+        st_abort("LispReader expected type string at token: ", name);
      *str = lisp_string(lisp_car(obj));
       return true;
     }
@@ -1139,6 +1148,8 @@ LispReader::read_bool (const char* name, bool* b)
   lisp_object_t* obj = search_for (name);
   if (obj)
     {
+      if (!lisp_boolean_p(lisp_car(obj)))
+        st_abort("LispReader expected type bool at token: ", name);
       *b = lisp_boolean(lisp_car(obj));
       return true;
     }