ENC_ASSERT
* encoding.c (ENC_ASSERT): make an expression, and prevent the argument from further expansions. * encoding.c (rb_enc_check_str): assert before using. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52359 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
78e436671a
commit
d8a27d374a
@ -19,7 +19,8 @@
|
|||||||
#ifndef ENC_DEBUG
|
#ifndef ENC_DEBUG
|
||||||
#define ENC_DEBUG 0
|
#define ENC_DEBUG 0
|
||||||
#endif
|
#endif
|
||||||
#define ENC_ASSERT(expr) do { if (ENC_DEBUG) {assert(expr);} } while (0)
|
#define ENC_ASSERT (!ENC_DEBUG)?(void)0:assert
|
||||||
|
#define MUST_STRING(str) (ENC_ASSERT(RB_TYPE_P(str, T_STRING)), str)
|
||||||
|
|
||||||
#undef rb_ascii8bit_encindex
|
#undef rb_ascii8bit_encindex
|
||||||
#undef rb_utf8_encindex
|
#undef rb_utf8_encindex
|
||||||
@ -860,9 +861,7 @@ static rb_encoding* enc_compatible_str(VALUE str1, VALUE str2);
|
|||||||
rb_encoding*
|
rb_encoding*
|
||||||
rb_enc_check_str(VALUE str1, VALUE str2)
|
rb_enc_check_str(VALUE str1, VALUE str2)
|
||||||
{
|
{
|
||||||
rb_encoding *enc = enc_compatible_str(str1, str2);
|
rb_encoding *enc = enc_compatible_str(MUST_STRING(str1), MUST_STRING(str2));
|
||||||
ENC_ASSERT(TYPE(str1) == T_STRING);
|
|
||||||
ENC_ASSERT(TYPE(str2) == T_STRING);
|
|
||||||
if (!enc)
|
if (!enc)
|
||||||
rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
|
rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
|
||||||
rb_enc_name(rb_enc_get(str1)),
|
rb_enc_name(rb_enc_get(str1)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user