[macruby-changes] [5058] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Dec 20 07:14:00 PST 2010


Revision: 5058
          http://trac.macosforge.org/projects/ruby/changeset/5058
Author:   watson1978 at gmail.com
Date:     2010-12-20 07:13:57 -0800 (Mon, 20 Dec 2010)
Log Message:
-----------
will throw a NameError when $FILENAME, $* and $-W are changed.

Test Script:
{{{
require 'test/unit/assertions.rb'
include Test::Unit::Assertions

assert_raise(NameError){ $FILENAME = "aaa" }
assert_raise(NameError){ $* = ["hello", "world"] }
assert_raise(NameError){ $-W = 1 }

puts :ok
}}}

Modified Paths:
--------------
    MacRuby/trunk/include/ruby/ruby.h
    MacRuby/trunk/io.c
    MacRuby/trunk/ruby.c
    MacRuby/trunk/variable.c

Modified: MacRuby/trunk/include/ruby/ruby.h
===================================================================
--- MacRuby/trunk/include/ruby/ruby.h	2010-12-20 08:49:27 UTC (rev 5057)
+++ MacRuby/trunk/include/ruby/ruby.h	2010-12-20 15:13:57 UTC (rev 5058)
@@ -773,6 +773,8 @@
 void rb_objc_define_module_function(VALUE klass, const char *name, void *imp, const int arity);
 void rb_objc_undef_method(VALUE klass, const char *name);
 
+void rb_gvar_readonly_setter(VALUE val, ID id, void *var);
+
 void rb_global_variable(VALUE*);
 void rb_register_mark_object(VALUE);
 void rb_gc_register_address(VALUE*);

Modified: MacRuby/trunk/io.c
===================================================================
--- MacRuby/trunk/io.c	2010-12-20 08:49:27 UTC (rev 5057)
+++ MacRuby/trunk/io.c	2010-12-20 15:13:57 UTC (rev 5058)
@@ -5068,11 +5068,11 @@
     rb_define_global_const("ARGF", argf);
 
     rb_define_hooked_variable("$.", &argf, argf_lineno_getter, argf_lineno_setter);
-    rb_define_hooked_variable("$FILENAME", &argf, argf_filename_getter, 0);
+    rb_define_hooked_variable("$FILENAME", &argf, argf_filename_getter, rb_gvar_readonly_setter);
     GC_WB(&(ARGF.filename), rb_str_new2("-"));
 
     rb_define_hooked_variable("$-i", &argf, opt_i_get, opt_i_set);
-    rb_define_hooked_variable("$*", &argf, argf_argv_getter, 0);
+    rb_define_hooked_variable("$*", &argf, argf_argv_getter, rb_gvar_readonly_setter);
 
     Init_File();
 

Modified: MacRuby/trunk/ruby.c
===================================================================
--- MacRuby/trunk/ruby.c	2010-12-20 08:49:27 UTC (rev 5057)
+++ MacRuby/trunk/ruby.c	2010-12-20 15:13:57 UTC (rev 5058)
@@ -1452,7 +1452,7 @@
     rb_define_hooked_variable("$VERBOSE", &ruby_verbose, 0, verbose_setter);
     rb_define_hooked_variable("$-v", &ruby_verbose, 0, verbose_setter);
     rb_define_hooked_variable("$-w", &ruby_verbose, 0, verbose_setter);
-    rb_define_virtual_variable("$-W", opt_W_getter, 0);
+    rb_define_virtual_variable("$-W", opt_W_getter, rb_gvar_readonly_setter);
     rb_define_variable("$DEBUG", &ruby_debug);
     rb_define_variable("$-d", &ruby_debug);
 

Modified: MacRuby/trunk/variable.c
===================================================================
--- MacRuby/trunk/variable.c	2010-12-20 08:49:27 UTC (rev 5057)
+++ MacRuby/trunk/variable.c	2010-12-20 15:13:57 UTC (rev 5058)
@@ -383,6 +383,8 @@
 static void  var_setter(VALUE val, ID id, VALUE *var);
 static void  var_marker(VALUE *var);
 
+#define readonly_setter rb_gvar_readonly_setter
+
 struct global_entry*
 rb_global_entry(ID id)
 {
@@ -481,7 +483,7 @@
     }
 }
 
-static void
+void
 readonly_setter(VALUE val, ID id, void *var)
 {
     rb_name_error(id, "%s is a read-only variable", rb_id2name(id));
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20101220/cace881a/attachment.html>


More information about the macruby-changes mailing list