[WASM] Fast load string literals from data section
This commit is contained in:
@@ -130,15 +130,14 @@ public class String internal @WasmPrimitiveConstructor constructor(
|
||||
internal inline fun WasmCharArray.createString(): String =
|
||||
String(null, this.len(), this)
|
||||
|
||||
internal fun stringLiteral(poolId: Int, startAddress: Int, length: Int, hashCode: Int): String {
|
||||
internal fun stringLiteral(poolId: Int, startAddress: Int, length: Int): String {
|
||||
val cached = stringPool[poolId]
|
||||
if (cached !== null) {
|
||||
return cached
|
||||
}
|
||||
val chars = WasmCharArray(length)
|
||||
unsafeRawMemoryToWasmCharArray(startAddress, 0, length, chars)
|
||||
|
||||
val chars = array_new_data0<WasmCharArray>(startAddress, length)
|
||||
val newString = String(null, length, chars)
|
||||
newString._hashCode = hashCode
|
||||
stringPool[poolId] = newString
|
||||
return newString
|
||||
}
|
||||
@@ -28,8 +28,8 @@ internal fun getTypeInfoTypeDataByPtr(typeInfoPtr: Int): TypeInfoData {
|
||||
val simpleNameLength = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_LENGTH_OFFSET)
|
||||
val simpleNameId = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_ID_OFFSET)
|
||||
val simpleNamePtr = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET)
|
||||
val packageName = stringLiteral(fqNameId, fqNamePtr, fqNameLength, 0)
|
||||
val simpleName = stringLiteral(simpleNameId, simpleNamePtr, simpleNameLength, 0)
|
||||
val packageName = stringLiteral(fqNameId, fqNamePtr, fqNameLength)
|
||||
val simpleName = stringLiteral(simpleNameId, simpleNamePtr, simpleNameLength)
|
||||
return TypeInfoData(typeInfoPtr, isInterface = false, packageName, simpleName)
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,9 @@ internal fun <To> wasm_ref_test(a: Any?): Boolean =
|
||||
internal fun <T> wasm_array_copy(destination: T, destinationIndex: Int, source: T, sourceIndex: Int, length: Int): Unit =
|
||||
implementedAsIntrinsic
|
||||
|
||||
internal fun <T> array_new_data0(address: Int, length: Int): WasmCharArray =
|
||||
implementedAsIntrinsic
|
||||
|
||||
@WasmOp(WasmOp.I32_EQ)
|
||||
public external fun wasm_i32_eq(a: Int, b: Int): Boolean
|
||||
|
||||
|
||||
Reference in New Issue
Block a user