Extract ruby2_keywords predicate and setter
This commit is contained in:
parent
842a4cb915
commit
64bdad5991
18
marshal.c
18
marshal.c
@ -573,6 +573,18 @@ w_uclass(VALUE obj, VALUE super, struct dump_arg *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
rb_hash_ruby2_keywords_p(VALUE obj)
|
||||||
|
{
|
||||||
|
return (RHASH(obj)->basic.flags & RHASH_PASS_AS_KEYWORDS) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rb_hash_ruby2_keywords(VALUE obj)
|
||||||
|
{
|
||||||
|
RHASH(obj)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
to_be_skipped_id(const ID id)
|
to_be_skipped_id(const ID id)
|
||||||
{
|
{
|
||||||
@ -690,7 +702,7 @@ has_ivars(VALUE obj, VALUE encname, VALUE *ivobj)
|
|||||||
case T_MODULE:
|
case T_MODULE:
|
||||||
break; /* counted elsewhere */
|
break; /* counted elsewhere */
|
||||||
case T_HASH:
|
case T_HASH:
|
||||||
ruby2_keywords_flag = RHASH(obj)->basic.flags & RHASH_PASS_AS_KEYWORDS ? 1 : 0;
|
ruby2_keywords_flag = rb_hash_ruby2_keywords_p(obj) ? 1 : 0;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
generic:
|
generic:
|
||||||
@ -718,7 +730,7 @@ w_ivar(st_index_t num, VALUE ivobj, VALUE encname, struct dump_call_arg *arg)
|
|||||||
{
|
{
|
||||||
w_long(num, arg->arg);
|
w_long(num, arg->arg);
|
||||||
num -= w_encoding(encname, arg);
|
num -= w_encoding(encname, arg);
|
||||||
if (RB_TYPE_P(ivobj, T_HASH) && (RHASH(ivobj)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
|
if (RB_TYPE_P(ivobj, T_HASH) && rb_hash_ruby2_keywords_p(ivobj)) {
|
||||||
int limit = arg->limit;
|
int limit = arg->limit;
|
||||||
if (limit >= 0) ++limit;
|
if (limit >= 0) ++limit;
|
||||||
w_symbol(ID2SYM(s_ruby2_keywords_flag), arg->arg);
|
w_symbol(ID2SYM(s_ruby2_keywords_flag), arg->arg);
|
||||||
@ -1592,7 +1604,7 @@ r_ivar(VALUE obj, int *has_encoding, struct load_arg *arg)
|
|||||||
}
|
}
|
||||||
else if (ruby2_keywords_flag_check(sym)) {
|
else if (ruby2_keywords_flag_check(sym)) {
|
||||||
if (RB_TYPE_P(obj, T_HASH)) {
|
if (RB_TYPE_P(obj, T_HASH)) {
|
||||||
RHASH(obj)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
|
rb_hash_ruby2_keywords(obj);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_raise(rb_eArgError, "ruby2_keywords flag is given but %"PRIsVALUE" is not a Hash", obj);
|
rb_raise(rb_eArgError, "ruby2_keywords flag is given but %"PRIsVALUE" is not a Hash", obj);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user