[前][次][番号順一覧][スレッド一覧]

ruby-changes:17529

From: nobu <ko1@a...>
Date: Tue, 19 Oct 2010 12:26:01 +0900 (JST)
Subject: [ruby-changes:17529] Ruby:r29534 (trunk): Commit miss.

nobu	2010-10-19 12:25:29 +0900 (Tue, 19 Oct 2010)

  New Revision: 29534

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29534

  Log:
    Commit miss.

  Modified files:
    trunk/array.c
    trunk/ext/readline/readline.c
    trunk/gc.c
    trunk/hash.c
    trunk/misc/ruby-mode.el
    trunk/object.c
    trunk/string.c
    trunk/struct.c
    trunk/transcode.c
    trunk/variable.c
    trunk/vm.c
    trunk/vm_insnhelper.c
    trunk/vm_method.c

Index: array.c
===================================================================
--- array.c	(revision 29533)
+++ array.c	(revision 29534)
@@ -242,7 +242,7 @@
 static inline void
 rb_ary_modify_check(VALUE ary)
 {
-    rb_check_frozen(ary);
+    if (OBJ_FROZEN(ary)) rb_error_frozen("array");
     if (!OBJ_UNTRUSTED(ary) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify array");
 }
Index: misc/ruby-mode.el
===================================================================
--- misc/ruby-mode.el	(revision 29533)
+++ misc/ruby-mode.el	(revision 29534)
@@ -451,12 +451,8 @@
                (or (eq (char-syntax (char-before (point))) ?w)
                    (ruby-special-char-p))))
         nil)
-       ((and (progn (goto-char start) (eq option 'heredoc))
-	     (progn (forward-word -1)
-		    (not (and (or (bolp) (not (eq (char-before (point)) ?_)))
-			      (looking-at "class<<")))))
-	t)
-       ((or (progn (goto-char start) (looking-at ruby-operator-re))
+       ((and (eq option 'heredoc) (< space 0)) t)
+       ((or (looking-at ruby-operator-re)
             (looking-at "[\\[({,;]")
             (and (looking-at "[!?]")
                  (or (not (eq option 'modifier))
Index: variable.c
===================================================================
--- variable.c	(revision 29533)
+++ variable.c	(revision 29534)
@@ -1043,7 +1043,7 @@
 
     if (!OBJ_UNTRUSTED(obj) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
-    rb_check_frozen(obj);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     switch (TYPE(obj)) {
       case T_OBJECT:
         iv_index_tbl = ROBJECT_IV_INDEX_TBL(obj);
@@ -1305,7 +1305,7 @@
 
     if (!OBJ_UNTRUSTED(obj) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
-    rb_check_frozen(obj);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (!rb_is_instance_id(id)) {
 	rb_name_error(id, "`%s' is not allowed as an instance variable name", rb_id2name(id));
     }
@@ -1653,7 +1653,8 @@
 
     if (!OBJ_UNTRUSTED(mod) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't remove constant");
-    rb_check_frozen(mod);
+    if (OBJ_FROZEN(mod)) rb_error_frozen("class/module");
+
     if (!RCLASS_IV_TBL(mod) || !st_delete(RCLASS_IV_TBL(mod), &n, &v)) {
 	if (rb_const_defined_at(mod, id)) {
 	    rb_name_error(id, "cannot remove %s::%s",
@@ -1818,7 +1819,14 @@
 
     if (!OBJ_UNTRUSTED(klass) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't set %s", dest);
-    rb_check_frozen(klass);
+    if (OBJ_FROZEN(klass)) {
+	if (BUILTIN_TYPE(klass) == T_MODULE) {
+	    rb_error_frozen("module");
+	}
+	else {
+	    rb_error_frozen("class");
+	}
+    }
     if (!RCLASS_IV_TBL(klass)) {
 	RCLASS_IV_TBL(klass) = st_init_numtable();
     }
@@ -2067,7 +2075,8 @@
     }
     if (!OBJ_UNTRUSTED(mod) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't remove class variable");
-    rb_check_frozen(mod);
+    if (OBJ_FROZEN(mod)) rb_error_frozen("class/module");
+
     if (RCLASS_IV_TBL(mod) && st_delete(RCLASS_IV_TBL(mod), &n, &val)) {
 	return (VALUE)val;
     }
Index: string.c
===================================================================
--- string.c	(revision 29533)
+++ string.c	(revision 29534)
@@ -350,6 +350,14 @@
     }
 }
 
+static inline void
+str_frozen_check(VALUE s)
+{
+    if (OBJ_FROZEN(s)) {
+	rb_raise(rb_eRuntimeError, "string frozen");
+    }
+}
+
 size_t
 rb_str_capacity(VALUE str)
 {
@@ -1242,7 +1250,7 @@
     if (FL_TEST(str, STR_TMPLOCK)) {
 	rb_raise(rb_eRuntimeError, "can't modify string; temporarily locked");
     }
-    rb_check_frozen(str);
+    if (OBJ_FROZEN(str)) rb_error_frozen("string");
     if (!OBJ_UNTRUSTED(str) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify string");
 }
@@ -1327,7 +1335,7 @@
 rb_str_associate(VALUE str, VALUE add)
 {
     /* sanity check */
-    rb_check_frozen(str);
+    if (OBJ_FROZEN(str)) rb_error_frozen("string");
     if (STR_ASSOC_P(str)) {
 	/* already associated */
 	rb_ary_concat(RSTRING(str)->as.heap.aux.shared, add);
@@ -3538,7 +3546,7 @@
                 repl = rb_obj_as_string(repl);
             }
 	    str_mod_check(str, p, len);
-	    rb_check_frozen(str);
+	    str_frozen_check(str);
 	}
 	else {
 	    repl = rb_reg_regsub(repl, str, regs, pat);
Index: object.c
===================================================================
--- object.c	(revision 29533)
+++ object.c	(revision 29534)
@@ -712,7 +712,9 @@
 {
     rb_secure(4);
     if (!OBJ_TAINTED(obj)) {
-	rb_check_frozen(obj);
+	if (OBJ_FROZEN(obj)) {
+	    rb_error_frozen("object");
+	}
 	OBJ_TAINT(obj);
     }
     return obj;
@@ -731,7 +733,9 @@
 {
     rb_secure(3);
     if (OBJ_TAINTED(obj)) {
-	rb_check_frozen(obj);
+	if (OBJ_FROZEN(obj)) {
+	    rb_error_frozen("object");
+	}
 	FL_UNSET(obj, FL_TAINT);
     }
     return obj;
@@ -764,7 +768,9 @@
 {
     rb_secure(4);
     if (!OBJ_UNTRUSTED(obj)) {
-	rb_check_frozen(obj);
+	if (OBJ_FROZEN(obj)) {
+	    rb_error_frozen("object");
+	}
 	OBJ_UNTRUST(obj);
     }
     return obj;
@@ -783,7 +789,9 @@
 {
     rb_secure(3);
     if (OBJ_UNTRUSTED(obj)) {
-	rb_check_frozen(obj);
+	if (OBJ_FROZEN(obj)) {
+	    rb_error_frozen("object");
+	}
 	FL_UNSET(obj, FL_UNTRUSTED);
     }
     return obj;
Index: vm_method.c
===================================================================
--- vm_method.c	(revision 29533)
+++ vm_method.c	(revision 29534)
@@ -211,8 +211,10 @@
 		rb_class2name(rb_ivar_get(klass, attached)));
 	mid = ID_ALLOCATOR;
     }
+    if (OBJ_FROZEN(klass)) {
+	rb_error_frozen("class/module");
+    }
 
-    rb_check_frozen(klass);
     mtbl = RCLASS_M_TBL(klass);
 
     /* check re-definition */
@@ -461,7 +463,8 @@
     if (rb_safe_level() >= 4 && !OBJ_UNTRUSTED(klass)) {
 	rb_raise(rb_eSecurityError, "Insecure: can't remove method");
     }
-    rb_check_frozen(klass);
+    if (OBJ_FROZEN(klass))
+	rb_error_frozen("class/module");
     if (mid == object_id || mid == id__send__ || mid == idInitialize) {
 	rb_warn("removing `%s' may cause serious problems", rb_id2name(mid));
     }
Index: struct.c
===================================================================
--- struct.c	(revision 29533)
+++ struct.c	(revision 29534)
@@ -151,7 +151,7 @@
 static void
 rb_struct_modify(VALUE s)
 {
-    rb_check_frozen(s);
+    if (OBJ_FROZEN(s)) rb_error_frozen("Struct");
     if (!OBJ_UNTRUSTED(s) && rb_safe_level() >= 4)
        rb_raise(rb_eSecurityError, "Insecure: can't modify Struct");
 }
Index: gc.c
===================================================================
--- gc.c	(revision 29533)
+++ gc.c	(revision 29534)
@@ -2677,7 +2677,7 @@
 undefine_final(VALUE os, VALUE obj)
 {
     rb_objspace_t *objspace = &rb_objspace;
-    rb_check_frozen(obj);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (finalizer_table) {
 	st_data_t data = obj;
 	st_delete(finalizer_table, &data, 0);
@@ -2703,7 +2703,7 @@
     st_data_t data;
 
     rb_scan_args(argc, argv, "11", &obj, &block);
-    rb_check_frozen(obj);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (argc == 1) {
 	block = rb_block_proc();
     }
Index: ext/readline/readline.c
===================================================================
--- ext/readline/readline.c	(revision 29533)
+++ ext/readline/readline.c	(revision 29534)
@@ -43,20 +43,10 @@
 static VALUE mReadline;
 
 #define EDIT_LINE_LIBRARY_VERSION "EditLine wrapper"
-#ifndef USE_INSERT_IGNORE_ESCAPE
-# ifndef HAVE_EDITLINE_READLINE_H
-#  define USE_INSERT_IGNORE_ESCAPE 1
-# else
-#  define USE_INSERT_IGNORE_ESCAPE 0
-# endif
-#endif
 
 #define COMPLETION_PROC "completion_proc"
 #define COMPLETION_CASE_FOLD "completion_case_fold"
 static ID completion_proc, completion_case_fold;
-#if USE_INSERT_IGNORE_ESCAPE
-static ID id_orig_prompt, id_last_prompt, id_ignore_escape;
-#endif
 
 #ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
 # define rl_filename_completion_function filename_completion_function
@@ -155,82 +145,7 @@
 }
 #endif
 
-#if USE_INSERT_IGNORE_ESCAPE
 static VALUE
-insert_ignore_escape(VALUE self, VALUE prompt)
-{
-    VALUE last_prompt, orig_prompt = rb_attr_get(self, id_orig_prompt);
-    int ignoring = 0;
-    const char *s0, *s, *e;
-    long len;
-    static const char ignore_code[2] = {RL_PROMPT_START_IGNORE, RL_PROMPT_END_IGNORE};
-
-    prompt = rb_str_new_shared(prompt);
-    last_prompt = rb_attr_get(self, id_last_prompt);
-    if (orig_prompt == prompt) return last_prompt;
-    len = RSTRING_LEN(prompt);
-    if (NIL_P(last_prompt)) {
-	last_prompt = rb_str_tmp_new(len);
-    }
-
-    s = s0 = RSTRING_PTR(prompt);
-    e = s0 + len;
-    rb_str_set_len(last_prompt, 0);
-    while (s < e && *s) {
-	switch (*s) {
-	  case RL_PROMPT_START_IGNORE:
-	    ignoring = -1;
-	    rb_str_cat(last_prompt, s0, ++s - s0);
-	    s0 = s;
-	    break;
-	  case RL_PROMPT_END_IGNORE:
-	    ignoring = 0;
-	    rb_str_cat(last_prompt, s0, ++s - s0);
-	    s0 = s;
-	    break;
-	  case '\033':
-	    if (++s < e && *s == '[') {
-		rb_str_cat(last_prompt, s0, s - s0 - 1);
-		s0 = s - 1;
-		while (++s < e && *s) {
-		    if (ISALPHA(*s)) {
-			if (!ignoring) {
-			    ignoring = 1;
-			    rb_str_cat(last_prompt, ignore_code+0, 1);
-			}
-			rb_str_cat(last_prompt, s0, ++s - s0);
-			s0 = s;
-			break;
-		    }
-		    else if (!('0' <= *s && *s <= '9' || *s == ';')) {
-			break;
-		    }
-		}
-	    }
-	    break;
-	  default:
-	    if (ignoring > 0) {
-		ignoring = 0;
-		rb_str_cat(last_prompt, ignore_code+1, 1);
-	    }
-	    s++;
-	    break;
-	}
-    }
-    if (ignoring > 0) {
-	ignoring = 0;
-	rb_str_cat(last_prompt, ignore_code+1, 1);
-    }
-    rb_str_cat(last_prompt, s0, s - s0);
-
-    rb_ivar_set(self, id_orig_prompt, prompt);
-    rb_ivar_set(self, id_last_prompt, last_prompt);
-
-    return last_prompt;
-}
-#endif
-
-static VALUE
 readline_get(VALUE prompt)
 {
     return (VALUE)readline((char *)prompt);
@@ -329,18 +244,10 @@
     char *prompt = NULL;
     char *buff;
     int status;
-    int ignore_escape = 0;
 
     rb_secure(4);
     if (rb_scan_args(argc, argv, "02", &tmp, &add_hist) > 0) {
 	OutputStringValue(tmp);
-#if USE_INSERT_IGNORE_ESCAPE
-	ignore_escape = RTEST(rb_attr_get(mReadline, id_ignore_escape));
-	if (ignore_escape) {
-	    tmp = insert_ignore_escape(self, tmp);
-	    rb_str_locktmp(tmp);
-	}
-#endif
 	prompt = RSTRING_PTR(tmp);
     }
 
@@ -350,11 +257,6 @@
     rl_prep_terminal(1);
 #endif
     buff = (char*)rb_protect(readline_get, (VALUE)prompt, &status);
-#if USE_INSERT_IGNORE_ESCAPE
-    if (prompt && ignore_escape) {
-	rb_str_unlocktmp(tmp);
-    }
-#endif
     if (status) {
 #if defined HAVE_RL_CLEANUP_AFTER_SIGNAL
         /* restore terminal mode and signal handler*/
@@ -1410,27 +1312,6 @@
     return result;
 }
 
-static VALUE
-readline_s_ignore_escape(VALUE self)
-{
-#if USE_INSERT_IGNORE_ESCAPE
-    return RTEST(rb_attr_get(mReadline, id_ignore_escape)) ? Qtrue : Qfalse;
-#elif defined HAVE_EDITLINE_READLINE_H
-    return Qtrue;
-#else
-    return Qfalse;
-#endif
-}
-
-static VALUE
-readline_s_ignore_escape_set(VALUE self, VALUE flag)
-{
-#if USE_INSERT_IGNORE_ESCAPE
-    rb_ivar_set(mReadline, id_ignore_escape, RTEST(flag) ? Qtrue : Qfalse);
-#endif
-    return flag;
-}
-
 void
 Init_readline()
 {
@@ -1502,18 +1383,6 @@
     rb_define_singleton_method(mReadline, "refresh_line",
 			       readline_s_refresh_line, 0);
 
-#if USE_INSERT_IGNORE_ESCAPE
-    rb_define_singleton_method(mReadline, "ignore_escape",
-			       readline_s_ignore_escape, 0);
-    rb_define_singleton_method(mReadline, "ignore_escape=",
-			       readline_s_ignore_escape_set, 1);
-
-    CONST_ID(id_orig_prompt, "orig_prompt");
-    CONST_ID(id_last_prompt, "last_prompt");
-    CONST_ID(id_ignore_escape, "ignore_escape");
-    rb_ivar_set(mReadline, id_ignore_escape, Qtrue);
-#endif
-
     history = rb_obj_alloc(rb_cObject);
     rb_extend_object(history, rb_mEnumerable);
     rb_define_singleton_method(history,"to_s", hist_to_s, 0);
Index: hash.c
===================================================================
--- hash.c	(revision 29533)
+++ hash.c	(revision 29534)
@@ -248,7 +248,7 @@
 static void
 rb_hash_modify_check(VALUE hash)
 {
-    rb_check_frozen(hash);
+    if (OBJ_FROZEN(hash)) rb_error_frozen("hash");
     if (!OBJ_UNTRUSTED(hash) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify hash");
 }
Index: vm.c
===================================================================
--- vm.c	(revision 29533)
+++ vm.c	(revision 29534)
@@ -1858,7 +1858,10 @@
 		     rb_id2name(id), rb_obj_classname(obj));
 	}
 
-	rb_check_frozen(obj);
+	if (OBJ_FROZEN(obj)) {
+	    rb_error_frozen("object");
+	}
+
 	klass = rb_singleton_class(obj);
 	noex = NOEX_PUBLIC;
     }
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 29533)
+++ vm_insnhelper.c	(revision 29534)
@@ -1298,8 +1298,9 @@
     if (!OBJ_UNTRUSTED(obj) && rb_safe_level() >= 4) {
 	rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
     }
-    
-    rb_check_frozen(obj);
+    if (OBJ_FROZEN(obj)) {
+	rb_error_frozen("object");
+    }
 
     if (TYPE(obj) == T_OBJECT) {
 	VALUE klass = RBASIC(obj)->klass;
Index: transcode.c
===================================================================
--- transcode.c	(revision 29533)
+++ transcode.c	(revision 29534)
@@ -2711,7 +2711,9 @@
     VALUE newstr;
     int encidx;
 
-    rb_check_frozen(str);
+    if (OBJ_FROZEN(str)) { /* in future, may use str_frozen_check from string.c, but that's currently static */
+	rb_raise(rb_eRuntimeError, "string frozen");
+    }
 
     newstr = str;
     encidx = str_transcode(argc, argv, &newstr);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]