--- uim-1.8.9.orig/uim/uim-scm-sigscheme.c 2017-08-14 09:07:27.000000000 +0900 +++ uim-1.8.9/uim/uim-scm-sigscheme.c 2025-01-29 11:24:25.385409870 +0900 @@ -722,7 +722,7 @@ return (void **)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_scm_list2array_internal, &args); } - + static void * uim_scm_list2array_internal(struct list2array_args *args) { @@ -780,7 +780,7 @@ return (void **)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_scm_vector2array_internal, &args); } - + static void * uim_scm_vector2array_internal(struct vector2array_args *args) { @@ -1225,7 +1225,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_0)func, SCM_PROCEDURE_FIXED_0); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_0); } void @@ -1235,7 +1235,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_1)func, SCM_PROCEDURE_FIXED_1); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_1); } void @@ -1245,7 +1245,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_2)func, SCM_PROCEDURE_FIXED_2); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_2); } void @@ -1256,7 +1256,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_3)func, SCM_PROCEDURE_FIXED_3); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_3); } void @@ -1267,7 +1267,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_4)func, SCM_PROCEDURE_FIXED_4); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_4); } void @@ -1279,7 +1279,7 @@ assert(name); assert(func); - scm_register_func(name, (scm_procedure_fixed_5)func, SCM_PROCEDURE_FIXED_5); + scm_register_func(name, (ScmFuncType)func, SCM_PROCEDURE_FIXED_5); } void diff -pruN uim-1.8.9.orig/sigscheme/src/eval.c uim-1.8.9/sigscheme/src/eval.c --- uim-1.8.9.orig/sigscheme/src/eval.c 2015-05-30 22:08:55.000000000 +0900 +++ uim-1.8.9/sigscheme/src/eval.c 2025-01-29 11:40:17.497789730 +0900 @@ -48,6 +48,24 @@ /*======================================= File Local Type Definitions =======================================*/ +typedef union ScmFuncClosure { + ScmObj (* efunc1) (ScmEvalState *); + ScmObj (* efunc2) (ScmObj, ScmEvalState *); + ScmObj (* efunc3) (ScmObj, ScmObj, ScmEvalState *); + ScmObj (* efunc4) (ScmObj, ScmObj, ScmObj, ScmEvalState *); + ScmObj (* efunc5) (ScmObj, ScmObj, ScmObj, ScmObj, ScmEvalState *); + ScmObj (* efunc6) (ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmEvalState *); + ScmObj (* efunc7) (ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmEvalState *); + ScmObj (* func0) (void); + ScmObj (* func1) (ScmObj); + ScmObj (* func2) (ScmObj, ScmObj); + ScmObj (* func3) (ScmObj, ScmObj, ScmObj); + ScmObj (* func4) (ScmObj, ScmObj, ScmObj, ScmObj); + ScmObj (* func5) (ScmObj, ScmObj, ScmObj, ScmObj, ScmObj); + ScmObj (* func6) (ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmObj); + ScmObj (* func7) (ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmObj, ScmObj); + ScmObj (* rfunc) (ScmObj, ScmObj, enum ScmReductionState *); +} ScmFuncClosure; /*======================================= Variable Definitions @@ -56,7 +74,7 @@ /*======================================= File Local Function Declarations =======================================*/ -static ScmObj reduce(ScmObj (*func)(), ScmObj args, ScmObj env, +static ScmObj reduce(ScmFuncClosure *func, ScmObj args, ScmObj env, enum ScmValueType need_eval); #if SCM_USE_CONTINUATION static void call_continuation(ScmObj cont, ScmObj args, @@ -96,7 +114,7 @@ scm_call(ScmObj proc, ScmObj args) /* ARGS should NOT have been evaluated yet. */ static ScmObj -reduce(ScmObj (*func)(), ScmObj args, ScmObj env, enum ScmValueType need_eval) +reduce(ScmFuncClosure *func, ScmObj args, ScmObj env, enum ScmValueType need_eval) { ScmObj left, right; enum ScmReductionState state; @@ -104,7 +122,7 @@ reduce(ScmObj (*func)(), ScmObj args, Sc if (NO_MORE_ARG(args)) { state = SCM_REDUCE_0; - return (*func)(SCM_INVALID, SCM_INVALID, &state); + return (func->rfunc)(SCM_INVALID, SCM_INVALID, &state); } left = POP(args); @@ -113,7 +131,7 @@ reduce(ScmObj (*func)(), ScmObj args, Sc if (NO_MORE_ARG(args)) { state = SCM_REDUCE_1; - return (*func)(left, left, &state); + return (func->rfunc)(left, left, &state); } /* Reduce upto the penult. */ @@ -121,7 +139,7 @@ reduce(ScmObj (*func)(), ScmObj args, Sc FOR_EACH_BUTLAST (right, args) { if (need_eval) right = EVAL(right, env); - left = (*func)(left, right, &state); + left = (func->rfunc)(left, right, &state); if (state == SCM_REDUCE_STOP) return left; } @@ -131,7 +149,7 @@ reduce(ScmObj (*func)(), ScmObj args, Sc state = SCM_REDUCE_LAST; if (need_eval) right = EVAL(right, env); - return (*func)(left, right, &state); + return (func->rfunc)(left, right, &state); } #if SCM_USE_CONTINUATION @@ -235,7 +253,7 @@ call(ScmObj proc, ScmObj args, ScmEvalSt enum ScmValueType need_eval) { ScmObj env, vals; - ScmObj (*func)(); + ScmFuncClosure func; enum ScmFuncTypeCode type; scm_bool syntaxp; int mand_count, i; @@ -324,10 +342,10 @@ call(ScmObj proc, ScmObj args, ScmEvalSt /* We have a C function. */ type = SCM_FUNC_TYPECODE(proc); - func = SCM_FUNC_CFUNC(proc); + func = (ScmFuncClosure) SCM_FUNC_CFUNC(proc); if (type == SCM_REDUCTION_OPERATOR) - return reduce(func, args, env, need_eval); + return reduce(&func, args, env, need_eval); syntaxp = type & SCM_FUNCTYPE_SYNTAX; if (syntaxp) { @@ -379,28 +397,28 @@ call(ScmObj proc, ScmObj args, ScmEvalSt if (type & SCM_FUNCTYPE_TAILREC) { switch (i) { case 1: - return (*func)(eval_state); + return (func.efunc1)(eval_state); case 2: - return (*func)(argbuf[0], eval_state); + return (func.efunc2)(argbuf[0], eval_state); case 3: #if SCM_FUNCTYPE_MAND_MAX >= 1 - return (*func)(argbuf[0], argbuf[1], eval_state); + return (func.efunc3)(argbuf[0], argbuf[1], eval_state); #endif case 4: #if SCM_FUNCTYPE_MAND_MAX >= 2 - return (*func)(argbuf[0], argbuf[1], argbuf[2], eval_state); + return (func.efunc4)(argbuf[0], argbuf[1], argbuf[2], eval_state); #endif case 5: #if SCM_FUNCTYPE_MAND_MAX >= 3 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], eval_state); + return (func.efunc5)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], eval_state); #endif case 6: #if SCM_FUNCTYPE_MAND_MAX >= 4 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], eval_state); + return (func.efunc6)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], eval_state); #endif case 7: #if SCM_FUNCTYPE_MAND_MAX >= 5 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5], eval_state); + return (func.efunc7)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5], eval_state); #endif default: SCM_NOTREACHED; @@ -410,30 +428,30 @@ call(ScmObj proc, ScmObj args, ScmEvalSt switch (i) { case 0: - return (*func)(); + return (func.func0)(); case 1: - return (*func)(argbuf[0]); + return (func.func1)(argbuf[0]); case 2: - return (*func)(argbuf[0], argbuf[1]); + return (func.func2)(argbuf[0], argbuf[1]); case 3: #if SCM_FUNCTYPE_MAND_MAX >= 1 - return (*func)(argbuf[0], argbuf[1], argbuf[2]); + return (func.func3)(argbuf[0], argbuf[1], argbuf[2]); #endif case 4: #if SCM_FUNCTYPE_MAND_MAX >= 2 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3]); + return (func.func4)(argbuf[0], argbuf[1], argbuf[2], argbuf[3]); #endif case 5: #if SCM_FUNCTYPE_MAND_MAX >= 3 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4]); + return (func.func5)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4]); #endif case 6: #if SCM_FUNCTYPE_MAND_MAX >= 4 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5]); + return (func.func6)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5]); #endif case 7: #if SCM_FUNCTYPE_MAND_MAX >= 5 - return (*func)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5], argbuf[6]); + return (func.func7)(argbuf[0], argbuf[1], argbuf[2], argbuf[3], argbuf[4], argbuf[5], argbuf[6]); #endif default: diff -pruN uim-1.8.9.orig/sigscheme/src/module-srfi34.c uim-1.8.9/sigscheme/src/module-srfi34.c --- uim-1.8.9.orig/sigscheme/src/module-srfi34.c 2015-05-30 22:08:55.000000000 +0900 +++ uim-1.8.9/sigscheme/src/module-srfi34.c 2025-01-29 11:40:17.498789749 +0900 @@ -190,19 +190,19 @@ scm_initialize_srfi34(void) SCM_ASSERT_FUNCTYPE(scm_syntax_fixed_tailrec_0, &guard_body); l_syn_raw_quote - = MAKE_FUNC(SCM_SYNTAX_FIXED_1, &raw_quote); + = MAKE_FUNC(SCM_SYNTAX_FIXED_1, (ScmFuncType)&raw_quote); l_syn_set_cur_handlers - = MAKE_FUNC(SCM_SYNTAX_FIXED_1, &set_cur_handlers); + = MAKE_FUNC(SCM_SYNTAX_FIXED_1, (ScmFuncType)&set_cur_handlers); l_proc_with_exception_handlers - = MAKE_FUNC(SCM_PROCEDURE_FIXED_2, &with_exception_handlers); + = MAKE_FUNC(SCM_PROCEDURE_FIXED_2, (ScmFuncType)&with_exception_handlers); l_syn_guard_internal - = MAKE_FUNC(SCM_SYNTAX_FIXED_1, &guard_internal); + = MAKE_FUNC(SCM_SYNTAX_FIXED_1, (ScmFuncType)&guard_internal); l_syn_guard_handler - = MAKE_FUNC(SCM_SYNTAX_FIXED_TAILREC_1, &guard_handler); + = MAKE_FUNC(SCM_SYNTAX_FIXED_TAILREC_1, (ScmFuncType)&guard_handler); l_syn_guard_handler_body - = MAKE_FUNC(SCM_SYNTAX_FIXED_1, &guard_handler_body); + = MAKE_FUNC(SCM_SYNTAX_FIXED_1, (ScmFuncType)&guard_handler_body); l_syn_guard_body - = MAKE_FUNC(SCM_SYNTAX_FIXED_TAILREC_0, &guard_body); + = MAKE_FUNC(SCM_SYNTAX_FIXED_TAILREC_0, (ScmFuncType)&guard_body); /* * The 'error' procedure should not be invoked directly by