Skip to content

Commit 25486a2

Browse files
committed
add TypedArray.prototype.at
1 parent 120726c commit 25486a2

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ protected Object createNode(JSContext context, JSBuiltin builtin, boolean constr
333333
return JSArrayFlatNodeGen.create(context, builtin, args().withThis().fixedArgs(3).createArgumentNodes(context));
334334

335335
case at:
336-
return JSArrayAtNodeGen.create(context, builtin, args().withThis().fixedArgs(1).createArgumentNodes(context));
336+
return JSArrayAtNodeGen.create(context, builtin, false, args().withThis().fixedArgs(1).createArgumentNodes(context));
337337
}
338338
return null;
339339
}
@@ -3209,13 +3209,16 @@ protected DynamicObject doNotJSObject(VirtualFrame frame, Object thisObj,
32093209
}
32103210

32113211
public abstract static class JSArrayAtNode extends JSArrayOperationWithToInt {
3212-
public JSArrayAtNode(JSContext context, JSBuiltin builtin) {
3213-
super(context, builtin, false);
3212+
public JSArrayAtNode(JSContext context, JSBuiltin builtin, boolean isTypedArrayImplementation) {
3213+
super(context, builtin, isTypedArrayImplementation);
32143214
}
32153215

32163216
@Specialization
32173217
protected Object at(Object thisObj, Object index) {
32183218
final Object o = toObject(thisObj);
3219+
if (isTypedArrayImplementation) {
3220+
validateTypedArray(o);
3221+
}
32193222
final long length = getLength(o);
32203223
long relativeIndex = toIntegerAsLong(index);
32213224
long k;

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltins.CreateArrayIteratorNode;
6262
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltins.JSArrayOperation;
6363
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltins.JSArrayOperationWithToInt;
64+
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltinsFactory.JSArrayAtNodeGen;
6465
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltinsFactory.JSArrayCopyWithinNodeGen;
6566
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltinsFactory.JSArrayEveryNodeGen;
6667
import com.oracle.truffle.js.builtins.ArrayPrototypeBuiltinsFactory.JSArrayFillNodeGen;
@@ -95,6 +96,7 @@
9596
import com.oracle.truffle.js.runtime.BigInt;
9697
import com.oracle.truffle.js.runtime.Boundaries;
9798
import com.oracle.truffle.js.runtime.Errors;
99+
import com.oracle.truffle.js.runtime.JSConfig;
98100
import com.oracle.truffle.js.runtime.JSContext;
99101
import com.oracle.truffle.js.runtime.JSRuntime;
100102
import com.oracle.truffle.js.runtime.array.ScriptArray;
@@ -145,8 +147,11 @@ public enum TypedArrayPrototype implements BuiltinEnum<TypedArrayPrototype> {
145147
values(0),
146148
entries(0),
147149

148-
// ES7
149-
includes(1);
150+
// ES2016
151+
includes(1),
152+
153+
// ES2022
154+
at(1);
150155

151156
private final int length;
152157

@@ -162,7 +167,9 @@ public int getLength() {
162167
@Override
163168
public int getECMAScriptVersion() {
164169
if (this == includes) {
165-
return 7;
170+
return JSConfig.ECMAScript2016;
171+
} else if (this == at) {
172+
return JSConfig.ECMAScript2022;
166173
}
167174
return BuiltinEnum.super.getECMAScriptVersion();
168175
}
@@ -221,6 +228,8 @@ protected Object createNode(JSContext context, JSBuiltin builtin, boolean constr
221228

222229
case includes:
223230
return JSArrayIncludesNodeGen.create(context, builtin, true, args().withThis().fixedArgs(2).createArgumentNodes(context));
231+
case at:
232+
return JSArrayAtNodeGen.create(context, builtin, true, args().withThis().fixedArgs(1).createArgumentNodes(context));
224233
}
225234
return null;
226235
}

0 commit comments

Comments
 (0)