]> www.ginac.de Git - cln.git/blobdiff - src/rational/input/cl_RA_read.cc
Avoid "this statement may fall through" warnings.
[cln.git] / src / rational / input / cl_RA_read.cc
index 7fae7130dab21ef2ca54ea7d32460b0c1ed9dfdc..4cda80250603be249f0c3dee84e04902294dea77 100644 (file)
@@ -4,7 +4,7 @@
 // function code.
 
 // General includes.
-#include "cl_sysdep.h"
+#include "base/cl_sysdep.h"
 
 // Specification.
 #include "cln/rational_io.h"
 // Implementation.
 
 #include <cstring>
+#include <sstream>
 #include "cln/input.h"
 #include "cln/integer.h"
 #include "cln/integer_io.h"
-#include "cl_I.h"
-#include "cln/abort.h"
+#include "integer/cl_I.h"
+#include "cln/exception.h"
 
 namespace cln {
 
@@ -49,7 +50,7 @@ static const char * skip_digits (const char * ptr, const char * string_limit, un
   if (end_of_parse)                                                    \
     { *end_of_parse = (ptr); }                                         \
   else                                                                 \
-    { if ((ptr) != string_limit) { read_number_junk((ptr),string,string_limit); } }
+    { if ((ptr) != string_limit) { throw read_number_junk_exception((ptr),string,string_limit); } }
 
 const cl_RA read_rational (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
 {
@@ -83,10 +84,10 @@ const cl_RA read_rational (const cl_read_flags& flags, const char * string, cons
                                                goto not_rational_syntax;
                                        var cl_I base = read_integer(10,0,ptr,0,base_end_ptr-ptr);
                                        if (!((base >= 2) && (base <= 36))) {
-                                               fprint(std::cerr, "Base must be an integer in the range from 2 to 36, not ");
-                                               fprint(std::cerr, base);
-                                               fprint(std::cerr, "\n");
-                                               cl_abort();
+                                               std::ostringstream buf;
+                                               fprint(buf, "Base must be an integer in the range from 2 to 36, not ");
+                                               fprint(buf, base);
+                                               throw runtime_exception(buf.str());
                                        }
                                        rational_base = FN_to_UV(base); ptr = base_end_ptr;
                                        break;
@@ -98,7 +99,7 @@ const cl_RA read_rational (const cl_read_flags& flags, const char * string, cons
                var cl_signean sign = 0;
                if (ptr == string_limit) goto not_rational_syntax;
                switch (*ptr) {
-                       case '-': sign = ~sign;
+                       case '-': sign = ~sign; // fallthrough
                        case '+': ptr++;
                        default: break;
                }
@@ -146,7 +147,7 @@ not_rational_syntax:
                *end_of_parse = string;
                return 0; // dummy return
        }
-       read_number_bad_syntax(string,string_limit);
+       throw read_number_bad_syntax_exception(string,string_limit);
 }
 
 }  // namespace cln