Feature #15920 » env-frozen.patch
hash.c | ||
---|---|---|
{
|
||
VALUE val;
|
||
rb_check_frozen(obj);
|
||
val = env_delete(name);
|
||
if (NIL_P(val) && rb_block_given_p()) rb_yield(name);
|
||
return val;
|
||
... | ... | |
static VALUE
|
||
env_aset_m(VALUE obj, VALUE nm, VALUE val)
|
||
{
|
||
rb_check_frozen(obj);
|
||
return env_aset(nm, val);
|
||
}
|
||
... | ... | |
int del = 0;
|
||
RETURN_SIZED_ENUMERATOR(ehash, 0, 0, rb_env_size);
|
||
rb_check_frozen(ehash);
|
||
keys = env_keys();
|
||
RBASIC_CLEAR_CLASS(keys);
|
||
for (i=0; i<RARRAY_LEN(keys); i++) {
|
||
... | ... | |
env_delete_if(VALUE ehash)
|
||
{
|
||
RETURN_SIZED_ENUMERATOR(ehash, 0, 0, rb_env_size);
|
||
rb_check_frozen(ehash);
|
||
env_reject_bang(ehash);
|
||
return envtbl;
|
||
}
|
||
... | ... | |
int del = 0;
|
||
RETURN_SIZED_ENUMERATOR(ehash, 0, 0, rb_env_size);
|
||
rb_check_frozen(ehash);
|
||
keys = env_keys();
|
||
RBASIC_CLEAR_CLASS(keys);
|
||
for (i=0; i<RARRAY_LEN(keys); i++) {
|
||
... | ... | |
env_keep_if(VALUE ehash)
|
||
{
|
||
RETURN_SIZED_ENUMERATOR(ehash, 0, 0, rb_env_size);
|
||
rb_check_frozen(ehash);
|
||
env_select_bang(ehash);
|
||
return envtbl;
|
||
}
|
||
... | ... | |
VALUE keys;
|
||
long i;
|
||
rb_check_frozen(envtbl);
|
||
keys = env_keys();
|
||
for (i=0; i<RARRAY_LEN(keys); i++) {
|
||
VALUE val = rb_f_getenv(Qnil, RARRAY_AREF(keys, i));
|
||
... | ... | |
* an Array. Returns +nil+ if when the environment is empty.
|
||
*/
|
||
static VALUE
|
||
env_shift(void)
|
||
env_shift(VALUE self)
|
||
{
|
||
char **env;
|
||
VALUE result = Qnil;
|
||
rb_check_frozen(self);
|
||
env = GET_ENVIRON(environ);
|
||
if (*env) {
|
||
char *s = strchr(*env, '=');
|
||
... | ... | |
VALUE keys;
|
||
long i;
|
||
rb_check_frozen(env);
|
||
keys = env_keys();
|
||
if (env == hash) return env;
|
||
hash = to_hash(hash);
|
||
... | ... | |
static VALUE
|
||
env_update(VALUE env, VALUE hash)
|
||
{
|
||
rb_check_frozen(env);
|
||
if (env == hash) return env;
|
||
hash = to_hash(hash);
|
||
rb_hash_foreach(hash, env_update_i, 0);
|
test/ruby/test_env.rb | ||
---|---|---|
end
|
||
end
|
||
def test_ENV_frozen
|
||
assert_separately([], <<-EOS)
|
||
assert_equal(ENV, ENV.freeze)
|
||
assert_equal(true, ENV.frozen?)
|
||
assert_raise(FrozenError) { ENV['a'] = 'b' }
|
||
assert_raise(FrozenError) { ENV.store('a', 'b') }
|
||
assert_raise(FrozenError) { ENV.delete('a') }
|
||
assert_raise(FrozenError) { ENV.delete_if{} }
|
||
assert_raise(FrozenError) { ENV.keep_if{} }
|
||
assert_raise(FrozenError) { ENV.clear }
|
||
assert_raise(FrozenError) { ENV.reject!{} }
|
||
assert_raise(FrozenError) { ENV.select!{} }
|
||
assert_raise(FrozenError) { ENV.filter!{} }
|
||
assert_raise(FrozenError) { ENV.shift }
|
||
assert_raise(FrozenError) { ENV.replace({}) }
|
||
assert_raise(FrozenError) { ENV.update({}) }
|
||
EOS
|
||
end
|
||
def test_shared_substring
|
||
bug12475 = '[ruby-dev:49655] [Bug #12475]'
|
||
n = [*"0".."9"].join("")*3
|