From 7f7236025953af6e0308995e073f9babbe149473 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 13 Feb 2006 04:53:22 +0000 Subject: * parse.y (parser_parse_string): mention "regexp" in a error message. a patch from Mauricio Fernandez [ruby-core:07340] * eval.c (rb_f_autoload): check if ruby_cbase is nil (during instance_eval for objects cannot have singleton classes, e.g. fixnums and symbols). [ruby-dev:28178] * gc.c (rb_gc_call_finalizer_at_exit): turn on during_gc while invoking finalizers. * gc.c (rb_gc_finalize_deferred): ditto. * io.c (rb_write_error2): use fwrite(3) if rb_stderr is not updated or is already freed. [ruby-dev:28313] * eval.c (error_line): include the class name of a surrounding method in error position description. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 36 +++++++ error.c | 13 +-- eval.c | 287 +++++++++++++++++++++++++++++++------------------------ ext/dbm/dbm.c | 106 +++++++------------- ext/gdbm/gdbm.c | 205 ++++++++++++++------------------------- ext/sdbm/_sdbm.c | 97 +++++-------------- ext/sdbm/init.c | 161 +++++++++++-------------------- ext/zlib/zlib.c | 114 +++++++++++----------- gc.c | 7 +- io.c | 7 +- lib/irb/init.rb | 4 +- node.h | 2 +- parse.y | 13 ++- 13 files changed, 473 insertions(+), 579 deletions(-) diff --git a/ChangeLog b/ChangeLog index 71ecc46fc0..5c63a18d48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Feb 13 13:49:48 2006 Yukihiro Matsumoto + + * parse.y (parser_parse_string): mention "regexp" in a error + message. a patch from Mauricio Fernandez + [ruby-core:07340] + Mon Feb 13 00:01:32 2006 K.Kosako * oniguruma.h: Version 4.0.1 @@ -18,16 +24,46 @@ Sat Feb 11 21:57:29 2006 Masaki Suketa * ext/win32ole/tests/testWIN32OLE.rb: ditto. +Sat Feb 11 01:57:44 2006 Yukihiro Matsumoto + + * eval.c (rb_f_autoload): check if ruby_cbase is nil (during + instance_eval for objects cannot have singleton classes, + e.g. fixnums and symbols). [ruby-dev:28178] + +Fri Feb 10 12:31:05 2006 Yukihiro Matsumoto + + * eval.c (rb_eval): should support NODE_ZSUPER in NODE_ITER. + [ruby-dev:28326] + + * eval.c (ZSUPER_ARGS): support macro. + +Wed Feb 8 10:26:06 2006 Yukihiro Matsumoto + + * gc.c (rb_gc_call_finalizer_at_exit): turn on during_gc while + invoking finalizers. + + * gc.c (rb_gc_finalize_deferred): ditto. + Tue Feb 7 23:03:13 2006 Hirokazu Yamamoto * ext/zlib/zlib.c: should not access ruby objects in finalizer. [ruby-dev:28286] +Tue Feb 7 18:42:00 2006 Yukihiro Matsumoto + + * io.c (rb_write_error2): use fwrite(3) if rb_stderr is not + updated or is already freed. [ruby-dev:28313] + Mon Feb 6 16:02:51 2006 WATANABE Hirofumi * file.c (rb_thread_flock): ERROR_NOT_LOCKED is not an error on Cygwin. In such situation, flock() should return 0. +Mon Feb 6 14:36:29 2006 Yukihiro Matsumoto + + * eval.c (error_line): include the class name of a surrounding + method in error position description. + Mon Feb 6 00:14:57 2006 Yukihiro Matsumoto * enum.c (enum_find_index): a new method Enumerable#find_index. diff --git a/error.c b/error.c index 76c8829aeb..9c292eaaa1 100644 --- a/error.c +++ b/error.c @@ -961,7 +961,13 @@ Init_Exception(void) rb_eIndexError = rb_define_class("IndexError", rb_eStandardError); rb_eKeyError = rb_define_class("KeyError", rb_eIndexError); rb_eRangeError = rb_define_class("RangeError", rb_eStandardError); - rb_eNameError = rb_define_class("NameError", rb_eException); + + rb_eScriptError = rb_define_class("ScriptError", rb_eException); + rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError); + rb_eLoadError = rb_define_class("LoadError", rb_eScriptError); + rb_eNotImpError = rb_define_class("NotImplementedError", rb_eScriptError); + + rb_eNameError = rb_define_class("NameError", rb_eScriptError); rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1); rb_define_method(rb_eNameError, "name", name_err_name, 0); rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0); @@ -975,11 +981,6 @@ Init_Exception(void) rb_define_method(rb_eNoMethodError, "initialize", nometh_err_initialize, -1); rb_define_method(rb_eNoMethodError, "args", nometh_err_args, 0); - rb_eScriptError = rb_define_class("ScriptError", rb_eException); - rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError); - rb_eLoadError = rb_define_class("LoadError", rb_eScriptError); - rb_eNotImpError = rb_define_class("NotImplementedError", rb_eScriptError); - rb_eRuntimeError = rb_define_class("RuntimeError", rb_eStandardError); rb_eSecurityError = rb_define_class("SecurityError", rb_eStandardError); rb_eNoMemError = rb_define_class("NoMemoryError", rb_eException); diff --git a/eval.c b/eval.c index 9f4ebb24fd..b64ae6f7e1 100644 --- a/eval.c +++ b/eval.c @@ -248,14 +248,15 @@ static VALUE rb_mod_define_method(int, VALUE*, VALUE); NORETURN(static void rb_raise_jump(VALUE)); static VALUE rb_make_exception(int argc, VALUE *argv); -static int scope_vmode; -#define SCOPE_PUBLIC 0 -#define SCOPE_PRIVATE 1 -#define SCOPE_PROTECTED 2 -#define SCOPE_MODFUNC 5 -#define SCOPE_MASK 7 -#define SCOPE_SET(f) (scope_vmode=(f)) -#define SCOPE_TEST(f) (scope_vmode&(f)) +static int vis_mode; +#define VIS_PUBLIC 0 +#define VIS_PRIVATE 1 +#define VIS_PROTECTED 2 +#define VIS_MODFUNC 5 +#define VIS_MASK 7 +#define VIS_SET(f) (vis_mode=(f)) +#define VIS_TEST(f) (vis_mode&(f)) +#define VIS_MODE(f) (vis_mode) NODE* ruby_current_node; int ruby_safe_level = 0; @@ -672,13 +673,13 @@ rb_attr(VALUE klass, ID id, int read, int write, int ex) if (!ex) noex = NOEX_PUBLIC; else { - if (SCOPE_TEST(SCOPE_PRIVATE)) { + if (VIS_TEST(VIS_PRIVATE)) { noex = NOEX_PRIVATE; - rb_warning((scope_vmode == SCOPE_MODFUNC) ? + rb_warning((VIS_MODE() == VIS_MODFUNC) ? "attribute accessor as module_function" : "private attribute?"); } - else if (SCOPE_TEST(SCOPE_PROTECTED)) { + else if (VIS_TEST(VIS_PROTECTED)) { noex = NOEX_PROTECTED; } else { @@ -729,6 +730,9 @@ static unsigned long frame_unique = 0; _frame.block = (link)?ruby_frame->block:0;\ _frame.flags = 0; \ _frame.uniq = frame_unique++; \ + _frame.callee = 0; \ + _frame.this_func = 0; \ + _frame.this_class = 0; \ ruby_frame = &_frame #define POP_FRAME() \ @@ -747,7 +751,7 @@ static unsigned long block_unique = 0; _block.cref = ruby_cref; \ _block.frame.node = ruby_current_node;\ _block.scope = ruby_scope; \ - _block.vmode = scope_vmode; \ + _block.vmode = vis_mode; \ _block.flags = BLOCK_D_SCOPE; \ _block.dyna_vars = ruby_dyna_vars; \ _block.wrapper = ruby_wrapper; \ @@ -776,6 +780,8 @@ struct RVarmap *ruby_dyna_vars; #define DVAR_DONT_RECYCLE FL_USER2 +#define DMETHOD_P() (ruby_frame->prev ? (ruby_frame->prev->flags & FRAME_DMETH) : 0) + static struct RVarmap* new_dvar(ID id, VALUE value, struct RVarmap *prev) { @@ -953,7 +959,7 @@ static NODE *top_cref; #define POP_CREF() ruby_cref = ruby_cref->nd_next #define PUSH_SCOPE() do { \ - volatile int _vmode = scope_vmode; \ + volatile int _vmode = vis_mode; \ struct SCOPE * volatile _old; \ NEWOBJ(_scope, struct SCOPE); \ OBJSETUP(_scope, 0, T_SCOPE); \ @@ -962,7 +968,7 @@ static NODE *top_cref; _scope->flags = 0; \ _old = ruby_scope; \ ruby_scope = _scope; \ - scope_vmode = SCOPE_PUBLIC + vis_mode = VIS_PUBLIC typedef struct thread * rb_thread_t; static rb_thread_t curr_thread = 0; @@ -983,7 +989,7 @@ static void scope_dup(struct SCOPE *); } \ ruby_scope->flags |= SCOPE_NOSTACK; \ ruby_scope = _old; \ - scope_vmode = _vmode; \ + vis_mode = _vmode; \ } while (0) struct ruby_env { @@ -1083,27 +1089,60 @@ warn_printf(const char *fmt, ...) rb_write_error(buf); } -#define warn_print(x) rb_write_error(x) -#define warn_print2(x,l) rb_write_error2(x,l) - -static void -error_pos(void) +static VALUE +error_line(struct FRAME *frame, NODE *node) { + char *file; + int line; + + if (node) { + file = node->nd_file; + line = nd_line(node); + } + else { + file = ruby_sourcefile; + line = ruby_sourceline; + } ruby_set_current_source(); if (ruby_sourcefile) { - if (ruby_frame->callee) { - warn_printf("%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline, - rb_id2name(ruby_frame->callee)); + if (frame->callee) { + if (frame->flags & FRAME_FUNC) { + return rb_sprintf("%s:%d:in `%s'", file, line, + rb_id2name(frame->this_func)); + } + else { + VALUE oklass = frame->this_class; + + if (TYPE(oklass) == T_ICLASS) { + oklass = RBASIC(oklass)->klass; + } + else if (FL_TEST(oklass, FL_SINGLETON)) { + oklass = rb_iv_get(oklass, "__attached__"); + } + return rb_sprintf("%s:%d:in `%s#%s'", file, line, + rb_class2name(oklass), + rb_id2name(frame->this_func)); + } } - else if (ruby_sourceline == 0) { - warn_printf("%s", ruby_sourcefile); + else if (!node && ruby_sourceline == 0) { + return rb_str_new2(ruby_sourcefile); } else { - warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline); + return rb_sprintf("%s:%d", file, line); } } } +#define warn_print(x) rb_write_error(x) +#define warn_print2(x,l) rb_write_error2(x,l) + +static void +error_pos(void) +{ + VALUE pos = error_line(ruby_frame, 0); + warn_printf("%s", StringValueCStr(pos)); +} + static VALUE get_backtrace(VALUE info) { @@ -1285,7 +1324,7 @@ ruby_init(void) PUSH_SCOPE(); top_scope = ruby_scope; /* default visibility is private at toplevel */ - SCOPE_SET(SCOPE_PRIVATE); + VIS_SET(VIS_PRIVATE); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { @@ -1495,7 +1534,7 @@ ruby_exec_internal(void) PUSH_THREAD_TAG(); /* default visibility is private at toplevel */ - SCOPE_SET(SCOPE_PRIVATE); + VIS_SET(VIS_PRIVATE); if ((state = EXEC_TAG()) == 0) { eval_node(ruby_top_self, ruby_eval_tree); } @@ -1582,9 +1621,6 @@ rb_eval_string_wrap(const char *str, int *state) ruby_top_self = rb_obj_clone(ruby_top_self); rb_extend_object(ruby_top_self, ruby_wrapper); PUSH_FRAME(Qfalse); - ruby_frame->callee = 0; - ruby_frame->this_func = 0; - ruby_frame->this_class = 0; ruby_frame->self = self; PUSH_CREF(ruby_wrapper = rb_module_new()); PUSH_SCOPE(); @@ -1712,9 +1748,6 @@ rb_eval_cmd(VALUE cmd, VALUE arg, int level) saved_scope = ruby_scope; ruby_scope = top_scope; PUSH_FRAME(Qfalse); - ruby_frame->callee = 0; - ruby_frame->this_func = 0; - ruby_frame->this_class = 0; ruby_frame->self = ruby_top_self; PUSH_CREF(ruby_wrapper ? ruby_wrapper : rb_cObject); @@ -1743,49 +1776,47 @@ ruby_current_class_object() } static VALUE -ev_const_defined(NODE *cref, ID id, VALUE self) +ev_const_defined(ID id, VALUE self) { - NODE *cbase = cref; + NODE *cbase = ruby_cref; VALUE result; while (cbase && cbase->nd_next) { struct RClass *klass = RCLASS(cbase->nd_clss); - if (!NIL_P(klass)) { - if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) { - if (result == Qundef && NIL_P(rb_autoload_p((VALUE)klass, id))) { - return Qfalse; - } - return Qtrue; + if (NIL_P(klass)) return rb_const_defined(CLASS_OF(self), id); + if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) { + if (result == Qundef && NIL_P(rb_autoload_p((VALUE)klass, id))) { + return Qfalse; } + return Qtrue; } cbase = cbase->nd_next; } - return rb_const_defined(cref->nd_clss, id); + return rb_const_defined(ruby_cbase, id); } static VALUE -ev_const_get(NODE *cref, ID id, VALUE self) +ev_const_get(ID id, VALUE self) { - NODE *cbase = cref; + NODE *cbase = ruby_cref; VALUE result; while (cbase && cbase->nd_next) { VALUE klass = cbase->nd_clss; - if (!NIL_P(klass)) { - while (RCLASS(klass)->iv_tbl && - st_lookup(RCLASS(klass)->iv_tbl, id, &result)) { - if (result == Qundef) { - if (!RTEST(rb_autoload_load(klass, id))) break; - continue; - } - return result; + if (NIL_P(klass)) return rb_const_get(CLASS_OF(self), id); + while (RCLASS(klass)->iv_tbl && + st_lookup(RCLASS(klass)->iv_tbl, id, &result)) { + if (result == Qundef) { + if (!RTEST(rb_autoload_load(klass, id))) break; + continue; } + return result; } cbase = cbase->nd_next; } - return rb_const_get(cref->nd_clss, id); + return rb_const_get(ruby_cbase, id); } static VALUE @@ -2071,7 +2102,8 @@ rb_mod_alias_method(VALUE mod, VALUE newname, VALUE oldname) static NODE* copy_node_scope(NODE *node, NODE *rval) { - NODE *copy = NEW_NODE(NODE_SCOPE,0,rval,node->nd_next); + NODE *cref = NEW_NODE(NODE_CREF,rval->nd_clss,0,rval->nd_next);; + NODE *copy = NEW_NODE(NODE_SCOPE,0,cref,node->nd_next); if (node->nd_tbl) { copy->nd_tbl = ALLOC_N(ID, node->nd_tbl[0]+1); @@ -2128,6 +2160,21 @@ copy_node_scope(NODE *node, NODE *rval) #define SETUP_ARGS(anode) SETUP_ARGS0(anode, anode->nd_alen) +#define ZSUPER_ARGS() do {\ + argc = ruby_frame->argc;\ + if (argc && DMETHOD_P()) {\ + if (TYPE(RBASIC(ruby_scope)->klass) != T_ARRAY ||\ + RARRAY(RBASIC(ruby_scope)->klass)->len != argc) {\ + rb_raise(rb_eRuntimeError, \ + "super: specify arguments explicitly");\ + }\ + argv = RARRAY(RBASIC(ruby_scope)->klass)->ptr;\ + }\ + else {\ + argv = ruby_scope->local_vars + 2;\ + }\ +} while (0) + #define MATCH_DATA *rb_svar(node->nd_cnt) static const char* is_defined(VALUE, NODE*, char*, int); @@ -2268,7 +2315,7 @@ is_defined(VALUE self, NODE *node /* OK */, char *buf, int noeval) break; case NODE_CONST: - if (ev_const_defined(ruby_cref, node->nd_vid, self)) { + if (ev_const_defined(node->nd_vid, self)) { return "constant"; } break; @@ -2949,6 +2996,8 @@ rb_eval(VALUE self, NODE *n) case NODE_LAMBDA: PUSH_TAG(PROT_LOOP); PUSH_FRAME(Qtrue); + ruby_frame->this_func = 0; + ruby_frame->this_class = 0; PUSH_BLOCK(ruby_frame->block, node->nd_var, node->nd_body); state = EXEC_TAG(); result = proc_lambda(); @@ -3283,6 +3332,7 @@ rb_eval(VALUE self, NODE *n) case NODE_VCALL: scope = CALLING_VCALL; break; case NODE_SUPER: + case NODE_ZSUPER: scope = CALLING_SUPER; break; default: /* error! */ @@ -3297,8 +3347,13 @@ rb_eval(VALUE self, NODE *n) if (scope == CALLING_NORMAL) { recv = rb_eval(self, node->nd_recv); } - SETUP_ARGS(node->nd_args); - ruby_current_node = node; + if (nd_type(node) == NODE_ZSUPER) { + ZSUPER_ARGS(); + } + else { + SETUP_ARGS(node->nd_args); + ruby_current_node = node; + } SET_CURRENT_SOURCE(); if (scope == CALLING_SUPER) { result = call_super(argc, argv, block); @@ -3371,19 +3426,7 @@ rb_eval(VALUE self, NODE *n) } } if (nd_type(node) == NODE_ZSUPER) { - argc = ruby_frame->argc; - if (argc && ruby_frame->prev && - (ruby_frame->prev->flags & FRAME_DMETH)) { - if (TYPE(RBASIC(ruby_scope)->klass) != T_ARRAY || - RARRAY(RBASIC(ruby_scope)->klass)->len != argc) { - rb_raise(rb_eRuntimeError, - "super: specify arguments explicitly"); - } - argv = RARRAY(RBASIC(ruby_scope)->klass)->ptr; - } - else { - argv = ruby_scope->local_vars + 2; - } + ZSUPER_ARGS(); } else { SETUP_ARGS(node->nd_args); @@ -3579,7 +3622,7 @@ rb_eval(VALUE self, NODE *n) break; case NODE_CONST: - result = ev_const_get(ruby_cref, node->nd_vid, self); + result = ev_const_get(node->nd_vid, self); break; case NODE_CVAR: @@ -3779,7 +3822,7 @@ rb_eval(VALUE self, NODE *n) int noex; if (NIL_P(ruby_cbase)) { - rb_raise(rb_eTypeError, "no class/module to add method"); + rb_raise(rb_eTypeError, "no class/module to define method"); } if (ruby_cbase == rb_cObject && node->nd_mid == init) { rb_warn("redefining Object#initialize may cause infinite loop"); @@ -3796,10 +3839,10 @@ rb_eval(VALUE self, NODE *n) } } - if (SCOPE_TEST(SCOPE_PRIVATE) || node->nd_mid == init) { + if (VIS_TEST(VIS_PRIVATE) || node->nd_mid == init) { noex = NOEX_PRIVATE; } - else if (SCOPE_TEST(SCOPE_PROTECTED)) { + else if (VIS_TEST(VIS_PROTECTED)) { noex = NOEX_PROTECTED; } else { @@ -3811,7 +3854,7 @@ rb_eval(VALUE self, NODE *n) defn = copy_node_scope(node->nd_defn, ruby_cref); rb_add_method(ruby_cbase, node->nd_mid, defn, noex); - if (scope_vmode == SCOPE_MODFUNC) { + if (VIS_MODE() == VIS_MODFUNC) { rb_add_method(rb_singleton_class(ruby_cbase), node->nd_mid, defn, NOEX_PUBLIC); } @@ -4038,6 +4081,7 @@ module_setup(VALUE module, NODE *n) } PUSH_CREF(module); + VIS_SET(VIS_PUBLIC); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { EXEC_EVENT_HOOK(RUBY_EVENT_CLASS, n, ruby_cbase, @@ -4740,8 +4784,8 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags, int avalue) ruby_wrapper = block->wrapper; old_scope = ruby_scope; ruby_scope = block->scope; - old_vmode = scope_vmode; - scope_vmode = (flags & YIELD_PUBLIC_DEF) ? SCOPE_PUBLIC : block->vmode; + old_vmode = vis_mode; + vis_mode = (flags & YIELD_PUBLIC_DEF) ? VIS_PUBLIC : block->vmode; if (block->flags & BLOCK_D_SCOPE) { /* put place holder for dynamic (in-block) local variables */ ruby_dyna_vars = new_dvar(0, 0, block->dyna_vars); @@ -4926,7 +4970,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags, int avalue) if (ruby_scope->flags & SCOPE_DONT_RECYCLE) scope_dup(old_scope); ruby_scope = old_scope; - scope_vmode = old_vmode; + vis_mode = old_vmode; switch (state) { case 0: break; @@ -5672,7 +5716,7 @@ formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_ ruby_frame->self = recv;\ ruby_frame->argc = argc;\ ruby_frame->block = block;\ - ruby_frame->flags = (flags & NOEX_RECV) ? FRAME_FUNC : 0;\ + ruby_frame->flags = ((flags & NOEX_RECV) ? FRAME_FUNC : 0) | 0; static VALUE rb_call0(VALUE klass, VALUE recv, ID id, ID oid, @@ -5682,6 +5726,7 @@ rb_call0(VALUE klass, VALUE recv, ID id, ID oid, { NODE *b2; /* OK */ volatile VALUE result = Qnil; + int dmeth = DMETHOD_P(); static int tick; volatile VALUE args; volatile int safe = -1; @@ -5839,7 +5884,7 @@ rb_call0(VALUE klass, VALUE recv, ID id, ID oid, break; case TAG_RETRY: - if (rb_block_given_p()) JUMP_TAG(state); + if (block) JUMP_TAG(state); /* fall through */ default: jump_tag_but_local_jump(state, result); @@ -6067,17 +6112,7 @@ backtrace(int lev) frame = frame->prev; } if (lev < 0) { - ruby_set_current_source(); - if (frame->this_func) { - str = rb_sprintf("%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline, - rb_id2name(frame->this_func)); - } - else if (ruby_sourceline == 0) { - str = rb_str_new2(ruby_sourcefile); - } - else { - str = rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline); - } + str = error_line(frame, 0); rb_ary_push(ary, str); if (lev < -1) return ary; } @@ -6093,8 +6128,7 @@ backtrace(int lev) for (; frame && (n = frame->node); frame = frame->prev) { if (frame->prev && frame->prev->this_func) { if (frame->prev->node == n) continue; - str = rb_sprintf("%s:%d:in `%s'", n->nd_file, nd_line(n), - rb_id2name(frame->prev->this_func)); + str = error_line(frame->prev, n); } else { str = rb_sprintf("%s:%d", n->nd_file, nd_line(n)); @@ -6216,8 +6250,8 @@ eval(VALUE self, VALUE src, VALUE scope, const char *file, int line) ruby_scope = data->scope; old_dyna_vars = ruby_dyna_vars; ruby_dyna_vars = data->dyna_vars; - old_vmode = scope_vmode; - scope_vmode = data->vmode; + old_vmode = vis_mode; + vis_mode = data->vmode; old_cref = (VALUE)ruby_cref; ruby_cref = data->cref; old_wrapper = ruby_wrapper; @@ -6264,8 +6298,7 @@ eval(VALUE self, VALUE src, VALUE scope, const char *file, int line) ruby_frame = frame.tmp; ruby_scope = old_scope; ruby_dyna_vars = old_dyna_vars; - data->vmode = scope_vmode; /* write back visibility mode */ - scope_vmode = old_vmode; + vis_mode = old_vmode; if (dont_recycle) { struct tag *tag; struct RVarmap *vars; @@ -6381,15 +6414,15 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE args) ruby_frame->this_class = f->this_class; ruby_frame->argc = f->argc; - mode = scope_vmode; - SCOPE_SET(SCOPE_PUBLIC); + mode = vis_mode; + VIS_SET(VIS_PUBLIC); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { val = (*func)(args); } POP_TAG(); POP_CREF(); - SCOPE_SET(mode); + VIS_SET(mode); POP_FRAME(); if (state) JUMP_TAG(state); @@ -6650,16 +6683,15 @@ rb_load(VALUE fname, int wrap) self = rb_obj_clone(ruby_top_self); rb_extend_object(self, ruby_wrapper); PUSH_CREF(ruby_wrapper); + /* default visibility is private at loading toplevel */ + VIS_SET(VIS_PRIVATE); } PUSH_FRAME(Qfalse); - ruby_frame->callee = 0; - ruby_frame->this_func = 0; - ruby_frame->this_class = 0; ruby_frame->self = self; PUSH_SCOPE(); - /* default visibility is private at loading toplevel */ - SCOPE_SET(SCOPE_PRIVATE); PUSH_TAG(PROT_NONE); + /* default visibility is private at loading toplevel */ + VIS_SET(VIS_PRIVATE); state = EXEC_TAG(); callee = ruby_frame->callee; this_func = ruby_frame->this_func; @@ -6981,15 +7013,18 @@ rb_require_safe(VALUE fname, int safe) struct { NODE *node; ID this_func, callee; - int vmode, safe; + int safe, vmode; } volatile saved; char *volatile ftptr = 0; - saved.vmode = scope_vmode; saved.node = ruby_current_node; saved.callee = ruby_frame->callee; saved.this_func = ruby_frame->this_func; saved.safe = ruby_safe_level; + saved.vmode = vis_mode; + PUSH_SCOPE(); + PUSH_CREF(ruby_cbase); + VIS_SET(VIS_PUBLIC); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { VALUE path; @@ -7024,7 +7059,7 @@ rb_require_safe(VALUE fname, int safe) ruby_sourceline = 0; ruby_frame->callee = 0; ruby_frame->this_func = 0; - SCOPE_SET(SCOPE_PUBLIC); + VIS_SET(VIS_PUBLIC); handle = (long)dln_load(RSTRING(path)->ptr); rb_ary_push(ruby_dln_librefs, LONG2NUM(handle)); break; @@ -7039,8 +7074,10 @@ rb_require_safe(VALUE fname, int safe) ruby_set_current_source(); ruby_frame->this_func = saved.this_func; ruby_frame->callee = saved.callee; - SCOPE_SET(saved.vmode); ruby_safe_level = saved.safe; + VIS_SET(saved.vmode); + POP_CREF(); + POP_SCOPE(); if (ftptr) { if (st_delete(loading_tbl, (st_data_t *)&ftptr, 0)) { /* loading done */ free(ftptr); @@ -7098,7 +7135,7 @@ rb_mod_public(int argc, VALUE *argv, VALUE module) { secure_visibility(module); if (argc == 0) { - SCOPE_SET(SCOPE_PUBLIC); + VIS_SET(VIS_PUBLIC); } else { set_method_visibility(module, argc, argv, NOEX_PUBLIC); @@ -7121,7 +7158,7 @@ rb_mod_protected(int argc, VALUE *argv, VALUE module) { secure_visibility(module); if (argc == 0) { - SCOPE_SET(SCOPE_PROTECTED); + VIS_SET(VIS_PROTECTED); } else { set_method_visibility(module, argc, argv, NOEX_PROTECTED); @@ -7153,7 +7190,7 @@ rb_mod_private(int argc, VALUE *argv, VALUE module) { secure_visibility(module); if (argc == 0) { - SCOPE_SET(SCOPE_PRIVATE); + VIS_SET(VIS_PRIVATE); } else { set_method_visibility(module, argc, argv, NOEX_PRIVATE); @@ -7269,7 +7306,7 @@ rb_mod_modfunc(int argc, VALUE *argv, VALUE module) secure_visibility(module); if (argc == 0) { - SCOPE_SET(SCOPE_MODFUNC); + VIS_SET(VIS_MODFUNC); return module; } @@ -7575,9 +7612,6 @@ call_end_proc(VALUE data) PUSH_FRAME(Qfalse); ruby_frame->self = ruby_frame->prev->self; ruby_frame->node = 0; - ruby_frame->callee = 0; - ruby_frame->this_func = 0; - ruby_frame->this_class = 0; proc_invoke(data, rb_ary_new2(0), Qundef, 0); POP_FRAME(); } @@ -7830,6 +7864,11 @@ rb_mod_autoload_p(VALUE mod, VALUE sym) static VALUE rb_f_autoload(VALUE obj, VALUE sym, VALUE file) { + VALUE klass = ruby_cbase; + + if (NIL_P(ruby_cbase)) { + rb_raise(rb_eTypeError, "no class/module for autoload target"); + } return rb_mod_autoload(ruby_cbase, sym, file); } @@ -7848,6 +7887,9 @@ static VALUE rb_f_autoload_p(VALUE obj, VALUE sym) { /* use ruby_cbase as same as rb_f_autoload. */ + if (NIL_P(ruby_cbase)) { + return Qfalse; + } return rb_mod_autoload_p(ruby_cbase, sym); } @@ -8282,7 +8324,6 @@ proc_invoke(VALUE proc, VALUE args /* OK */, VALUE self, VALUE klass) if (self != Qundef) _block.frame.self = self; if (klass) _block.frame.this_class = klass; _block.frame.argc = RARRAY(tmp)->len; - if (ruby_frame->flags & FRAME_DMETH) if (_block.frame.argc && (ruby_frame->flags & FRAME_DMETH)) { NEWOBJ(scope, struct SCOPE); OBJSETUP(scope, tmp, T_SCOPE); @@ -9385,10 +9426,10 @@ rb_mod_define_method(int argc, VALUE *argv, VALUE mod) rb_raise(rb_eTypeError, "wrong argument type (expected Proc/Method)"); } - if (SCOPE_TEST(SCOPE_PRIVATE)) { + if (VIS_TEST(VIS_PRIVATE)) { noex = NOEX_PRIVATE; } - else if (SCOPE_TEST(SCOPE_PROTECTED)) { + else if (VIS_TEST(VIS_PROTECTED)) { noex = NOEX_PROTECTED; } else { @@ -9758,7 +9799,7 @@ struct thread { NODE *cref; struct ruby_env *anchor; - int flags; /* misc. states (vmode/rb_trap_immediate/raised) */ + int flags; /* misc. states (rb_trap_immediate/raised) */ NODE *node; @@ -10175,7 +10216,7 @@ rb_thread_save_context(rb_thread_t th) th->cref = ruby_cref; th->dyna_vars = ruby_dyna_vars; th->flags &= THREAD_FLAGS_MASK; - th->flags |= (rb_trap_immediate<<8) | scope_vmode; + th->flags |= (rb_trap_immediate<<8) | vis_mode; th->tag = prot_tag; th->tracing = tracing; th->errinfo = ruby_errinfo; @@ -10251,8 +10292,8 @@ rb_thread_restore_context_0(rb_thread_t th, int exit, void *vp) ruby_scope = th->scope; ruby_wrapper = th->wrapper; ruby_cref = th->cref; + vis_mode = th->flags&VIS_MASK; ruby_dyna_vars = th->dyna_vars; - scope_vmode = th->flags&SCOPE_MASK; prot_tag = th->tag; tracing = th->tracing; ruby_errinfo = th->errinfo; diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index 6e03e0eeeb..079905d4c2 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -32,7 +32,7 @@ struct dbmdata { }; static void -closed_dbm() +closed_dbm(void) { rb_raise(rb_eDBMError, "closed DBM file"); } @@ -49,8 +49,7 @@ closed_dbm() } static void -free_dbm(dbmp) - struct dbmdata *dbmp; +free_dbm(struct dbmdata *dbmp) { if (dbmp) { if (dbmp->di_dbm) dbm_close(dbmp->di_dbm); @@ -59,8 +58,7 @@ free_dbm(dbmp) } static VALUE -fdbm_close(obj) - VALUE obj; +fdbm_close(VALUE obj) { struct dbmdata *dbmp; @@ -72,8 +70,7 @@ fdbm_close(obj) } static VALUE -fdbm_closed(obj) - VALUE obj; +fdbm_closed(VALUE obj) { struct dbmdata *dbmp; @@ -86,19 +83,14 @@ fdbm_closed(obj) return Qfalse; } -static VALUE fdbm_alloc _((VALUE)); static VALUE -fdbm_alloc(klass) - VALUE klass; +fdbm_alloc(VALUE klass) { return Data_Wrap_Struct(klass, 0, free_dbm, 0); } static VALUE -fdbm_initialize(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fdbm_initialize(int argc, VALUE *argv, VALUE obj) { VALUE file, vmode, vflags; DBM *dbm; @@ -151,10 +143,7 @@ fdbm_initialize(argc, argv, obj) } static VALUE -fdbm_s_open(argc, argv, klass) - int argc; - VALUE *argv; - VALUE klass; +fdbm_s_open(int argc, VALUE *argv, VALUE klass) { VALUE obj = Data_Wrap_Struct(klass, 0, free_dbm, 0); @@ -170,8 +159,7 @@ fdbm_s_open(argc, argv, klass) } static VALUE -fdbm_fetch(obj, keystr, ifnone) - VALUE obj, keystr, ifnone; +fdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) { datum key, value; struct dbmdata *dbmp; @@ -192,17 +180,13 @@ fdbm_fetch(obj, keystr, ifnone) } static VALUE -fdbm_aref(obj, keystr) - VALUE obj, keystr; +fdbm_aref(VALUE obj, VALUE keystr) { return fdbm_fetch(obj, keystr, Qnil); } static VALUE -fdbm_fetch_m(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fdbm_fetch_m(int argc, VALUE *argv, VALUE obj) { VALUE keystr, valstr, ifnone; @@ -215,8 +199,7 @@ fdbm_fetch_m(argc, argv, obj) } static VALUE -fdbm_index(obj, valstr) - VALUE obj, valstr; +fdbm_index(VALUE obj, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -238,8 +221,7 @@ fdbm_index(obj, valstr) } static VALUE -fdbm_select(obj) - VALUE obj; +fdbm_select(VALUE obj) { VALUE new = rb_ary_new(); datum key, val; @@ -263,10 +245,7 @@ fdbm_select(obj) } static VALUE -fdbm_values_at(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fdbm_values_at(int argc, VALUE *argv, VALUE obj) { VALUE new = rb_ary_new2(argc); int i; @@ -279,16 +258,14 @@ fdbm_values_at(argc, argv, obj) } static void -fdbm_modify(obj) - VALUE obj; +fdbm_modify(VALUE obj) { rb_secure(4); if (OBJ_FROZEN(obj)) rb_error_frozen("DBM"); } static VALUE -fdbm_delete(obj, keystr) - VALUE obj, keystr; +fdbm_delete(VALUE obj, VALUE keystr) { datum key, value; struct dbmdata *dbmp; @@ -322,8 +299,7 @@ fdbm_delete(obj, keystr) } static VALUE -fdbm_shift(obj) - VALUE obj; +fdbm_shift(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -345,8 +321,7 @@ fdbm_shift(obj) } static VALUE -fdbm_delete_if(obj) - VALUE obj; +fdbm_delete_if(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -386,8 +361,7 @@ fdbm_delete_if(obj) } static VALUE -fdbm_clear(obj) - VALUE obj; +fdbm_clear(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -407,8 +381,7 @@ fdbm_clear(obj) } static VALUE -fdbm_invert(obj) - VALUE obj; +fdbm_invert(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -455,8 +428,7 @@ fdbm_replace(VALUE obj, VALUE other) } static VALUE -fdbm_store(obj, keystr, valstr) - VALUE obj, keystr, valstr; +fdbm_store(VALUE obj, VALUE keystr, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -486,8 +458,7 @@ fdbm_store(obj, keystr, valstr) } static VALUE -fdbm_length(obj) - VALUE obj; +fdbm_length(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -506,8 +477,7 @@ fdbm_length(obj) } static VALUE -fdbm_empty_p(obj) - VALUE obj; +fdbm_empty_p(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -530,8 +500,7 @@ fdbm_empty_p(obj) } static VALUE -fdbm_each_value(obj) - VALUE obj; +fdbm_each_value(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -547,8 +516,7 @@ fdbm_each_value(obj) } static VALUE -fdbm_each_key(obj) - VALUE obj; +fdbm_each_key(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -563,8 +531,7 @@ fdbm_each_key(obj) } static VALUE -fdbm_each_pair(obj) - VALUE obj; +fdbm_each_pair(VALUE obj) { datum key, val; DBM *dbm; @@ -585,8 +552,7 @@ fdbm_each_pair(obj) } static VALUE -fdbm_keys(obj) - VALUE obj; +fdbm_keys(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -604,8 +570,7 @@ fdbm_keys(obj) } static VALUE -fdbm_values(obj) - VALUE obj; +fdbm_values(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -623,8 +588,7 @@ fdbm_values(obj) } static VALUE -fdbm_has_key(obj, keystr) - VALUE obj, keystr; +fdbm_has_key(VALUE obj, VALUE keystr) { datum key, val; struct dbmdata *dbmp; @@ -641,8 +605,7 @@ fdbm_has_key(obj, keystr) } static VALUE -fdbm_has_value(obj, valstr) - VALUE obj, valstr; +fdbm_has_value(VALUE obj, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -663,8 +626,7 @@ fdbm_has_value(obj, valstr) } static VALUE -fdbm_to_a(obj) - VALUE obj; +fdbm_to_a(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -683,8 +645,7 @@ fdbm_to_a(obj) } static VALUE -fdbm_to_hash(obj) - VALUE obj; +fdbm_to_hash(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -703,14 +664,13 @@ fdbm_to_hash(obj) } static VALUE -fdbm_reject(obj) - VALUE obj; +fdbm_reject(VALUE obj) { return rb_hash_delete_if(fdbm_to_hash(obj)); } void -Init_dbm() +Init_dbm(void) { rb_cDBM = rb_define_class("DBM", rb_cObject); rb_eDBMError = rb_define_class("DBMError", rb_eStandardError); diff --git a/ext/gdbm/gdbm.c b/ext/gdbm/gdbm.c index cb59ff3c1e..4857d386ee 100644 --- a/ext/gdbm/gdbm.c +++ b/ext/gdbm/gdbm.c @@ -21,8 +21,7 @@ static VALUE rb_cGDBM, rb_eGDBMError, rb_eGDBMFatalError; #define MY_BLOCK_SIZE (2048) #define MY_FATAL_FUNC rb_gdbm_fatal static void -rb_gdbm_fatal(msg) - char *msg; +rb_gdbm_fatal(char *msg) { rb_raise(rb_eGDBMFatalError, msg); } @@ -33,7 +32,7 @@ struct dbmdata { }; static void -closed_dbm() +closed_dbm(void) { rb_raise(rb_eRuntimeError, "closed GDBM file"); } @@ -50,8 +49,7 @@ closed_dbm() } static void -free_dbm(dbmp) - struct dbmdata *dbmp; +free_dbm(struct dbmdata *dbmp) { if (dbmp) { if (dbmp->di_dbm) gdbm_close(dbmp->di_dbm); @@ -60,8 +58,7 @@ free_dbm(dbmp) } static VALUE -fgdbm_close(obj) - VALUE obj; +fgdbm_close(VALUE obj) { struct dbmdata *dbmp; @@ -73,8 +70,7 @@ fgdbm_close(obj) } static VALUE -fgdbm_closed(obj) - VALUE obj; +fgdbm_closed(VALUE obj) { struct dbmdata *dbmp; @@ -87,20 +83,14 @@ fgdbm_closed(obj) return Qfalse; } -static VALUE fgdbm_s_alloc _((VALUE)); - static VALUE -fgdbm_s_alloc(klass) - VALUE klass; +fgdbm_s_alloc(VALUE klass) { return Data_Wrap_Struct(klass, 0, free_dbm, 0); } static VALUE -fgdbm_initialize(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fgdbm_initialize(int argc, VALUE *argv, VALUE obj) { VALUE file, vmode, vflags; GDBM_FILE dbm; @@ -161,10 +151,7 @@ fgdbm_initialize(argc, argv, obj) } static VALUE -fgdbm_s_open(argc, argv, klass) - int argc; - VALUE *argv; - VALUE klass; +fgdbm_s_open(int argc, VALUE *argv, VALUE klass) { VALUE obj = Data_Wrap_Struct(klass, 0, free_dbm, 0); @@ -180,9 +167,7 @@ fgdbm_s_open(argc, argv, klass) } static VALUE -rb_gdbm_fetch(dbm, key) - GDBM_FILE dbm; - datum key; +rb_gdbm_fetch(GDBM_FILE dbm, datum key) { datum val; VALUE str; @@ -202,9 +187,7 @@ rb_gdbm_fetch(dbm, key) } static VALUE -rb_gdbm_fetch2(dbm, keystr) - GDBM_FILE dbm; - VALUE keystr; +rb_gdbm_fetch2(GDBM_FILE dbm, VALUE keystr) { datum key; @@ -216,8 +199,7 @@ rb_gdbm_fetch2(dbm, keystr) } static VALUE -rb_gdbm_fetch3(obj, keystr) - VALUE obj, keystr; +rb_gdbm_fetch3(VALUE obj, VALUE keystr) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -227,8 +209,7 @@ rb_gdbm_fetch3(obj, keystr) } static VALUE -rb_gdbm_firstkey(dbm) - GDBM_FILE dbm; +rb_gdbm_firstkey(GDBM_FILE dbm) { datum key; VALUE str; @@ -248,9 +229,7 @@ rb_gdbm_firstkey(dbm) } static VALUE -rb_gdbm_nextkey(dbm, keystr) - GDBM_FILE dbm; - VALUE keystr; +rb_gdbm_nextkey(GDBM_FILE dbm, VALUE keystr) { datum key, key2; VALUE str; @@ -272,8 +251,7 @@ rb_gdbm_nextkey(dbm, keystr) } static VALUE -fgdbm_fetch(obj, keystr, ifnone) - VALUE obj, keystr, ifnone; +fgdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) { VALUE valstr; @@ -287,17 +265,13 @@ fgdbm_fetch(obj, keystr, ifnone) } static VALUE -fgdbm_aref(obj, keystr) - VALUE obj, keystr; +fgdbm_aref(VALUE obj, VALUE keystr) { return rb_gdbm_fetch3(obj, keystr); } static VALUE -fgdbm_fetch_m(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fgdbm_fetch_m(int argc, VALUE *argv, VALUE obj) { VALUE keystr, valstr, ifnone; @@ -310,8 +284,7 @@ fgdbm_fetch_m(argc, argv, obj) } static VALUE -fgdbm_index(obj, valstr) - VALUE obj, valstr; +fgdbm_index(VALUE obj, VALUE valstr) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -334,8 +307,7 @@ fgdbm_index(obj, valstr) } static VALUE -fgdbm_select(obj) - VALUE obj; +fgdbm_select(VALUE obj) { VALUE new = rb_ary_new(); GDBM_FILE dbm; @@ -358,10 +330,7 @@ fgdbm_select(obj) } static VALUE -fgdbm_values_at(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fgdbm_values_at(int argc, VALUE *argv, VALUE obj) { VALUE new = rb_ary_new2(argc); int i; @@ -374,16 +343,14 @@ fgdbm_values_at(argc, argv, obj) } static void -rb_gdbm_modify(obj) - VALUE obj; +rb_gdbm_modify(VALUE obj) { rb_secure(4); if (OBJ_FROZEN(obj)) rb_error_frozen("GDBM"); } static VALUE -rb_gdbm_delete(obj, keystr) - VALUE obj, keystr; +rb_gdbm_delete(VALUE obj, VALUE keystr) { datum key; struct dbmdata *dbmp; @@ -410,8 +377,7 @@ rb_gdbm_delete(obj, keystr) } static VALUE -fgdbm_delete(obj, keystr) - VALUE obj, keystr; +fgdbm_delete(VALUE obj, VALUE keystr) { VALUE valstr; @@ -421,8 +387,7 @@ fgdbm_delete(obj, keystr) } static VALUE -fgdbm_shift(obj) - VALUE obj; +fgdbm_shift(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -439,8 +404,7 @@ fgdbm_shift(obj) } static VALUE -fgdbm_delete_if(obj) - VALUE obj; +fgdbm_delete_if(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -472,8 +436,7 @@ fgdbm_delete_if(obj) } static VALUE -fgdbm_clear(obj) - VALUE obj; +fgdbm_clear(VALUE obj) { datum key, nextkey; struct dbmdata *dbmp; @@ -510,8 +473,7 @@ fgdbm_clear(obj) } static VALUE -fgdbm_invert(obj) - VALUE obj; +fgdbm_invert(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -528,42 +490,8 @@ fgdbm_invert(obj) return hash; } -static VALUE each_pair _((VALUE)); - -static VALUE fgdbm_store _((VALUE,VALUE,VALUE)); - static VALUE -update_i(pair, dbm) - VALUE pair, dbm; -{ - Check_Type(pair, T_ARRAY); - if (RARRAY(pair)->len < 2) { - rb_raise(rb_eArgError, "pair must be [key, value]"); - } - fgdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]); - return Qnil; -} - -static VALUE -fgdbm_update(obj, other) - VALUE obj, other; -{ - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -static VALUE -fgdbm_replace(obj, other) - VALUE obj, other; -{ - fgdbm_clear(obj); - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -static VALUE -fgdbm_store(obj, keystr, valstr) - VALUE obj, keystr, valstr; +fgdbm_store(VALUE obj, VALUE keystr, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -590,8 +518,33 @@ fgdbm_store(obj, keystr, valstr) } static VALUE -fgdbm_length(obj) - VALUE obj; +update_i(VALUE pair, VALUE dbm) +{ + Check_Type(pair, T_ARRAY); + if (RARRAY(pair)->len < 2) { + rb_raise(rb_eArgError, "pair must be [key, value]"); + } + fgdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]); + return Qnil; +} + +static VALUE +fgdbm_update(VALUE obj, VALUE other) +{ + rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); + return obj; +} + +static VALUE +fgdbm_replace(VALUE obj, VALUE other) +{ + fgdbm_clear(obj); + rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); + return obj; +} + +static VALUE +fgdbm_length(VALUE obj) { datum key, nextkey; struct dbmdata *dbmp; @@ -612,8 +565,7 @@ fgdbm_length(obj) } static VALUE -fgdbm_empty_p(obj) - VALUE obj; +fgdbm_empty_p(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -636,8 +588,7 @@ fgdbm_empty_p(obj) } static VALUE -fgdbm_each_value(obj) - VALUE obj; +fgdbm_each_value(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -654,8 +605,7 @@ fgdbm_each_value(obj) } static VALUE -fgdbm_each_key(obj) - VALUE obj; +fgdbm_each_key(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -672,8 +622,7 @@ fgdbm_each_key(obj) } static VALUE -fgdbm_each_pair(obj) - VALUE obj; +fgdbm_each_pair(VALUE obj) { GDBM_FILE dbm; struct dbmdata *dbmp; @@ -691,8 +640,7 @@ fgdbm_each_pair(obj) } static VALUE -fgdbm_keys(obj) - VALUE obj; +fgdbm_keys(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -710,8 +658,7 @@ fgdbm_keys(obj) } static VALUE -fgdbm_values(obj) - VALUE obj; +fgdbm_values(VALUE obj) { datum key, nextkey; struct dbmdata *dbmp; @@ -731,8 +678,7 @@ fgdbm_values(obj) } static VALUE -fgdbm_has_key(obj, keystr) - VALUE obj, keystr; +fgdbm_has_key(VALUE obj, VALUE keystr) { datum key; struct dbmdata *dbmp; @@ -749,8 +695,7 @@ fgdbm_has_key(obj, keystr) } static VALUE -fgdbm_has_value(obj, valstr) - VALUE obj, valstr; +fgdbm_has_value(VALUE obj, VALUE valstr) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -774,8 +719,7 @@ fgdbm_has_value(obj, valstr) } static VALUE -fgdbm_to_a(obj) - VALUE obj; +fgdbm_to_a(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -793,8 +737,7 @@ fgdbm_to_a(obj) } static VALUE -fgdbm_reorganize(obj) - VALUE obj; +fgdbm_reorganize(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -806,8 +749,7 @@ fgdbm_reorganize(obj) } static VALUE -fgdbm_sync(obj) - VALUE obj; +fgdbm_sync(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -819,8 +761,7 @@ fgdbm_sync(obj) } static VALUE -fgdbm_set_cachesize(obj, val) - VALUE obj, val; +fgdbm_set_cachesize(VALUE obj, VALUE val) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -835,8 +776,7 @@ fgdbm_set_cachesize(obj, val) } static VALUE -fgdbm_set_fastmode(obj, val) - VALUE obj, val; +fgdbm_set_fastmode(VALUE obj, VALUE val) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -854,8 +794,7 @@ fgdbm_set_fastmode(obj, val) } static VALUE -fgdbm_set_syncmode(obj, val) - VALUE obj, val; +fgdbm_set_syncmode(VALUE obj, VALUE val) { #if !defined(GDBM_SYNCMODE) fgdbm_set_fastmode(obj, RTEST(val) ? Qfalse : Qtrue); @@ -878,8 +817,7 @@ fgdbm_set_syncmode(obj, val) } static VALUE -fgdbm_to_hash(obj) - VALUE obj; +fgdbm_to_hash(VALUE obj) { struct dbmdata *dbmp; GDBM_FILE dbm; @@ -897,14 +835,13 @@ fgdbm_to_hash(obj) } static VALUE -fgdbm_reject(obj) - VALUE obj; +fgdbm_reject(VALUE obj) { return rb_hash_delete_if(fgdbm_to_hash(obj)); } void -Init_gdbm() +Init_gdbm(void) { rb_cGDBM = rb_define_class("GDBM", rb_cObject); rb_eGDBMError = rb_define_class("GDBMError", rb_eStandardError); diff --git a/ext/sdbm/_sdbm.c b/ext/sdbm/_sdbm.c index d4cf621ea5..f9a5888624 100644 --- a/ext/sdbm/_sdbm.c +++ b/ext/sdbm/_sdbm.c @@ -143,10 +143,7 @@ static long masks[] = { datum nullitem = {NULL, 0}; DBM * -sdbm_open(file, flags, mode) -register char *file; -register int flags; -register int mode; +sdbm_open(register char *file, register int flags, register int mode) { register DBM *db; register char *dirname; @@ -175,11 +172,7 @@ register int mode; } DBM * -sdbm_prep(dirname, pagname, flags, mode) -char *dirname; -char *pagname; -int flags; -int mode; +sdbm_prep(char *dirname, char *pagname, int flags, int mode) { register DBM *db; struct stat dstat; @@ -235,8 +228,7 @@ int mode; } void -sdbm_close(db) -register DBM *db; +sdbm_close(register DBM *db) { if (db == NULL) errno = EINVAL; @@ -248,9 +240,7 @@ register DBM *db; } datum -sdbm_fetch(db, key) -register DBM *db; -datum key; +sdbm_fetch(register DBM *db, datum key) { if (db == NULL || bad(key)) return errno = EINVAL, nullitem; @@ -262,9 +252,7 @@ datum key; } int -sdbm_delete(db, key) -register DBM *db; -datum key; +sdbm_delete(register DBM *db, datum key) { if (db == NULL || bad(key)) return errno = EINVAL, -1; @@ -288,11 +276,7 @@ datum key; } int -sdbm_store(db, key, val, flags) -register DBM *db; -datum key; -datum val; -int flags; +sdbm_store(register DBM *db, datum key, datum val, int flags) { int need; register long hash; @@ -350,10 +334,7 @@ int flags; * giving up. */ static int -makroom(db, hash, need) -register DBM *db; -long hash; -int need; +makroom(register DBM *db, long int hash, int need) { long newp; char twin[PBLKSIZ]; @@ -450,8 +431,7 @@ int need; * deletions aren't taken into account. (ndbm bug) */ datum -sdbm_firstkey(db) -register DBM *db; +sdbm_firstkey(register DBM *db) { if (db == NULL) return errno = EINVAL, nullitem; @@ -470,8 +450,7 @@ register DBM *db; } datum -sdbm_nextkey(db) -register DBM *db; +sdbm_nextkey(register DBM *db) { if (db == NULL) return errno = EINVAL, nullitem; @@ -482,9 +461,7 @@ register DBM *db; * all important binary trie traversal */ static int -getpage(db, hash) -register DBM *db; -register long hash; +getpage(register DBM *db, register long int hash) { register int hbit; register long dbit; @@ -526,9 +503,7 @@ register long hash; } static int -getdbit(db, dbit) -register DBM *db; -register long dbit; +getdbit(register DBM *db, register long int dbit) { register long c; register long dirb; @@ -549,9 +524,7 @@ register long dbit; } static int -setdbit(db, dbit) -register DBM *db; -register long dbit; +setdbit(register DBM *db, register long int dbit) { register long c; register long dirb; @@ -585,8 +558,7 @@ register long dbit; * the page, try the next page in sequence */ static datum -getnext(db) -register DBM *db; +getnext(register DBM *db) { datum key; @@ -661,9 +633,7 @@ static int seepair proto((char *, int, char *, int)); */ static int -fitpair(pag, need) -char *pag; -int need; +fitpair(char *pag, int need) { register int n; register int off; @@ -680,10 +650,7 @@ int need; } static void -putpair(pag, key, val) -char *pag; -datum key; -datum val; +putpair(char *pag, datum key, datum val) { register int n; register int off; @@ -711,9 +678,7 @@ datum val; } static datum -getpair(pag, key) -char *pag; -datum key; +getpair(char *pag, datum key) { register int i; register int n; @@ -733,9 +698,7 @@ datum key; #ifdef SEEDUPS static int -duppair(pag, key) -char *pag; -datum key; +duppair(char *pag, datum key) { register short *ino = (short *) pag; return GET_SHORT(ino,0) > 0 && @@ -744,9 +707,7 @@ datum key; #endif static datum -getnkey(pag, num) -char *pag; -int num; +getnkey(char *pag, int num) { datum key; register int off; @@ -765,9 +726,7 @@ int num; } static int -delpair(pag, key) -char *pag; -datum key; +delpair(char *pag, datum key) { register int n; register int i; @@ -837,11 +796,7 @@ datum key; * return 0 if not found. */ static int -seepair(pag, n, key, siz) -char *pag; -register int n; -register char *key; -register int siz; +seepair(char *pag, register int n, register char *key, register int siz) { register int i; register int off = PBLKSIZ; @@ -857,10 +812,7 @@ register int siz; } static void -splpage(pag, new, sbit) -char *pag; -char *new; -long sbit; +splpage(char *pag, char *new, long int sbit) { datum key; datum val; @@ -901,8 +853,7 @@ long sbit; * this could be made more rigorous. */ static int -chkpage(pag) -char *pag; +chkpage(char *pag) { register int n; register int off; @@ -942,9 +893,7 @@ char *pag; * 65587 even better. */ long -sdbm_hash(str, len) -register char *str; -register int len; +sdbm_hash(register char *str, register int len) { register unsigned long n = 0; diff --git a/ext/sdbm/init.c b/ext/sdbm/init.c index 9311a7237d..8eccbcc19b 100644 --- a/ext/sdbm/init.c +++ b/ext/sdbm/init.c @@ -41,8 +41,7 @@ closed_sdbm() } static void -free_sdbm(dbmp) - struct dbmdata *dbmp; +free_sdbm(struct dbmdata *dbmp) { if (dbmp->di_dbm) sdbm_close(dbmp->di_dbm); @@ -50,8 +49,7 @@ free_sdbm(dbmp) } static VALUE -fsdbm_close(obj) - VALUE obj; +fsdbm_close(VALUE obj) { struct dbmdata *dbmp; @@ -63,8 +61,7 @@ fsdbm_close(obj) } static VALUE -fsdbm_closed(obj) - VALUE obj; +fsdbm_closed(VALUE obj) { struct dbmdata *dbmp; @@ -77,19 +74,14 @@ fsdbm_closed(obj) return Qfalse; } -static VALUE fsdbm_alloc _((VALUE)); static VALUE -fsdbm_alloc(klass) - VALUE klass; +fsdbm_alloc(VALUE klass) { return Data_Wrap_Struct(klass, 0, free_sdbm, 0); } static VALUE -fsdbm_initialize(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fsdbm_initialize(int argc, VALUE *argv, VALUE obj) { VALUE file, vmode; DBM *dbm; @@ -129,10 +121,7 @@ fsdbm_initialize(argc, argv, obj) } static VALUE -fsdbm_s_open(argc, argv, klass) - int argc; - VALUE *argv; - VALUE klass; +fsdbm_s_open(int argc, VALUE *argv, VALUE klass) { VALUE obj = Data_Wrap_Struct(klass, 0, free_sdbm, 0); @@ -148,8 +137,7 @@ fsdbm_s_open(argc, argv, klass) } static VALUE -fsdbm_fetch(obj, keystr, ifnone) - VALUE obj, keystr, ifnone; +fsdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) { datum key, value; struct dbmdata *dbmp; @@ -170,17 +158,13 @@ fsdbm_fetch(obj, keystr, ifnone) } static VALUE -fsdbm_aref(obj, keystr) - VALUE obj, keystr; +fsdbm_aref(VALUE obj, VALUE keystr) { return fsdbm_fetch(obj, keystr, Qnil); } static VALUE -fsdbm_fetch_m(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fsdbm_fetch_m(int argc, VALUE *argv, VALUE obj) { VALUE keystr, valstr, ifnone; @@ -193,8 +177,7 @@ fsdbm_fetch_m(argc, argv, obj) } static VALUE -fsdbm_index(obj, valstr) - VALUE obj, valstr; +fsdbm_index(VALUE obj, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -215,8 +198,7 @@ fsdbm_index(obj, valstr) } static VALUE -fsdbm_select(obj) - VALUE obj; +fsdbm_select(VALUE obj) { VALUE new = rb_ary_new(); datum key, val; @@ -240,10 +222,7 @@ fsdbm_select(obj) } static VALUE -fsdbm_values_at(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; +fsdbm_values_at(int argc, VALUE *argv, VALUE obj) { VALUE new = rb_ary_new2(argc); int i; @@ -256,16 +235,14 @@ fsdbm_values_at(argc, argv, obj) } static void -fdbm_modify(obj) - VALUE obj; +fdbm_modify(VALUE obj) { rb_secure(4); if (OBJ_FROZEN(obj)) rb_error_frozen("SDBM"); } static VALUE -fsdbm_delete(obj, keystr) - VALUE obj, keystr; +fsdbm_delete(VALUE obj, VALUE keystr) { datum key, value; struct dbmdata *dbmp; @@ -300,8 +277,7 @@ fsdbm_delete(obj, keystr) } static VALUE -fsdbm_shift(obj) - VALUE obj; +fsdbm_shift(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -324,8 +300,7 @@ fsdbm_shift(obj) } static VALUE -fsdbm_delete_if(obj) - VALUE obj; +fsdbm_delete_if(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -364,8 +339,7 @@ fsdbm_delete_if(obj) } static VALUE -fsdbm_clear(obj) - VALUE obj; +fsdbm_clear(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -385,8 +359,7 @@ fsdbm_clear(obj) } static VALUE -fsdbm_invert(obj) - VALUE obj; +fsdbm_invert(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -404,42 +377,8 @@ fsdbm_invert(obj) return hash; } -static VALUE each_pair _((VALUE)); - -static VALUE fsdbm_store _((VALUE,VALUE,VALUE)); - -static VALUE -update_i(pair, dbm) - VALUE pair, dbm; -{ - Check_Type(pair, T_ARRAY); - if (RARRAY(pair)->len < 2) { - rb_raise(rb_eArgError, "pair must be [key, value]"); - } - fsdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]); - return Qnil; -} - static VALUE -fsdbm_update(obj, other) - VALUE obj, other; -{ - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -static VALUE -fsdbm_replace(obj, other) - VALUE obj, other; -{ - fsdbm_clear(obj); - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -static VALUE -fsdbm_store(obj, keystr, valstr) - VALUE obj, keystr, valstr; +fsdbm_store(VALUE obj, VALUE keystr, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -474,8 +413,33 @@ fsdbm_store(obj, keystr, valstr) } static VALUE -fsdbm_length(obj) - VALUE obj; +update_i(VALUE pair, VALUE dbm) +{ + Check_Type(pair, T_ARRAY); + if (RARRAY(pair)->len < 2) { + rb_raise(rb_eArgError, "pair must be [key, value]"); + } + fsdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]); + return Qnil; +} + +static VALUE +fsdbm_update(VALUE obj, VALUE other) +{ + rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); + return obj; +} + +static VALUE +fsdbm_replace(VALUE obj, VALUE other) +{ + fsdbm_clear(obj); + rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); + return obj; +} + +static VALUE +fsdbm_length(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -494,8 +458,7 @@ fsdbm_length(obj) } static VALUE -fsdbm_empty_p(obj) - VALUE obj; +fsdbm_empty_p(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -518,8 +481,7 @@ fsdbm_empty_p(obj) } static VALUE -fsdbm_each_value(obj) - VALUE obj; +fsdbm_each_value(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -535,8 +497,7 @@ fsdbm_each_value(obj) } static VALUE -fsdbm_each_key(obj) - VALUE obj; +fsdbm_each_key(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -551,8 +512,7 @@ fsdbm_each_key(obj) } static VALUE -fsdbm_each_pair(obj) - VALUE obj; +fsdbm_each_pair(VALUE obj) { datum key, val; DBM *dbm; @@ -572,8 +532,7 @@ fsdbm_each_pair(obj) } static VALUE -fsdbm_keys(obj) - VALUE obj; +fsdbm_keys(VALUE obj) { datum key; struct dbmdata *dbmp; @@ -590,8 +549,7 @@ fsdbm_keys(obj) } static VALUE -fsdbm_values(obj) - VALUE obj; +fsdbm_values(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -609,8 +567,7 @@ fsdbm_values(obj) } static VALUE -fsdbm_has_key(obj, keystr) - VALUE obj, keystr; +fsdbm_has_key(VALUE obj, VALUE keystr) { datum key, val; struct dbmdata *dbmp; @@ -627,8 +584,7 @@ fsdbm_has_key(obj, keystr) } static VALUE -fsdbm_has_value(obj, valstr) - VALUE obj, valstr; +fsdbm_has_value(VALUE obj, VALUE valstr) { datum key, val; struct dbmdata *dbmp; @@ -649,8 +605,7 @@ fsdbm_has_value(obj, valstr) } static VALUE -fsdbm_to_a(obj) - VALUE obj; +fsdbm_to_a(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -669,8 +624,7 @@ fsdbm_to_a(obj) } static VALUE -fsdbm_to_hash(obj) - VALUE obj; +fsdbm_to_hash(VALUE obj) { datum key, val; struct dbmdata *dbmp; @@ -689,8 +643,7 @@ fsdbm_to_hash(obj) } static VALUE -fsdbm_reject(obj) - VALUE obj; +fsdbm_reject(VALUE obj) { return rb_hash_delete_if(fsdbm_to_hash(obj)); } diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 96cd263749..958d6943b3 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -31,7 +31,7 @@ /*--------- Prototypes --------*/ -static NORETURN(void raise_zlib_error _((int, const char *))); +static NORETURN(void raise_zlib_error _((int, const char*))); static VALUE rb_zlib_version _((VALUE)); static VALUE do_checksum _((int, VALUE*, uLong (*) _((uLong, const Bytef*, uInt)))); static VALUE rb_zlib_adler32 _((int, VALUE*, VALUE)); @@ -43,14 +43,14 @@ static void finalizer_warn _((const char*)); struct zstream; struct zstream_funcs; -static void zstream_init _((struct zstream*, const struct zstream_funcs *)); +static void zstream_init _((struct zstream*, const struct zstream_funcs*)); static void zstream_expand_buffer _((struct zstream*)); static void zstream_expand_buffer_into _((struct zstream*, int)); -static void zstream_append_buffer _((struct zstream*, const char*, int)); +static void zstream_append_buffer _((struct zstream*, const Bytef*, int)); static VALUE zstream_detach_buffer _((struct zstream*)); static VALUE zstream_shift_buffer _((struct zstream*, int)); static void zstream_buffer_ungetc _((struct zstream*, int)); -static void zstream_append_input _((struct zstream*, const char*, unsigned int)); +static void zstream_append_input _((struct zstream*, const Bytef*, unsigned int)); static void zstream_discard_input _((struct zstream*, unsigned int)); static void zstream_reset_input _((struct zstream*)); static void zstream_passthrough_input _((struct zstream*)); @@ -272,7 +272,7 @@ static VALUE do_checksum(argc, argv, func) int argc; VALUE *argv; - uLong (*func) _((uLong, const Bytef *, uInt)); + uLong (*func) _((uLong, const Bytef*, uInt)); { VALUE str, vsum; unsigned long sum; @@ -294,7 +294,7 @@ do_checksum(argc, argv, func) } else { StringValue(str); - sum = func(sum, RSTRING(str)->ptr, RSTRING(str)->len); + sum = func(sum, (Bytef*)RSTRING(str)->ptr, RSTRING(str)->len); } return rb_uint2inum(sum); } @@ -447,7 +447,7 @@ zstream_expand_buffer(z) rb_str_buf_new makes a zero-length string. */ z->buf = rb_str_new(0, ZSTREAM_INITIAL_BUFSIZE); z->buf_filled = 0; - z->stream.next_out = RSTRING(z->buf)->ptr; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr; z->stream.avail_out = ZSTREAM_INITIAL_BUFSIZE; RBASIC(z->buf)->klass = 0; return; @@ -466,7 +466,7 @@ zstream_expand_buffer(z) z->stream.avail_out = (inc < ZSTREAM_AVAIL_OUT_STEP_MAX) ? inc : ZSTREAM_AVAIL_OUT_STEP_MAX; } - z->stream.next_out = RSTRING(z->buf)->ptr + z->buf_filled; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr + z->buf_filled; } static void @@ -479,13 +479,13 @@ zstream_expand_buffer_into(z, size) rb_str_buf_new makes a zero-length string. */ z->buf = rb_str_new(0, size); z->buf_filled = 0; - z->stream.next_out = RSTRING(z->buf)->ptr; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr; z->stream.avail_out = size; RBASIC(z->buf)->klass = 0; } else if (z->stream.avail_out != size) { rb_str_resize(z->buf, z->buf_filled + size); - z->stream.next_out = RSTRING(z->buf)->ptr + z->buf_filled; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr + z->buf_filled; z->stream.avail_out = size; } } @@ -493,14 +493,14 @@ zstream_expand_buffer_into(z, size) static void zstream_append_buffer(z, src, len) struct zstream *z; - const char *src; + const Bytef *src; int len; { if (NIL_P(z->buf)) { z->buf = rb_str_buf_new(len); - rb_str_buf_cat(z->buf, src, len); + rb_str_buf_cat(z->buf, (char*)src, len); z->buf_filled = len; - z->stream.next_out = RSTRING(z->buf)->ptr; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr; z->stream.avail_out = 0; RBASIC(z->buf)->klass = 0; return; @@ -520,11 +520,11 @@ zstream_append_buffer(z, src, len) } memcpy(RSTRING(z->buf)->ptr + z->buf_filled, src, len); z->buf_filled += len; - z->stream.next_out = RSTRING(z->buf)->ptr + z->buf_filled; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr + z->buf_filled; } #define zstream_append_buffer2(z,v) \ - zstream_append_buffer((z),RSTRING(v)->ptr,RSTRING(v)->len) + zstream_append_buffer((z),(Bytef*)RSTRING(v)->ptr,RSTRING(v)->len) static VALUE zstream_detach_buffer(z) @@ -564,7 +564,7 @@ zstream_shift_buffer(z, len) z->buf_filled -= len; memmove(RSTRING(z->buf)->ptr, RSTRING(z->buf)->ptr + len, z->buf_filled); - z->stream.next_out = RSTRING(z->buf)->ptr + z->buf_filled; + z->stream.next_out = (Bytef*)RSTRING(z->buf)->ptr + z->buf_filled; z->stream.avail_out = RSTRING(z->buf)->len - z->buf_filled; if (z->stream.avail_out > ZSTREAM_AVAIL_OUT_STEP_MAX) { z->stream.avail_out = ZSTREAM_AVAIL_OUT_STEP_MAX; @@ -594,23 +594,23 @@ zstream_buffer_ungetc(z, c) static void zstream_append_input(z, src, len) struct zstream *z; - const char *src; + const Bytef *src; unsigned int len; { if (len <= 0) return; if (NIL_P(z->input)) { z->input = rb_str_buf_new(len); - rb_str_buf_cat(z->input, src, len); + rb_str_buf_cat(z->input, (char*)src, len); RBASIC(z->input)->klass = 0; } else { - rb_str_buf_cat(z->input, src, len); + rb_str_buf_cat(z->input, (char*)src, len); } } #define zstream_append_input2(z,v)\ - zstream_append_input((z), RSTRING(v)->ptr, RSTRING(v)->len) + zstream_append_input((z), (Bytef*)RSTRING(v)->ptr, RSTRING(v)->len) static void zstream_discard_input(z, len) @@ -716,12 +716,12 @@ zstream_run(z, src, len, flush) volatile VALUE guard; if (NIL_P(z->input) && len == 0) { - z->stream.next_in = ""; + z->stream.next_in = (Bytef*)""; z->stream.avail_in = 0; } else { zstream_append_input(z, src, len); - z->stream.next_in = RSTRING(z->input)->ptr; + z->stream.next_in = (Bytef*)RSTRING(z->input)->ptr; z->stream.avail_in = RSTRING(z->input)->len; /* keep reference to `z->input' so as not to be garbage collected after zstream_reset_input() and prevent `z->stream.next_in' @@ -780,7 +780,7 @@ zstream_sync(z, src, len) int err; if (!NIL_P(z->input)) { - z->stream.next_in = RSTRING(z->input)->ptr; + z->stream.next_in = (Bytef*)RSTRING(z->input)->ptr; z->stream.avail_in = RSTRING(z->input)->len; err = inflateSync(&z->stream); if (err == Z_OK) { @@ -791,7 +791,7 @@ zstream_sync(z, src, len) } zstream_reset_input(z); if (err != Z_DATA_ERROR) { - rest = rb_str_new(z->stream.next_in, z->stream.avail_in); + rest = rb_str_new((char*)z->stream.next_in, z->stream.avail_in); raise_zlib_error(err, z->stream.msg); } } @@ -806,7 +806,7 @@ zstream_sync(z, src, len) return Qtrue; } if (err != Z_DATA_ERROR) { - rest = rb_str_new(z->stream.next_in, z->stream.avail_in); + rest = rb_str_new((char*)z->stream.next_in, z->stream.avail_in); raise_zlib_error(err, z->stream.msg); } return Qfalse; @@ -970,7 +970,7 @@ rb_zstream_finish(obj) struct zstream *z = get_zstream(obj); VALUE dst; - zstream_run(z, "", 0, Z_FINISH); + zstream_run(z, (Bytef*)"", 0, Z_FINISH); dst = zstream_detach_buffer(z); OBJ_INFECT(dst, obj); @@ -1200,10 +1200,10 @@ static VALUE deflate_run(args) VALUE args; { - struct zstream *z = (struct zstream *)((VALUE *)args)[0]; - VALUE src = ((VALUE *)args)[1]; + struct zstream *z = (struct zstream*)((VALUE*)args)[0]; + VALUE src = ((VALUE*)args)[1]; - zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, Z_FINISH); + zstream_run(z, (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len, Z_FINISH); return zstream_detach_buffer(z); } @@ -1263,12 +1263,12 @@ do_deflate(z, src, flush) int flush; { if (NIL_P(src)) { - zstream_run(z, "", 0, Z_FINISH); + zstream_run(z, (Bytef*)"", 0, Z_FINISH); return; } StringValue(src); if (flush != Z_NO_FLUSH || RSTRING(src)->len > 0) { /* prevent BUF_ERROR */ - zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, flush); + zstream_run(z, (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len, flush); } } @@ -1342,7 +1342,7 @@ rb_deflate_flush(argc, argv, obj) rb_scan_args(argc, argv, "01", &v_flush); flush = FIXNUMARG(v_flush, Z_SYNC_FLUSH); if (flush != Z_NO_FLUSH) { /* prevent Z_BUF_ERROR */ - zstream_run(z, "", 0, flush); + zstream_run(z, (Bytef*)"", 0, flush); } dst = zstream_detach_buffer(z); @@ -1403,7 +1403,7 @@ rb_deflate_set_dictionary(obj, dic) OBJ_INFECT(obj, dic); StringValue(src); err = deflateSetDictionary(&z->stream, - RSTRING(src)->ptr, RSTRING(src)->len); + (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len); if (err != Z_OK) { raise_zlib_error(err, z->stream.msg); } @@ -1465,11 +1465,11 @@ static VALUE inflate_run(args) VALUE args; { - struct zstream *z = (struct zstream *)((VALUE *)args)[0]; - VALUE src = ((VALUE *)args)[1]; + struct zstream *z = (struct zstream*)((VALUE*)args)[0]; + VALUE src = ((VALUE*)args)[1]; - zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH); - zstream_run(z, "", 0, Z_FINISH); /* for checking errors */ + zstream_run(z, (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH); + zstream_run(z, (Bytef*)"", 0, Z_FINISH); /* for checking errors */ return zstream_detach_buffer(z); } @@ -1520,12 +1520,12 @@ do_inflate(z, src) VALUE src; { if (NIL_P(src)) { - zstream_run(z, "", 0, Z_FINISH); + zstream_run(z, (Bytef*)"", 0, Z_FINISH); return; } StringValue(src); if (RSTRING(src)->len > 0) { /* prevent Z_BUF_ERROR */ - zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH); + zstream_run(z, (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH); } } @@ -1621,7 +1621,7 @@ rb_inflate_sync(obj, src) OBJ_INFECT(obj, src); StringValue(src); - return zstream_sync(z, RSTRING(src)->ptr, RSTRING(src)->len); + return zstream_sync(z, (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len); } /* @@ -1665,7 +1665,7 @@ rb_inflate_set_dictionary(obj, dic) OBJ_INFECT(obj, dic); StringValue(src); err = inflateSetDictionary(&z->stream, - RSTRING(src)->ptr, RSTRING(src)->len); + (Bytef*)RSTRING(src)->ptr, RSTRING(src)->len); if (err != Z_OK) { raise_zlib_error(err, z->stream.msg); } @@ -1849,7 +1849,7 @@ static VALUE gzfile_read_raw_partial(arg) VALUE arg; { - struct gzfile *gz = (struct gzfile *)arg; + struct gzfile *gz = (struct gzfile*)arg; VALUE str; str = rb_funcall(gz->io, id_readpartial, 1, INT2FIX(GZFILE_READ_SIZE)); @@ -1861,7 +1861,7 @@ static VALUE gzfile_read_raw_rescue(arg) VALUE arg; { - struct gzfile *gz = (struct gzfile *)arg; + struct gzfile *gz = (struct gzfile*)arg; VALUE str = Qnil; if (rb_obj_is_kind_of(ruby_errinfo, rb_eNoMethodError)) { str = rb_funcall(gz->io, id_read, 1, INT2FIX(GZFILE_READ_SIZE)); @@ -1955,7 +1955,7 @@ static void gzfile_make_header(gz) struct gzfile *gz; { - unsigned char buf[10]; /* the size of gzip header */ + Bytef buf[10]; /* the size of gzip header */ unsigned char flags = 0, extraflags = 0; if (!NIL_P(gz->orig_name)) { @@ -1986,11 +1986,11 @@ gzfile_make_header(gz) if (!NIL_P(gz->orig_name)) { zstream_append_buffer2(&gz->z, gz->orig_name); - zstream_append_buffer(&gz->z, "\0", 1); + zstream_append_buffer(&gz->z, (Bytef*)"\0", 1); } if (!NIL_P(gz->comment)) { zstream_append_buffer2(&gz->z, gz->comment); - zstream_append_buffer(&gz->z, "\0", 1); + zstream_append_buffer(&gz->z, (Bytef*)"\0", 1); } gz->z.flags |= GZFILE_FLAG_HEADER_FINISHED; @@ -2000,7 +2000,7 @@ static void gzfile_make_footer(gz) struct gzfile *gz; { - unsigned char buf[8]; /* 8 is the size of gzip footer */ + Bytef buf[8]; /* 8 is the size of gzip footer */ gzfile_set32(gz->crc, buf); gzfile_set32(gz->z.stream.total_in, &buf[4]); @@ -2020,7 +2020,7 @@ gzfile_read_header(gz) rb_raise(cGzError, "not in gzip format"); } - head = RSTRING(gz->z.input)->ptr; + head = (unsigned char*)RSTRING(gz->z.input)->ptr; if (head[0] != GZ_MAGIC1 || head[1] != GZ_MAGIC2) { rb_raise(cGzError, "not in gzip format"); @@ -2058,7 +2058,7 @@ gzfile_read_header(gz) if (!gzfile_read_raw_ensure(gz, 2)) { rb_raise(cGzError, "unexpected end of file"); } - len = gzfile_get16(RSTRING(gz->z.input)->ptr); + len = gzfile_get16((Bytef*)RSTRING(gz->z.input)->ptr); if (!gzfile_read_raw_ensure(gz, 2 + len)) { rb_raise(cGzError, "unexpected end of file"); } @@ -2096,8 +2096,8 @@ gzfile_check_footer(gz) rb_raise(cNoFooter, "footer is not found"); } - crc = gzfile_get32(RSTRING(gz->z.input)->ptr); - length = gzfile_get32(RSTRING(gz->z.input)->ptr + 4); + crc = gzfile_get32((Bytef*)RSTRING(gz->z.input)->ptr); + length = gzfile_get32((Bytef*)RSTRING(gz->z.input)->ptr + 4); gz->z.stream.total_in += 8; /* to rewind correctly */ zstream_discard_input(&gz->z, 8); @@ -2143,7 +2143,7 @@ gzfile_read_more(gz) break; } if (RSTRING(str)->len > 0) { /* prevent Z_BUF_ERROR */ - zstream_run(&gz->z, RSTRING(str)->ptr, RSTRING(str)->len, + zstream_run(&gz->z, (Bytef*)RSTRING(str)->ptr, RSTRING(str)->len, Z_SYNC_FLUSH); } if (gz->z.buf_filled > 0) break; @@ -2160,7 +2160,7 @@ gzfile_calc_crc(gz, str) gz->ungetc -= RSTRING(str)->len; } else { - gz->crc = crc32(gz->crc, RSTRING(str)->ptr + gz->ungetc, + gz->crc = crc32(gz->crc, (Bytef*)RSTRING(str)->ptr + gz->ungetc, RSTRING(str)->len - gz->ungetc); gz->ungetc = 0; } @@ -2285,7 +2285,7 @@ gzfile_writer_end(gz) gzfile_make_header(gz); } - zstream_run(&gz->z, "", 0, Z_FINISH); + zstream_run(&gz->z, (Bytef*)"", 0, Z_FINISH); gzfile_make_footer(gz); gzfile_write_raw(gz); zstream_end(&gz->z); @@ -2812,7 +2812,7 @@ rb_gzwriter_flush(argc, argv, obj) flush = FIXNUMARG(v_flush, Z_SYNC_FLUSH); if (flush != Z_NO_FLUSH) { /* prevent Z_BUF_ERROR */ - zstream_run(&gz->z, "", 0, flush); + zstream_run(&gz->z, (Bytef*)"", 0, flush); } gzfile_write_raw(gz); @@ -2834,7 +2834,7 @@ rb_gzwriter_write(obj, str) if (TYPE(str) != T_STRING) { str = rb_obj_as_string(str); } - gzfile_write(gz, RSTRING(str)->ptr, RSTRING(str)->len); + gzfile_write(gz, (Bytef*)RSTRING(str)->ptr, RSTRING(str)->len); return INT2FIX(RSTRING(str)->len); } @@ -2848,7 +2848,7 @@ rb_gzwriter_putc(obj, ch) struct gzfile *gz = get_gzfile(obj); char c = NUM2CHR(ch); - gzfile_write(gz, &c, 1); + gzfile_write(gz, (Bytef*)&c, 1); return ch; } diff --git a/gc.c b/gc.c index a3afd29590..f2a895926e 100644 --- a/gc.c +++ b/gc.c @@ -772,7 +772,6 @@ gc_mark_children(VALUE ptr, int lev) case NODE_IF: /* 1,2,3 */ case NODE_FOR: case NODE_ITER: - case NODE_CREF: case NODE_WHEN: case NODE_MASGN: case NODE_RESCUE: @@ -792,6 +791,7 @@ gc_mark_children(VALUE ptr, int lev) case NODE_CALL: case NODE_DEFS: case NODE_OP_ASGN1: + case NODE_CREF: gc_mark((VALUE)obj->as.node.u1.node, lev); /* fall through */ case NODE_SUPER: /* 3 */ @@ -1831,11 +1831,13 @@ rb_gc_finalize_deferred(void) { RVALUE *p = deferred_final_list; + during_gc++; deferred_final_list = 0; if (p) { finalize_list(p); } free_unused_heaps(); + during_gc = 0; } void @@ -1844,6 +1846,8 @@ rb_gc_call_finalizer_at_exit(void) RVALUE *p, *pend; int i; + /* finalizers are part of garbage collection */ + during_gc++; /* run finalizers */ if (need_call_final) { p = deferred_final_list; @@ -1884,6 +1888,7 @@ rb_gc_call_finalizer_at_exit(void) p++; } } + during_gc = 0; } /* diff --git a/io.c b/io.c index 44e2a11211..dd1058455a 100644 --- a/io.c +++ b/io.c @@ -3798,7 +3798,12 @@ rb_obj_display(int argc, VALUE *argv, VALUE self) void rb_write_error2(const char *mesg, long len) { - rb_io_write(rb_stderr, rb_str_new(mesg, len)); + if (rb_stderr == orig_stderr || RFILE(orig_stderr)->fptr->fd < 0) { + fwrite(mesg, sizeof(char), len, stderr); + } + else { + rb_io_write(rb_stderr, rb_str_new(mesg, len)); + } } void diff --git a/lib/irb/init.rb b/lib/irb/init.rb index 842eb1221e..25059e26e9 100644 --- a/lib/irb/init.rb +++ b/lib/irb/init.rb @@ -206,7 +206,7 @@ module IRB begin load rc_file rescue LoadError, Errno::ENOENT - rescue + rescue # StandardError, ScriptError print "load error: #{rc_file}\n" print $!.class, ": ", $!, "\n" for err in $@[0, $@.size - 2] @@ -250,7 +250,7 @@ module IRB for m in @CONF[:LOAD_MODULES] begin require m - rescue + rescue # StandardError, ScriptError print $@[0], ":", $!.class, ": ", $!, "\n" end end diff --git a/node.h b/node.h index 7ee49317c1..89347ba91c 100644 --- a/node.h +++ b/node.h @@ -225,6 +225,7 @@ typedef struct RNode { #define nd_modl u1.id #define nd_clss u1.value +#define nd_vis u2.argc #define nd_beg u1.node #define nd_end u2.node @@ -325,7 +326,6 @@ typedef struct RNode { #define NEW_MODULE(n,b) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(b),0) #define NEW_COLON2(c,i) NEW_NODE(NODE_COLON2,c,i,0) #define NEW_COLON3(i) NEW_NODE(NODE_COLON3,0,i,0) -#define NEW_CREF(c) (NEW_NODE(NODE_CREF,0,0,c)) #define NEW_DOT2(b,e) NEW_NODE(NODE_DOT2,b,e,0) #define NEW_DOT3(b,e) NEW_NODE(NODE_DOT3,b,e,0) #define NEW_ATTRSET(a) NEW_NODE(NODE_ATTRSET,a,0,0) diff --git a/parse.y b/parse.y index 41de56b9d5..d7af518fdf 100644 --- a/parse.y +++ b/parse.y @@ -5194,9 +5194,16 @@ parser_parse_string(struct parser_params *parser, NODE *quote) } pushback(c); if (tokadd_string(func, term, paren, "e->nd_nest) == -1) { - ruby_sourceline = nd_line(quote); - rb_compile_error(PARSER_ARG "unterminated string meets end of file"); - return tSTRING_END; + if (func & STR_FUNC_REGEXP) { + ruby_sourceline = nd_line(quote); + rb_compile_error(PARSER_ARG "unterminated regexp meets end of file"); + return tREGEXP_END; + } + else { + ruby_sourceline = nd_line(quote); + rb_compile_error(PARSER_ARG "unterminated string meets end of file"); + return tSTRING_END; + } } tokfix(); -- cgit v1.2.3