// cl_I_to_UL().
// General includes.
-#include "cl_sysdep.h"
+#include "base/cl_sysdep.h"
// Specification.
-#include "cl_integer.h"
+#include "cln/integer.h"
// Implementation.
-#include "cl_number.h"
-#include "cl_I.h"
-#include "cl_DS.h"
-#include "cl_io.h"
-#include "cl_integer_io.h"
-#include "cl_abort.h"
+#include "cln/number.h"
+#include "integer/cl_I.h"
+#include "base/digitseq/cl_DS.h"
+#include "cln/io.h"
+#include "cln/integer_io.h"
+#include "cln/exception.h"
+#include <sstream>
+
+namespace cln {
uint32 cl_I_to_UL (const cl_I& obj)
{
if (fixnump(obj)) {
// Fixnum
- var sint32 wert = FN_to_L(obj);
+ var sintV wert = FN_to_V(obj);
if (wert >= 0)
- return (uint32)wert;
+ #if (intVsize>32)
+ if (wert < bit(32))
+ #endif
+ return (uint32)wert;
goto bad;
} else { // Bignum
var cl_heap_bignum* bn = TheBignum(obj);
if ((sintD)mspref(arrayMSDptr(bn->data,len),0) < 0)
goto bad;
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
+ if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
if (len == i) /* genau i Digits? */ \
/* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
if ( (i*intDsize-1 > 32) \
#undef IF_LENGTH
}
bad: // unpassendes Objekt
- fprint(cl_stderr, "Not a 32-bit integer: ");
- fprint(cl_stderr, obj);
- fprint(cl_stderr, "\n");
- cl_abort();
+ std::ostringstream buf;
+ fprint(buf, "Not a 32-bit integer: ");
+ fprint(buf, obj);
+ throw runtime_exception(buf.str());
}
+
+} // namespace cln