Byte and Short literals.
This commit is contained in:
committed by
Dmitry Petrov
parent
66f6ce7f26
commit
fed09f059b
+27
-9
@@ -193,6 +193,10 @@ class StatementGenerator(
|
|||||||
IrConstImpl.float(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
IrConstImpl.float(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
||||||
is CharValue ->
|
is CharValue ->
|
||||||
IrConstImpl.char(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
IrConstImpl.char(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
||||||
|
is ByteValue ->
|
||||||
|
IrConstImpl.byte(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
||||||
|
is ShortValue ->
|
||||||
|
IrConstImpl.short(expression.startOffset, expression.endOffset, constantType, constantValue.value)
|
||||||
else ->
|
else ->
|
||||||
TODO("handle other literal types: ${constantValue.type}")
|
TODO("handle other literal types: ${constantValue.type}")
|
||||||
}
|
}
|
||||||
@@ -224,23 +228,37 @@ class StatementGenerator(
|
|||||||
entry.expression!!.genExpr()
|
entry.expression!!.genExpr()
|
||||||
|
|
||||||
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Nothing?): IrExpression {
|
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Nothing?): IrExpression {
|
||||||
val resolvedCall = getResolvedCall(expression) ?:
|
val resolvedCall = getResolvedCall(expression)
|
||||||
return ErrorExpressionGenerator(this).generateErrorExpression(expression)
|
|
||||||
|
|
||||||
if (resolvedCall is VariableAsFunctionResolvedCall) {
|
if (resolvedCall != null) {
|
||||||
val variableCall = pregenerateCall(resolvedCall.variableCall)
|
if (resolvedCall is VariableAsFunctionResolvedCall) {
|
||||||
return CallGenerator(this).generateCall(expression, variableCall, IrOperator.VARIABLE_AS_FUNCTION)
|
val variableCall = pregenerateCall(resolvedCall.variableCall)
|
||||||
|
return CallGenerator(this).generateCall(expression, variableCall, IrOperator.VARIABLE_AS_FUNCTION)
|
||||||
|
}
|
||||||
|
|
||||||
|
val descriptor = resolvedCall.resultingDescriptor
|
||||||
|
|
||||||
|
return generateExpressionForReferencedDescriptor(descriptor, expression, resolvedCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
val descriptor = resolvedCall.resultingDescriptor
|
val referenceTarget = get(BindingContext.REFERENCE_TARGET, expression)
|
||||||
|
if (referenceTarget != null) {
|
||||||
|
return generateExpressionForReferencedDescriptor(referenceTarget, expression, null)
|
||||||
|
}
|
||||||
|
|
||||||
return generateExpressionForReferencedDescriptor(descriptor, expression, resolvedCall)
|
return ErrorExpressionGenerator(this).generateErrorExpression(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateExpressionForReferencedDescriptor(descriptor: DeclarationDescriptor, expression: KtExpression, resolvedCall: ResolvedCall<*>): IrExpression =
|
private fun generateExpressionForReferencedDescriptor(
|
||||||
|
descriptor: DeclarationDescriptor,
|
||||||
|
expression: KtExpression,
|
||||||
|
resolvedCall: ResolvedCall<*>?
|
||||||
|
): IrExpression =
|
||||||
when (descriptor) {
|
when (descriptor) {
|
||||||
is FakeCallableDescriptorForObject ->
|
is FakeCallableDescriptorForObject ->
|
||||||
generateExpressionForReferencedDescriptor(descriptor.getReferencedDescriptor(), expression, resolvedCall)
|
generateExpressionForReferencedDescriptor(descriptor.getReferencedDescriptor(), expression, resolvedCall)
|
||||||
|
is TypeAliasDescriptor ->
|
||||||
|
generateExpressionForReferencedDescriptor(descriptor.classDescriptor!!, expression, null)
|
||||||
is ClassDescriptor -> {
|
is ClassDescriptor -> {
|
||||||
val classValueType = descriptor.classValueType!!
|
val classValueType = descriptor.classValueType!!
|
||||||
when {
|
when {
|
||||||
@@ -255,7 +273,7 @@ class StatementGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is PropertyDescriptor -> {
|
is PropertyDescriptor -> {
|
||||||
CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall))
|
CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall!!))
|
||||||
}
|
}
|
||||||
is VariableDescriptor ->
|
is VariableDescriptor ->
|
||||||
CallGenerator(this).generateGetVariable(expression.startOffset, expression.endOffset, descriptor)
|
CallGenerator(this).generateGetVariable(expression.startOffset, expression.endOffset, descriptor)
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ sealed class IrConstKind<T>(val asString: kotlin.String) {
|
|||||||
object Null : IrConstKind<Nothing?>("Null")
|
object Null : IrConstKind<Nothing?>("Null")
|
||||||
object Boolean : IrConstKind<kotlin.Boolean>("Boolean")
|
object Boolean : IrConstKind<kotlin.Boolean>("Boolean")
|
||||||
object Char : IrConstKind<kotlin.Char>("Char")
|
object Char : IrConstKind<kotlin.Char>("Char")
|
||||||
|
object Byte : IrConstKind<kotlin.Byte>("Byte")
|
||||||
|
object Short : IrConstKind<kotlin.Short>("Short")
|
||||||
object Int : IrConstKind<kotlin.Int>("Int")
|
object Int : IrConstKind<kotlin.Int>("Int")
|
||||||
object Long : IrConstKind<kotlin.Long>("Long")
|
object Long : IrConstKind<kotlin.Long>("Long")
|
||||||
object String : IrConstKind<kotlin.String>("String")
|
object String : IrConstKind<kotlin.String>("String")
|
||||||
@@ -86,6 +88,12 @@ class IrConstImpl<T> (
|
|||||||
|
|
||||||
fun char(startOffset: Int, endOffset: Int, type: KotlinType, value: Char): IrExpression =
|
fun char(startOffset: Int, endOffset: Int, type: KotlinType, value: Char): IrExpression =
|
||||||
IrConstImpl(startOffset, endOffset, type, IrConstKind.Char, value)
|
IrConstImpl(startOffset, endOffset, type, IrConstKind.Char, value)
|
||||||
|
|
||||||
|
fun byte(startOffset: Int, endOffset: Int, type: KotlinType, value: Byte): IrExpression =
|
||||||
|
IrConstImpl(startOffset, endOffset, type, IrConstKind.Byte, value)
|
||||||
|
|
||||||
|
fun short(startOffset: Int, endOffset: Int, type: KotlinType, value: Short): IrExpression =
|
||||||
|
IrConstImpl(startOffset, endOffset, type, IrConstKind.Short, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user