mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* error.c (exc_exception): clone the receiver exception instead of
creating brand new exception object of the receiver. * eval.c (rb_eval_string_wrap): extend new ruby_top_self, not original self. * eval.c (rb_eval_cmd): respect ruby_wrapper if set. * eval.c (eval): do not update ruby_class unless scope is not provided. * eval.c (eval): preserve wrapper information. * eval.c (proc_invoke): ditto. * eval.c (block_pass): ditto. * parse.y (void_expr): too much warnings for void context (e.g. foo[1] that can be mere Proc call). * error.c (rb_name_error): new function to raise NameError with name attribute set. * eval.c (rb_f_missing): set name and args in the exception object. [new] * error.c (name_name): NameError#name - new method. * error.c (nometh_args): NoMethodError#args - new method. * lex.c (rb_reserved_word): lex_state after tRESCUE should be EXPR_MID. * gc.c (add_heap): allocation size of the heap unit is doubled for each allocation. * dir.c (isdelim): space, tab, and newline are no longer delimiters for glob patterns. * eval.c (svalue_to_avalue): new conversion scheme between single value and array values. * eval.c (avalue_to_svalue): ditto. * eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return and yield too. * eval.c (rb_yield_0): use avalue_to_svalue(). * eval.c (proc_invoke): Proc#call gives avaules, whereas Proc#yield gives mvalues. * eval.c (bmcall): convert given value (svalue) to avalue. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1555 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cc13bb43bc
commit
ffe1cf575e
24 changed files with 374 additions and 164 deletions
72
ChangeLog
72
ChangeLog
|
@ -1,3 +1,48 @@
|
||||||
|
Mon Jul 2 17:22:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* error.c (exc_exception): clone the receiver exception instead of
|
||||||
|
creating brand new exception object of the receiver.
|
||||||
|
|
||||||
|
Mon Jul 2 09:53:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (rb_eval_string_wrap): extend new ruby_top_self, not
|
||||||
|
original self.
|
||||||
|
|
||||||
|
* eval.c (rb_eval_cmd): respect ruby_wrapper if set.
|
||||||
|
|
||||||
|
* eval.c (eval): do not update ruby_class unless scope is not
|
||||||
|
provided.
|
||||||
|
|
||||||
|
Sun Jul 1 10:51:15 2001 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (eval): preserve wrapper information.
|
||||||
|
|
||||||
|
* eval.c (proc_invoke): ditto.
|
||||||
|
|
||||||
|
* eval.c (block_pass): ditto.
|
||||||
|
|
||||||
|
Sat Jun 30 02:55:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (void_expr): too much warnings for void context
|
||||||
|
(e.g. foo[1] that can be mere Proc call).
|
||||||
|
|
||||||
|
Fri Jun 29 17:23:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* error.c (rb_name_error): new function to raise NameError with
|
||||||
|
name attribute set.
|
||||||
|
|
||||||
|
* eval.c (rb_f_missing): set name and args in the exception
|
||||||
|
object. [new]
|
||||||
|
|
||||||
|
* error.c (name_name): NameError#name - new method.
|
||||||
|
|
||||||
|
* error.c (nometh_args): NoMethodError#args - new method.
|
||||||
|
|
||||||
|
Fri Jun 29 15:29:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* lex.c (rb_reserved_word): lex_state after tRESCUE should be
|
||||||
|
EXPR_MID.
|
||||||
|
|
||||||
Thu Jun 28 00:21:28 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
|
Thu Jun 28 00:21:28 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
|
||||||
|
|
||||||
* lib/matrix.rb: resolve 'ruby -w' warnings.
|
* lib/matrix.rb: resolve 'ruby -w' warnings.
|
||||||
|
@ -23,6 +68,33 @@ Wed Jun 27 08:53:26 2001 Minero Aoki <aamine@loveruby.net>
|
||||||
|
|
||||||
* lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.
|
* lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.
|
||||||
|
|
||||||
|
Tue Jun 26 18:42:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* gc.c (add_heap): allocation size of the heap unit is doubled for
|
||||||
|
each allocation.
|
||||||
|
|
||||||
|
Mon Jun 25 09:54:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* dir.c (isdelim): space, tab, and newline are no longer
|
||||||
|
delimiters for glob patterns.
|
||||||
|
|
||||||
|
Sat Jun 23 22:28:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (svalue_to_avalue): new conversion scheme between single
|
||||||
|
value and array values.
|
||||||
|
|
||||||
|
* eval.c (avalue_to_svalue): ditto.
|
||||||
|
|
||||||
|
* eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return
|
||||||
|
and yield too.
|
||||||
|
|
||||||
|
* eval.c (rb_yield_0): use avalue_to_svalue().
|
||||||
|
|
||||||
|
* eval.c (proc_invoke): Proc#call gives avaules, whereas
|
||||||
|
Proc#yield gives mvalues.
|
||||||
|
|
||||||
|
* eval.c (bmcall): convert given value (svalue) to avalue.
|
||||||
|
|
||||||
Sat Jun 23 18:28:52 2001 Akinori MUSHA <knu@iDaemons.org>
|
Sat Jun 23 18:28:52 2001 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* ext/readline/readline.c (readline_event): a non-void function
|
* ext/readline/readline.c (readline_event): a non-void function
|
||||||
|
|
25
array.c
25
array.c
|
@ -419,28 +419,31 @@ rb_ary_aref(argc, argv, ary)
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
VALUE ary;
|
VALUE ary;
|
||||||
{
|
{
|
||||||
VALUE arg1, arg2;
|
VALUE arg;
|
||||||
long beg, len;
|
long beg, len;
|
||||||
|
|
||||||
if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
|
if (argc == 2) {
|
||||||
beg = NUM2LONG(arg1);
|
beg = NUM2LONG(argv[0]);
|
||||||
len = NUM2LONG(arg2);
|
len = NUM2LONG(argv[1]);
|
||||||
if (beg < 0) {
|
if (beg < 0) {
|
||||||
beg += RARRAY(ary)->len;
|
beg += RARRAY(ary)->len;
|
||||||
}
|
}
|
||||||
return rb_ary_subseq(ary, beg, len);
|
return rb_ary_subseq(ary, beg, len);
|
||||||
}
|
}
|
||||||
|
if (argc != 1) {
|
||||||
/* special case - speeding up */
|
rb_scan_args(argc, argv, "11", 0, 0);
|
||||||
if (FIXNUM_P(arg1)) {
|
|
||||||
return rb_ary_entry(ary, FIX2LONG(arg1));
|
|
||||||
}
|
}
|
||||||
else if (TYPE(arg1) == T_BIGNUM) {
|
arg = argv[0];
|
||||||
|
/* special case - speeding up */
|
||||||
|
if (FIXNUM_P(arg)) {
|
||||||
|
return rb_ary_entry(ary, FIX2LONG(arg));
|
||||||
|
}
|
||||||
|
else if (TYPE(arg) == T_BIGNUM) {
|
||||||
rb_raise(rb_eIndexError, "index too big");
|
rb_raise(rb_eIndexError, "index too big");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* check if idx is Range */
|
/* check if idx is Range */
|
||||||
switch (rb_range_beg_len(arg1, &beg, &len, RARRAY(ary)->len, 0)) {
|
switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) {
|
||||||
case Qfalse:
|
case Qfalse:
|
||||||
break;
|
break;
|
||||||
case Qnil:
|
case Qnil:
|
||||||
|
@ -449,7 +452,7 @@ rb_ary_aref(argc, argv, ary)
|
||||||
return rb_ary_subseq(ary, beg, len);
|
return rb_ary_subseq(ary, beg, len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rb_ary_entry(ary, NUM2LONG(arg1));
|
return rb_ary_entry(ary, NUM2LONG(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
|
4
class.c
4
class.c
|
@ -149,7 +149,7 @@ rb_define_class(name, super)
|
||||||
id = rb_intern(name);
|
id = rb_intern(name);
|
||||||
if (rb_const_defined(rb_cObject, id)) {
|
if (rb_const_defined(rb_cObject, id)) {
|
||||||
klass = rb_const_get(rb_cObject, id);
|
klass = rb_const_get(rb_cObject, id);
|
||||||
rb_raise(rb_eNameError, "%s is already defined", name);
|
rb_name_error(id, "%s is already defined", name);
|
||||||
}
|
}
|
||||||
klass = rb_define_class_id(id, super);
|
klass = rb_define_class_id(id, super);
|
||||||
st_add_direct(rb_class_tbl, id, klass);
|
st_add_direct(rb_class_tbl, id, klass);
|
||||||
|
@ -169,7 +169,7 @@ rb_define_class_under(outer, name, super)
|
||||||
id = rb_intern(name);
|
id = rb_intern(name);
|
||||||
if (rb_const_defined_at(outer, id)) {
|
if (rb_const_defined_at(outer, id)) {
|
||||||
klass = rb_const_get(outer, id);
|
klass = rb_const_get(outer, id);
|
||||||
rb_raise(rb_eNameError, "%s is already defined", name);
|
rb_name_error(id, "%s is already defined", name);
|
||||||
}
|
}
|
||||||
klass = rb_define_class_id(id, super);
|
klass = rb_define_class_id(id, super);
|
||||||
rb_const_set(outer, id, klass);
|
rb_const_set(outer, id, klass);
|
||||||
|
|
3
compar.c
3
compar.c
|
@ -42,8 +42,7 @@ cmp_equal(x, y)
|
||||||
if (x == y) return Qtrue;
|
if (x == y) return Qtrue;
|
||||||
|
|
||||||
a[0] = x; a[1] = y;
|
a[0] = x; a[1] = y;
|
||||||
return rb_rescue2(cmp_eq, (VALUE)a, cmp_failed, 0,
|
return rb_rescue(cmp_eq, (VALUE)a, cmp_failed, 0);
|
||||||
rb_eStandardError, rb_eNameError, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
|
4
dir.c
4
dir.c
|
@ -596,6 +596,7 @@ static void
|
||||||
remove_backslashes(p)
|
remove_backslashes(p)
|
||||||
char *p;
|
char *p;
|
||||||
{
|
{
|
||||||
|
#if defined DOSISH
|
||||||
char *pend = p + strlen(p);
|
char *pend = p + strlen(p);
|
||||||
char *t = p;
|
char *t = p;
|
||||||
|
|
||||||
|
@ -606,6 +607,7 @@ remove_backslashes(p)
|
||||||
*t++ = *p++;
|
*t++ = *p++;
|
||||||
}
|
}
|
||||||
*t = '\0';
|
*t = '\0';
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef S_ISDIR
|
#ifndef S_ISDIR
|
||||||
|
@ -845,7 +847,7 @@ push_braces(ary, s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isdelim(c) ((c)==' '||(c)=='\t'||(c)=='\n'||(c)=='\0')
|
#define isdelim(c) ((c)=='\0')
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
dir_s_glob(dir, str)
|
dir_s_glob(dir, str)
|
||||||
|
|
2
dln.c
2
dln.c
|
@ -87,7 +87,7 @@ int eaccess();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FUNCNAME_PATTERN
|
#ifndef FUNCNAME_PATTERN
|
||||||
# if defined(__hp9000s300) || (defined(__NetBSD__) && !defined(__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) && __FreeBSD__ < 3) || defined(__OpenBSD__) || defined(NeXT) || defined(__WATCOMC__) || defined(__APPLE__)
|
# if defined(__hp9000s300) || (defined(__NetBSD__) && !defined(__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) && !defined(__ELF__)) || defined(__OpenBSD__) || defined(NeXT) || defined(__WATCOMC__) || defined(__APPLE__)
|
||||||
# define FUNCNAME_PATTERN "_Init_%s"
|
# define FUNCNAME_PATTERN "_Init_%s"
|
||||||
# else
|
# else
|
||||||
# define FUNCNAME_PATTERN "Init_%s"
|
# define FUNCNAME_PATTERN "Init_%s"
|
||||||
|
|
47
error.c
47
error.c
|
@ -322,15 +322,11 @@ exc_exception(argc, argv, self)
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
VALUE self;
|
VALUE self;
|
||||||
{
|
{
|
||||||
VALUE etype, exc;
|
VALUE exc;
|
||||||
|
|
||||||
if (argc == 0) return self;
|
if (argc == 0) return self;
|
||||||
if (argc == 1 && self == argv[0]) return self;
|
if (argc == 1 && self == argv[0]) return self;
|
||||||
etype = CLASS_OF(self);
|
exc = rb_obj_clone(self);
|
||||||
while (FL_TEST(etype, FL_SINGLETON)) {
|
|
||||||
etype = RCLASS(etype)->super;
|
|
||||||
}
|
|
||||||
exc = rb_obj_alloc(etype);
|
|
||||||
rb_obj_call_init(exc, argc, argv);
|
rb_obj_call_init(exc, argc, argv);
|
||||||
|
|
||||||
return exc;
|
return exc;
|
||||||
|
@ -417,6 +413,43 @@ exit_status(exc)
|
||||||
return rb_iv_get(exc, "status");
|
return rb_iv_get(exc, "status");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
|
rb_name_error(ID id, const char *fmt, ...)
|
||||||
|
#else
|
||||||
|
rb_name_error(id, fmt, va_alist)
|
||||||
|
ID id;
|
||||||
|
const char *fmt;
|
||||||
|
va_dcl
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
VALUE exc;
|
||||||
|
|
||||||
|
va_list args;
|
||||||
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
|
va_init_list(args, fmt);
|
||||||
|
vsnprintf(buf, BUFSIZ, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
exc = rb_exc_new2(rb_eLoadError, buf);
|
||||||
|
rb_iv_set(exc, "name", ID2SYM(id));
|
||||||
|
rb_exc_raise(exc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
name_name(self)
|
||||||
|
VALUE self;
|
||||||
|
{
|
||||||
|
return rb_iv_get(self, "name");
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
nometh_args(self)
|
||||||
|
VALUE self;
|
||||||
|
{
|
||||||
|
return rb_iv_get(self, "args");
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __BEOS__
|
#ifdef __BEOS__
|
||||||
typedef struct {
|
typedef struct {
|
||||||
VALUE *list;
|
VALUE *list;
|
||||||
|
@ -594,7 +627,9 @@ Init_Exception()
|
||||||
rb_eIndexError = rb_define_class("IndexError", rb_eStandardError);
|
rb_eIndexError = rb_define_class("IndexError", rb_eStandardError);
|
||||||
rb_eRangeError = rb_define_class("RangeError", rb_eStandardError);
|
rb_eRangeError = rb_define_class("RangeError", rb_eStandardError);
|
||||||
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
|
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
|
||||||
|
rb_define_method(rb_eNameError, "name", name_name, 0);
|
||||||
rb_eNoMethodError = rb_define_class("NoMethodError", rb_eNameError);
|
rb_eNoMethodError = rb_define_class("NoMethodError", rb_eNameError);
|
||||||
|
rb_define_method(rb_eNoMethodError, "args", nometh_args, 0);
|
||||||
|
|
||||||
rb_eScriptError = rb_define_class("ScriptError", rb_eException);
|
rb_eScriptError = rb_define_class("ScriptError", rb_eException);
|
||||||
rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError);
|
rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError);
|
||||||
|
|
59
eval.c
59
eval.c
|
@ -168,7 +168,7 @@ print_undef(klass, id)
|
||||||
VALUE klass;
|
VALUE klass;
|
||||||
ID id;
|
ID id;
|
||||||
{
|
{
|
||||||
rb_raise(rb_eNameError, "undefined method `%s' for %s `%s'",
|
rb_name_error(id, "undefined method `%s' for %s `%s'",
|
||||||
rb_id2name(id),
|
rb_id2name(id),
|
||||||
(TYPE(klass) == T_MODULE)?"module":"class",
|
(TYPE(klass) == T_MODULE)?"module":"class",
|
||||||
rb_class2name(klass));
|
rb_class2name(klass));
|
||||||
|
@ -315,7 +315,7 @@ remove_method(klass, mid)
|
||||||
}
|
}
|
||||||
if (OBJ_FROZEN(klass)) rb_error_frozen("class/module");
|
if (OBJ_FROZEN(klass)) rb_error_frozen("class/module");
|
||||||
if (!st_delete(RCLASS(klass)->m_tbl, &mid, &body)) {
|
if (!st_delete(RCLASS(klass)->m_tbl, &mid, &body)) {
|
||||||
rb_raise(rb_eNameError, "method `%s' not defined in %s",
|
rb_name_error(mid, "method `%s' not defined in %s",
|
||||||
rb_id2name(mid), rb_class2name(klass));
|
rb_id2name(mid), rb_class2name(klass));
|
||||||
}
|
}
|
||||||
rb_clear_cache_by_id(mid);
|
rb_clear_cache_by_id(mid);
|
||||||
|
@ -546,6 +546,7 @@ struct BLOCK {
|
||||||
int flags;
|
int flags;
|
||||||
struct RVarmap *dyna_vars;
|
struct RVarmap *dyna_vars;
|
||||||
VALUE orig_thread;
|
VALUE orig_thread;
|
||||||
|
VALUE wrapper;
|
||||||
struct BLOCK *prev;
|
struct BLOCK *prev;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1273,7 +1274,7 @@ rb_eval_string_wrap(str, state)
|
||||||
PUSH_CLASS();
|
PUSH_CLASS();
|
||||||
ruby_class = ruby_wrapper = rb_module_new();
|
ruby_class = ruby_wrapper = rb_module_new();
|
||||||
ruby_top_self = rb_obj_clone(ruby_top_self);
|
ruby_top_self = rb_obj_clone(ruby_top_self);
|
||||||
rb_extend_object(self, ruby_class);
|
rb_extend_object(ruby_top_self, ruby_class);
|
||||||
|
|
||||||
val = rb_eval_string_protect(str, &status);
|
val = rb_eval_string_protect(str, &status);
|
||||||
ruby_top_self = self;
|
ruby_top_self = self;
|
||||||
|
@ -1336,7 +1337,7 @@ rb_eval_cmd(cmd, arg)
|
||||||
saved_scope = ruby_scope;
|
saved_scope = ruby_scope;
|
||||||
ruby_scope = top_scope;
|
ruby_scope = top_scope;
|
||||||
|
|
||||||
ruby_class = rb_cObject;
|
ruby_class = ruby_wrapper ? ruby_wrapper : rb_cObject;
|
||||||
if (OBJ_TAINTED(cmd)) {
|
if (OBJ_TAINTED(cmd)) {
|
||||||
ruby_safe_level = 4;
|
ruby_safe_level = 4;
|
||||||
}
|
}
|
||||||
|
@ -1545,7 +1546,7 @@ rb_undef(klass, id)
|
||||||
else if (TYPE(c) == T_MODULE) {
|
else if (TYPE(c) == T_MODULE) {
|
||||||
s0 = " module";
|
s0 = " module";
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "undefined method `%s' for%s `%s'",
|
rb_name_error(id, "undefined method `%s' for%s `%s'",
|
||||||
rb_id2name(id),s0,rb_class2name(c));
|
rb_id2name(id),s0,rb_class2name(c));
|
||||||
}
|
}
|
||||||
rb_add_method(klass, id, 0, NOEX_PUBLIC);
|
rb_add_method(klass, id, 0, NOEX_PUBLIC);
|
||||||
|
@ -2378,7 +2379,7 @@ rb_eval(self, n)
|
||||||
|
|
||||||
case NODE_BREAK:
|
case NODE_BREAK:
|
||||||
if (node->nd_stts) {
|
if (node->nd_stts) {
|
||||||
return_value(rb_eval(self, node->nd_stts));
|
return_value(avalue_to_svalue(rb_eval(self, node->nd_stts)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return_value(Qnil);
|
return_value(Qnil);
|
||||||
|
@ -2388,7 +2389,7 @@ rb_eval(self, n)
|
||||||
|
|
||||||
case NODE_NEXT:
|
case NODE_NEXT:
|
||||||
if (node->nd_stts) {
|
if (node->nd_stts) {
|
||||||
return_value(rb_eval(self, node->nd_stts));
|
return_value(avalue_to_svalue(rb_eval(self, node->nd_stts)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return_value(Qnil);
|
return_value(Qnil);
|
||||||
|
@ -2616,7 +2617,8 @@ rb_eval(self, n)
|
||||||
TMP_PROTECT;
|
TMP_PROTECT;
|
||||||
|
|
||||||
if (ruby_frame->last_class == 0) {
|
if (ruby_frame->last_class == 0) {
|
||||||
rb_raise(rb_eNameError, "superclass method `%s' disabled",
|
rb_name_error(ruby_frame->last_func,
|
||||||
|
"superclass method `%s' disabled",
|
||||||
rb_id2name(ruby_frame->last_func));
|
rb_id2name(ruby_frame->last_func));
|
||||||
}
|
}
|
||||||
if (nd_type(node) == NODE_ZSUPER) {
|
if (nd_type(node) == NODE_ZSUPER) {
|
||||||
|
@ -4119,7 +4121,6 @@ rb_f_missing(argc, argv, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
id = SYM2ID(argv[0]);
|
id = SYM2ID(argv[0]);
|
||||||
argc--; argv++;
|
|
||||||
|
|
||||||
switch (TYPE(obj)) {
|
switch (TYPE(obj)) {
|
||||||
case T_NIL:
|
case T_NIL:
|
||||||
|
@ -4167,9 +4168,17 @@ rb_f_missing(argc, argv, obj)
|
||||||
PUSH_FRAME(); /* fake frame */
|
PUSH_FRAME(); /* fake frame */
|
||||||
*ruby_frame = *_frame.prev->prev;
|
*ruby_frame = *_frame.prev->prev;
|
||||||
|
|
||||||
rb_raise(exc, format, rb_id2name(id),
|
{
|
||||||
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
|
snprintf(buf, BUFSIZ, format, rb_id2name(id),
|
||||||
desc, desc[0]=='#'?"":":",
|
desc, desc[0]=='#'?"":":",
|
||||||
desc[0]=='#'?"":rb_class2name(CLASS_OF(obj)));
|
desc[0]=='#'?"":rb_class2name(CLASS_OF(obj)));
|
||||||
|
exc = rb_exc_new2(exc, buf);
|
||||||
|
rb_iv_set(exc, "name", argv[0]);
|
||||||
|
rb_iv_set(exc, "args", rb_ary_new4(argc-1, argv+1));
|
||||||
|
rb_exc_raise(exc);
|
||||||
|
}
|
||||||
POP_FRAME();
|
POP_FRAME();
|
||||||
|
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
|
@ -4195,15 +4204,15 @@ rb_undefined(obj, id, argc, argv, call_status)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DJGPP
|
#ifdef DJGPP
|
||||||
static int STACK_LEVEL_MAX = 65535;
|
static unsigned int STACK_LEVEL_MAX = 65535;
|
||||||
#else
|
#else
|
||||||
#ifdef __human68k__
|
#ifdef __human68k__
|
||||||
extern int _stacksize;
|
extern unsigned int _stacksize;
|
||||||
# define STACK_LEVEL_MAX (_stacksize - 4096)
|
# define STACK_LEVEL_MAX (_stacksize - 4096)
|
||||||
#undef HAVE_GETRLIMIT
|
#undef HAVE_GETRLIMIT
|
||||||
#else
|
#else
|
||||||
#ifdef HAVE_GETRLIMIT
|
#ifdef HAVE_GETRLIMIT
|
||||||
static int STACK_LEVEL_MAX = 655300;
|
static unsigned int STACK_LEVEL_MAX = 655300;
|
||||||
#else
|
#else
|
||||||
# define STACK_LEVEL_MAX 655300
|
# define STACK_LEVEL_MAX 655300
|
||||||
#endif
|
#endif
|
||||||
|
@ -4586,7 +4595,7 @@ rb_call(klass, recv, mid, argc, argv, scope)
|
||||||
}
|
}
|
||||||
else if ((body = rb_get_method_body(&klass, &id, &noex)) == 0) {
|
else if ((body = rb_get_method_body(&klass, &id, &noex)) == 0) {
|
||||||
if (scope == 3) {
|
if (scope == 3) {
|
||||||
rb_raise(rb_eNameError, "super: no superclass method `%s'",
|
rb_name_error(mid, "super: no superclass method `%s'",
|
||||||
rb_id2name(mid));
|
rb_id2name(mid));
|
||||||
}
|
}
|
||||||
return rb_undefined(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);
|
return rb_undefined(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);
|
||||||
|
@ -4712,7 +4721,7 @@ rb_call_super(argc, argv)
|
||||||
VALUE result;
|
VALUE result;
|
||||||
|
|
||||||
if (ruby_frame->last_class == 0) {
|
if (ruby_frame->last_class == 0) {
|
||||||
rb_raise(rb_eNameError, "superclass method `%s' must be enabled by rb_enable_super()",
|
rb_name_error(ruby_frame->last_func, "superclass method `%s' must be enabled by rb_enable_super()",
|
||||||
rb_id2name(ruby_frame->last_func));
|
rb_id2name(ruby_frame->last_func));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4843,6 +4852,7 @@ eval(self, src, scope, file, line)
|
||||||
struct RVarmap * volatile old_dyna_vars;
|
struct RVarmap * volatile old_dyna_vars;
|
||||||
VALUE volatile old_cref;
|
VALUE volatile old_cref;
|
||||||
int volatile old_vmode;
|
int volatile old_vmode;
|
||||||
|
volatile VALUE old_wrapper;
|
||||||
struct FRAME frame;
|
struct FRAME frame;
|
||||||
char *filesave = ruby_sourcefile;
|
char *filesave = ruby_sourcefile;
|
||||||
int linesave = ruby_sourceline;
|
int linesave = ruby_sourceline;
|
||||||
|
@ -4853,6 +4863,7 @@ eval(self, src, scope, file, line)
|
||||||
file = ruby_sourcefile;
|
file = ruby_sourcefile;
|
||||||
line = ruby_sourceline;
|
line = ruby_sourceline;
|
||||||
}
|
}
|
||||||
|
PUSH_CLASS();
|
||||||
if (!NIL_P(scope)) {
|
if (!NIL_P(scope)) {
|
||||||
if (!rb_obj_is_block(scope)) {
|
if (!rb_obj_is_block(scope)) {
|
||||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)",
|
rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)",
|
||||||
|
@ -4874,17 +4885,18 @@ eval(self, src, scope, file, line)
|
||||||
scope_vmode = data->vmode;
|
scope_vmode = data->vmode;
|
||||||
old_cref = (VALUE)ruby_cref;
|
old_cref = (VALUE)ruby_cref;
|
||||||
ruby_cref = (NODE*)ruby_frame->cbase;
|
ruby_cref = (NODE*)ruby_frame->cbase;
|
||||||
|
old_wrapper = ruby_wrapper;
|
||||||
|
ruby_wrapper = data->wrapper;
|
||||||
|
|
||||||
self = data->self;
|
self = data->self;
|
||||||
ruby_frame->iter = data->iter;
|
ruby_frame->iter = data->iter;
|
||||||
|
ruby_class = ruby_cbase;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ruby_frame->prev) {
|
if (ruby_frame->prev) {
|
||||||
ruby_frame->iter = ruby_frame->prev->iter;
|
ruby_frame->iter = ruby_frame->prev->iter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PUSH_CLASS();
|
|
||||||
ruby_class = ruby_cbase;
|
|
||||||
|
|
||||||
ruby_in_eval++;
|
ruby_in_eval++;
|
||||||
if (TYPE(ruby_class) == T_ICLASS) {
|
if (TYPE(ruby_class) == T_ICLASS) {
|
||||||
|
@ -4909,6 +4921,7 @@ eval(self, src, scope, file, line)
|
||||||
if (!NIL_P(scope)) {
|
if (!NIL_P(scope)) {
|
||||||
int dont_recycle = ruby_scope->flags & SCOPE_DONT_RECYCLE;
|
int dont_recycle = ruby_scope->flags & SCOPE_DONT_RECYCLE;
|
||||||
|
|
||||||
|
ruby_wrapper = old_wrapper;
|
||||||
ruby_cref = (NODE*)old_cref;
|
ruby_cref = (NODE*)old_cref;
|
||||||
ruby_frame = frame.tmp;
|
ruby_frame = frame.tmp;
|
||||||
ruby_scope = old_scope;
|
ruby_scope = old_scope;
|
||||||
|
@ -6079,6 +6092,7 @@ blk_mark(data)
|
||||||
rb_gc_mark((VALUE)data->dyna_vars);
|
rb_gc_mark((VALUE)data->dyna_vars);
|
||||||
rb_gc_mark((VALUE)data->klass);
|
rb_gc_mark((VALUE)data->klass);
|
||||||
rb_gc_mark((VALUE)data->tag);
|
rb_gc_mark((VALUE)data->tag);
|
||||||
|
rb_gc_mark(data->wrapper);
|
||||||
data = data->prev;
|
data = data->prev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6194,6 +6208,7 @@ rb_f_binding(self)
|
||||||
*data = *ruby_block;
|
*data = *ruby_block;
|
||||||
|
|
||||||
data->orig_thread = rb_thread_current();
|
data->orig_thread = rb_thread_current();
|
||||||
|
data->wrapper = ruby_wrapper;
|
||||||
data->iter = rb_f_block_given_p();
|
data->iter = rb_f_block_given_p();
|
||||||
frame_dup(&data->frame);
|
frame_dup(&data->frame);
|
||||||
if (ruby_frame->prev) {
|
if (ruby_frame->prev) {
|
||||||
|
@ -6283,6 +6298,7 @@ proc_new(klass)
|
||||||
*data = *ruby_block;
|
*data = *ruby_block;
|
||||||
|
|
||||||
data->orig_thread = rb_thread_current();
|
data->orig_thread = rb_thread_current();
|
||||||
|
data->wrapper = ruby_wrapper;
|
||||||
data->iter = data->prev?Qtrue:Qfalse;
|
data->iter = data->prev?Qtrue:Qfalse;
|
||||||
frame_dup(&data->frame);
|
frame_dup(&data->frame);
|
||||||
if (data->iter) {
|
if (data->iter) {
|
||||||
|
@ -6352,6 +6368,7 @@ proc_invoke(proc, args, pcall)
|
||||||
int state;
|
int state;
|
||||||
volatile int orphan;
|
volatile int orphan;
|
||||||
volatile int safe = ruby_safe_level;
|
volatile int safe = ruby_safe_level;
|
||||||
|
volatile VALUE old_wrapper = ruby_wrapper;
|
||||||
|
|
||||||
if (rb_block_given_p() && ruby_frame->last_func) {
|
if (rb_block_given_p() && ruby_frame->last_func) {
|
||||||
rb_warning("block for %s#%s is useless",
|
rb_warning("block for %s#%s is useless",
|
||||||
|
@ -6362,6 +6379,7 @@ proc_invoke(proc, args, pcall)
|
||||||
Data_Get_Struct(proc, struct BLOCK, data);
|
Data_Get_Struct(proc, struct BLOCK, data);
|
||||||
orphan = blk_orphan(data);
|
orphan = blk_orphan(data);
|
||||||
|
|
||||||
|
ruby_wrapper = data->wrapper;
|
||||||
/* PUSH BLOCK from data */
|
/* PUSH BLOCK from data */
|
||||||
old_block = ruby_block;
|
old_block = ruby_block;
|
||||||
_block = *data;
|
_block = *data;
|
||||||
|
@ -6387,6 +6405,7 @@ proc_invoke(proc, args, pcall)
|
||||||
state &= TAG_MASK;
|
state &= TAG_MASK;
|
||||||
}
|
}
|
||||||
ruby_block = old_block;
|
ruby_block = old_block;
|
||||||
|
ruby_wrapper = old_wrapper;
|
||||||
ruby_safe_level = safe;
|
ruby_safe_level = safe;
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
@ -6496,6 +6515,7 @@ block_pass(self, node)
|
||||||
int state;
|
int state;
|
||||||
volatile int orphan;
|
volatile int orphan;
|
||||||
volatile int safe = ruby_safe_level;
|
volatile int safe = ruby_safe_level;
|
||||||
|
volatile VALUE old_wrapper = ruby_wrapper;
|
||||||
|
|
||||||
if (NIL_P(block)) {
|
if (NIL_P(block)) {
|
||||||
return rb_eval(self, node->nd_iter);
|
return rb_eval(self, node->nd_iter);
|
||||||
|
@ -6511,6 +6531,8 @@ block_pass(self, node)
|
||||||
Data_Get_Struct(block, struct BLOCK, data);
|
Data_Get_Struct(block, struct BLOCK, data);
|
||||||
orphan = blk_orphan(data);
|
orphan = blk_orphan(data);
|
||||||
|
|
||||||
|
ruby_wrapper = data->wrapper;
|
||||||
|
|
||||||
/* PUSH BLOCK from data */
|
/* PUSH BLOCK from data */
|
||||||
old_block = ruby_block;
|
old_block = ruby_block;
|
||||||
_block = *data;
|
_block = *data;
|
||||||
|
@ -6548,6 +6570,7 @@ block_pass(self, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ruby_block = old_block;
|
ruby_block = old_block;
|
||||||
|
ruby_wrapper = old_wrapper;
|
||||||
ruby_safe_level = safe;
|
ruby_safe_level = safe;
|
||||||
|
|
||||||
switch (state) {/* escape from orphan procedure */
|
switch (state) {/* escape from orphan procedure */
|
||||||
|
@ -8989,7 +9012,7 @@ rb_f_throw(argc, argv)
|
||||||
tt = tt->prev;
|
tt = tt->prev;
|
||||||
}
|
}
|
||||||
if (!tt) {
|
if (!tt) {
|
||||||
rb_raise(rb_eNameError, "uncaught throw `%s'", rb_id2name(t));
|
rb_name_error(t, "uncaught throw `%s'", rb_id2name(t));
|
||||||
}
|
}
|
||||||
return_value(value);
|
return_value(value);
|
||||||
rb_trap_restore_mask();
|
rb_trap_restore_mask();
|
||||||
|
|
|
@ -25,7 +25,7 @@ class IO
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if iterator? then
|
if block_given? then
|
||||||
yield result
|
yield result
|
||||||
else
|
else
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -1,63 +1,60 @@
|
||||||
GNU Readline Libraryを利用するための拡張モジュールです。
|
Extension for GNU Readline Library
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
require "readline"
|
require "readline"
|
||||||
include Readline
|
include Readline
|
||||||
|
|
||||||
line = readline("Prompt> ", TRUE)
|
line = readline("Prompt> ", true)
|
||||||
|
|
||||||
のように使用してください。
|
|
||||||
|
|
||||||
[Readline]
|
[Readline]
|
||||||
|
|
||||||
<モジュール関数>
|
<module function>
|
||||||
|
|
||||||
readline(prompt, add=nil)
|
readline(prompt, add_hostory=nil)
|
||||||
|
|
||||||
一行入力を読み込みます。
|
Reads one line wit line edit. the line is added to the
|
||||||
addがTRUEの場合、ヒストリに読み込んだ文字列を追加します。
|
history also if "add" is true.
|
||||||
|
|
||||||
<クラスメソッド>
|
<class mehods>
|
||||||
|
|
||||||
completion_proc = proc
|
completion_proc = proc
|
||||||
|
|
||||||
補完時の動作を決定するProcオブジェクトを指定します。
|
Specifies Proc object to determin completion behavior. It
|
||||||
procは引数に入力文字列を取り、候補文字列の配列を返すように
|
shoule take input-string, and return completion candidates.
|
||||||
してください。
|
|
||||||
|
|
||||||
completion_proc
|
completion_proc
|
||||||
|
|
||||||
補完時の動作を決定するProcオブジェクトを返します。
|
Returns the completion Proc object.
|
||||||
|
|
||||||
completion_case_fold = case_fold
|
completion_case_fold = bool
|
||||||
|
|
||||||
補完時に大文字小文字を区別しない場合、TRUEを指定します。
|
Sets whether or not to ignore case on completion.
|
||||||
|
|
||||||
completion_case_fold
|
completion_case_fold
|
||||||
|
|
||||||
補完時に大文字小文字を区別しない場合、TRUEを返します。
|
Returns true if completion ignores case.
|
||||||
|
|
||||||
completion_append_character = char
|
completion_append_character = char
|
||||||
|
|
||||||
補完時に付加される文字を文字列で指定します。先頭の一文字が
|
Specifies a chacatcter to be appended on completion.
|
||||||
設定され、空文字列 ("") または nil を指定すると何も付加
|
Nothing will be appended if empty string ("") or nil is specified.
|
||||||
されなくなります。
|
|
||||||
|
|
||||||
completion_append_character
|
completion_append_character
|
||||||
|
|
||||||
補完時に付加される文字を文字列で返します。デフォルトは
|
Returns a string contains a character to be appended on
|
||||||
空白 (" ") です。
|
completion. The default is a space (" ").
|
||||||
|
|
||||||
vi_editing_mode
|
vi_editing_mode
|
||||||
|
|
||||||
VIモードになります。
|
Specifies VI editing mode.
|
||||||
|
|
||||||
emacs_editing_mode
|
emacs_editing_mode
|
||||||
|
|
||||||
Emacsモードになります。
|
Specifies Emacs editing mode.
|
||||||
|
|
||||||
<クラス定数>
|
<class constants>
|
||||||
|
|
||||||
HISTORY
|
HISTORY
|
||||||
|
|
||||||
ヒストリに対する操作はこの定数を通して行ってください。
|
The history buffer. It behaves just like an array.
|
||||||
配列と同じように扱えるようになっています。
|
|
||||||
|
|
63
ext/readline/README.jp
Normal file
63
ext/readline/README.jp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
GNU Readline Libraryを利用するための拡張モジュールです。
|
||||||
|
|
||||||
|
require "readline"
|
||||||
|
include Readline
|
||||||
|
|
||||||
|
line = readline("Prompt> ", true)
|
||||||
|
|
||||||
|
のように使用してください。
|
||||||
|
|
||||||
|
[Readline]
|
||||||
|
|
||||||
|
<モジュール関数>
|
||||||
|
|
||||||
|
readline(prompt, add=nil)
|
||||||
|
|
||||||
|
一行入力を読み込みます。
|
||||||
|
addがtrueの場合、ヒストリに読み込んだ文字列を追加します。
|
||||||
|
|
||||||
|
<クラスメソッド>
|
||||||
|
|
||||||
|
completion_proc = proc
|
||||||
|
|
||||||
|
補完時の動作を決定するProcオブジェクトを指定します。
|
||||||
|
procは引数に入力文字列を取り、候補文字列の配列を返すように
|
||||||
|
してください。
|
||||||
|
|
||||||
|
completion_proc
|
||||||
|
|
||||||
|
補完時の動作を決定するProcオブジェクトを返します。
|
||||||
|
|
||||||
|
completion_case_fold = case_fold
|
||||||
|
|
||||||
|
補完時に大文字小文字を区別しない場合、trueを指定します。
|
||||||
|
|
||||||
|
completion_case_fold
|
||||||
|
|
||||||
|
補完時に大文字小文字を区別しない場合、trueを返します。
|
||||||
|
|
||||||
|
completion_append_character = char
|
||||||
|
|
||||||
|
補完時に付加される文字を文字列で指定します。先頭の一文字が
|
||||||
|
設定され、空文字列 ("") または nil を指定すると何も付加
|
||||||
|
されなくなります。
|
||||||
|
|
||||||
|
completion_append_character
|
||||||
|
|
||||||
|
補完時に付加される文字を文字列で返します。デフォルトは
|
||||||
|
空白 (" ") です。
|
||||||
|
|
||||||
|
vi_editing_mode
|
||||||
|
|
||||||
|
VIモードになります。
|
||||||
|
|
||||||
|
emacs_editing_mode
|
||||||
|
|
||||||
|
Emacsモードになります。
|
||||||
|
|
||||||
|
<クラス定数>
|
||||||
|
|
||||||
|
HISTORY
|
||||||
|
|
||||||
|
ヒストリに対する操作はこの定数を通して行ってください。
|
||||||
|
配列と同じように扱えるようになっています。
|
47
gc.c
47
gc.c
|
@ -258,7 +258,10 @@ static RVALUE **heaps;
|
||||||
static int heaps_length = 0;
|
static int heaps_length = 0;
|
||||||
static int heaps_used = 0;
|
static int heaps_used = 0;
|
||||||
|
|
||||||
#define HEAP_SLOTS 10000
|
#define HEAP_MIN_SLOTS 10000
|
||||||
|
static int *heaps_limits;
|
||||||
|
static int heap_slots = HEAP_MIN_SLOTS;
|
||||||
|
|
||||||
#define FREE_MIN 4096
|
#define FREE_MIN 4096
|
||||||
|
|
||||||
static RVALUE *himem, *lomem;
|
static RVALUE *himem, *lomem;
|
||||||
|
@ -275,13 +278,29 @@ add_heap()
|
||||||
(RVALUE**)realloc(heaps, heaps_length*sizeof(RVALUE*)):
|
(RVALUE**)realloc(heaps, heaps_length*sizeof(RVALUE*)):
|
||||||
(RVALUE**)malloc(heaps_length*sizeof(RVALUE*)));
|
(RVALUE**)malloc(heaps_length*sizeof(RVALUE*)));
|
||||||
if (heaps == 0) mem_error("heaps: can't alloc memory");
|
if (heaps == 0) mem_error("heaps: can't alloc memory");
|
||||||
|
RUBY_CRITICAL(heaps_limits = (heaps_used>0)?
|
||||||
|
(int*)realloc(heaps_limits, heaps_length*sizeof(int)):
|
||||||
|
(int*)malloc(heaps_length*sizeof(int)));
|
||||||
|
if (heaps_limits == 0) mem_error("heaps_limits: can't alloc memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
RUBY_CRITICAL(p = heaps[heaps_used++] = (RVALUE*)malloc(sizeof(RVALUE)*HEAP_SLOTS));
|
for (;;) {
|
||||||
if (p == 0) mem_error("add_heap: can't alloc memory");
|
RUBY_CRITICAL(p = heaps[heaps_used] = (RVALUE*)malloc(sizeof(RVALUE)*heap_slots));
|
||||||
pend = p + HEAP_SLOTS;
|
heaps_limits[heaps_used] = heap_slots;
|
||||||
|
if (p == 0) {
|
||||||
|
if (heap_slots == HEAP_MIN_SLOTS) {
|
||||||
|
mem_error("add_heap: can't alloc memory");
|
||||||
|
}
|
||||||
|
heap_slots = HEAP_MIN_SLOTS;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pend = p + heap_slots;
|
||||||
if (lomem == 0 || lomem > p) lomem = p;
|
if (lomem == 0 || lomem > p) lomem = p;
|
||||||
if (himem < pend) himem = pend;
|
if (himem < pend) himem = pend;
|
||||||
|
heaps_used++;
|
||||||
|
heap_slots *= 2;
|
||||||
|
|
||||||
while (p < pend) {
|
while (p < pend) {
|
||||||
p->as.free.flags = 0;
|
p->as.free.flags = 0;
|
||||||
|
@ -337,8 +356,8 @@ is_pointer_to_heap(ptr)
|
||||||
/* check if p looks like a pointer */
|
/* check if p looks like a pointer */
|
||||||
for (i=0; i < heaps_used; i++) {
|
for (i=0; i < heaps_used; i++) {
|
||||||
heap_org = heaps[i];
|
heap_org = heaps[i];
|
||||||
if (heap_org <= p && p < heap_org + HEAP_SLOTS
|
if (heap_org <= p && p < heap_org + heaps_limits[i] &&
|
||||||
&& ((((char*)p)-((char*)heap_org))%sizeof(RVALUE)) == 0)
|
((((char*)p)-((char*)heap_org))%sizeof(RVALUE)) == 0)
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
|
@ -512,6 +531,8 @@ rb_gc_mark(ptr)
|
||||||
case NODE_DEFINED:
|
case NODE_DEFINED:
|
||||||
case NODE_MATCH:
|
case NODE_MATCH:
|
||||||
case NODE_RETURN:
|
case NODE_RETURN:
|
||||||
|
case NODE_BREAK:
|
||||||
|
case NODE_NEXT:
|
||||||
case NODE_YIELD:
|
case NODE_YIELD:
|
||||||
case NODE_COLON2:
|
case NODE_COLON2:
|
||||||
case NODE_ARGS:
|
case NODE_ARGS:
|
||||||
|
@ -539,8 +560,6 @@ rb_gc_mark(ptr)
|
||||||
case NODE_BACK_REF:
|
case NODE_BACK_REF:
|
||||||
case NODE_ALIAS:
|
case NODE_ALIAS:
|
||||||
case NODE_VALIAS:
|
case NODE_VALIAS:
|
||||||
case NODE_BREAK:
|
|
||||||
case NODE_NEXT:
|
|
||||||
case NODE_REDO:
|
case NODE_REDO:
|
||||||
case NODE_RETRY:
|
case NODE_RETRY:
|
||||||
case NODE_UNDEF:
|
case NODE_UNDEF:
|
||||||
|
@ -676,7 +695,7 @@ gc_sweep()
|
||||||
if (ruby_in_compile) {
|
if (ruby_in_compile) {
|
||||||
/* should not reclaim nodes during compilation */
|
/* should not reclaim nodes during compilation */
|
||||||
for (i = 0; i < used; i++) {
|
for (i = 0; i < used; i++) {
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
while (p < pend) {
|
while (p < pend) {
|
||||||
if (!(p->as.basic.flags&FL_MARK) && BUILTIN_TYPE(p) == T_NODE)
|
if (!(p->as.basic.flags&FL_MARK) && BUILTIN_TYPE(p) == T_NODE)
|
||||||
rb_gc_mark((VALUE)p);
|
rb_gc_mark((VALUE)p);
|
||||||
|
@ -691,7 +710,7 @@ gc_sweep()
|
||||||
for (i = 0; i < used; i++) {
|
for (i = 0; i < used; i++) {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
while (p < pend) {
|
while (p < pend) {
|
||||||
if (!(p->as.basic.flags & FL_MARK)) {
|
if (!(p->as.basic.flags & FL_MARK)) {
|
||||||
if (p->as.basic.flags) {
|
if (p->as.basic.flags) {
|
||||||
|
@ -1045,7 +1064,7 @@ os_live_obj()
|
||||||
for (i = 0; i < heaps_used; i++) {
|
for (i = 0; i < heaps_used; i++) {
|
||||||
RVALUE *p, *pend;
|
RVALUE *p, *pend;
|
||||||
|
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
for (;p < pend; p++) {
|
for (;p < pend; p++) {
|
||||||
if (p->as.basic.flags) {
|
if (p->as.basic.flags) {
|
||||||
switch (TYPE(p)) {
|
switch (TYPE(p)) {
|
||||||
|
@ -1078,7 +1097,7 @@ os_obj_of(of)
|
||||||
for (i = 0; i < heaps_used; i++) {
|
for (i = 0; i < heaps_used; i++) {
|
||||||
RVALUE *p, *pend;
|
RVALUE *p, *pend;
|
||||||
|
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
for (;p < pend; p++) {
|
for (;p < pend; p++) {
|
||||||
if (p->as.basic.flags) {
|
if (p->as.basic.flags) {
|
||||||
switch (TYPE(p)) {
|
switch (TYPE(p)) {
|
||||||
|
@ -1245,7 +1264,7 @@ rb_gc_call_finalizer_at_exit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 0; i < heaps_used; i++) {
|
for (i = 0; i < heaps_used; i++) {
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
while (p < pend) {
|
while (p < pend) {
|
||||||
if (FL_TEST(p, FL_FINALIZE)) {
|
if (FL_TEST(p, FL_FINALIZE)) {
|
||||||
FL_UNSET(p, FL_FINALIZE);
|
FL_UNSET(p, FL_FINALIZE);
|
||||||
|
@ -1258,7 +1277,7 @@ rb_gc_call_finalizer_at_exit()
|
||||||
}
|
}
|
||||||
/* run data object's finaliers */
|
/* run data object's finaliers */
|
||||||
for (i = 0; i < heaps_used; i++) {
|
for (i = 0; i < heaps_used; i++) {
|
||||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
p = heaps[i]; pend = p + heaps_limits[i];
|
||||||
while (p < pend) {
|
while (p < pend) {
|
||||||
if (BUILTIN_TYPE(p) == T_DATA &&
|
if (BUILTIN_TYPE(p) == T_DATA &&
|
||||||
DATA_PTR(p) && RANY(p)->as.data.dfree) {
|
DATA_PTR(p) && RANY(p)->as.data.dfree) {
|
||||||
|
|
1
intern.h
1
intern.h
|
@ -109,6 +109,7 @@ VALUE rb_exc_new _((VALUE, const char*, long));
|
||||||
VALUE rb_exc_new2 _((VALUE, const char*));
|
VALUE rb_exc_new2 _((VALUE, const char*));
|
||||||
VALUE rb_exc_new3 _((VALUE, VALUE));
|
VALUE rb_exc_new3 _((VALUE, VALUE));
|
||||||
NORETURN(void rb_loaderror __((const char*, ...)));
|
NORETURN(void rb_loaderror __((const char*, ...)));
|
||||||
|
NORETURN(void rb_name_error __((VALUE id, const char*, ...)));
|
||||||
void rb_compile_error __((const char*, ...));
|
void rb_compile_error __((const char*, ...));
|
||||||
void rb_compile_error_append __((const char*, ...));
|
void rb_compile_error_append __((const char*, ...));
|
||||||
NORETURN(void rb_load_fail _((char*)));
|
NORETURN(void rb_load_fail _((char*)));
|
||||||
|
|
2
keywords
2
keywords
|
@ -27,7 +27,7 @@ nil, kNIL, kNIL, EXPR_END
|
||||||
not, kNOT, kNOT, EXPR_BEG
|
not, kNOT, kNOT, EXPR_BEG
|
||||||
or, kOR, kOR, EXPR_BEG
|
or, kOR, kOR, EXPR_BEG
|
||||||
redo, kREDO, kREDO, EXPR_END
|
redo, kREDO, kREDO, EXPR_END
|
||||||
rescue, kRESCUE, kRESCUE_MOD, EXPR_END
|
rescue, kRESCUE, kRESCUE_MOD, EXPR_MID
|
||||||
retry, kRETRY, kRETRY, EXPR_END
|
retry, kRETRY, kRETRY, EXPR_END
|
||||||
return, kRETURN, kRETURN, EXPR_MID
|
return, kRETURN, kRETURN, EXPR_MID
|
||||||
self, kSELF, kSELF, EXPR_END
|
self, kSELF, kSELF, EXPR_END
|
||||||
|
|
10
lex.c
10
lex.c
|
@ -1,5 +1,5 @@
|
||||||
/* C code produced by gperf version 2.7.1 (19981006 egcs) */
|
/* C code produced by gperf version 2.7.2 */
|
||||||
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$ ./keywords */
|
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k'1,3,$' ./keywords */
|
||||||
struct kwtable {char *name; int id[2]; enum lex_state state;};
|
struct kwtable {char *name; int id[2]; enum lex_state state;};
|
||||||
|
|
||||||
#define TOTAL_KEYWORDS 40
|
#define TOTAL_KEYWORDS 40
|
||||||
|
@ -11,6 +11,10 @@ struct kwtable {char *name; int id[2]; enum lex_state state;};
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
static unsigned int
|
static unsigned int
|
||||||
hash (str, len)
|
hash (str, len)
|
||||||
|
@ -79,7 +83,7 @@ rb_reserved_word (str, len)
|
||||||
{"module", kMODULE, kMODULE, EXPR_BEG},
|
{"module", kMODULE, kMODULE, EXPR_BEG},
|
||||||
{"elsif", kELSIF, kELSIF, EXPR_BEG},
|
{"elsif", kELSIF, kELSIF, EXPR_BEG},
|
||||||
{"def", kDEF, kDEF, EXPR_FNAME},
|
{"def", kDEF, kDEF, EXPR_FNAME},
|
||||||
{"rescue", kRESCUE, kRESCUE_MOD, EXPR_END},
|
{"rescue", kRESCUE, kRESCUE_MOD, EXPR_MID},
|
||||||
{"not", kNOT, kNOT, EXPR_BEG},
|
{"not", kNOT, kNOT, EXPR_BEG},
|
||||||
{"then", kTHEN, kTHEN, EXPR_BEG},
|
{"then", kTHEN, kTHEN, EXPR_BEG},
|
||||||
{"yield", kYIELD, kYIELD, EXPR_ARG},
|
{"yield", kYIELD, kYIELD, EXPR_ARG},
|
||||||
|
|
|
@ -300,7 +300,9 @@ class DEBUGGER__
|
||||||
when /^\s*b(?:reak)?\s+((?:.*?+:)?.+)$/
|
when /^\s*b(?:reak)?\s+((?:.*?+:)?.+)$/
|
||||||
pos = $1
|
pos = $1
|
||||||
if pos.index(":")
|
if pos.index(":")
|
||||||
file, pos = pos.split(":")
|
pos = pos.split(":")
|
||||||
|
file = pos[0...-1].join(":")
|
||||||
|
pos = pos[-1]
|
||||||
end
|
end
|
||||||
file = File.basename(file)
|
file = File.basename(file)
|
||||||
if pos =~ /^\d+$/
|
if pos =~ /^\d+$/
|
||||||
|
|
|
@ -70,8 +70,7 @@ do_coerce(x, y)
|
||||||
VALUE a[2];
|
VALUE a[2];
|
||||||
|
|
||||||
a[0] = *x; a[1] = *y;
|
a[0] = *x; a[1] = *y;
|
||||||
ary = rb_rescue2(coerce_body, (VALUE)a, coerce_rescue, (VALUE)a,
|
ary = rb_rescue(coerce_body, (VALUE)a, coerce_rescue, (VALUE)a);
|
||||||
rb_eStandardError, rb_eNameError, 0);
|
|
||||||
if (TYPE(ary) != T_ARRAY || RARRAY(ary)->len != 2) {
|
if (TYPE(ary) != T_ARRAY || RARRAY(ary)->len != 2) {
|
||||||
rb_raise(rb_eTypeError, "coerce must return [x, y]");
|
rb_raise(rb_eTypeError, "coerce must return [x, y]");
|
||||||
}
|
}
|
||||||
|
|
12
object.c
12
object.c
|
@ -769,7 +769,7 @@ rb_mod_const_get(mod, name)
|
||||||
ID id = rb_to_id(name);
|
ID id = rb_to_id(name);
|
||||||
|
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong constant name %s", rb_id2name(id));
|
rb_name_error(id, "wrong constant name %s", rb_id2name(id));
|
||||||
}
|
}
|
||||||
return rb_const_get(mod, id);
|
return rb_const_get(mod, id);
|
||||||
}
|
}
|
||||||
|
@ -781,7 +781,7 @@ rb_mod_const_set(mod, name, value)
|
||||||
ID id = rb_to_id(name);
|
ID id = rb_to_id(name);
|
||||||
|
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong constant name %s", rb_id2name(id));
|
rb_name_error(id, "wrong constant name %s", rb_id2name(id));
|
||||||
}
|
}
|
||||||
rb_const_set(mod, id, value);
|
rb_const_set(mod, id, value);
|
||||||
return value;
|
return value;
|
||||||
|
@ -794,7 +794,7 @@ rb_mod_const_defined(mod, name)
|
||||||
ID id = rb_to_id(name);
|
ID id = rb_to_id(name);
|
||||||
|
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong constant name %s", rb_id2name(id));
|
rb_name_error(id, "wrong constant name %s", rb_id2name(id));
|
||||||
}
|
}
|
||||||
return rb_const_defined_at(mod, id);
|
return rb_const_defined_at(mod, id);
|
||||||
}
|
}
|
||||||
|
@ -866,8 +866,7 @@ rb_convert_type(val, type, tname, method)
|
||||||
arg1.val = arg2.val = val;
|
arg1.val = arg2.val = val;
|
||||||
arg1.s = method;
|
arg1.s = method;
|
||||||
arg2.s = tname;
|
arg2.s = tname;
|
||||||
val = rb_rescue2(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2,
|
val = rb_rescue2(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2);
|
||||||
rb_eStandardError, rb_eNameError, 0);
|
|
||||||
if (TYPE(val) != type) {
|
if (TYPE(val) != type) {
|
||||||
rb_raise(rb_eTypeError, "%s#%s should return %s",
|
rb_raise(rb_eTypeError, "%s#%s should return %s",
|
||||||
rb_class2name(CLASS_OF(arg1.val)), method, tname);
|
rb_class2name(CLASS_OF(arg1.val)), method, tname);
|
||||||
|
@ -886,8 +885,7 @@ rb_to_integer(val, method)
|
||||||
arg1.val = arg2.val = val;
|
arg1.val = arg2.val = val;
|
||||||
arg1.s = method;
|
arg1.s = method;
|
||||||
arg2.s = "Integer";
|
arg2.s = "Integer";
|
||||||
val = rb_rescue2(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2,
|
val = rb_rescue(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2);
|
||||||
rb_eStandardError, rb_eNameError, 0);
|
|
||||||
if (!rb_obj_is_kind_of(val, rb_cInteger)) {
|
if (!rb_obj_is_kind_of(val, rb_cInteger)) {
|
||||||
rb_raise(rb_eTypeError, "%s#%s should return Integer",
|
rb_raise(rb_eTypeError, "%s#%s should return Integer",
|
||||||
rb_class2name(CLASS_OF(arg1.val)), method);
|
rb_class2name(CLASS_OF(arg1.val)), method);
|
||||||
|
|
13
parse.y
13
parse.y
|
@ -99,7 +99,6 @@ static int in_single = 0;
|
||||||
static int in_def = 0;
|
static int in_def = 0;
|
||||||
static int compile_for_eval = 0;
|
static int compile_for_eval = 0;
|
||||||
static ID cur_mid = 0;
|
static ID cur_mid = 0;
|
||||||
static ID last_id = 0;
|
|
||||||
|
|
||||||
static NODE *cond();
|
static NODE *cond();
|
||||||
static NODE *logop();
|
static NODE *logop();
|
||||||
|
@ -1094,13 +1093,13 @@ open_args : call_args
|
||||||
| tLPAREN_ARG {lex_state = EXPR_ENDARG;} ')'
|
| tLPAREN_ARG {lex_state = EXPR_ENDARG;} ')'
|
||||||
{
|
{
|
||||||
rb_warning("%s (...) interpreted as method call",
|
rb_warning("%s (...) interpreted as method call",
|
||||||
rb_id2name(last_id));
|
rb_id2name($<id>1));
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| tLPAREN_ARG call_args2 {lex_state = EXPR_ENDARG;} ')'
|
| tLPAREN_ARG call_args2 {lex_state = EXPR_ENDARG;} ')'
|
||||||
{
|
{
|
||||||
rb_warning("%s (...) interpreted as method call",
|
rb_warning("%s (...) interpreted as method call",
|
||||||
rb_id2name(last_id));
|
rb_id2name($<id>1));
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,7 +1191,7 @@ primary : literal
|
||||||
}
|
}
|
||||||
| tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} ')'
|
| tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} ')'
|
||||||
{
|
{
|
||||||
rb_warning("%s (...) interpreted as command call", rb_id2name(last_id));
|
rb_warning("%s (...) interpreted as command call", rb_id2name($<id>1));
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
}
|
}
|
||||||
| tLPAREN compstmt ')'
|
| tLPAREN compstmt ')'
|
||||||
|
@ -2892,6 +2891,7 @@ double strtod ();
|
||||||
static int
|
static int
|
||||||
yylex()
|
yylex()
|
||||||
{
|
{
|
||||||
|
static ID last_id = 0;
|
||||||
register int c;
|
register int c;
|
||||||
int space_seen = 0;
|
int space_seen = 0;
|
||||||
int cmd_state;
|
int cmd_state;
|
||||||
|
@ -3460,6 +3460,7 @@ yylex()
|
||||||
else if (lex_state == EXPR_ARG) {
|
else if (lex_state == EXPR_ARG) {
|
||||||
rb_warning("%s (...) interpreted as method call", tok());
|
rb_warning("%s (...) interpreted as method call", tok());
|
||||||
c = tLPAREN_ARG;
|
c = tLPAREN_ARG;
|
||||||
|
yylval.id = last_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
COND_PUSH(0);
|
COND_PUSH(0);
|
||||||
|
@ -4422,10 +4423,6 @@ void_expr(node)
|
||||||
case tLEQ:
|
case tLEQ:
|
||||||
case tEQ:
|
case tEQ:
|
||||||
case tNEQ:
|
case tNEQ:
|
||||||
case tAREF:
|
|
||||||
case tRSHFT:
|
|
||||||
case tCOLON2:
|
|
||||||
case tCOLON3:
|
|
||||||
useless = rb_id2name(node->nd_mid);
|
useless = rb_id2name(node->nd_mid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
5
range.c
5
range.c
|
@ -45,8 +45,7 @@ range_init(obj, beg, end, exclude_end)
|
||||||
|
|
||||||
args[0] = beg; args[1] = end;
|
args[0] = beg; args[1] = end;
|
||||||
if (!FIXNUM_P(beg) || !FIXNUM_P(end)) {
|
if (!FIXNUM_P(beg) || !FIXNUM_P(end)) {
|
||||||
rb_rescue2(range_check, (VALUE)args, range_failed, 0,
|
rb_rescue2(range_check, (VALUE)args, range_failed, 0);
|
||||||
rb_eStandardError, rb_eNameError, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_EXCL(obj, exclude_end);
|
SET_EXCL(obj, exclude_end);
|
||||||
|
@ -76,7 +75,7 @@ range_initialize(argc, argv, obj)
|
||||||
rb_scan_args(argc, argv, "21", &beg, &end, &flags);
|
rb_scan_args(argc, argv, "21", &beg, &end, &flags);
|
||||||
/* Ranges are immutable, so that they should be initialized only once. */
|
/* Ranges are immutable, so that they should be initialized only once. */
|
||||||
if (rb_ivar_defined(obj, id_beg)) {
|
if (rb_ivar_defined(obj, id_beg)) {
|
||||||
rb_raise(rb_eNameError, "`initialize' called twice");
|
rb_name_error(rb_intern("initialized"), "`initialize' called twice");
|
||||||
}
|
}
|
||||||
range_init(obj, beg, end, RTEST(flags));
|
range_init(obj, beg, end, RTEST(flags));
|
||||||
return Qnil;
|
return Qnil;
|
||||||
|
|
1
regex.c
1
regex.c
|
@ -3496,6 +3496,7 @@ init_regs(regs, num_regs)
|
||||||
else if (regs->allocated < num_regs) {
|
else if (regs->allocated < num_regs) {
|
||||||
TREALLOC(regs->beg, num_regs, int);
|
TREALLOC(regs->beg, num_regs, int);
|
||||||
TREALLOC(regs->end, num_regs, int);
|
TREALLOC(regs->end, num_regs, int);
|
||||||
|
regs->allocated = num_regs;
|
||||||
}
|
}
|
||||||
for (i=0; i<num_regs; i++) {
|
for (i=0; i<num_regs; i++) {
|
||||||
regs->beg[i] = regs->end[i] = -1;
|
regs->beg[i] = regs->end[i] = -1;
|
||||||
|
|
5
ruby.c
5
ruby.c
|
@ -265,20 +265,19 @@ ruby_init_loadpath()
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_SEARCH_PATH));
|
ruby_incpush(RUBY_RELATIVE(RUBY_SEARCH_PATH));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_LIB2));
|
||||||
#ifdef RUBY_SITE_THIN_ARCHLIB
|
#ifdef RUBY_SITE_THIN_ARCHLIB
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_THIN_ARCHLIB));
|
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_THIN_ARCHLIB));
|
||||||
#endif
|
#endif
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
|
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_LIB2));
|
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
|
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
|
||||||
|
|
||||||
|
ruby_incpush(RUBY_RELATIVE(RUBY_LIB));
|
||||||
#ifdef RUBY_THIN_ARCHLIB
|
#ifdef RUBY_THIN_ARCHLIB
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB));
|
ruby_incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB));
|
||||||
#endif
|
#endif
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_ARCHLIB));
|
ruby_incpush(RUBY_RELATIVE(RUBY_ARCHLIB));
|
||||||
|
|
||||||
ruby_incpush(RUBY_RELATIVE(RUBY_LIB));
|
|
||||||
|
|
||||||
if (rb_safe_level() == 0) {
|
if (rb_safe_level() == 0) {
|
||||||
ruby_incpush(".");
|
ruby_incpush(".");
|
||||||
}
|
}
|
||||||
|
|
11
struct.c
11
struct.c
|
@ -89,7 +89,7 @@ rb_struct_getmember(obj, id)
|
||||||
return RSTRUCT(obj)->ptr[i];
|
return RSTRUCT(obj)->ptr[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "%s is not struct member", rb_id2name(id));
|
rb_name_error(id, "%s is not struct member", rb_id2name(id));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,8 @@ rb_struct_set(obj, val)
|
||||||
return RSTRUCT(obj)->ptr[i] = val;
|
return RSTRUCT(obj)->ptr[i] = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "not struct member");
|
rb_name_error(rb_frame_last_func(), "`%s' is not a struct member",
|
||||||
|
rb_id2name(rb_frame_last_func()));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +161,7 @@ make_struct(name, member, klass)
|
||||||
char *cname = StringValuePtr(name);
|
char *cname = StringValuePtr(name);
|
||||||
id = rb_intern(cname);
|
id = rb_intern(cname);
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "identifier %s needs to be constant", cname);
|
rb_name_error(id, "identifier %s needs to be constant", cname);
|
||||||
}
|
}
|
||||||
nstr = rb_define_class_under(klass, cname, klass);
|
nstr = rb_define_class_under(klass, cname, klass);
|
||||||
}
|
}
|
||||||
|
@ -435,7 +436,7 @@ rb_struct_aref_id(s, id)
|
||||||
return RSTRUCT(s)->ptr[i];
|
return RSTRUCT(s)->ptr[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "no member '%s' in struct", rb_id2name(id));
|
rb_name_error(id, "no member '%s' in struct", rb_id2name(id));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,7 +482,7 @@ rb_struct_aset_id(s, id, val)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "no member '%s' in struct", rb_id2name(id));
|
rb_name_error(id, "no member '%s' in struct", rb_id2name(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
|
|
46
variable.c
46
variable.c
|
@ -251,8 +251,7 @@ rb_autoload_id(id, filename)
|
||||||
{
|
{
|
||||||
rb_secure(4);
|
rb_secure(4);
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "autoload must be constant name",
|
rb_name_error(id, "autoload must be constant name", rb_id2name(id));
|
||||||
rb_id2name(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!autoload_tbl) {
|
if (!autoload_tbl) {
|
||||||
|
@ -418,7 +417,7 @@ readonly_setter(val, id, var)
|
||||||
ID id;
|
ID id;
|
||||||
void *var;
|
void *var;
|
||||||
{
|
{
|
||||||
rb_raise(rb_eNameError, "can't set variable %s", rb_id2name(id));
|
rb_name_error(id, "can't set variable %s", rb_id2name(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -528,8 +527,7 @@ rb_f_trace_var(argc, argv)
|
||||||
}
|
}
|
||||||
id = rb_to_id(var);
|
id = rb_to_id(var);
|
||||||
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
||||||
rb_raise(rb_eNameError, "undefined global variable %s",
|
rb_name_error(id, "undefined global variable %s", rb_id2name(id));
|
||||||
rb_id2name(id));
|
|
||||||
}
|
}
|
||||||
trace = ALLOC(struct trace_var);
|
trace = ALLOC(struct trace_var);
|
||||||
trace->next = entry->trace;
|
trace->next = entry->trace;
|
||||||
|
@ -575,8 +573,7 @@ rb_f_untrace_var(argc, argv)
|
||||||
rb_scan_args(argc, argv, "11", &var, &cmd);
|
rb_scan_args(argc, argv, "11", &var, &cmd);
|
||||||
id = rb_to_id(var);
|
id = rb_to_id(var);
|
||||||
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
||||||
rb_raise(rb_eNameError, "undefined global variable %s",
|
rb_name_error(id, "undefined global variable %s", rb_id2name(id));
|
||||||
rb_id2name(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trace = entry->trace;
|
trace = entry->trace;
|
||||||
|
@ -1005,8 +1002,7 @@ rb_obj_remove_instance_variable(obj, name)
|
||||||
rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
|
rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
|
||||||
if (OBJ_FROZEN(obj)) rb_error_frozen("object");
|
if (OBJ_FROZEN(obj)) rb_error_frozen("object");
|
||||||
if (!rb_is_instance_id(id)) {
|
if (!rb_is_instance_id(id)) {
|
||||||
rb_raise(rb_eNameError, "`%s' is not an instance variable",
|
rb_name_error(id, "`%s' is not an instance variable", rb_id2name(id));
|
||||||
rb_id2name(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (TYPE(obj)) {
|
switch (TYPE(obj)) {
|
||||||
|
@ -1055,7 +1051,7 @@ rb_const_get_at(klass, id)
|
||||||
if (klass == rb_cObject && top_const_get(id, &value)) {
|
if (klass == rb_cObject && top_const_get(id, &value)) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "uninitialized constant %s::%s",
|
rb_name_error(id, "uninitialized constant %s::%s",
|
||||||
RSTRING(rb_class_path(klass))->ptr,
|
RSTRING(rb_class_path(klass))->ptr,
|
||||||
rb_id2name(id));
|
rb_id2name(id));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
|
@ -1104,12 +1100,12 @@ rb_const_get(klass, id)
|
||||||
|
|
||||||
/* Uninitialized constant */
|
/* Uninitialized constant */
|
||||||
if (klass && klass != rb_cObject) {
|
if (klass && klass != rb_cObject) {
|
||||||
rb_raise(rb_eNameError, "uninitialized constant %s at %s",
|
rb_name_error(id, "uninitialized constant %s at %s",
|
||||||
rb_id2name(id),
|
rb_id2name(id),
|
||||||
RSTRING(rb_class_path(klass))->ptr);
|
RSTRING(rb_class_path(klass))->ptr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_raise(rb_eNameError, "uninitialized constant %s",rb_id2name(id));
|
rb_name_error(id, "uninitialized constant %s",rb_id2name(id));
|
||||||
}
|
}
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
@ -1122,7 +1118,7 @@ rb_mod_remove_const(mod, name)
|
||||||
VALUE val;
|
VALUE val;
|
||||||
|
|
||||||
if (!rb_is_const_id(id)) {
|
if (!rb_is_const_id(id)) {
|
||||||
rb_raise(rb_eNameError, "`%s' is not constant", rb_id2name(id));
|
rb_name_error(id, "`%s' is not constant", rb_id2name(id));
|
||||||
}
|
}
|
||||||
if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
|
if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
|
||||||
rb_raise(rb_eSecurityError, "Insecure: can't remove constant");
|
rb_raise(rb_eSecurityError, "Insecure: can't remove constant");
|
||||||
|
@ -1132,10 +1128,10 @@ rb_mod_remove_const(mod, name)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
if (rb_const_defined_at(mod, id)) {
|
if (rb_const_defined_at(mod, id)) {
|
||||||
rb_raise(rb_eNameError, "cannot remove %s::%s",
|
rb_name_error(id, "cannot remove %s::%s",
|
||||||
rb_class2name(mod), rb_id2name(id));
|
rb_class2name(mod), rb_id2name(id));
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "constant %s::%s not defined",
|
rb_name_error(id, "constant %s::%s not defined",
|
||||||
rb_class2name(mod), rb_id2name(id));
|
rb_class2name(mod), rb_id2name(id));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
@ -1339,11 +1335,11 @@ rb_const_assign(klass, id, val)
|
||||||
|
|
||||||
/* Uninitialized constant */
|
/* Uninitialized constant */
|
||||||
if (klass && klass != rb_cObject)
|
if (klass && klass != rb_cObject)
|
||||||
rb_raise(rb_eNameError, "uninitialized constant %s::%s",
|
rb_name_error(id, "uninitialized constant %s::%s",
|
||||||
RSTRING(rb_class_path(klass))->ptr,
|
RSTRING(rb_class_path(klass))->ptr,
|
||||||
rb_id2name(id));
|
rb_id2name(id));
|
||||||
else {
|
else {
|
||||||
rb_raise(rb_eNameError, "uninitialized constant %s",rb_id2name(id));
|
rb_name_error(id, "uninitialized constant %s",rb_id2name(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1402,7 +1398,7 @@ rb_cvar_set(klass, id, val)
|
||||||
tmp = RCLASS(tmp)->super;
|
tmp = RCLASS(tmp)->super;
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_raise(rb_eNameError,"uninitialized class variable %s in %s",
|
rb_name_error(id,"uninitialized class variable %s in %s",
|
||||||
rb_id2name(id), rb_class2name(klass));
|
rb_id2name(id), rb_class2name(klass));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1444,7 +1440,7 @@ rb_cvar_get(klass, id)
|
||||||
tmp = RCLASS(tmp)->super;
|
tmp = RCLASS(tmp)->super;
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_raise(rb_eNameError,"uninitialized class variable %s in %s",
|
rb_name_error(id,"uninitialized class variable %s in %s",
|
||||||
rb_id2name(id), rb_class2name(klass));
|
rb_id2name(id), rb_class2name(klass));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
@ -1475,7 +1471,7 @@ rb_cv_set(klass, name, val)
|
||||||
{
|
{
|
||||||
ID id = rb_intern(name);
|
ID id = rb_intern(name);
|
||||||
if (!rb_is_class_id(id)) {
|
if (!rb_is_class_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong class variable name %s", name);
|
rb_name_error(id, "wrong class variable name %s", name);
|
||||||
}
|
}
|
||||||
rb_cvar_set(klass, id, val);
|
rb_cvar_set(klass, id, val);
|
||||||
}
|
}
|
||||||
|
@ -1487,7 +1483,7 @@ rb_cv_get(klass, name)
|
||||||
{
|
{
|
||||||
ID id = rb_intern(name);
|
ID id = rb_intern(name);
|
||||||
if (!rb_is_class_id(id)) {
|
if (!rb_is_class_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong class variable name %s", name);
|
rb_name_error(id, "wrong class variable name %s", name);
|
||||||
}
|
}
|
||||||
return rb_cvar_get(klass, id);
|
return rb_cvar_get(klass, id);
|
||||||
}
|
}
|
||||||
|
@ -1501,7 +1497,7 @@ rb_define_class_variable(klass, name, val)
|
||||||
ID id = rb_intern(name);
|
ID id = rb_intern(name);
|
||||||
|
|
||||||
if (!rb_is_class_id(id)) {
|
if (!rb_is_class_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong class variable name %s", name);
|
rb_name_error(id, "wrong class variable name %s", name);
|
||||||
}
|
}
|
||||||
rb_cvar_declare(klass, id, val);
|
rb_cvar_declare(klass, id, val);
|
||||||
}
|
}
|
||||||
|
@ -1549,7 +1545,7 @@ rb_mod_remove_cvar(mod, name)
|
||||||
VALUE val;
|
VALUE val;
|
||||||
|
|
||||||
if (!rb_is_class_id(id)) {
|
if (!rb_is_class_id(id)) {
|
||||||
rb_raise(rb_eNameError, "wrong class variable name %s", name);
|
rb_name_error(id, "wrong class variable name %s", name);
|
||||||
}
|
}
|
||||||
if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
|
if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
|
||||||
rb_raise(rb_eSecurityError, "Insecure: can't remove class variable");
|
rb_raise(rb_eSecurityError, "Insecure: can't remove class variable");
|
||||||
|
@ -1559,10 +1555,10 @@ rb_mod_remove_cvar(mod, name)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
if (rb_cvar_defined(mod, id)) {
|
if (rb_cvar_defined(mod, id)) {
|
||||||
rb_raise(rb_eNameError, "cannot remove %s for %s",
|
rb_name_error(id, "cannot remove %s for %s",
|
||||||
rb_id2name(id), rb_class2name(mod));
|
rb_id2name(id), rb_class2name(mod));
|
||||||
}
|
}
|
||||||
rb_raise(rb_eNameError, "class variable %s not defined for %s",
|
rb_name_error(id, "class variable %s not defined for %s",
|
||||||
rb_id2name(id), rb_class2name(mod));
|
rb_id2name(id), rb_class2name(mod));
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue