#include "cln/object.h"
#include "cln/io.h"
-#include "cln/abort.h"
+#include "cln/exception.h"
#include <cstring>
namespace cln {
+struct cl_string;
+
// General, reference counted and garbage collected strings.
struct cl_heap_string : public cl_heap {
private:
unsigned long length; // length (in characters)
char data[1]; // the characters, plus a '\0' at the end
// Standard allocation disabled.
- void* operator new (size_t size) { (void)size; cl_abort(); return (void*)1; }
+ void* operator new (size_t size) { (void)size; throw runtime_exception(); }
// Standard deallocation disabled.
- void operator delete (void* ptr) { (void)ptr; cl_abort(); }
+ void operator delete (void* ptr) { (void)ptr; throw runtime_exception(); }
// No default constructor.
cl_heap_string ();
private:
// Return a specific character.
char operator[] (unsigned long i) const
{
- if (!(i < length())) cl_abort(); // Range check.
+ if (!(i < length())) throw runtime_exception(); // Range check.
return ((cl_heap_string*)pointer)->data[i];
}
// New ANSI C++ compilers also want the following.
}
inline cl_string::cl_string ()
{
- extern const cl_string cl_null_string;
- pointer = (cl_heap_string*) cl_null_string;
+ static const cl_string cl_null_st(NULL, 0);
+ pointer = (cl_heap_string*) cl_null_st;
}
-CL_REQUIRE(cl_st_null)
// Hash code.
extern unsigned long hashcode (const cl_string& str);