IR util: IrExpression.isSafeToUseWithoutCopying

This commit is contained in:
Jinseong Jeon
2020-08-04 23:06:56 -07:00
committed by Mikhail Glukhikh
parent 7ef1c74bbf
commit b57794d96e
3 changed files with 8 additions and 18 deletions
@@ -192,13 +192,6 @@ class CallAndReferenceGenerator(
} }
} }
// TODO: refactor/reuse the same logic in ReflectionReferencesGenerator
private fun IrExpression.isSafeToUseWithoutCopying() =
this is IrGetObjectValue ||
this is IrGetEnumValue ||
this is IrConst<*> ||
this is IrGetValue && symbol.isBound && symbol.owner.isImmutable
private fun createAdapterFunction( private fun createAdapterFunction(
callableReferenceAccess: FirCallableReferenceAccess, callableReferenceAccess: FirCallableReferenceAccess,
startOffset: Int, startOffset: Int,
@@ -33,10 +33,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.util.isImmutable import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.referenceClassifier
import org.jetbrains.kotlin.ir.util.referenceFunction
import org.jetbrains.kotlin.ir.util.withScope
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.endOffset
@@ -235,12 +232,6 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
return irCall return irCall
} }
private fun IrExpression.isSafeToUseWithoutCopying() =
this is IrGetObjectValue ||
this is IrGetEnumValue ||
this is IrConst<*> ||
this is IrGetValue && symbol.isBound && symbol.owner.isImmutable
private fun putAdaptedValueArguments( private fun putAdaptedValueArguments(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
@@ -608,4 +608,10 @@ val IrDeclaration.isFileClass: Boolean
get() = origin == IrDeclarationOrigin.FILE_CLASS || origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS get() = origin == IrDeclarationOrigin.FILE_CLASS || origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS
val IrValueDeclaration.isImmutable: Boolean val IrValueDeclaration.isImmutable: Boolean
get() = this is IrValueParameter || this is IrVariable && !isVar get() = this is IrValueParameter || this is IrVariable && !isVar
fun IrExpression.isSafeToUseWithoutCopying() =
this is IrGetObjectValue ||
this is IrGetEnumValue ||
this is IrConst<*> ||
this is IrGetValue && symbol.isBound && symbol.owner.isImmutable