[uim-commit] r220 - trunk/uim

yamaken@freedesktop.org yamaken@freedesktop.org
Mon Jan 10 04:09:52 PST 2005


Author: yamaken
Date: 2005-01-10 04:09:48 -0800 (Mon, 10 Jan 2005)
New Revision: 220

Modified:
   trunk/uim/plugin.c
   trunk/uim/siod.h
   trunk/uim/slib.c
   trunk/uim/uim-scm.c
Log:
* uim/siod.h
  - (NPOINTERP): New macro
* uim/slib.c
  - (get_c_pointer): Fix inversed type check
* uim/plugin.c
  - (uim_quit_plugin):
    * Enable when #ifdef UIM_SCM_NESTED_EVAL
    * Add uim_scm_gc_protect_stack() since this function is called
      from C execution context. I'll describe about it into
      doc/UIM-SCM

* uim/uim-scm.c
  - (siod_init_subr): New static function
  - (uim_scm_init_subr_0, uim_scm_init_subr_1, uim_scm_init_subr_2,
    uim_scm_init_subr_3, uim_scm_init_subr_4, uim_scm_init_subr_5):
    Replace init_subr() with siod_init_subr() to apply
    uim_scm_gc_protect_stack() since this function is called from C
    execution context


Modified: trunk/uim/plugin.c
===================================================================
--- trunk/uim/plugin.c	2005-01-10 12:03:23 UTC (rev 219)
+++ trunk/uim/plugin.c	2005-01-10 12:09:48 UTC (rev 220)
@@ -186,11 +186,13 @@
 /* Called from uim_quit */
 void uim_quit_plugin(void)
 {
-#if 0
-  /* XXX: This code does not work well */
+#ifdef UIM_SCM_NESTED_EVAL
+  uim_lisp stack_start;
   uim_lisp list_car, list_cdr;
-  uim_lisp alist = uim_scm_eval_c_string("plugin-alist");
+  uim_lisp alist;
 
+  uim_scm_gc_protect_stack(&stack_start);
+  alist = uim_scm_eval_c_string("plugin-alist");
   for(list_car = uim_scm_car(alist), list_cdr = uim_scm_cdr(alist);
       list_car != uim_scm_f();
       list_car = uim_scm_car(list_cdr), list_cdr = uim_scm_cdr(list_cdr))
@@ -210,5 +212,6 @@
     (plugin_instance_quit)();
     dlclose(library);
   }
+  uim_scm_gc_unprotect_stack(&stack_start);
 #endif
 }

Modified: trunk/uim/siod.h
===================================================================
--- trunk/uim/siod.h	2005-01-10 12:03:23 UTC (rev 219)
+++ trunk/uim/siod.h	2005-01-10 12:09:48 UTC (rev 220)
@@ -202,6 +202,7 @@
 #define NINTNUMP(x) NTYPEP(x,tc_intnum)
 #define NSYMBOLP(x) NTYPEP(x,tc_symbol)
 #define NSTRINGP(x) NTYPEP(x,tc_string)
+#define NPOINTERP(x) NTYPEP(x,tc_c_pointer)
 
 #define TKBUFFERN 5120
 

Modified: trunk/uim/slib.c
===================================================================
--- trunk/uim/slib.c	2005-01-10 12:03:23 UTC (rev 219)
+++ trunk/uim/slib.c	2005-01-10 12:09:48 UTC (rev 220)
@@ -2172,7 +2172,7 @@
 static void *
 get_c_pointer (LISP x)
 {
-  if POINTERP
+  if NPOINTERP
     (x) my_err ("not a C pointer", x);
   return (x->storage_as.c_pointer.data);
 }

Modified: trunk/uim/uim-scm.c
===================================================================
--- trunk/uim/uim-scm.c	2005-01-10 12:03:23 UTC (rev 219)
+++ trunk/uim/uim-scm.c	2005-01-10 12:09:48 UTC (rev 220)
@@ -57,6 +57,8 @@
 #include "uim-compat-scm.c"
 #endif
 
+static void siod_init_subr(char *name, long type, uim_lisp (*fcn)(void));
+
 static uim_lisp true_sym;
 static uim_lisp false_sym;
 static uim_lisp protected_arg0;
@@ -391,42 +393,52 @@
   return succeeded;
 }
 
+static void
+siod_init_subr(char *name, long type, uim_lisp (*fcn)(void))
+{
+  uim_lisp stack_start;
+
+  uim_scm_gc_protect_stack(&stack_start);
+  init_subr(name, type, (SUBR_FUNC)fcn);
+  uim_scm_gc_unprotect_stack(&stack_start);
+}
+
 void
 uim_scm_init_subr_0(char *name, uim_lisp (*fcn)(void))
 {
-  init_subr(name, tc_subr_0, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_0, (SUBR_FUNC)fcn);
 }
 
 void
 uim_scm_init_subr_1(char *name, uim_lisp (*fcn)(uim_lisp))
 {
-  init_subr(name, tc_subr_1, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_1, (SUBR_FUNC)fcn);
 }
 
 void
 uim_scm_init_subr_2(char *name, uim_lisp (*fcn)(uim_lisp, uim_lisp))
 {
-  init_subr(name, tc_subr_2, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_2, (SUBR_FUNC)fcn);
 }
 
 void
 uim_scm_init_subr_3(char *name, uim_lisp (*fcn)(uim_lisp, uim_lisp, uim_lisp))
 {
-  init_subr(name, tc_subr_3, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_3, (SUBR_FUNC)fcn);
 }
 
 void
 uim_scm_init_subr_4(char *name, uim_lisp (*fcn)(uim_lisp, uim_lisp, uim_lisp,
 						uim_lisp))
 {
-  init_subr(name, tc_subr_4, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_4, (SUBR_FUNC)fcn);
 }
 
 void
 uim_scm_init_subr_5(char *name, uim_lisp (*fcn)(uim_lisp, uim_lisp, uim_lisp,
 						uim_lisp, uim_lisp))
 {
-  init_subr(name, tc_subr_5, (SUBR_FUNC)fcn);
+  siod_init_subr(name, tc_subr_5, (SUBR_FUNC)fcn);
 }
 
 static void



More information about the Uim-commit mailing list