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
Proper implementation of 'succ'/'pred' handling. #356
Comments
From @masakRakudo r31589 does not follow S03 in deferring ++ to a user-defined $ ./perl6 -e 'class A { method succ { say "OH HAI" } }; my $a = A.new; $a++' This is mostly a question of a TODO, but it's also interesting to note |
From @masakOn Fri Oct 03 07:39:35 2008, masak wrote:
Fixed as r31877. Also added four tests to |
@masak - Status changed from 'new' to 'resolved' |
@pmichaud - Status changed from 'resolved' to 'open' |
From @pmichaudReopening ticket because the patch applied isn't a correct implementation. What should happen instead is that we Also, this patch relies on 'succ' and 'pred' being inplace Lastly, I'm not a fan of the exception handling approach being Pm |
From @bacekHello. There is MMD based implementation of 'succ'/'pred' handling. -- |
From @baceksucc_pred.patchcommit a47517ca10be429faabf3383b453c9c93262ab04
Author: Vasily Chekalkin <bacek@haste.optusnet.com.au>
Date: Fri Nov 7 15:55:49 2008 +1100
Revert "[rakudo] prefix/postfix ++ and -- now delegate to succ and pred, respectively"
This reverts commit 48058ab367d5086e98d63edea4ce1a25c784ba25.
Conflicts:
diff --git a/languages/perl6/src/builtins/op.pir b/languages/perl6/src/builtins/op.pir
index e256b6a..92c4eb7 100644
--- a/languages/perl6/src/builtins/op.pir
+++ b/languages/perl6/src/builtins/op.pir
@@ -31,47 +31,28 @@ src/builtins/op.pir - Perl6 builtin operators
.sub 'postfix:++' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:++'(a)
+ inc a
.return ($P0)
.end
.sub 'postfix:--' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:--'(a)
+ dec a
.return ($P0)
.end
.sub 'prefix:++' :multi(_)
.param pmc a
- push_eh do_inc
- $P1 = find_method a, "succ"
- pop_eh
- a.$P1()
- goto done
-
- do_inc:
- pop_eh
inc a
-
- done:
.return (a)
.end
.sub 'prefix:--' :multi(_)
.param pmc a
- push_eh do_dec
- $P1 = find_method a, "pred"
- pop_eh
- a.$P1()
- goto done
-
- do_dec:
- pop_eh
dec a
- done:
.return (a)
.end
diff --git a/languages/perl6/src/classes/Object.pir b/languages/perl6/src/classes/Object.pir
index fea74bc..6a57c0c 100644
--- a/languages/perl6/src/classes/Object.pir
+++ b/languages/perl6/src/classes/Object.pir
@@ -167,6 +167,29 @@ Return a string representation of the object
.end
+=item increment
+
+Override increment in Objects to use 'succ' method.
+
+=cut
+
+.sub '' :method :vtable('increment')
+ self = self.'succ'()
+ .return(self)
+.end
+
+=item decrement
+
+Override decrement in Objects to use 'pred' method.
+
+=cut
+
+.sub '' :method :vtable('decrement')
+ self = self.'pred'()
+ .return(self)
+.end
+
+
=item new()
Create a new object having the same class as the invocant.
|
From @bacekHello. Revised version after pmichaud's comments. -- |
From @baceksucc_pred2.patchdiff --git a/languages/perl6/src/builtins/op.pir b/languages/perl6/src/builtins/op.pir
index e256b6a..92c4eb7 100644
--- a/languages/perl6/src/builtins/op.pir
+++ b/languages/perl6/src/builtins/op.pir
@@ -31,47 +31,28 @@ src/builtins/op.pir - Perl6 builtin operators
.sub 'postfix:++' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:++'(a)
+ inc a
.return ($P0)
.end
.sub 'postfix:--' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:--'(a)
+ dec a
.return ($P0)
.end
.sub 'prefix:++' :multi(_)
.param pmc a
- push_eh do_inc
- $P1 = find_method a, "succ"
- pop_eh
- a.$P1()
- goto done
-
- do_inc:
- pop_eh
inc a
-
- done:
.return (a)
.end
.sub 'prefix:--' :multi(_)
.param pmc a
- push_eh do_dec
- $P1 = find_method a, "pred"
- pop_eh
- a.$P1()
- goto done
-
- do_dec:
- pop_eh
dec a
- done:
.return (a)
.end
diff --git a/languages/perl6/src/classes/Object.pir b/languages/perl6/src/classes/Object.pir
index b2724b8..4b09b56 100644
--- a/languages/perl6/src/classes/Object.pir
+++ b/languages/perl6/src/classes/Object.pir
@@ -145,6 +145,31 @@ Return true if the object is defined.
.end
+=item increment
+
+Override increment in Objects to use 'succ' method.
+
+=cut
+
+.sub '' :method :vtable('increment')
+ $P0 = self.'succ'()
+ self.'infix:='($P0)
+ .return(self)
+.end
+
+=item decrement
+
+Override decrement in Objects to use 'pred' method.
+
+=cut
+
+.sub '' :method :vtable('decrement')
+ $P0 = self.'pred'()
+ self.'infix:='($P0)
+ .return(self)
+.end
+
+
=item new()
Create a new object having the same class as the invocant.
|
@bacek - Status changed from 'new' to 'open' |
From @bacekAnd again... |
From @baceksucc_pred3.patchdiff --git a/languages/perl6/src/builtins/op.pir b/languages/perl6/src/builtins/op.pir
index e256b6a..92c4eb7 100644
--- a/languages/perl6/src/builtins/op.pir
+++ b/languages/perl6/src/builtins/op.pir
@@ -31,47 +31,28 @@ src/builtins/op.pir - Perl6 builtin operators
.sub 'postfix:++' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:++'(a)
+ inc a
.return ($P0)
.end
.sub 'postfix:--' :multi(_)
.param pmc a
$P0 = clone a
- 'prefix:--'(a)
+ dec a
.return ($P0)
.end
.sub 'prefix:++' :multi(_)
.param pmc a
- push_eh do_inc
- $P1 = find_method a, "succ"
- pop_eh
- a.$P1()
- goto done
-
- do_inc:
- pop_eh
inc a
-
- done:
.return (a)
.end
.sub 'prefix:--' :multi(_)
.param pmc a
- push_eh do_dec
- $P1 = find_method a, "pred"
- pop_eh
- a.$P1()
- goto done
-
- do_dec:
- pop_eh
dec a
- done:
.return (a)
.end
diff --git a/languages/perl6/src/classes/Object.pir b/languages/perl6/src/classes/Object.pir
index b2724b8..4b09b56 100644
--- a/languages/perl6/src/classes/Object.pir
+++ b/languages/perl6/src/classes/Object.pir
@@ -145,6 +145,31 @@ Return true if the object is defined.
.end
+=item increment
+
+Override increment in Objects to use 'succ' method.
+
+=cut
+
+.sub '' :method :vtable('increment')
+ $P0 = self.'succ'()
+ 'infix:='(self, $P0)
+ .return(self)
+.end
+
+=item decrement
+
+Override decrement in Objects to use 'pred' method.
+
+=cut
+
+.sub '' :method :vtable('decrement')
+ $P0 = self.'pred'()
+ 'infix:='(self, $P0)
+ .return(self)
+.end
+
+
=item new()
Create a new object having the same class as the invocant.
|
From @moritzOn Fri Nov 07 17:47:48 2008, bacek wrote:
Applied as r32473, thanks. Moritz |
@moritz - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#59596 (status was 'resolved')
Searchable as RT59596$
The text was updated successfully, but these errors were encountered: