From b3a2d51524dd6ad6ea82613fb04675a2ff270cae Mon Sep 17 00:00:00 2001 From: MoonL79 <151734889+MoonL79@users.noreply.github.com> Date: Sat, 28 Feb 2026 17:38:03 +0800 Subject: [PATCH] =?UTF-8?q?[200=5F28]=20=E4=B8=BAmethod=5For=5Fbust?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E6=8F=90=E4=BE=9B=E5=86=85=E9=83=A8=E6=A1=A5?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devel/200_28.md | 24 +++++++ src/s7.c | 16 +++++ src/s7_internal_helpers.h | 26 ++++++++ src/s7_scheme_char.c | 136 +++++++++++++++++--------------------- 4 files changed, 126 insertions(+), 76 deletions(-) create mode 100644 devel/200_28.md create mode 100644 src/s7_internal_helpers.h diff --git a/devel/200_28.md b/devel/200_28.md new file mode 100644 index 00000000..e9ab0159 --- /dev/null +++ b/devel/200_28.md @@ -0,0 +1,24 @@ +# [200_26] 提取内部桥接 helper,统一 (scheme char) 的 method_or_bust 语义 + +## 任务相关的代码文件 +- src/s7.c +- src/s7_internal_helpers.h +- src/s7_scheme_char.c +- tests/goldfish/scheme/char-test.scm +- devel/200_26.md + +## 如何测试 +``` +xmake b goldfish +bin/goldfish tests/goldfish/scheme/char-test.scm +``` + +## 2026/02/28 统一 (scheme char) 方法分派错误语义(missing-method / wrong-type-arg) +### What +为避免 `s7_scheme_char.c` 复制 `method_or_bust` 逻辑导致语义漂移,本次改动将字符模块改为复用 `s7.c` 内部语义: +1. 新增内部头文件 `src/s7_internal_helpers.h`,声明桥接函数: + - `s7i_method_or_bust` + - `s7i_method_or_bust_bool` +2. 在 `src/s7.c` 中新增桥接实现,内部直接调用原有 `method_or_bust`,确保行为与核心实现一致 +3. 在 `src/s7_scheme_char.c` 中删除本地 `method_or_bust/method_or_bust_bool`,改为统一调用 `s7i_*` 桥接函数 +4. 在 `tests/goldfish/scheme/char-test.scm` 增加回归测试,覆盖 openlet 对象参与字符相关调用时的异常语义 diff --git a/src/s7.c b/src/s7.c index 906ef82d..82109390 100644 --- a/src/s7.c +++ b/src/s7.c @@ -6608,6 +6608,22 @@ static s7_pointer method_or_bust(s7_scheme *sc, s7_pointer obj, s7_pointer metho return(find_and_apply_method(sc, obj, method, args)); } +s7_pointer s7i_method_or_bust(s7_scheme *sc, s7_pointer obj, const char *method_name, + s7_pointer args, const char *type_name, s7_int arg_pos) +{ + return(method_or_bust(sc, obj, + s7_make_symbol(sc, method_name), + args, + wrap_string(sc, type_name, safe_strlen(type_name)), + (int32_t)arg_pos)); +} + +bool s7i_method_or_bust_bool(s7_scheme *sc, s7_pointer obj, const char *method_name, + s7_pointer args, const char *type_name, s7_int arg_pos) +{ + return(s7i_method_or_bust(sc, obj, method_name, args, type_name, arg_pos) != sc->F); +} + static s7_pointer mutable_method_or_bust(s7_scheme *sc, s7_pointer obj, s7_pointer method, s7_pointer args, s7_pointer typ, int32_t num) { if (has_active_methods(sc, obj)) return(find_and_apply_method(sc, obj, method, args)); diff --git a/src/s7_internal_helpers.h b/src/s7_internal_helpers.h new file mode 100644 index 00000000..44037ff5 --- /dev/null +++ b/src/s7_internal_helpers.h @@ -0,0 +1,26 @@ +/* s7_internal_helpers.h - internal helper bridge declarations + * + * derived from s7, a Scheme interpreter + * SPDX-License-Identifier: 0BSD + */ + +#ifndef S7_INTERNAL_HELPERS_H +#define S7_INTERNAL_HELPERS_H + +#include "s7.h" + +#ifdef __cplusplus +extern "C" { +#endif + +s7_pointer s7i_method_or_bust(s7_scheme *sc, s7_pointer obj, const char *method_name, + s7_pointer args, const char *type_name, s7_int arg_pos); + +bool s7i_method_or_bust_bool(s7_scheme *sc, s7_pointer obj, const char *method_name, + s7_pointer args, const char *type_name, s7_int arg_pos); + +#ifdef __cplusplus +} +#endif + +#endif /* S7_INTERNAL_HELPERS_H */ diff --git a/src/s7_scheme_char.c b/src/s7_scheme_char.c index 4ef8aea9..8749abe1 100644 --- a/src/s7_scheme_char.c +++ b/src/s7_scheme_char.c @@ -7,6 +7,7 @@ */ #include "s7_scheme_char.h" +#include "s7_internal_helpers.h" #include #include @@ -67,23 +68,6 @@ static s7_pointer list2(s7_scheme *sc, s7_pointer a, s7_pointer b) return s7_cons(sc, a, s7_cons(sc, b, s7_nil(sc))); } -static s7_pointer method_or_bust(s7_scheme *sc, s7_pointer obj, const char *name, - s7_pointer args, const char *type_name, s7_int arg_pos) -{ - s7_pointer sym = s7_make_symbol(sc, name); - s7_pointer func = s7_method(sc, obj, sym); - if (func != s7_undefined(sc)) - return s7_apply_function(sc, func, args); - return s7_wrong_type_arg_error(sc, name, arg_pos, obj, type_name); -} - -static bool method_or_bust_bool(s7_scheme *sc, s7_pointer obj, const char *name, - s7_pointer args, const char *type_name, s7_int arg_pos) -{ - s7_pointer result = method_or_bust(sc, obj, name, args, type_name, arg_pos); - return (result != s7_f(sc)); -} - static bool is_character_via_method(s7_scheme *sc, s7_pointer p) { if (s7_is_character(p)) return true; @@ -118,7 +102,7 @@ s7_pointer g_char_to_integer(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char->integer", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char->integer", args, "a character", 1); return s7_make_integer(sc, (s7_int)s7_character(arg)); } @@ -126,7 +110,7 @@ s7_int char_to_integer_i_7p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) { - s7_pointer result = method_or_bust(sc, c, "char->integer", list1(sc, c), "a character", 1); + s7_pointer result = s7i_method_or_bust(sc, c, "char->integer", list1(sc, c), "a character", 1); return s7_integer(result); } return (s7_int)s7_character(c); @@ -135,7 +119,7 @@ s7_int char_to_integer_i_7p(s7_scheme *sc, s7_pointer c) s7_pointer char_to_integer_p_p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust(sc, c, "char->integer", list1(sc, c), "a character", 1); + return s7i_method_or_bust(sc, c, "char->integer", list1(sc, c), "a character", 1); return s7_make_integer(sc, (s7_int)s7_character(c)); } @@ -143,7 +127,7 @@ s7_pointer integer_to_char_p_p(s7_scheme *sc, s7_pointer x) { s7_int ind; if (!s7_is_integer(x)) - return method_or_bust(sc, x, "integer->char", list1(sc, x), "an integer", 1); + return s7i_method_or_bust(sc, x, "integer->char", list1(sc, x), "an integer", 1); ind = s7_number_to_integer_with_caller(sc, x, "integer->char"); @@ -169,7 +153,7 @@ s7_pointer integer_to_char_p_i(s7_scheme *sc, s7_int ind) s7_pointer char_upcase_p_p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust(sc, c, "char-upcase", list1(sc, c), "a character", 1); + return s7i_method_or_bust(sc, c, "char-upcase", list1(sc, c), "a character", 1); return chars[uppers[s7_character(c)]]; } @@ -188,7 +172,7 @@ s7_pointer g_char_downcase(s7_scheme *sc, s7_pointer args) { s7_pointer c = s7_car(args); if (!s7_is_character(c)) - return method_or_bust(sc, c, "char-downcase", args, "a character", 1); + return s7i_method_or_bust(sc, c, "char-downcase", args, "a character", 1); return chars[lowers[s7_character(c)]]; } @@ -198,7 +182,7 @@ s7_pointer g_is_char_alphabetic(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char-alphabetic?", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char-alphabetic?", args, "a character", 1); return s7_make_boolean(sc, char_is_alphabetic[s7_character(arg)]); } @@ -215,7 +199,7 @@ bool is_char_alphabetic_b_7p(s7_scheme *sc, s7_pointer c) s7_pointer is_char_alphabetic_p_p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust(sc, c, "char-alphabetic?", list1(sc, c), "a character", 1); + return s7i_method_or_bust(sc, c, "char-alphabetic?", list1(sc, c), "a character", 1); return s7_make_boolean(sc, char_is_alphabetic[s7_character(c)]); } @@ -223,7 +207,7 @@ s7_pointer g_is_char_numeric(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char-numeric?", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char-numeric?", args, "a character", 1); return s7_make_boolean(sc, char_is_numeric[s7_character(arg)]); } @@ -240,7 +224,7 @@ bool is_char_numeric_b_7p(s7_scheme *sc, s7_pointer c) s7_pointer is_char_numeric_p_p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust(sc, c, "char-numeric?", list1(sc, c), "a character", 1); + return s7i_method_or_bust(sc, c, "char-numeric?", list1(sc, c), "a character", 1); return s7_make_boolean(sc, char_is_numeric[s7_character(c)]); } @@ -248,7 +232,7 @@ s7_pointer g_is_char_whitespace(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char-whitespace?", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char-whitespace?", args, "a character", 1); return s7_make_boolean(sc, char_is_whitespace[s7_character(arg)]); } @@ -265,7 +249,7 @@ bool is_char_whitespace_b_7p(s7_scheme *sc, s7_pointer c) s7_pointer is_char_whitespace_p_p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust(sc, c, "char-whitespace?", list1(sc, c), "a character", 1); + return s7i_method_or_bust(sc, c, "char-whitespace?", list1(sc, c), "a character", 1); return s7_make_boolean(sc, char_is_whitespace[s7_character(c)]); } @@ -280,14 +264,14 @@ s7_pointer g_is_char_upper_case(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char-upper-case?", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char-upper-case?", args, "a character", 1); return s7_make_boolean(sc, char_is_uppercase[s7_character(arg)]); } bool is_char_upper_case_b_7p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust_bool(sc, c, "char-upper-case?", list1(sc, c), "a character", 1); + return s7i_method_or_bust_bool(sc, c, "char-upper-case?", list1(sc, c), "a character", 1); return char_is_uppercase[s7_character(c)]; } @@ -295,14 +279,14 @@ s7_pointer g_is_char_lower_case(s7_scheme *sc, s7_pointer args) { s7_pointer arg = s7_car(args); if (!s7_is_character(arg)) - return method_or_bust(sc, arg, "char-lower-case?", args, "a character", 1); + return s7i_method_or_bust(sc, arg, "char-lower-case?", args, "a character", 1); return s7_make_boolean(sc, char_is_lowercase[s7_character(arg)]); } bool is_char_lower_case_b_7p(s7_scheme *sc, s7_pointer c) { if (!s7_is_character(c)) - return method_or_bust_bool(sc, c, "char-lower-case?", list1(sc, c), "a character", 1); + return s7i_method_or_bust_bool(sc, c, "char-lower-case?", list1(sc, c), "a character", 1); return char_is_lowercase[s7_character(c)]; } @@ -331,14 +315,14 @@ static s7_pointer g_char_cmp(s7_scheme *sc, s7_pointer args, int32_t val, const { s7_pointer chr = s7_car(args); if (!s7_is_character(chr)) - return method_or_bust(sc, chr, name, args, "a character", 1); + return s7i_method_or_bust(sc, chr, name, args, "a character", 1); s7_int pos = 2; for (s7_pointer chrs = s7_cdr(args); s7_is_pair(chrs); chrs = s7_cdr(chrs), pos++) { s7_pointer cur = s7_car(chrs); if (!s7_is_character(cur)) - return method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); + return s7i_method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); if (charcmp(s7_character(chr), s7_character(cur)) != val) return char_with_error_check(sc, chrs, pos, name); chr = cur; @@ -350,14 +334,14 @@ static s7_pointer g_char_cmp_not(s7_scheme *sc, s7_pointer args, int32_t val, co { s7_pointer chr = s7_car(args); if (!s7_is_character(chr)) - return method_or_bust(sc, chr, name, args, "a character", 1); + return s7i_method_or_bust(sc, chr, name, args, "a character", 1); s7_int pos = 2; for (s7_pointer chrs = s7_cdr(args); s7_is_pair(chrs); chrs = s7_cdr(chrs), pos++) { s7_pointer cur = s7_car(chrs); if (!s7_is_character(cur)) - return method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); + return s7i_method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); if (charcmp(s7_character(chr), s7_character(cur)) == val) return char_with_error_check(sc, chrs, pos, name); chr = cur; @@ -369,14 +353,14 @@ s7_pointer g_chars_are_equal(s7_scheme *sc, s7_pointer args) { s7_pointer chr = s7_car(args); if (!s7_is_character(chr)) - return method_or_bust(sc, chr, "char=?", args, "a character", 1); + return s7i_method_or_bust(sc, chr, "char=?", args, "a character", 1); s7_int pos = 2; for (s7_pointer chrs = s7_cdr(args); s7_is_pair(chrs); chrs = s7_cdr(chrs), pos++) { s7_pointer cur = s7_car(chrs); if (!s7_is_character(cur)) - return method_or_bust(sc, cur, "char=?", s7_cons(sc, chr, chrs), "a character", pos); + return s7i_method_or_bust(sc, cur, "char=?", s7_cons(sc, chr, chrs), "a character", pos); if (cur != chr) return char_with_error_check(sc, chrs, pos, "char=?"); } @@ -413,7 +397,7 @@ s7_pointer g_simple_char_eq1(s7_scheme *sc, s7_pointer args) s7_pointer c1 = s7_car(args); s7_pointer c2 = s7_cadr(args); if (!s7_is_character(c2)) - return method_or_bust(sc, c2, "char=?", args, "a character", 2); + return s7i_method_or_bust(sc, c2, "char=?", args, "a character", 2); return s7_make_boolean(sc, c1 == c2); } @@ -422,7 +406,7 @@ s7_pointer g_simple_char_eq2(s7_scheme *sc, s7_pointer args) s7_pointer c1 = s7_car(args); s7_pointer c2 = s7_cadr(args); if (!s7_is_character(c1)) - return method_or_bust(sc, c1, "char=?", args, "a character", 1); + return s7i_method_or_bust(sc, c1, "char=?", args, "a character", 1); return s7_make_boolean(sc, c1 == c2); } @@ -434,9 +418,9 @@ bool char_lt_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_lt_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char>?", list2(sc, c1, c2), "a character", 1); if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char>?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char>?", list2(sc, c1, c2), "a character", 2); return c1 > c2; } @@ -476,9 +460,9 @@ bool char_geq_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_geq_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char>=?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char>=?", list2(sc, c1, c2), "a character", 1); if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char>=?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char>=?", list2(sc, c1, c2), "a character", 2); return c1 >= c2; } @@ -490,20 +474,20 @@ bool char_eq_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_eq_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char=?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char=?", list2(sc, c1, c2), "a character", 1); if (c1 == c2) return true; if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char=?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char=?", list2(sc, c1, c2), "a character", 2); return false; } s7_pointer char_eq_p_pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust(sc, c1, "char=?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust(sc, c1, "char=?", list2(sc, c1, c2), "a character", 1); if (c1 == c2) return s7_t(sc); if (!s7_is_character(c2)) - return method_or_bust(sc, c2, "char=?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust(sc, c2, "char=?", list2(sc, c1, c2), "a character", 2); return s7_f(sc); } @@ -512,10 +496,10 @@ s7_pointer g_char_equal_2(s7_scheme *sc, s7_pointer args) s7_pointer c1 = s7_car(args); s7_pointer c2 = s7_cadr(args); if (!s7_is_character(c1)) - return method_or_bust(sc, c1, "char=?", args, "a character", 1); + return s7i_method_or_bust(sc, c1, "char=?", args, "a character", 1); if (c1 == c2) return s7_t(sc); if (!s7_is_character(c2)) - return method_or_bust(sc, c2, "char=?", args, "a character", 2); + return s7i_method_or_bust(sc, c2, "char=?", args, "a character", 2); return s7_f(sc); } @@ -524,9 +508,9 @@ s7_pointer g_char_less_2(s7_scheme *sc, s7_pointer args) s7_pointer c1 = s7_car(args); s7_pointer c2 = s7_cadr(args); if (!s7_is_character(c1)) - return method_or_bust(sc, c1, "char?", args, "a character", 1); + return s7i_method_or_bust(sc, c1, "char>?", args, "a character", 1); if (!s7_is_character(c2)) - return method_or_bust(sc, c2, "char>?", args, "a character", 2); + return s7i_method_or_bust(sc, c2, "char>?", args, "a character", 2); return s7_make_boolean(sc, s7_character(c1) > s7_character(c2)); } @@ -548,14 +532,14 @@ static s7_pointer g_char_cmp_ci(s7_scheme *sc, s7_pointer args, int32_t val, con { s7_pointer chr = s7_car(args); if (!s7_is_character(chr)) - return method_or_bust(sc, chr, name, args, "a character", 1); + return s7i_method_or_bust(sc, chr, name, args, "a character", 1); s7_int pos = 2; for (s7_pointer chrs = s7_cdr(args); s7_is_pair(chrs); chrs = s7_cdr(chrs), pos++) { s7_pointer cur = s7_car(chrs); if (!s7_is_character(cur)) - return method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); + return s7i_method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); if (charcmp(uppers[s7_character(chr)], uppers[s7_character(cur)]) != val) return char_with_error_check(sc, chrs, pos, name); chr = cur; @@ -567,14 +551,14 @@ static s7_pointer g_char_cmp_ci_not(s7_scheme *sc, s7_pointer args, int32_t val, { s7_pointer chr = s7_car(args); if (!s7_is_character(chr)) - return method_or_bust(sc, chr, name, args, "a character", 1); + return s7i_method_or_bust(sc, chr, name, args, "a character", 1); s7_int pos = 2; for (s7_pointer chrs = s7_cdr(args); s7_is_pair(chrs); chrs = s7_cdr(chrs), pos++) { s7_pointer cur = s7_car(chrs); if (!s7_is_character(cur)) - return method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); + return s7i_method_or_bust(sc, cur, name, s7_cons(sc, chr, chrs), "a character", pos); if (charcmp(uppers[s7_character(chr)], uppers[s7_character(cur)]) == val) return char_with_error_check(sc, chrs, pos, name); chr = cur; @@ -615,9 +599,9 @@ bool char_ci_lt_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_ci_lt_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char-ci?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char-ci>?", list2(sc, c1, c2), "a character", 1); if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char-ci>?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char-ci>?", list2(sc, c1, c2), "a character", 2); return uppers[s7_character(c1)] > uppers[s7_character(c2)]; } @@ -657,9 +641,9 @@ bool char_ci_geq_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_ci_geq_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char-ci>=?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char-ci>=?", list2(sc, c1, c2), "a character", 1); if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char-ci>=?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char-ci>=?", list2(sc, c1, c2), "a character", 2); return uppers[s7_character(c1)] >= uppers[s7_character(c2)]; } @@ -671,9 +655,9 @@ bool char_ci_eq_b_unchecked(s7_pointer c1, s7_pointer c2) bool char_ci_eq_b_7pp(s7_scheme *sc, s7_pointer c1, s7_pointer c2) { if (!s7_is_character(c1)) - return method_or_bust_bool(sc, c1, "char-ci=?", list2(sc, c1, c2), "a character", 1); + return s7i_method_or_bust_bool(sc, c1, "char-ci=?", list2(sc, c1, c2), "a character", 1); if (!s7_is_character(c2)) - return method_or_bust_bool(sc, c2, "char-ci=?", list2(sc, c1, c2), "a character", 2); + return s7i_method_or_bust_bool(sc, c2, "char-ci=?", list2(sc, c1, c2), "a character", 2); return uppers[s7_character(c1)] == uppers[s7_character(c2)]; } @@ -685,18 +669,18 @@ s7_pointer g_char_position(s7_scheme *sc, s7_pointer args) { const s7_pointer arg1 = s7_car(args); if ((!s7_is_character(arg1)) && (!s7_is_string(arg1))) - return method_or_bust(sc, arg1, "char-position", args, "a character", 1); + return s7i_method_or_bust(sc, arg1, "char-position", args, "a character", 1); const s7_pointer arg2 = s7_cadr(args); if (!s7_is_string(arg2)) - return method_or_bust(sc, arg2, "char-position", args, "a string", 2); + return s7i_method_or_bust(sc, arg2, "char-position", args, "a string", 2); s7_int start = 0; if (s7_is_pair(s7_cddr(args))) { const s7_pointer arg3 = s7_caddr(args); if (!s7_is_integer(arg3)) - return method_or_bust(sc, arg3, "char-position", args, "an integer", 3); + return s7i_method_or_bust(sc, arg3, "char-position", args, "an integer", 3); start = s7_number_to_integer_with_caller(sc, arg3, "char-position"); if (start < 0) return s7_wrong_type_arg_error(sc, "char-position", 3, arg3, "a non-negative integer");