Switch to new scm_c_with_throw_handler
authorClinton Ebadi <clinton@unknownlamer.org>
Fri, 8 May 2020 02:47:41 +0000 (22:47 -0400)
committerClinton Ebadi <clinton@unknownlamer.org>
Fri, 8 May 2020 02:47:41 +0000 (22:47 -0400)
Initial fix was not quite right -- scm_c_with_throw_handler is the
modern equivalent of scm_c_lazy_catch and should resolve crashes after
errors in scheme extensions.

source/Interp.C

index 0e1870b..1a96cef 100644 (file)
@@ -88,29 +88,35 @@ Interp::EmptyHandler(void *data, SCM tag, SCM args)
 SCM
 Interp::LazyApplyWrapper(void *data)
 {
-  return scm_internal_catch(SCM_BOOL_T,
-                                (scm_t_catch_body) Interp::ScmApplyWrapper, 
-                                data,
-                                (scm_t_catch_handler) Interp::LazyHandler, 
-                                0);
+  return scm_c_with_throw_handler(SCM_BOOL_T,
+                                 (scm_t_catch_body) Interp::ScmApplyWrapper,
+                                 data,
+                                 (scm_t_catch_handler) Interp::LazyHandler,
+                                 0,
+                                 0);
 }
 
 
 static SCM
 lazy_eval_file(char *filename)
 {
-  return scm_internal_catch(SCM_BOOL_T,
-                                (scm_t_catch_body) scm_c_primitive_load_path, 
-                                filename,
-                                (scm_t_catch_handler) Interp::LazyHandler, 0);
+  return scm_c_with_throw_handler(SCM_BOOL_T,
+                                 (scm_t_catch_body) scm_c_primitive_load_path,
+                                 filename,
+                                 (scm_t_catch_handler) Interp::LazyHandler,
+                                 0,
+                                 0);
 }
 
 static SCM
 lazy_eval_string(char *str)
 {
-  return scm_internal_catch(SCM_BOOL_T,
-                                (scm_t_catch_body) scm_c_eval_string, str,
-                                (scm_t_catch_handler) Interp::LazyHandler, 0);
+  return scm_c_with_throw_handler(SCM_BOOL_T,
+                                 (scm_t_catch_body) scm_c_eval_string,
+                                 str,
+                                 (scm_t_catch_handler) Interp::LazyHandler,
+                                 0,
+                                 0);
 }
 
 
@@ -335,9 +341,12 @@ Interp::Execute(Bot *b, String command)
 #endif
   
   bot = b;
-  scm_internal_catch(SCM_BOOL_T,
-                    (scm_t_catch_body) lazy_eval_string, (void *) static_cast<const char *> (command.c_str ()),
-                    (scm_t_catch_handler) Interp::EmptyHandler, 0);
+  scm_c_with_throw_handler(SCM_BOOL_T,
+                          (scm_t_catch_body) lazy_eval_string,
+                          (void *) static_cast<const char *> (command.c_str ()),
+                          (scm_t_catch_handler) Interp::EmptyHandler,
+                          0,
+                          0);
   
 #ifdef MULTITHREAD
   // We release the lock
@@ -354,10 +363,12 @@ Interp::LoadScript(Bot *b, String filename)
   pthread_mutex_lock(&mutex);
 #endif
   bot = b;
-  scm_internal_catch(SCM_BOOL_T,
-                    (scm_t_catch_body) lazy_eval_file, 
-                    (void *)static_cast<const char * >(filename.c_str ()),
-                    (scm_t_catch_handler) Interp::EmptyHandler, 0);
+  scm_c_with_throw_handler(SCM_BOOL_T,
+                          (scm_t_catch_body) lazy_eval_file,
+                          (void *)static_cast<const char * >(filename.c_str ()),
+                          (scm_t_catch_handler) Interp::EmptyHandler,
+                          0,
+                          0);
 #ifdef MULTITHREAD
   // We release the lock
   pthread_mutex_unlock(&mutex);