Skip to content

Commit aa35ca3

Browse files
committed
Make as32BitUnsignedValue work on SBigInteger
Signed-off-by: Stefan Marr <git@stefan-marr.de>
1 parent ecf4f83 commit aa35ca3

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/som/primitives/IntegerPrimitives.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,14 @@ public void invoke(final Frame frame, final Interpreter interpreter) {
204204
installInstancePrimitive(new SPrimitive("as32BitUnsignedValue", universe) {
205205
@Override
206206
public void invoke(final Frame frame, final Interpreter interpreter) {
207-
SInteger rcvr = (SInteger) frame.pop();
208-
frame.push(
209-
universe.newInteger(Integer.toUnsignedLong((int) rcvr.getEmbeddedInteger())));
207+
SNumber receiver = (SNumber) frame.pop();
208+
int value;
209+
if (receiver instanceof SInteger rcvr) {
210+
value = (int) rcvr.getEmbeddedInteger();
211+
} else {
212+
value = ((SBigInteger) receiver).getEmbeddedBiginteger().intValue();
213+
}
214+
frame.push(universe.newInteger(Integer.toUnsignedLong(value)));
210215
}
211216
});
212217

0 commit comments

Comments
 (0)