* sim/ucsim/cmd.src/error.cc, sim/ucsim/cmd.src/errorcl.h,
[fw/sdcc] / sim / ucsim / sim.src / stack.cc
index d27f91be371a59ab77865b27c40a0f5db68e3f71..f10ab8fc077b273db6fcaaa1eb71e9a77ffb116c 100644 (file)
@@ -420,24 +420,39 @@ cl_stack_pop::match(class cl_stack_op *op)
  * Stack Errors
  */
 
-ERROR_CLASS_DEF_PARENT_ON(err_error, stack, "stack",
-                         error_class_base, ERROR_OFF);
+class cl_error_class *cl_error_stack::error_stack_class;
+
+cl_error_stack::cl_error_stack(void)
+{
+  if (NULL == error_stack_class)
+    error_stack_class= new cl_error_class(err_error, "stack", classification, ERROR_OFF);
+  classification= error_stack_class;
+}
 
 /* Stack Tracker Errors */
-ERROR_CLASS_DEF_PARENT(err_error, stack_tracker, "stack_tracker",
-                      error_stack_class);
+
+class cl_error_class *cl_error_stack_tracker::error_stack_tracker_class;
+
+cl_error_stack_tracker::cl_error_stack_tracker(void)
+{
+//  cl_error_class *error_stack_tracker_class = new cl_error_class(err_error, "stack_tracker", error_stack_class, ERROR_OFF);
+//  classification= &error_stack_tracker_class;
+  if (NULL == error_stack_tracker_class)
+    error_stack_tracker_class= new cl_error_class(err_error, "stack_tracker", classification);
+  classification= error_stack_tracker_class;
+}
 
 /* Stack Tracker: wrong handle */
-ERROR_CLASS_DEF_PARENT(err_error,
-                      stack_tracker_wrong_handle,
-                      "stack_tracker_wrong_handle",
-                      error_stack_tracker_class);
+
+class cl_error_class *cl_error_stack_tracker_wrong_handle::error_stack_tracker_wrong_handle_class;
 
 cl_error_stack_tracker_wrong_handle::cl_error_stack_tracker_wrong_handle(bool write_op):
   cl_error_stack_tracker()
 {
   write_operation= write_op;
-  classification= &error_stack_tracker_wrong_handle_class;
+  if (NULL == error_stack_tracker_wrong_handle_class)
+    error_stack_tracker_wrong_handle_class= new cl_error_class(err_error, "stack_tracker_wrong_handle", classification);
+  classification= error_stack_tracker_wrong_handle_class;
 }
 
 void
@@ -448,17 +463,17 @@ cl_error_stack_tracker_wrong_handle::print(class cl_commander *c)
 }
 
 /* Stack Tracker: operation on empty stack */
-ERROR_CLASS_DEF_PARENT(err_error,
-                      stack_tracker_empty,
-                      "operation_on_empty_stack",
-                      error_stack_tracker_class);
+
+class cl_error_class *cl_error_stack_tracker_empty::error_stack_tracker_empty_class;
 
 cl_error_stack_tracker_empty::
 cl_error_stack_tracker_empty(class cl_stack_op *op):
   cl_error_stack_tracker()
 {
   operation= op->mk_copy();
-  classification= &error_stack_tracker_empty_class;
+  if (NULL == error_stack_tracker_empty_class)
+    error_stack_tracker_empty_class= new cl_error_class(err_error, "operation_on_empty_stack", classification);
+  classification= error_stack_tracker_empty_class;
 }
 
 cl_error_stack_tracker_empty::~cl_error_stack_tracker_empty(void)
@@ -476,10 +491,8 @@ cl_error_stack_tracker_empty::print(class cl_commander *c)
 }
 
 /* Stack Tracker: operation on empty stack */
-ERROR_CLASS_DEF_PARENT(err_warning,
-                      stack_tracker_unmatch,
-                      "stack_operation_unmatched_to_top_of_stack",
-                      error_stack_tracker_class);
+
+class cl_error_class *cl_error_stack_tracker_unmatch::error_stack_tracker_unmatch_class;
 
 cl_error_stack_tracker_unmatch::
 cl_error_stack_tracker_unmatch(class cl_stack_op *Top, class cl_stack_op *op):
@@ -487,7 +500,9 @@ cl_error_stack_tracker_unmatch(class cl_stack_op *Top, class cl_stack_op *op):
 {
   top= Top->mk_copy();
   operation= op->mk_copy();
-  classification= &error_stack_tracker_unmatch_class;
+  if (NULL == error_stack_tracker_unmatch_class)
+    error_stack_tracker_unmatch_class= new cl_error_class(err_warning, "stack_operation_unmatched_to_top_of_stack", classification);
+  classification= error_stack_tracker_unmatch_class;
 }
 
 cl_error_stack_tracker_unmatch::~cl_error_stack_tracker_unmatch(void)
@@ -507,10 +522,8 @@ cl_error_stack_tracker_unmatch::print(class cl_commander *c)
 }
 
 /* Stack Tracker: stack is inconsistent */
-ERROR_CLASS_DEF_PARENT(err_warning,
-                      stack_tracker_inconsistent,
-                      "stack_looks_corrupted",
-                      error_stack_tracker_class);
+
+class cl_error_class *cl_error_stack_tracker_inconsistent::error_stack_tracker_inconsistent_class;
 
 cl_error_stack_tracker_inconsistent::
 cl_error_stack_tracker_inconsistent(class cl_stack_op *op,
@@ -518,7 +531,9 @@ cl_error_stack_tracker_inconsistent(class cl_stack_op *op,
 {
   operation= op->mk_copy();
   unread_data_size= the_unread_data_size;
-  classification= &error_stack_tracker_inconsistent_class;
+  if (NULL == error_stack_tracker_inconsistent_class)
+    error_stack_tracker_inconsistent_class= new cl_error_class(err_warning, "stack_looks_corrupted", classification);
+  classification= error_stack_tracker_inconsistent_class;
 }
 
 cl_error_stack_tracker_inconsistent::~cl_error_stack_tracker_inconsistent(void)