[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