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/