mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
* io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed.
* io.c (rb_io_mode_modenum): ditto. * gc.c (rb_memerror): rename from mem_error, and exported. * gc.c (Init_GC): pre-allocate NoMemoryError instance. * object.c (convert_type): error message changed from "failed to convert" to "cannot convert", since it does not try to convert if an object does not respond to the converting method. * eval.c (block_pass): convert Method to Proc using rb_check_convert_type(). * object.c (rb_check_convert_type): always convert T_DATA * eval.c (rb_thread_cleanup): should not terminate main_thread by Fatal error. * regex.c (is_in_list): need to not exclude NUL and NEWLINE. * re.c (rb_reg_expr_str): wrong backslash escapement. * re.c (rb_reg_expr_str): do not escape embedded space characters. * marshal.c (w_object): T_DATA process patch from Joel VanderWerf <vjoel@PATH.Berkeley.EDU>. This is temporary hack; it remains undocumented, and it will be removed when marshaling is re-designed. * marshal.c (r_object): ditto. * numeric.c (num_step): Integer#step is moved to Numeric#step; Fixnum#step is merged into this method. * numeric.c (int_dotimes): Fixnum#times is merged. * numeric.c (int_upto): Fixnum#upto is merged. * numeric.c (int_downto): Fixnum#downto is merged. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b596fbbc37
commit
e3a8c62630
24 changed files with 485 additions and 434 deletions
62
eval.c
62
eval.c
|
@ -105,7 +105,6 @@ static void rb_f_END _((void));
|
|||
static VALUE rb_f_block_given_p _((void));
|
||||
static VALUE block_pass _((VALUE,NODE*));
|
||||
static VALUE rb_cMethod;
|
||||
static VALUE method_proc _((VALUE));
|
||||
static VALUE method_call _((int, VALUE*, VALUE));
|
||||
static VALUE rb_cUnboundMethod;
|
||||
static VALUE umethod_bind _((VALUE, VALUE));
|
||||
|
@ -117,7 +116,7 @@ static int scope_vmode;
|
|||
#define SCOPE_PROTECTED 2
|
||||
#define SCOPE_MODFUNC 5
|
||||
#define SCOPE_MASK 7
|
||||
#define SCOPE_SET(f) do {scope_vmode=(f);} while(0)
|
||||
#define SCOPE_SET(f) scope_vmode=(f)
|
||||
#define SCOPE_TEST(f) (scope_vmode&(f))
|
||||
|
||||
int ruby_safe_level = 0;
|
||||
|
@ -440,7 +439,7 @@ rb_method_boundp(klass, id, ex)
|
|||
return Qfalse;
|
||||
}
|
||||
|
||||
static ID init, alloc, eqq, each, aref, aset, match, to_ary, missing;
|
||||
static ID init, alloc, eqq, each, aref, aset, match, missing;
|
||||
static ID added, singleton_added;
|
||||
static ID __id__, __send__;
|
||||
|
||||
|
@ -507,7 +506,7 @@ struct SCOPE *ruby_scope;
|
|||
static struct FRAME *top_frame;
|
||||
static struct SCOPE *top_scope;
|
||||
|
||||
#define PUSH_FRAME() { \
|
||||
#define PUSH_FRAME() do { \
|
||||
struct FRAME _frame; \
|
||||
_frame.prev = ruby_frame; \
|
||||
_frame.tmp = 0; \
|
||||
|
@ -524,7 +523,7 @@ static struct SCOPE *top_scope;
|
|||
ruby_sourcefile = _frame.file; \
|
||||
ruby_sourceline = _frame.line; \
|
||||
ruby_frame = _frame.prev; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
struct BLOCKTAG {
|
||||
struct RBasic super;
|
||||
|
@ -565,7 +564,7 @@ new_blktag()
|
|||
return blktag;
|
||||
}
|
||||
|
||||
#define PUSH_BLOCK(v,b) { \
|
||||
#define PUSH_BLOCK(v,b) do { \
|
||||
struct BLOCK _block; \
|
||||
_block.tag = new_blktag(); \
|
||||
_block.var = v; \
|
||||
|
@ -590,10 +589,10 @@ new_blktag()
|
|||
else if (!(_block.scope->flags & SCOPE_DONT_RECYCLE)) \
|
||||
rb_gc_force_recycle((VALUE)_block.tag); \
|
||||
ruby_block = _block.prev; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
struct RVarmap *ruby_dyna_vars;
|
||||
#define PUSH_VARS() { \
|
||||
#define PUSH_VARS() do { \
|
||||
struct RVarmap * volatile _old; \
|
||||
_old = ruby_dyna_vars; \
|
||||
ruby_dyna_vars = 0
|
||||
|
@ -604,7 +603,7 @@ struct RVarmap *ruby_dyna_vars;
|
|||
FL_SET(_old, DVAR_DONT_RECYCLE); \
|
||||
}\
|
||||
ruby_dyna_vars = _old; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
#define DVAR_DONT_RECYCLE FL_USER2
|
||||
|
||||
|
@ -747,7 +746,7 @@ static struct iter *ruby_iter;
|
|||
#define ITER_PRE 1
|
||||
#define ITER_CUR 2
|
||||
|
||||
#define PUSH_ITER(i) { \
|
||||
#define PUSH_ITER(i) do { \
|
||||
struct iter _iter; \
|
||||
_iter.prev = ruby_iter; \
|
||||
_iter.iter = (i); \
|
||||
|
@ -755,7 +754,7 @@ static struct iter *ruby_iter;
|
|||
|
||||
#define POP_ITER() \
|
||||
ruby_iter = _iter.prev; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
struct tag {
|
||||
jmp_buf buf;
|
||||
|
@ -769,7 +768,7 @@ struct tag {
|
|||
};
|
||||
static struct tag *prot_tag;
|
||||
|
||||
#define PUSH_TAG(ptag) { \
|
||||
#define PUSH_TAG(ptag) do { \
|
||||
struct tag _tag; \
|
||||
_tag.retval = Qnil; \
|
||||
_tag.frame = ruby_frame; \
|
||||
|
@ -796,11 +795,11 @@ static struct tag *prot_tag;
|
|||
if (_tag.prev) \
|
||||
_tag.prev->retval = _tag.retval;\
|
||||
prot_tag = _tag.prev; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
#define POP_TMPTAG() \
|
||||
prot_tag = _tag.prev; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
#define TAG_RETURN 0x1
|
||||
#define TAG_BREAK 0x2
|
||||
|
@ -815,18 +814,18 @@ static struct tag *prot_tag;
|
|||
VALUE ruby_class;
|
||||
static VALUE ruby_wrapper; /* security wrapper */
|
||||
|
||||
#define PUSH_CLASS() { \
|
||||
#define PUSH_CLASS() do { \
|
||||
VALUE _class = ruby_class
|
||||
|
||||
#define POP_CLASS() ruby_class = _class; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
static NODE *ruby_cref = 0;
|
||||
static NODE *top_cref;
|
||||
#define PUSH_CREF(c) ruby_cref = rb_node_newnode(NODE_CREF,(c),0,ruby_cref)
|
||||
#define POP_CREF() ruby_cref = ruby_cref->nd_next
|
||||
|
||||
#define PUSH_SCOPE() { \
|
||||
#define PUSH_SCOPE() do { \
|
||||
volatile int _vmode = scope_vmode; \
|
||||
struct SCOPE * volatile _old; \
|
||||
NEWOBJ(_scope, struct SCOPE); \
|
||||
|
@ -858,7 +857,7 @@ static void scope_dup _((struct SCOPE *));
|
|||
ruby_scope->flags |= SCOPE_NOSTACK; \
|
||||
ruby_scope = _old; \
|
||||
scope_vmode = _vmode; \
|
||||
}
|
||||
} while (0)
|
||||
|
||||
static VALUE rb_eval _((VALUE,NODE*));
|
||||
static VALUE eval _((VALUE,VALUE,VALUE,char*,int));
|
||||
|
@ -1756,7 +1755,7 @@ copy_node_scope(node, rval)
|
|||
}\
|
||||
} while (0)
|
||||
|
||||
#define BEGIN_CALLARGS {\
|
||||
#define BEGIN_CALLARGS do {\
|
||||
struct BLOCK *tmp_block = ruby_block;\
|
||||
if (ruby_iter->iter == ITER_PRE) {\
|
||||
ruby_block = ruby_block->prev;\
|
||||
|
@ -1766,7 +1765,7 @@ copy_node_scope(node, rval)
|
|||
#define END_CALLARGS \
|
||||
ruby_block = tmp_block;\
|
||||
POP_ITER();\
|
||||
}
|
||||
} while (0)
|
||||
|
||||
#define MATCH_DATA *rb_svar(node->nd_cnt)
|
||||
|
||||
|
@ -2152,7 +2151,10 @@ rb_eval(self, n)
|
|||
int state;
|
||||
volatile VALUE result = Qnil;
|
||||
|
||||
#define RETURN(v) { result = (v); goto finish; }
|
||||
#define RETURN(v) do { \
|
||||
result = (v); \
|
||||
goto finish; \
|
||||
} while (0)
|
||||
|
||||
again:
|
||||
if (!node) RETURN(Qnil);
|
||||
|
@ -4929,7 +4931,7 @@ eval(self, src, scope, file, line)
|
|||
char *file;
|
||||
int line;
|
||||
{
|
||||
struct BLOCK *data;
|
||||
struct BLOCK *data = NULL;
|
||||
volatile VALUE result = Qnil;
|
||||
struct SCOPE * volatile old_scope;
|
||||
struct BLOCK * volatile old_block;
|
||||
|
@ -5472,7 +5474,6 @@ rb_f_require(obj, fname)
|
|||
{
|
||||
VALUE feature, tmp;
|
||||
char *ext, *ftptr; /* OK */
|
||||
volatile VALUE load;
|
||||
int state;
|
||||
volatile int safe = ruby_safe_level;
|
||||
|
||||
|
@ -6019,7 +6020,6 @@ Init_eval()
|
|||
aref = rb_intern("[]");
|
||||
aset = rb_intern("[]=");
|
||||
match = rb_intern("=~");
|
||||
to_ary = rb_intern("to_ary");
|
||||
missing = rb_intern("method_missing");
|
||||
added = rb_intern("method_added");
|
||||
singleton_added = rb_intern("singleton_method_added");
|
||||
|
@ -6590,6 +6590,7 @@ block_pass(self, node)
|
|||
NODE *node;
|
||||
{
|
||||
VALUE block = rb_eval(self, node->nd_body); /* OK */
|
||||
VALUE b;
|
||||
struct BLOCK * volatile old_block;
|
||||
struct BLOCK _block;
|
||||
struct BLOCK *data;
|
||||
|
@ -6604,13 +6605,12 @@ block_pass(self, node)
|
|||
POP_ITER();
|
||||
return result;
|
||||
}
|
||||
if (rb_obj_is_kind_of(block, rb_cMethod)) {
|
||||
block = method_proc(block);
|
||||
}
|
||||
else if (!rb_obj_is_proc(block)) {
|
||||
b = rb_check_convert_type(block, T_DATA, "Proc", "to_proc");
|
||||
if (!rb_obj_is_proc(b)) {
|
||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc)",
|
||||
rb_class2name(CLASS_OF(block)));
|
||||
}
|
||||
block = b;
|
||||
|
||||
if (rb_safe_level() >= 1 && OBJ_TAINTED(block)) {
|
||||
if (rb_safe_level() > proc_get_safe_level(block)) {
|
||||
|
@ -8697,8 +8697,10 @@ rb_thread_cleanup()
|
|||
rb_thread_ready(th);
|
||||
th->gid = 0;
|
||||
th->priority = 0;
|
||||
th->status = THREAD_TO_KILL;
|
||||
RDATA(th->thread)->dfree = NULL;
|
||||
if (th != main_thread) {
|
||||
th->status = THREAD_TO_KILL;
|
||||
RDATA(th->thread)->dfree = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
END_FOREACH(th);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue