diff --git a/src/core/Int.pm b/src/core/Int.pm index 1b463a08a1e..fa1dd2a07ee 100644 --- a/src/core/Int.pm +++ b/src/core/Int.pm @@ -22,6 +22,10 @@ augment class Int does Real { self.Num.ACCEPTS($other); } + method Bridge() { + self.Num; + } + our Bool multi method Bool() { self != 0 ?? Bool::True !! Bool::False } our Int multi method Int() { self } diff --git a/src/core/Num.pm b/src/core/Num.pm index f08fe660dc0..ee6fe2a0132 100644 --- a/src/core/Num.pm +++ b/src/core/Num.pm @@ -8,6 +8,7 @@ augment class Num does Real { $other == self; } } + multi method ACCEPTS(Complex $other) { if self eq 'NaN' { $other.re eq 'NaN' || $other.im eq 'NaN'; @@ -16,6 +17,10 @@ augment class Num does Real { } } + method Bridge() { + self; + } + multi method Bool() { self != 0.0e0 } diff --git a/src/core/Rat.pm b/src/core/Rat.pm index effd1617ad4..605dfb5ee9b 100644 --- a/src/core/Rat.pm +++ b/src/core/Rat.pm @@ -34,6 +34,11 @@ class Rat does Real { multi method perl() { "$!numerator/$!denominator"; } + method Bridge() { + $!denominator == 0 ?? Inf * $!numerator.sign + !! $!numerator.Bridge / $!denominator.Bridge; + } + our Bool multi method Bool() { $!numerator != 0 ?? Bool::True !! Bool::False } multi method Num() { diff --git a/src/core/Real.pm b/src/core/Real.pm index c9a76f5e119..fbdc08d3236 100644 --- a/src/core/Real.pm +++ b/src/core/Real.pm @@ -1,4 +1,8 @@ role Real does Numeric { + method Bridge() { + fail "Bridge must be defined for the Real type " ~ self.WHAT; + } + method abs() { self < 0 ?? -self !! self; }