summaryrefslogtreecommitdiff
path: root/test/ruby/test_super.rb
AgeCommit message (Collapse)Author
2019-12-12Make super in instance_eval in method in module raise TypeErrorJeremy Evans
This makes behavior the same as super in instance_eval in method in class. The reason this wasn't implemented before is that there is a check to determine if the self in the current context is of the expected class, and a module itself can be included in multiple classes, so it doesn't have an expected class. Implementing this requires giving iclasses knowledge of which class created them, so that super call in the module method knows the expected class for super calls. This reference is called includer, and should only be set for iclasses. Note that the approach Ruby uses in this check is not robust. If you instance_eval another object of the same class and call super, instead of an TypeError, you get super called with the instance_eval receiver instead of the method receiver. Truly fixing super would require keeping a reference to the super object (method receiver) in each frame where scope has changed, and using that instead of current self when calling super. Fixes [Bug #11636] Notes: Merged: https://github.com/ruby/ruby/pull/2717
2018-04-17test/ruby/test_super.rb: Remove unused assertionsmame
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63181 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05check array for zsuper. [Bug #14279]ko1
* compile.c (iseq_compile_each0): for zsuper (NODE_ZSUPER), we need to check given argument is Array or not. * test/ruby/test_super.rb: add a test for this bug. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-29vm_eval.c: follow the original classnobu
* vm_eval.c (vm_call0_body): follow the original class, not to loop the prepended module. [ruby-core:77784] [Bug #12876] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19test/ruby: suppress parser warningsnobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16Add frozen_string_literal: false for all filesnaruse
When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-31test_super.rb: test_missing_supernobu
* test/ruby/test_super.rb (test_missing_super): test for the simple case super method is not found. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-06* vm_insnhelper.c (vm_search_super_method): do not skip callingko1
same methods in super. [Bug #3351] * test/ruby/test_super.rb: fix a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51161 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-13* test/lib/envutil.rb: Moved from test/ruby/.akr
* test/lib/find_executable.rb: Ditto. * test/lib/memory_status.rb: Ditto. * test/lib/test/unit.rb: require envutil. * test/: Don't require envutil in test files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-27* test/ruby/test_super.rb: add a test to check block passing.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48158 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-19vm_eval.c: fix super from eval with scopenobu
* vm_eval.c (eval_string_with_cref): fix super from eval with scope. set klass in the current control frame to the class of the receiver in the context to be evaluated, this class/module must match the actual receiver to call super. [ruby-core:65122] [Bug #10263] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-14proc.c: use already included ancestor iclassnobu
* proc.c (umethod_bind): use the ancestor iclass instead of new iclass to get rid of infinite recursion, if the defined module is already included. [ruby-core:62014] [Bug #9721] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45585 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-11proc.c: fix super in bound UnboundMethodnobu
* proc.c (rb_method_call_with_block, umethod_bind): call with IClass including the module for a module instance method. [ruby-core:61936] [Bug #9721] * vm_insnhelper.c (vm_search_super_method): allow bound UnboundMethod case. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-11vm_insnhelper.c: preserve encodingsnobu
* vm_insnhelper.c (vm_search_super_method): preserve encodings of classes in message. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-03-05* test/ruby: get rid of warnings.usa
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-10test_super.rb: remove unneeded codenobu
* test/ruby/test_super.rb (test_missing_super_in_module_unbound_method): binding target does not need extending. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-08vm_insnhelper.c: revive r44455 for bound module methodnobu
* vm_insnhelper.c (vm_search_super_method): when super called in a bound UnboundMethod generated from a module, no superclass is found since the current defined class is the module, then call method_missing in that case. [ruby-core:59619] [Bug #9377] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-06test_super.rb: test_module_super_in_method_modulenobu
* test/ruby/test_super.rb (test_module_super_in_method_module): more test for the case searching super method from a method defined in a module. [ruby-core:59589] [Bug #9315] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-28vm_insnhelper.c: missing super in method modulenobu
* vm_insnhelper.c (vm_search_super_method): direct superclass of a module is found when super called in a Method object generated a method defined in a module, call method_missing in that case. [ruby-core:59358] [Bug #9315] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-09test/unit/assertions.rb: return exceptionnobu
* lib/test/unit/assertions.rb (assert_raise_with_message): return raised exception same as assert_raise. * test/ruby, test/-ext-: use assert_raise_with_message. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-07* remove trailing spaces.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42881 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-02* vm_insnhelper.c (vm_search_super_method): use ci->argc instead ofko1
ci->orig_argc. ci->argc can be changed by splat arguments. [ruby-list:49575] This fix should be applied to Ruby 2.0.0 seriese. * test/ruby/test_super.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42782 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-03-07compile.c: zsuper keyword argsnobu
* compile.c (iseq_compile_each): pass keyword arguments to zsuper, with current values. [ruby-core:53114] [Bug #8008] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-01-10* vm_insnhelper.c (vm_search_super_method): raise a TypeErrorshugo
instead of a NotImplementError if self is not an instance of the current class. [ruby-dev:39772] [Bug #2402] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-25test_super.rb: super from BEGINnobu
* test/ruby/test_super.rb (TestSuper#test_super_in_BEGIN): for BEGIN. [ruby-core:47680] [Bug #7064] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37031 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-25insns.def: super from at_exitnobu
* insns.def (invokesuper): klass in cfp is not valid in at_exit and END blocks. [ruby-core:47680] [Bug #7064] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-23* insns.def (invokesuper): reverted r36640 partially to make supershugo
in a thread work correctly. [ruby-core:47284] [Bug #6907] * test/ruby/test_super.rb: related test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-22* insns.def: search up the cf stack for an object that is an instancetenderlove
of the recipient class. Fixes [ruby-core:47186] * test/ruby/test_super.rb: related test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-06* internal.h, class.c, eval.c, insns.def: find the appropriateshugo
receiver for super called in instance_eval. If such a receiver is not found, raise NoMethodError. [ruby-dev:39772] [Bug #2402] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-03test_super.rb: renamenobu
* test/ruby/test_super.rb (TestSuper#test_double_include2): rename to get rid of redefinition. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-03* insns.def (invokesuper): reverted r36612 so that super in anshugo
aliased method will not call the same method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36613 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-03* insns.def (invokesuper): don't skip the same class. instead, useshugo
rb_method_entry_get_with_omod() to avoid infinite loop when super is used with refinements. [ruby-core:30450] [Bug #3351] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-15* remove trailing spaces.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-08-21* test/ruby/test_super.rb: add test.wanabe
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-10* vm_insnhelper.c (vm_search_superclass): checks for implicitnobu
argument passing before method search. [ruby-core:24244] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-11-18use ML ref. for assertion message.akr
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-06-24* insn_send.ci: removed.ko1
* common.mk: ditto. * vm.c (vm_call_bmethod), isnsn.def: added. fix to use this function instead of using goto. * vm.c (vm_call_bmethod): renamed from th_invoke_bmethod(). * vm.c (vm_method_missing): renamed from eval_methdo_missing(). * vm_evalbody.ci: remove tmp_* variables. * insnhelper.h: add some macros. * insns.def: forbid zsuper from method defined by define_method(). * test/ruby/test_super.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-05-10 * test/ruby/test_super.rb: add tests.usa
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-08-07 * test/ruby/test_super.rb: added optional arg tests. [ruby-dev:26743]nahi
the tests expects 1.8 behavior at this time. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-12-12* test/ruby/test_super.rb (TestSuper#test_define_method): now methodsnobu
from procs can call super. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-12-07* test/io/nonblock/test_flush.rb (TestIONonblock#test_flush): writenobu
operation ignores EAGAIN. * test/ruby/test_super.rb (TestSuper#test_define_method): test for super from proc. [ruby-core:03856] * test/socket/test_tcp.rb (TestTCPSocket#test_recvfrom): make execution order more precise. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-11-18* parse.y (f_rest_arg): store rest args into invisible local variabenobu
in order to get rid of SEGV at ZSUPER. [ruby-dev:24913] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e