~ chicken-core (chicken-5) 2d1f3dbdb2a57cf01c6720648ad7cc5e8bc27d7c
commit 2d1f3dbdb2a57cf01c6720648ad7cc5e8bc27d7c Author: felix <felix@call-with-current-continuation.org> AuthorDate: Thu May 19 12:00:24 2022 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Fri May 20 11:36:10 2022 +0200 avoid interning parent procedure name in character-comparators unnecessarily, only do so in error case Signed-off-by: Peter Bex <peter@more-magic.net> diff --git a/runtime.c b/runtime.c index c8304913..76f0e12c 100644 --- a/runtime.c +++ b/runtime.c @@ -7524,38 +7524,49 @@ C_regparm C_word C_fcall C_i_null_pointerp(C_word x) return C_SCHEME_FALSE; } +/* only used here for char comparators below: */ +static C_word C_fcall check_char_internal(C_word x, C_char *loc) +{ + if((x & C_IMMEDIATE_TYPE_BITS) != C_CHARACTER_BITS) { + error_location = intern0(loc); + barf(C_BAD_ARGUMENT_TYPE_NO_CHAR_ERROR, NULL, x); + } + + return C_SCHEME_UNDEFINED; +} + C_regparm C_word C_i_char_equalp(C_word x, C_word y) { - C_i_check_char_2(x, intern0("char=?")); - C_i_check_char_2(y, intern0("char=?")); + check_char_internal(x, "char=?"); + check_char_internal(y, "char=?"); return C_u_i_char_equalp(x, y); } C_regparm C_word C_i_char_greaterp(C_word x, C_word y) { - C_i_check_char_2(x, intern0("char>?")); - C_i_check_char_2(y, intern0("char>?")); + check_char_internal(x, "char>?"); + check_char_internal(y, "char>?"); return C_u_i_char_greaterp(x, y); } C_regparm C_word C_i_char_lessp(C_word x, C_word y) { - C_i_check_char_2(x, intern0("char<?")); - C_i_check_char_2(y, intern0("char<?")); + check_char_internal(x, "char<?"); + check_char_internal(y, "char<?"); return C_u_i_char_lessp(x, y); } C_regparm C_word C_i_char_greater_or_equal_p(C_word x, C_word y) { - C_i_check_char_2(x, intern0("char>=?")); - C_i_check_char_2(y, intern0("char>=?")); + check_char_internal(x, "char>=?"); + check_char_internal(y, "char>=?"); return C_u_i_char_greater_or_equal_p(x, y); } C_regparm C_word C_i_char_less_or_equal_p(C_word x, C_word y) { - C_i_check_char_2(x, intern0("char<=?")); - C_i_check_char_2(y, intern0("char<=?")); + check_char_internal(x, "char<=?"); + check_char_internal(y, "char<=?"); return C_u_i_char_less_or_equal_p(x, y); }Trap