Project

General

Profile

Feature #15920 » env-frozen.patch

jeremyevans0 (Jeremy Evans), 06/13/2019 07:45 PM

View differences:

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
(1-1/2)