mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parent
c2428b8bf6
commit
aa97410b0a
3 changed files with 26 additions and 6 deletions
|
@ -6372,6 +6372,9 @@ compile_return(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node,
|
|||
switch (t) {
|
||||
case ISEQ_TYPE_TOP:
|
||||
case ISEQ_TYPE_MAIN:
|
||||
if (retval) {
|
||||
rb_warn("argument of top-level return is ignored");
|
||||
}
|
||||
if (is == iseq) {
|
||||
/* plain top-level, leave directly */
|
||||
type = ISEQ_TYPE_METHOD;
|
||||
|
|
|
@ -484,13 +484,26 @@ describe "The return keyword" do
|
|||
end
|
||||
|
||||
describe "return with argument" do
|
||||
# https://bugs.ruby-lang.org/issues/14062
|
||||
it "does not affect exit status" do
|
||||
ruby_exe(<<-END_OF_CODE).should == ""
|
||||
return 10
|
||||
END_OF_CODE
|
||||
ruby_version_is ""..."2.7" do
|
||||
it "does not affect exit status" do
|
||||
ruby_exe(<<-END_OF_CODE).should == ""
|
||||
return 10
|
||||
END_OF_CODE
|
||||
|
||||
$?.exitstatus.should == 0
|
||||
$?.exitstatus.should == 0
|
||||
end
|
||||
end
|
||||
|
||||
ruby_version_is "2.7" do
|
||||
it "warns but does not affect exit status" do
|
||||
ruby_exe(<<-END_OF_CODE).should == "-e: warning: argument of top-level return is ignored\n"
|
||||
$stderr.reopen($stdout)
|
||||
system(ENV['RUBY_EXE'], '-e', 'return 10')
|
||||
exit($?.exitstatus)
|
||||
END_OF_CODE
|
||||
|
||||
$?.exitstatus.should == 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1195,6 +1195,10 @@ eom
|
|||
end
|
||||
end
|
||||
|
||||
def test_return_toplevel_with_argument
|
||||
assert_warn(/argument of top-level return is ignored/) {eval("return 1")}
|
||||
end
|
||||
|
||||
def test_syntax_error_in_rescue
|
||||
bug12613 = '[ruby-core:76531] [Bug #12613]'
|
||||
assert_syntax_error("#{<<-"begin;"}\n#{<<-"end;"}", /Invalid retry/, bug12613)
|
||||
|
|
Loading…
Add table
Reference in a new issue