summaryrefslogtreecommitdiffhomepage
path: root/src/hash.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-12-12 00:49:23 +0900
committerGitHub <[email protected]>2016-12-12 00:49:23 +0900
commit1fbad32f8bce2a10c591d0e44796bc34913a0e8c (patch)
tree8ba3d7bd9992f0097f99a034012565adb43c4d4a /src/hash.c
parent3cc913490b708fe4d0e78e48f86e6e39cf3d8576 (diff)
parent10bb7ad693e7c7443de924a39c1fedb4461108ba (diff)
downloadmruby-1fbad32f8bce2a10c591d0e44796bc34913a0e8c.tar.gz
mruby-1fbad32f8bce2a10c591d0e44796bc34913a0e8c.zip
Merge pull request #3340 from k0kubun/object-freeze
Implement Object#freeze
Diffstat (limited to 'src/hash.c')
-rw-r--r--src/hash.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/hash.c b/src/hash.c
index 93fe656e0..d0e865b5c 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -98,9 +98,9 @@ static void mrb_hash_modify(mrb_state *mrb, mrb_value hash);
static inline mrb_value
mrb_hash_ht_key(mrb_state *mrb, mrb_value key)
{
- if (mrb_string_p(key) && !RSTR_FROZEN_P(mrb_str_ptr(key))) {
+ if (mrb_string_p(key) && !RBASIC_FROZEN_P(mrb_str_ptr(key))) {
key = mrb_str_dup(mrb, key);
- RSTR_SET_FROZEN_FLAG(mrb_str_ptr(key));
+ RBASIC_SET_FROZEN_FLAG(mrb_str_ptr(key));
}
return key;
}
@@ -278,6 +278,9 @@ mrb_hash_tbl(mrb_state *mrb, mrb_value hash)
static void
mrb_hash_modify(mrb_state *mrb, mrb_value hash)
{
+ if (RBASIC_FROZEN_P(mrb_hash_ptr(hash))) {
+ mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen hash");
+ }
mrb_hash_tbl(mrb, hash);
}