diff options
author | murphy <murphy@rubychan.de> | 2010-03-30 22:30:08 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2010-03-30 22:30:08 +0000 |
commit | 9dc56f4b4e31d0229cd615ee8ae9bbeec7a313d7 (patch) | |
tree | 1d277cf430b2c175283a2136c31ff8745a311147 /test/scanners/diff/const_missing.in.diff | |
parent | 863839251ac1782d7e6750a2e9b1f6dc324edeb4 (diff) | |
download | coderay-9dc56f4b4e31d0229cd615ee8ae9bbeec7a313d7.tar.gz |
Updated diff scanner tests.
Diffstat (limited to 'test/scanners/diff/const_missing.in.diff')
-rw-r--r-- | test/scanners/diff/const_missing.in.diff | 75 |
1 files changed, 75 insertions, 0 deletions
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; |