Skip to content

Commit 1c51911

Browse files
committed
[GR-49957] Correction of Number.isFinite/is(Safe)Integer(long).
PullRequest: js/2977
2 parents bbaa6bd + 4c11d81 commit 1c51911

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
6+
*/
7+
8+
load("assert.js");
9+
10+
var minValue = java.lang.Long.MIN_VALUE;
11+
var maxValue = java.lang.Long.MAX_VALUE;
12+
var someValue = java.lang.Long.parseLong("12345678901");
13+
14+
assertTrue(Number.isFinite(minValue));
15+
assertTrue(Number.isFinite(maxValue));
16+
assertTrue(Number.isFinite(someValue));
17+
18+
assertTrue(Number.isInteger(minValue));
19+
assertTrue(Number.isInteger(maxValue));
20+
assertTrue(Number.isInteger(someValue));
21+
22+
assertFalse(Number.isSafeInteger(minValue));
23+
assertFalse(Number.isSafeInteger(maxValue));
24+
assertTrue(Number.isSafeInteger(someValue));

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/builtins/NumberFunctionBuiltins.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -134,12 +134,17 @@ protected boolean isFinite(@SuppressWarnings("unused") int arg) {
134134
return true;
135135
}
136136

137+
@Specialization
138+
protected boolean isFinite(@SuppressWarnings("unused") long arg) {
139+
return true;
140+
}
141+
137142
@Specialization
138143
protected boolean isFinite(double arg) {
139144
return Double.isFinite(arg);
140145
}
141146

142-
@Specialization(guards = "!isNumber(arg)")
147+
@Specialization(guards = {"!isNumber(arg)", "!isNumberLong(arg)"})
143148
protected boolean isFinite(@SuppressWarnings("unused") Object arg) {
144149
return false;
145150
}
@@ -157,6 +162,12 @@ protected static boolean isInteger(int arg) {
157162
return true;
158163
}
159164

165+
@SuppressWarnings("unused")
166+
@Specialization
167+
protected static boolean isInteger(long arg) {
168+
return true;
169+
}
170+
160171
@SuppressWarnings("unused")
161172
@Specialization
162173
protected static boolean isInteger(SafeInteger arg) {
@@ -169,7 +180,7 @@ protected static boolean isInteger(double arg) {
169180
}
170181

171182
@SuppressWarnings("unused")
172-
@Specialization(guards = "!isNumber(arg)")
183+
@Specialization(guards = {"!isNumber(arg)", "!isNumberLong(arg)"})
173184
protected static boolean isInteger(Object arg) {
174185
return false;
175186
}
@@ -186,6 +197,16 @@ protected boolean isSafeIntegerInt(@SuppressWarnings("unused") int arg) {
186197
return true;
187198
}
188199

200+
@Specialization
201+
protected boolean isSafeIntegerLong(long arg) {
202+
return JSRuntime.isSafeInteger(arg);
203+
}
204+
205+
@Specialization
206+
protected boolean isSafeIntegerSafeInteger(@SuppressWarnings("unused") SafeInteger arg) {
207+
return true;
208+
}
209+
189210
@Specialization
190211
protected boolean isSafeIntegerDouble(double arg) {
191212
if (!JSRuntime.isIntegralNumber(arg)) {
@@ -195,7 +216,7 @@ protected boolean isSafeIntegerDouble(double arg) {
195216
return JSRuntime.MIN_SAFE_INTEGER <= l && l <= JSRuntime.MAX_SAFE_INTEGER;
196217
}
197218

198-
@Specialization(guards = "!isNumber(arg)")
219+
@Specialization(guards = {"!isNumber(arg)", "!isNumberLong(arg)"})
199220
protected boolean isSafeIntegerNotANumber(@SuppressWarnings("unused") Object arg) {
200221
return false;
201222
}

0 commit comments

Comments
 (0)