Author: yamakenz
Date: Fri Aug 10 13:02:15 2007
New Revision: 4812
Modified:
trunk/uim/uim-key.c
trunk/uim/uim-scm.c
trunk/uim/uim-scm.h
Log:
* uim/uim-scm.h
- (uim_scm_error, uim_scm_error_obj): New function decl
* uim/uim-scm.c
- (struct uim_scm_error_args): Rename to uim_scm_error_obj_args
- (struct uim_scm_error_obj_args): Renamed from uim_scm_error_args
- (uim_scm_error, uim_scm_error_internal): New function
- (uim_scm_error_obj):
* Renamed from uim_scm_error()
* Make public
- (uim_scm_error_obj_internal): Renamed from uim_scm_error_internal()
- (uim_scm_c_int_internal, uim_scm_refer_c_str_internal,
uim_scm_c_ptr, uim_scm_c_func_ptr): Follow the renaming
* uim/uim-key.c
- (define_key):
* Follow the renaming
* Error if invalid form
Modified: trunk/uim/uim-key.c
==============================================================================
--- trunk/uim/uim-key.c (original)
+++ trunk/uim/uim-key.c Fri Aug 10 13:02:15 2007
@@ -410,13 +410,8 @@
{
uim_lisp form, predicate_sym, sources;
- if (uim_scm_length(args) != 2) {
-#if 0
- uim_scm_error("define-key: invalid form", args);
-#else
- return uim_scm_f();
-#endif
- }
+ if (uim_scm_length(args) != 2)
+ uim_scm_error_obj("define-key: invalid form", args);
predicate_sym = CAR(args);
sources = CAR(CDR(args));
Modified: trunk/uim/uim-scm.c
==============================================================================
--- trunk/uim/uim-scm.c (original)
+++ trunk/uim/uim-scm.c Fri Aug 10 13:02:15 2007
@@ -65,12 +65,12 @@
static uim_lisp protected;
static uim_bool initialized, sscm_is_exit_with_fatal_error;
-static void uim_scm_error(const char *msg, uim_lisp errobj);
-struct uim_scm_error_args {
+static void *uim_scm_error_internal(const char *msg);
+struct uim_scm_error_obj_args {
const char *msg;
uim_lisp errobj;
};
-static void *uim_scm_error_internal(struct uim_scm_error_args *args);
+static void *uim_scm_error_obj_internal(struct uim_scm_error_obj_args *args);
struct call_args {
uim_lisp proc;
@@ -108,10 +108,27 @@
};
static void *uim_scm_cons_internal(struct cons_args *args);
-static void
-uim_scm_error(const char *msg, uim_lisp errobj)
+
+void
+uim_scm_error(const char *msg)
+{
+ assert(uim_scm_gc_any_contextp());
+ assert(msg);
+
+
uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_scm_error_internal,
msg);
+}
+
+static void *
+uim_scm_error_internal(const char *msg)
+{
+ scm_plain_error(msg);
+ SCM_NOTREACHED;
+}
+
+void
+uim_scm_error_obj(const char *msg, uim_lisp errobj)
{
- struct uim_scm_error_args args;
+ struct uim_scm_error_obj_args args;
assert(uim_scm_gc_any_contextp());
assert(msg);
@@ -119,11 +136,11 @@
args.msg = msg;
args.errobj = errobj;
-
uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_scm_error_internal,
&args);
+
uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_scm_error_obj_internal,
&args);
}
static void *
-uim_scm_error_internal(struct uim_scm_error_args *args)
+uim_scm_error_obj_internal(struct uim_scm_error_obj_args *args)
{
/* FIXME: don't terminate the process */
scm_error_obj(NULL, args->msg, (ScmObj)args->errobj);
@@ -172,7 +189,7 @@
integer = (uim_lisp)uim_lisp_integer;
if (!SCM_INTP((ScmObj)integer))
- uim_scm_error("uim_scm_c_int: number required but got ", integer);
+ uim_scm_error_obj("uim_scm_c_int: number required but got ", integer);
c_int = SCM_INT_VALUE((ScmObj)integer);
return (void *)(intptr_t)c_int;
@@ -228,8 +245,8 @@
} else if (SCM_SYMBOLP((ScmObj)str)) {
c_str = SCM_SYMBOL_NAME((ScmObj)str);
} else {
- uim_scm_error("uim_scm_refer_c_str: string or symbol required but got ",
- str);
+ uim_scm_error_obj("uim_scm_refer_c_str: string or symbol required but got
",
+ str);
SCM_NOTREACHED;
}
@@ -297,7 +314,7 @@
assert(uim_scm_gc_protectedp(ptr));
if (!SCM_C_POINTERP((ScmObj)ptr))
- uim_scm_error("uim_scm_c_ptr: C pointer required but got ", ptr);
+ uim_scm_error_obj("uim_scm_c_ptr: C pointer required but got ", ptr);
return SCM_C_POINTER_VALUE((ScmObj)ptr);
}
@@ -324,8 +341,7 @@
assert(uim_scm_gc_protectedp(func_ptr));
if (!SCM_C_FUNCPOINTERP((ScmObj)func_ptr))
- uim_scm_error("uim_scm_c_func_ptr: C function pointer required but got ",
- func_ptr);
+ uim_scm_error_obj("uim_scm_c_func_ptr: C function pointer required but got
", func_ptr);
return SCM_C_FUNCPOINTER_VALUE((ScmObj)func_ptr);
}
Modified: trunk/uim/uim-scm.h
==============================================================================
--- trunk/uim/uim-scm.h (original)
+++ trunk/uim/uim-scm.h Fri Aug 10 13:02:15 2007
@@ -79,12 +79,14 @@
#endif
+/* subsystem interfaces */
uim_bool uim_scm_is_initialized(void);
uim_bool
uim_scm_is_alive(void);
void
uim_scm_set_lib_path(const char *path);
+/* GC protections */
void
uim_scm_gc_protect(uim_lisp *location);
void uim_scm_gc_unprotect(uim_lisp *location);
@@ -97,6 +99,11 @@
(uim_scm_is_initialized() \
&& (!uim_scm_gc_protected_contextp() || uim_scm_gc_protected_contextp()))
+/* errors: can be caught by SRFI-34 'guard' */
+void uim_scm_error(const char *msg);
+void uim_scm_error_obj(const char *msg, uim_lisp errobj);
+void uim_scm_ensure(uim_bool cond);
+
/* evaluations */
uim_lisp uim_scm_symbol_value(const char *symbol_str);
uim_bool uim_scm_symbol_value_bool(const char *symbol_str);
@@ -119,8 +126,6 @@
uim_lisp uim_scm_callf_with_guard(uim_lisp failed,
const char *proc, const char *args_fmt, ...);
-void uim_scm_ensure(uim_bool cond);
-
/* type conversions */
uim_bool
uim_scm_c_bool(uim_lisp val);
@@ -153,6 +158,7 @@
uim_lisp
uim_scm_make_func_ptr(uim_func_ptr func_ptr);
+/* procedure initializers */
void
uim_scm_init_subr_0(const char *name, uim_lisp (*fcn)(void));
void