https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2013-09-19T15:43:02Z
Ruby Issue Tracking System
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=41893
2013-09-19T15:43:02Z
Hanmac (Hans Mackowiak)
hanmac@gmx.de
<ul></ul><p>they are a bit different with methods, because defining singleton methods on them redirects to the curresponding Class</p>
<p>but yes, instance variables on them doesnt make much sense</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=41895
2013-09-19T23:00:38Z
headius (Charles Nutter)
headius@headius.com
<ul></ul><p>I obviously support this :-)</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=44799
2014-01-30T06:17:15Z
hsbt (Hiroshi SHIBATA)
hsbt@ruby-lang.org
<ul><li><strong>Target version</strong> changed from <i>2.1.0</i> to <i>2.2.0</i></li></ul>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48577
2014-08-31T05:26:50Z
ko1 (Koichi Sasada)
<ul></ul><p>Matz, what do you think about it?</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48655
2014-09-04T11:27:12Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>I agreed with making those values, if no significant comparability problem happens.<br>
Please experiment.</p>
<p>Matz.</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48687
2014-09-05T22:31:24Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Description</strong> updated (<a title="View differences" href="/journals/48687/diff?detail_id=35189">diff</a>)</li></ul>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48714
2014-09-08T07:17:04Z
Hanmac (Hans Mackowiak)
hanmac@gmx.de
<ul></ul><p>i am unsure about toally freeze them ... some might extend/include some "Boolean" module into true/false or the TrueClass/FalseClass to specially check if a value is only true or false</p>
<p>i dont know if freezing this objects would break such a thing ...</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48785
2014-09-10T08:28:22Z
ko1 (Koichi Sasada)
<ul></ul><p>The following patch makes test-all green.</p>
<pre><code>Index: gc.c
===================================================================
--- gc.c (revision 47513)
+++ gc.c (working copy)
@@ -2286,11 +2286,11 @@ should_be_callable(VALUE block)
static void
should_be_finalizable(VALUE obj)
{
- rb_check_frozen(obj);
if (!FL_ABLE(obj)) {
rb_raise(rb_eArgError, "cannot define finalizer for %s",
rb_obj_classname(obj));
}
+ rb_check_frozen(obj);
}
/*
Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h (revision 47513)
+++ include/ruby/ruby.h (working copy)
@@ -1126,7 +1126,7 @@ struct RStruct {
(OBJ_TAINTABLE(x) && FL_ABLE(s)) ? \
RBASIC(x)->flags |= RBASIC(s)->flags & FL_TAINT : 0)
-#define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):(FIXNUM_P(x)||FLONUM_P(x)||STATIC_SYM_P(x))))
+#define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):1))
#define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE)
#if USE_RGENGC
Index: object.c
===================================================================
--- object.c (revision 47513)
+++ object.c (working copy)
@@ -980,7 +980,7 @@ rb_obj_tainted(VALUE obj)
VALUE
rb_obj_taint(VALUE obj)
{
- if (!OBJ_TAINTED(obj)) {
+ if (!OBJ_TAINTED(obj) && OBJ_TAINTABLE(obj)) {
rb_check_frozen(obj);
OBJ_TAINT(obj);
}
@@ -1057,8 +1057,6 @@ rb_obj_infect(VALUE obj1, VALUE obj2)
OBJ_INFECT(obj1, obj2);
}
-static st_table *immediate_frozen_tbl = 0;
-
/*
* call-seq:
* obj.freeze -> obj
@@ -1089,10 +1087,7 @@ rb_obj_freeze(VALUE obj)
if (!OBJ_FROZEN(obj)) {
OBJ_FREEZE(obj);
if (SPECIAL_CONST_P(obj)) {
- if (!immediate_frozen_tbl) {
- immediate_frozen_tbl = st_init_numtable();
- }
- st_insert(immediate_frozen_tbl, obj, (st_data_t)Qtrue);
+ rb_bug("special consts should be frozen.");
}
}
return obj;
@@ -1112,12 +1107,7 @@ rb_obj_freeze(VALUE obj)
VALUE
rb_obj_frozen_p(VALUE obj)
{
- if (OBJ_FROZEN(obj)) return Qtrue;
- if (SPECIAL_CONST_P(obj)) {
- if (!immediate_frozen_tbl) return Qfalse;
- if (st_lookup(immediate_frozen_tbl, obj, 0)) return Qtrue;
- }
- return Qfalse;
+ return OBJ_FROZEN(obj) ? Qtrue : Qfalse;
}
Index: test/ruby/test_eval.rb
===================================================================
--- test/ruby/test_eval.rb (revision 47513)
+++ test/ruby/test_eval.rb (working copy)
@@ -130,7 +130,7 @@ class TestEval < Test::Unit::TestCase
def forall_TYPE
objects = [Object.new, [], nil, true, false] # TODO: check
objects.each do |obj|
- obj.instance_variable_set :@ivar, 12
+ obj.instance_variable_set :@ivar, 12 unless obj.frozen?
yield obj
end
end
@@ -145,7 +145,7 @@ class TestEval < Test::Unit::TestCase
assert_equal :sym, o.instance_eval(":sym")
assert_equal 11, o.instance_eval("11")
- assert_equal 12, o.instance_eval("@ivar")
+ assert_equal 12, o.instance_eval("@ivar") unless o.frozen?
assert_equal 13, o.instance_eval("@@cvar")
assert_equal 14, o.instance_eval("$gvar__eval")
assert_equal 15, o.instance_eval("Const")
@@ -155,7 +155,7 @@ class TestEval < Test::Unit::TestCase
assert_equal "19", o.instance_eval(%q("1#{9}"))
1.times {
- assert_equal 12, o.instance_eval("@ivar")
+ assert_equal 12, o.instance_eval("@ivar") unless o.frozen?
assert_equal 13, o.instance_eval("@@cvar")
assert_equal 14, o.instance_eval("$gvar__eval")
assert_equal 15, o.instance_eval("Const")
@@ -173,7 +173,7 @@ class TestEval < Test::Unit::TestCase
assert_equal :sym, o.instance_eval { :sym }
assert_equal 11, o.instance_eval { 11 }
- assert_equal 12, o.instance_eval { @ivar }
+ assert_equal 12, o.instance_eval { @ivar } unless o.frozen?
assert_equal 13, o.instance_eval { @@cvar }
assert_equal 14, o.instance_eval { $gvar__eval }
assert_equal 15, o.instance_eval { Const }
@@ -183,7 +183,7 @@ class TestEval < Test::Unit::TestCase
assert_equal "19", o.instance_eval { "1#{9}" }
1.times {
- assert_equal 12, o.instance_eval { @ivar }
+ assert_equal 12, o.instance_eval { @ivar } unless o.frozen?
assert_equal 13, o.instance_eval { @@cvar }
assert_equal 14, o.instance_eval { $gvar__eval }
assert_equal 15, o.instance_eval { Const }
Index: test/ruby/test_weakmap.rb
===================================================================
--- test/ruby/test_weakmap.rb (revision 47513)
+++ test/ruby/test_weakmap.rb (working copy)
@@ -19,13 +19,13 @@ class TestWeakMap < Test::Unit::TestCase
assert_raise(ArgumentError) {@wm[true] = x}
assert_raise(ArgumentError) {@wm[false] = x}
assert_raise(ArgumentError) {@wm[nil] = x}
- assert_raise(RuntimeError) {@wm[42] = x}
- assert_raise(RuntimeError) {@wm[:foo] = x}
+ assert_raise(ArgumentError) {@wm[42] = x}
+ assert_raise(ArgumentError) {@wm[:foo] = x}
assert_raise(ArgumentError) {@wm[x] = true}
assert_raise(ArgumentError) {@wm[x] = false}
assert_raise(ArgumentError) {@wm[x] = nil}
- assert_raise(RuntimeError) {@wm[x] = 42}
- assert_raise(RuntimeError) {@wm[x] = :foo}
+ assert_raise(ArgumentError) {@wm[x] = 42}
+ assert_raise(ArgumentError) {@wm[x] = :foo}
end
def test_include?
</code></pre>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48786
2014-09-10T08:30:37Z
ko1 (Koichi Sasada)
<ul></ul><p>Hans Mackowiak wrote:</p>
<blockquote>
<p>i am unsure about toally freeze them ... some might extend/include some "Boolean" module into true/false or the TrueClass/FalseClass to specially check if a value is only true or false</p>
<p>i dont know if freezing this objects would break such a thing ...</p>
</blockquote>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span> <span class="kp">true</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1">#=> true</span>
<span class="k">module</span> <span class="nn">Boolean</span><span class="p">;</span> <span class="k">end</span>
<span class="k">class</span> <span class="nc">TrueClass</span>
<span class="kp">include</span> <span class="no">Boolean</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="kp">true</span><span class="p">.</span><span class="nf">kind_of?</span><span class="p">(</span><span class="no">Boolean</span><span class="p">)</span> <span class="c1">#=> true</span>
</code></pre>
<p>Not freeze TrueClass, but freeze true object.</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48788
2014-09-10T10:32:35Z
fxn (Xavier Noria)
fxn@hashref.com
<ul></ul><p>Hans Mackowiak wrote:</p>
<blockquote>
<p>i am unsure about toally freeze them ... some might extend/include some "Boolean" module into true/false or the TrueClass/FalseClass to specially check if a value is only true or false</p>
</blockquote>
<p>Can you explain that use case a little further?</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48835
2014-09-11T05:24:01Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p><a class="user active user-mention" href="https://redmine.ruby-lang.org/users/17">@ko1 (Koichi Sasada)</a> you have proven there's no significant issue. Go ahead.<br>
Of course, we might have to revert it if something happens outside of test suites.</p>
<p>Matz.</p>
Ruby master - Feature #8923: Frozen nil/true/false
https://redmine.ruby-lang.org/issues/8923?journal_id=48838
2014-09-11T06:14:10Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>Applied in changeset r47525.</p>
<hr>
<p>test_object.rb: add assertions</p>
<ul>
<li>test/ruby/test_object.rb (test_freeze_immediate): assertions for<br>
[Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Frozen nil/true/false (Closed)" href="https://redmine.ruby-lang.org/issues/8923">#8923</a>].</li>
</ul>