summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog36
-rw-r--r--error.c13
-rw-r--r--eval.c287
-rw-r--r--ext/dbm/dbm.c106
-rw-r--r--ext/gdbm/gdbm.c205
-rw-r--r--ext/sdbm/_sdbm.c97
-rw-r--r--ext/sdbm/init.c161
-rw-r--r--ext/zlib/zlib.c114
-rw-r--r--gc.c7
-rw-r--r--io.c7
-rw-r--r--lib/irb/init.rb4
-rw-r--r--node.h2
-rw-r--r--parse.y13
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 <matz@ruby-lang.org>
+
+ * parse.y (parser_parse_string): mention "regexp" in a error
+ message. a patch from Mauricio Fernandez <mfp at acm.org>
+ [ruby-core:07340]
+
Mon Feb 13 00:01:32 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
* oniguruma.h: Version 4.0.1
@@ -18,16 +24,46 @@ Sat Feb 11 21:57:29 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
* ext/win32ole/tests/testWIN32OLE.rb: ditto.
+Sat Feb 11 01:57:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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 <matz@ruby-lang.org>
+
+ * 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 <matz@ruby-lang.org>
+
+ * 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 <ocean@m2.ccsnet.ne.jp>
* ext/zlib/zlib.c: should not access ruby objects in finalizer.
[ruby-dev:28286]
+Tue Feb 7 18:42:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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 <eban@ruby-lang.org>
* 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 <matz@ruby-lang.org>
+
+ * 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 <matz@ruby-lang.org>
* 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, &quote->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();