IR: use toLowerCaseAsciiOnly

This commit is contained in:
Georgy Bronnikov
2019-10-01 09:40:34 +03:00
parent a68090db5a
commit 7e9cfbc91a
7 changed files with 17 additions and 19 deletions
@@ -26,12 +26,12 @@ import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
import org.jetbrains.kotlin.ir.util.getPackageFragment import org.jetbrains.kotlin.ir.util.getPackageFragment
import org.jetbrains.kotlin.ir.util.referenceFunction 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.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.resolve.calls.components.isVararg
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.util.OperatorNameConventions
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
// This is what Context collects about IR. // This is what Context collects about IR.
abstract class Ir<out T : CommonBackendContext>(val context: T, val irModule: IrModuleFragment) { abstract class Ir<out T : CommonBackendContext>(val context: T, val irModule: IrModuleFragment) {
@@ -128,7 +128,7 @@ abstract class Symbols<out T : CommonBackendContext>(val context: T, private val
} }
val primitiveArrayOfByType = PrimitiveType.values().associate { type -> 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.extensionReceiverParameter == null && it.dispatchReceiverParameter == null && it.valueParameters.size == 1 &&
it.valueParameters[0].isVararg it.valueParameters[0].isVararg
} }
@@ -9,11 +9,11 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable 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.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import java.io.File import java.io.File
private val IrElement.elementName: String private val IrElement.elementName: String
@@ -53,7 +53,7 @@ fun <Data, Context> makeVerifyAction(verifier: (Context, Data) -> Unit): Action<
} }
fun dumpIrElement(actionState: ActionState, data: IrElement, context: Any?): String { fun dumpIrElement(actionState: ActionState, data: IrElement, context: Any?): String {
val beforeOrAfterStr = actionState.beforeOrAfter.name.toLowerCase() val beforeOrAfterStr = actionState.beforeOrAfter.name.toLowerCaseAsciiOnly()
var dumpText: String = "" var dumpText: String = ""
val elementName: String val elementName: String
@@ -21,11 +21,11 @@ import org.jetbrains.kotlin.ir.types.isLong
import org.jetbrains.kotlin.ir.util.constructors import org.jetbrains.kotlin.ir.util.constructors
import org.jetbrains.kotlin.ir.util.findDeclaration import org.jetbrains.kotlin.ir.util.findDeclaration
import org.jetbrains.kotlin.ir.util.kotlinPackageFqn 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.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi2ir.findSingleFunction import org.jetbrains.kotlin.psi2ir.findSingleFunction
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import java.util.* import java.util.*
class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendContext) { 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 jsArrayIteratorFunction = getInternalFunction("arrayIterator")
val jsPrimitiveArrayIteratorFunctions = 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") val arrayLiteral = unOp("arrayLiteral")
@@ -237,15 +237,15 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
val primitiveToSizeConstructor = val primitiveToSizeConstructor =
PrimitiveType.values().associate { type -> PrimitiveType.values().associate { type ->
type to (primitiveToTypedArrayMap[type]?.let { type to (primitiveToTypedArrayMap[type]?.let {
unOp("${it.toLowerCase()}Array") unOp("${it.toLowerCaseAsciiOnly()}Array")
} ?: getInternalFunction("${type.typeName.asString().toLowerCase()}Array")) } ?: getInternalFunction("${type.typeName.asString().toLowerCaseAsciiOnly()}Array"))
} }
val primitiveToLiteralConstructor = val primitiveToLiteralConstructor =
PrimitiveType.values().associate { type -> PrimitiveType.values().associate { type ->
type to (primitiveToTypedArrayMap[type]?.let { type to (primitiveToTypedArrayMap[type]?.let {
unOp("${it.toLowerCase()}ArrayOf") unOp("${it.toLowerCaseAsciiOnly()}ArrayOf")
} ?: getInternalFunction("${type.typeName.asString().toLowerCase()}ArrayOf")) } ?: getInternalFunction("${type.typeName.asString().toLowerCaseAsciiOnly()}ArrayOf"))
} }
val arrayConcat = getInternalWithoutPackage("arrayConcat") val arrayConcat = getInternalWithoutPackage("arrayConcat")
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
val varargPhase = makeIrFilePhase( val varargPhase = makeIrFilePhase(
::VarargLowering, ::VarargLowering,
@@ -97,7 +98,7 @@ private class VarargLowering(val context: JvmBackendContext) : FileLoweringPass,
companion object { companion object {
private val PRIMITIVE_ARRAY_OF_NAMES: Set<String> = private val PRIMITIVE_ARRAY_OF_NAMES: Set<String> =
(PrimitiveType.values().map { type -> type.name } + UnsignedType.values().map { type -> type.typeName.asString() }) (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 private val IrFunction.isPrimitiveArrayOf: Boolean
get() { get() {
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.backend.wasm.ast 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? // TODO: Abstract out S-expression part of dumping?
@@ -16,7 +16,7 @@ fun WasmImmediate.toWat(): String = when (this) {
WasmImmediate.None -> "" WasmImmediate.None -> ""
is WasmImmediate.DeclarationReference -> " $$name" is WasmImmediate.DeclarationReference -> " $$name"
// SpiderMonkey jsshell won't parse Uppercase letters in literals // SpiderMonkey jsshell won't parse Uppercase letters in literals
is WasmImmediate.LiteralValue<*> -> " $value".toLowerCase() is WasmImmediate.LiteralValue<*> -> " $value".toLowerCaseAsciiOnly()
} }
fun wasmModuleToWat(module: WasmModule): String = fun wasmModuleToWat(module: WasmModule): String =
@@ -615,7 +615,3 @@ val IrFunctionReference.typeSubstitutionMap: Map<IrTypeParameterSymbol, IrType>
val IrFunctionAccessExpression.typeSubstitutionMap: Map<IrTypeParameterSymbol, IrType> val IrFunctionAccessExpression.typeSubstitutionMap: Map<IrTypeParameterSymbol, IrType>
get() = getTypeSubstitutionMap(symbol.owner) get() = getTypeSubstitutionMap(symbol.owner)
// Perhaps move to some even more general utilities?
fun String.toLowerCase() = toLowerCase(Locale.ROOT)
fun String.toUpperCase() = toUpperCase(Locale.ROOT)
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
fun IrElement.render() = fun IrElement.render() =
@@ -206,7 +207,7 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
append(' ') append(' ')
if (declaration is IrSimpleFunction) { if (declaration is IrSimpleFunction) {
append(declaration.modality.toString().toLowerCase()) append(declaration.modality.toString().toLowerCaseAsciiOnly())
append(' ') append(' ')
} }
@@ -262,7 +263,7 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
buildTrimEnd { buildTrimEnd {
append(declaration.visibility) append(declaration.visibility)
append(' ') append(' ')
append(declaration.modality.toString().toLowerCase()) append(declaration.modality.toString().toLowerCaseAsciiOnly())
append(' ') append(' ')
append(declaration.name.asString()) append(declaration.name.asString())