diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-13 08:19:52 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-13 08:19:52 +0000 |
commit | 7422ccdd9e2fb2b28844879d5117d8fdc000c944 (patch) | |
tree | 9a6e9129ad35a2c0306e222f4ad2c59163849ee8 /eval.c | |
parent | 948ff2456bc7839817ea043b42b6423538ab873c (diff) |
* signal.c (sighandle): should not re-register sighandler if
POSIX_SIGNAL is defined.
* eval.c (error_print): errat array may be empty.
* eval.c (rb_eval_cmd): should not upgrade safe level unless
explicitly specified by argument newly added.
* signal.c (sig_trap): should not allow tainted trap closure.
* variable.c (rb_f_trace_var): should not allow trace_var on safe
level higher than 3.
* variable.c (rb_f_trace_var): should not allow tainted trace
closure.
* gc.c: do not use static stack until system stack overflows.
* eval.c (eval): should call Exception#exception instead of
calling rb_exc_new3() directly.
* error.c (exc_exception): set "mesg" directly to the clone. it
might be better to set mesg via some method for flexibility.
* variable.c (cvar_override_check): should print original module
name, if 'a' is T_ICLASS.
* parse.y (yylex): float '1_.0' should not be allowed.
* variable.c (var_getter): should care about var as Qfalse
(ruby-bugs#PR199).
* array.c (cmpint): <=> or block for {min,max} may return bignum.
* array.c (sort_1): use rb_compint.
* array.c (sort_2): ditto.
* enum.c (min_ii): ditto.
* enum.c (min_ii): ditto.
* enum.c (max_i): ditto.
* enum.c (max_ii): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -924,12 +924,15 @@ error_print() errat = Qnil; } POP_TAG(); - if (NIL_P(errat)) { + if (NIL_P(errat)){ if (ruby_sourcefile) fprintf(stderr, "%s:%d", ruby_sourcefile, ruby_sourceline); else fprintf(stderr, "%d", ruby_sourceline); } + else if (RARRAY(errat)->len == 0) { + error_pos(); + } else { VALUE mesg = RARRAY(errat)->ptr[0]; @@ -1342,8 +1345,9 @@ jump_tag_but_local_jump(state) } VALUE -rb_eval_cmd(cmd, arg) +rb_eval_cmd(cmd, arg, tcheck) VALUE cmd, arg; + int tcheck; { int state; VALUE val; /* OK */ @@ -1365,7 +1369,7 @@ rb_eval_cmd(cmd, arg) ruby_frame->self = ruby_top_self; ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_wrapper,0,0); - if (OBJ_TAINTED(cmd)) { + if (tcheck && OBJ_TAINTED(cmd)) { ruby_safe_level = 4; } @@ -1396,7 +1400,7 @@ rb_trap_eval(cmd, sig) PUSH_TAG(PROT_NONE); PUSH_ITER(ITER_NOT); if ((state = EXEC_TAG()) == 0) { - val = rb_eval_cmd(cmd, rb_ary_new3(1, INT2FIX(sig))); + val = rb_eval_cmd(cmd, rb_ary_new3(1, INT2FIX(sig)), 0); } POP_ITER(); POP_TAG(); @@ -1430,7 +1434,7 @@ superclass(self, node) rb_raise(rb_eTypeError, "undefined superclass `%s'", rb_id2name(node->nd_vid)); default: - rb_raise(rb_eTypeError, "superclass undefined"); + break; } JUMP_TAG(state); } @@ -4257,7 +4261,7 @@ static unsigned int STACK_LEVEL_MAX = 65535; #ifdef __human68k__ extern unsigned int _stacksize; # define STACK_LEVEL_MAX (_stacksize - 4096) -#undef HAVE_GETRLIMIT +# undef HAVE_GETRLIMIT #else #ifdef HAVE_GETRLIMIT static unsigned int STACK_LEVEL_MAX = 655300; @@ -5037,7 +5041,7 @@ eval(self, src, scope, file, line) err = rb_str_dup(ruby_errinfo); } errat = Qnil; - rb_exc_raise(rb_exc_new3(CLASS_OF(ruby_errinfo), err)); + rb_exc_raise(rb_funcall(ruby_errinfo, rb_intern("exception"), 1, err)); } rb_exc_raise(ruby_errinfo); } |