diff --git a/lib-topaz/env.rb b/lib-topaz/env.rb index 96795585e..527aaccd5 100644 --- a/lib-topaz/env.rb +++ b/lib-topaz/env.rb @@ -1,6 +1,6 @@ class << ENV def to_hash - {}.tap{ |h| self.each { |k, v| h[k] = v } } + {}.tap { |h| self.each { |k, v| h[k] = v } } end def empty? diff --git a/topaz/objects/envobject.py b/topaz/objects/envobject.py index b3ed49090..4f285ced6 100644 --- a/topaz/objects/envobject.py +++ b/topaz/objects/envobject.py @@ -26,7 +26,9 @@ def method_subscript(self, space, key): val = os.environ[key] except KeyError: return space.w_nil - return space.newstr_fromstr_frozen(val) + s = space.newstr_fromstr(val) + space.send(s, "freeze") + return s @classdef.method("store", key="str") @classdef.method("[]=", key="str") @@ -36,7 +38,7 @@ def method_subscript_assign(self, space, key, w_value): if w_value is space.w_nil: try: del os.environ[key] - except: + except (KeyError, OSError): pass return space.w_nil if "=" in key or key is "": @@ -53,10 +55,11 @@ def method_each(self, space, block): if block is None: return space.send(self, "enum_for", [space.newsymbol("each")]) for k, v in os.environ.items(): - space.invoke_block(block, [space.newarray([ - space.newstr_fromstr_frozen(k), - space.newstr_fromstr_frozen(v) - ])]) + sk = space.newstr_fromstr(k) + sv = space.newstr_fromstr(v) + space.send(sk, "freeze") + space.send(sv, "freeze") + space.invoke_block(block, [space.newarray([sk, sv])]) return self @classdef.method("length")