Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'undo' won't fire unless the block is a 'try' block in Rakudo #2678

Open
p6rt opened this issue Mar 20, 2012 · 7 comments
Open

'undo' won't fire unless the block is a 'try' block in Rakudo #2678

p6rt opened this issue Mar 20, 2012 · 7 comments
Labels
Bug JVM Related to Rakudo-JVM

Comments

@p6rt
Copy link

p6rt commented Mar 20, 2012

Migrated from rt.perl.org#111866 (status was 'open')

Searchable as RT111866$

@p6rt
Copy link
Author

p6rt commented Mar 20, 2012

From @masak

<moritz> r​: ENTER { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: KEEP { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: UNDO { say 1 }
<p6eval> rakudo b2505b​: ( no output )

So far, so good. But​:

<moritz> r​: UNDO { say 'undone' }; die 'foo'
<p6eval> rakudo b2505b​: ( no output )
<moritz> that doesn't look right :/
* masak submits rakudobug
<masak> expected output​: 'undone␤foo at blablabla'
<moritz> r​: do { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«foo␤ in block <anon> at /tmp/zh8VsY8sVT​:1␤␤»
<masak> r​: try { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«undone␤»

@p6rt
Copy link
Author

p6rt commented Mar 20, 2012

From @masak

On Tue Mar 20 02​:03​:58 2012, masak wrote​:

<moritz> r​: ENTER { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: KEEP { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: UNDO { say 1 }
<p6eval> rakudo b2505b​: ( no output )

So far, so good. But​:

<moritz> r​: UNDO { say 'undone' }; die 'foo'
<p6eval> rakudo b2505b​: ( no output )
<moritz> that doesn't look right :/
* masak submits rakudobug
<masak> expected output​: 'undone␤foo at blablabla'
<moritz> r​: do { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«foo␤ in block <anon> at
/tmp/zh8VsY8sVT​:1␤␤»
<masak> r​: try { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«undone␤»

Also​:

<moritz> n​: do { UNDO say "undone"; die "foo" }
<p6eval> niecza v15-4-g1f35f89​: OUTPUT«undone␤Unhandled exception​: foo
[...]
<masak> r​: sub foo { UNDO say "undone"; fail }; foo; say "alive"
<p6eval> rakudo b2505b​: OUTPUT«alive␤»

@p6rt
Copy link
Author

p6rt commented Mar 20, 2012

@masak - Status changed from 'new' to 'open'

@p6rt
Copy link
Author

p6rt commented May 30, 2012

From @diakopter

On Tue Mar 20 02​:59​:11 2012, masak wrote​:

On Tue Mar 20 02​:03​:58 2012, masak wrote​:

<moritz> r​: ENTER { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: KEEP { say 1 }
<p6eval> rakudo b2505b​: OUTPUT«1␤»
<moritz> r​: UNDO { say 1 }
<p6eval> rakudo b2505b​: ( no output )

So far, so good. But​:

<moritz> r​: UNDO { say 'undone' }; die 'foo'
<p6eval> rakudo b2505b​: ( no output )
<moritz> that doesn't look right :/
* masak submits rakudobug
<masak> expected output​: 'undone␤foo at blablabla'
<moritz> r​: do { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«foo␤ in block <anon> at
/tmp/zh8VsY8sVT​:1␤␤»
<masak> r​: try { UNDO say "undone"; die "foo" }
<p6eval> rakudo b2505b​: OUTPUT«undone␤»

Also​:

<moritz> n​: do { UNDO say "undone"; die "foo" }
<p6eval> niecza v15-4-g1f35f89​: OUTPUT«undone␤Unhandled exception​:
foo
[...]
<masak> r​: sub foo { UNDO say "undone"; fail }; foo; say "alive"
<p6eval> rakudo b2505b​: OUTPUT«alive␤»

the first complaint now works, but the rest still don't.

19​:22 <diakopter> r​: UNDO { say 'undone' }; die 'foo'
19​:22 <p6eval> rakudo 024843​: OUTPUT«undone␤»

@p6rt
Copy link
Author

p6rt commented Oct 23, 2014

From @usev6

Currently things are as follows​:

Moar get's all of this right​:

$ perl6-m -e 'UNDO { say "undone" }; die "foo"'
undone
foo
  in block <unit> at -e​:1
$ perl6-m -e 'do { UNDO say "undone"; die "foo" }'
undone
foo
  in block <unit> at -e​:1
$ perl6-m -e 'try { UNDO say "undone"; die "foo" }'
undone
$ perl6-m -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

Parrot has trouble with the first two commands (without block and "do" block), the other two run fine ("try" block and sub)​:

$ perl6-p -e 'UNDO { say "undone" }; die "foo"'
undone
$ perl6-p -e 'do { UNDO say "undone"; die "foo" }'
foo
  in block <unit> at -e​:1
$ perl6-p -e 'try { UNDO say "undone"; die "foo" }'
undone
$ perl6-p -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

JVM has trouble with the second and third command ("do" block and "try" block), the other two run fine (without block and sub)​:

$ perl6-j -e 'UNDO { say "undone" }; die "foo"'
undone
foo
  in block <unit> at -e​:1
$ perl6-j -e 'do { UNDO say "undone"; die "foo" }'
foo
  in block <unit> at -e​:1
$ perl6-j -e 'try { UNDO say "undone"; die "foo" }'
$ perl6-j -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

I'll add tests later (after this month's Rakudo release).

1 similar comment
@p6rt
Copy link
Author

p6rt commented Oct 23, 2014

From @usev6

Currently things are as follows​:

Moar get's all of this right​:

$ perl6-m -e 'UNDO { say "undone" }; die "foo"'
undone
foo
  in block <unit> at -e​:1
$ perl6-m -e 'do { UNDO say "undone"; die "foo" }'
undone
foo
  in block <unit> at -e​:1
$ perl6-m -e 'try { UNDO say "undone"; die "foo" }'
undone
$ perl6-m -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

Parrot has trouble with the first two commands (without block and "do" block), the other two run fine ("try" block and sub)​:

$ perl6-p -e 'UNDO { say "undone" }; die "foo"'
undone
$ perl6-p -e 'do { UNDO say "undone"; die "foo" }'
foo
  in block <unit> at -e​:1
$ perl6-p -e 'try { UNDO say "undone"; die "foo" }'
undone
$ perl6-p -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

JVM has trouble with the second and third command ("do" block and "try" block), the other two run fine (without block and sub)​:

$ perl6-j -e 'UNDO { say "undone" }; die "foo"'
undone
foo
  in block <unit> at -e​:1
$ perl6-j -e 'do { UNDO say "undone"; die "foo" }'
foo
  in block <unit> at -e​:1
$ perl6-j -e 'try { UNDO say "undone"; die "foo" }'
$ perl6-j -e 'sub foo { UNDO say "undone"; fail }; foo; say "alive"'
undone
alive

I'll add tests later (after this month's Rakudo release).

@p6rt
Copy link
Author

p6rt commented Oct 25, 2014

From @usev6

Tests added to S04-phasers/keep-undo.t with commit Raku/roast@933059b19f

@p6rt p6rt added Bug JVM Related to Rakudo-JVM labels Jan 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug JVM Related to Rakudo-JVM
Projects
None yet
Development

No branches or pull requests

1 participant