[JS IR] Introduce intrinsics for slicing array-like objects
This commit is contained in:
@@ -242,6 +242,13 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
|
||||
val jsClass = getInternalFunction("jsClassIntrinsic")
|
||||
val arrayLiteral: IrSimpleFunctionSymbol = getInternalFunction("arrayLiteral")
|
||||
|
||||
// The following 3 functions are all lowered into [].slice.call(...), they only differ
|
||||
// in the number of arguments.
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
|
||||
val jsArrayLike2Array = getInternalFunction("jsArrayLike2Array")
|
||||
val jsSliceArrayLikeFromIndex = getInternalFunction("jsSliceArrayLikeFromIndex")
|
||||
val jsSliceArrayLikeFromIndexToIndex = getInternalFunction("jsSliceArrayLikeFromIndexToIndex")
|
||||
|
||||
internal inner class JsReflectionSymbols : ReflectionSymbols {
|
||||
override val createKType = getInternalWithoutPackageOrNull("createKType")
|
||||
override val createDynamicKType = getInternalWithoutPackageOrNull("createDynamicKType")
|
||||
|
||||
+11
@@ -154,6 +154,17 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) {
|
||||
translateCallArguments(call, context).single()
|
||||
}
|
||||
|
||||
for (intrinsic in arrayOf(
|
||||
intrinsics.jsArrayLike2Array,
|
||||
intrinsics.jsSliceArrayLikeFromIndex,
|
||||
intrinsics.jsSliceArrayLikeFromIndexToIndex
|
||||
)) {
|
||||
add(intrinsic) { call, context ->
|
||||
val args = translateCallArguments(call, context)
|
||||
JsInvocation(JsNameRef(Namer.CALL_FUNCTION, JsNameRef(Namer.SLICE_FUNCTION, JsArrayLiteral())), args)
|
||||
}
|
||||
}
|
||||
|
||||
add(intrinsics.jsArraySlice) { call, context ->
|
||||
JsInvocation(JsNameRef(Namer.SLICE_FUNCTION, translateCallArguments(call, context).single()))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user