-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -453,7 +453,7 @@ public abstract static class RightShiftNode extends BignumCoreMethodNode { | |
private final BranchProfile bLessThanZero = BranchProfile.create(); | ||
|
||
@Specialization | ||
public Object leftShift(DynamicObject a, int b) { | ||
public Object rightShift(DynamicObject a, int b) { | ||
if (b >= 0) { | ||
return fixnumOrBignum(Layouts.BIGNUM.getValue(a).shiftRight(b)); | ||
} else { | ||
|
@@ -462,6 +462,25 @@ public Object leftShift(DynamicObject a, int b) { | |
} | ||
} | ||
|
||
@Specialization(guards = "isRubyBignum(b)") | ||
public int rightShift(DynamicObject a, DynamicObject b) { | ||
return 0; | ||
} | ||
|
||
@Specialization(guards = {"!isRubyBignum(b)", "!isInteger(b)"}) | ||
public Object rightShift(VirtualFrame frame, | ||
DynamicObject a, | ||
Object b, | ||
@Cached("new()") SnippetNode snippetNode) { | ||
int bInt = (int) snippetNode.execute(frame, "Rubinius::Type.coerce_to(y, Integer, :to_int)", "y", b); | ||
if (bInt >= 0) { | ||
return fixnumOrBignum(Layouts.BIGNUM.getValue(a).shiftRight(bInt)); | ||
} else { | ||
return fixnumOrBignum(Layouts.BIGNUM.getValue(a).shiftLeft(-bInt)); | ||
} | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
bjfish
Author
Contributor
|
||
} | ||
|
||
|
||
} | ||
|
||
@CoreMethod(names = { "abs", "magnitude" }) | ||
|
1 comment
on commit 5ade4ed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jruby/truffle It is possible to use a recursive execute here, so if
is added, then one can just call recursively with:
return executeRightShift(frame, a, bInt)
.This has the advantage of not repeating guards (and still handle possible extra
@Cached
arguments).In this case it might be overkill as calling
rightShift(a, bInt)
would do the same thing.