From 7e9cfbc91aa57aba1b7d2095f82c854efa93d13f Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Tue, 1 Oct 2019 09:40:34 +0300 Subject: [PATCH] IR: use toLowerCaseAsciiOnly --- .../src/org/jetbrains/kotlin/backend/common/ir/Ir.kt | 4 ++-- .../kotlin/backend/common/phaser/DumperVerifier.kt | 4 ++-- .../jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt | 12 ++++++------ .../kotlin/backend/jvm/lower/VarargLowering.kt | 3 ++- .../kotlin/backend/wasm/ast/WasmAstToWat.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/util/IrUtils.kt | 4 ---- .../org/jetbrains/kotlin/ir/util/RenderIrElement.kt | 5 +++-- 7 files changed, 17 insertions(+), 19 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index f03d9e140e6..5f3ef20e285 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -26,12 +26,12 @@ import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.getPackageFragment import org.jetbrains.kotlin.ir.util.referenceFunction -import org.jetbrains.kotlin.ir.util.toLowerCase import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.util.OperatorNameConventions +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly // This is what Context collects about IR. abstract class Ir(val context: T, val irModule: IrModuleFragment) { @@ -128,7 +128,7 @@ abstract class Symbols(val context: T, private val } val primitiveArrayOfByType = PrimitiveType.values().associate { type -> - val function = getSimpleFunction(Name.identifier(type.name.toLowerCase() + "ArrayOf")) { + val function = getSimpleFunction(Name.identifier(type.name.toLowerCaseAsciiOnly() + "ArrayOf")) { it.extensionReceiverParameter == null && it.dispatchReceiverParameter == null && it.valueParameters.size == 1 && it.valueParameters[0].isVararg } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt index 0fe7c7a5500..6235c1f6f1e 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt @@ -9,11 +9,11 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable -import org.jetbrains.kotlin.ir.util.toLowerCase import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File private val IrElement.elementName: String @@ -53,7 +53,7 @@ fun makeVerifyAction(verifier: (Context, Data) -> Unit): Action< } fun dumpIrElement(actionState: ActionState, data: IrElement, context: Any?): String { - val beforeOrAfterStr = actionState.beforeOrAfter.name.toLowerCase() + val beforeOrAfterStr = actionState.beforeOrAfter.name.toLowerCaseAsciiOnly() var dumpText: String = "" val elementName: String diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt index e916f1cc298..16fec701f11 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt @@ -21,11 +21,11 @@ import org.jetbrains.kotlin.ir.types.isLong import org.jetbrains.kotlin.ir.util.constructors import org.jetbrains.kotlin.ir.util.findDeclaration import org.jetbrains.kotlin.ir.util.kotlinPackageFqn -import org.jetbrains.kotlin.ir.util.toLowerCase import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi2ir.findSingleFunction import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.util.* class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendContext) { @@ -220,7 +220,7 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC val jsArrayIteratorFunction = getInternalFunction("arrayIterator") val jsPrimitiveArrayIteratorFunctions = - PrimitiveType.values().associate { it to getInternalFunction("${it.typeName.asString().toLowerCase()}ArrayIterator") } + PrimitiveType.values().associate { it to getInternalFunction("${it.typeName.asString().toLowerCaseAsciiOnly()}ArrayIterator") } val arrayLiteral = unOp("arrayLiteral") @@ -237,15 +237,15 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC val primitiveToSizeConstructor = PrimitiveType.values().associate { type -> type to (primitiveToTypedArrayMap[type]?.let { - unOp("${it.toLowerCase()}Array") - } ?: getInternalFunction("${type.typeName.asString().toLowerCase()}Array")) + unOp("${it.toLowerCaseAsciiOnly()}Array") + } ?: getInternalFunction("${type.typeName.asString().toLowerCaseAsciiOnly()}Array")) } val primitiveToLiteralConstructor = PrimitiveType.values().associate { type -> type to (primitiveToTypedArrayMap[type]?.let { - unOp("${it.toLowerCase()}ArrayOf") - } ?: getInternalFunction("${type.typeName.asString().toLowerCase()}ArrayOf")) + unOp("${it.toLowerCaseAsciiOnly()}ArrayOf") + } ?: getInternalFunction("${type.typeName.asString().toLowerCaseAsciiOnly()}ArrayOf")) } val arrayConcat = getInternalWithoutPackage("arrayConcat") diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt index eb9650b6905..fb846deed18 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/VarargLowering.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly val varargPhase = makeIrFilePhase( ::VarargLowering, @@ -97,7 +98,7 @@ private class VarargLowering(val context: JvmBackendContext) : FileLoweringPass, companion object { private val PRIMITIVE_ARRAY_OF_NAMES: Set = (PrimitiveType.values().map { type -> type.name } + UnsignedType.values().map { type -> type.typeName.asString() }) - .map { name -> name.toLowerCase() + "ArrayOf" }.toSet() + .map { name -> name.toLowerCaseAsciiOnly() + "ArrayOf" }.toSet() private val IrFunction.isPrimitiveArrayOf: Boolean get() { diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ast/WasmAstToWat.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ast/WasmAstToWat.kt index 564d075641d..0b6ec521ad3 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ast/WasmAstToWat.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ast/WasmAstToWat.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.backend.wasm.ast -import org.jetbrains.kotlin.ir.util.toLowerCase +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly // TODO: Abstract out S-expression part of dumping? @@ -16,7 +16,7 @@ fun WasmImmediate.toWat(): String = when (this) { WasmImmediate.None -> "" is WasmImmediate.DeclarationReference -> " $$name" // SpiderMonkey jsshell won't parse Uppercase letters in literals - is WasmImmediate.LiteralValue<*> -> " $value".toLowerCase() + is WasmImmediate.LiteralValue<*> -> " $value".toLowerCaseAsciiOnly() } fun wasmModuleToWat(module: WasmModule): String = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 723e695bf1d..99809550e2e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -615,7 +615,3 @@ val IrFunctionReference.typeSubstitutionMap: Map val IrFunctionAccessExpression.typeSubstitutionMap: Map get() = getTypeSubstitutionMap(symbol.owner) - -// Perhaps move to some even more general utilities? -fun String.toLowerCase() = toLowerCase(Locale.ROOT) -fun String.toUpperCase() = toUpperCase(Locale.ROOT) \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index bad56ef279f..9c55d255f80 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.addIfNotNull fun IrElement.render() = @@ -206,7 +207,7 @@ class RenderIrElementVisitor : IrElementVisitor { append(' ') if (declaration is IrSimpleFunction) { - append(declaration.modality.toString().toLowerCase()) + append(declaration.modality.toString().toLowerCaseAsciiOnly()) append(' ') } @@ -262,7 +263,7 @@ class RenderIrElementVisitor : IrElementVisitor { buildTrimEnd { append(declaration.visibility) append(' ') - append(declaration.modality.toString().toLowerCase()) + append(declaration.modality.toString().toLowerCaseAsciiOnly()) append(' ') append(declaration.name.asString())