From 9dc56f4b4e31d0229cd615ee8ae9bbeec7a313d7 Mon Sep 17 00:00:00 2001 From: murphy Date: Tue, 30 Mar 2010 22:30:08 +0000 Subject: Updated diff scanner tests. --- test/scanners/diff/const_missing.in.diff | 75 ++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 test/scanners/diff/const_missing.in.diff (limited to 'test/scanners/diff/const_missing.in.diff') diff --git a/test/scanners/diff/const_missing.in.diff b/test/scanners/diff/const_missing.in.diff new file mode 100644 index 0000000..5549794 --- /dev/null +++ b/test/scanners/diff/const_missing.in.diff @@ -0,0 +1,75 @@ +Index: error.c +=================================================================== +--- error.c (revision 26674) ++++ error.c (working copy) +@@ -402,4 +402,6 @@ VALUE rb_eSyntaxError; + VALUE rb_eLoadError; + ++VALUE rb_eNoConstantError; ++ + VALUE rb_eSystemCallError; + VALUE rb_mErrno; +@@ -1143,4 +1145,5 @@ Init_Exception(void) + rb_define_method(rb_eNoMethodError, "initialize", nometh_err_initialize, -1); + rb_define_method(rb_eNoMethodError, "args", nometh_err_args, 0); ++ rb_eNoConstantError = rb_define_class("NoConstantError", rb_eNameError); + + rb_eRuntimeError = rb_define_class("RuntimeError", rb_eStandardError); +Index: variable.c +=================================================================== +--- variable.c (revision 26674) ++++ variable.c (working copy) +@@ -1356,7 +1356,29 @@ uninitialized_constant(VALUE klass, ID i + + static VALUE ++const_missing_call(VALUE arg) ++{ ++ VALUE *args = (VALUE *)arg; ++ ID const_missing_id; ++ CONST_ID(const_missing_id, "const_missing"); ++ return rb_check_funcall(args[0], const_missing_id, 1, &args[1]); ++} ++ ++static VALUE ++const_missing_rescue(VALUE arg, VALUE errinfo) ++{ ++ return arg; ++} ++ ++extern VALUE rb_eNoConstantError; ++ ++static VALUE + const_missing(VALUE klass, ID id) + { +- return rb_funcall(klass, rb_intern("const_missing"), 1, ID2SYM(id)); ++ VALUE args[2]; ++ args[0] = klass; ++ args[1] = ID2SYM(id); ++ return rb_rescue2(const_missing_call, (VALUE)args, ++ const_missing_rescue, (VALUE)Qundef, ++ rb_eNoConstantError, (VALUE)0); + } + +@@ -1598,5 +1620,21 @@ rb_const_get_0(VALUE klass, ID id, int e + } + +- value = const_missing(klass, id); ++ if ((value = const_missing(tmp, id)) == Qundef) { ++ NODE *rb_vm_cref(void); ++ NODE *cref = rb_vm_cref(); ++ while (cref && cref->nd_next && ++ ((cref->flags & NODE_FL_CREF_PUSHED_BY_EVAL) || ++ NIL_P(tmp = cref->nd_clss) || ++ (value = const_missing(tmp, id)) == Qundef)) { ++ cref = cref->nd_next; ++ } ++ if (value == Qundef) { ++ if (!exclude && BUILTIN_TYPE(klass) == T_MODULE && ++ (value = const_missing(rb_cObject, id)) == Qundef) { ++ uninitialized_constant(klass, id); ++ } ++ } ++ } ++ + rb_vm_inc_const_missing_count(); + return value; -- cgit v1.2.1