IrTypes: basic built-in types
This commit is contained in:
+22
-10
@@ -80,7 +80,12 @@ class StatementGenerator(
|
||||
genStmt().assertCast()
|
||||
|
||||
override fun visitExpression(expression: KtExpression, data: Nothing?): IrStatement =
|
||||
createDummyExpression(expression, expression::class.java.simpleName)
|
||||
IrErrorExpressionImpl(
|
||||
expression.startOffset,
|
||||
expression.endOffset,
|
||||
context.irBuiltIns.nothingType,
|
||||
expression::class.java.simpleName
|
||||
)
|
||||
|
||||
override fun visitProperty(property: KtProperty, data: Nothing?): IrStatement {
|
||||
val variableDescriptor = getOrFail(BindingContext.VARIABLE, property)
|
||||
@@ -110,7 +115,7 @@ class StatementGenerator(
|
||||
override fun visitDestructuringDeclaration(multiDeclaration: KtDestructuringDeclaration, data: Nothing?): IrStatement {
|
||||
val irBlock = IrCompositeImpl(
|
||||
multiDeclaration.startOffset, multiDeclaration.endOffset,
|
||||
context.builtIns.unitType, IrStatementOrigin.DESTRUCTURING_DECLARATION
|
||||
context.irBuiltIns.unitType, IrStatementOrigin.DESTRUCTURING_DECLARATION
|
||||
)
|
||||
val ktInitializer = multiDeclaration.initializer!!
|
||||
val containerValue = scope.createTemporaryVariableInBlock(ktInitializer.genExpr(), irBlock, "container")
|
||||
@@ -166,11 +171,11 @@ class StatementGenerator(
|
||||
override fun visitReturnExpression(expression: KtReturnExpression, data: Nothing?): IrStatement {
|
||||
val returnTarget = getReturnExpressionTarget(expression)
|
||||
val irReturnedExpression = expression.returnedExpression?.genExpr() ?: IrGetObjectValueImpl(
|
||||
expression.startOffset, expression.endOffset, context.builtIns.unitType,
|
||||
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceClass(context.builtIns.unit)
|
||||
)
|
||||
return IrReturnImpl(
|
||||
expression.startOffset, expression.endOffset, context.builtIns.nothingType,
|
||||
expression.startOffset, expression.endOffset, context.irBuiltIns.nothingType,
|
||||
context.symbolTable.referenceFunction(returnTarget), irReturnedExpression
|
||||
)
|
||||
}
|
||||
@@ -202,7 +207,7 @@ class StatementGenerator(
|
||||
return IrThrowImpl(
|
||||
expression.startOffset,
|
||||
expression.endOffset,
|
||||
context.builtIns.nothingType,
|
||||
context.irBuiltIns.nothingType,
|
||||
expression.thrownExpression!!.genExpr()
|
||||
)
|
||||
}
|
||||
@@ -223,7 +228,7 @@ class StatementGenerator(
|
||||
|
||||
override fun visitStringTemplateExpression(expression: KtStringTemplateExpression, data: Nothing?): IrStatement {
|
||||
val entries = expression.entries
|
||||
val resultType = getInferredTypeWithImplicitCastsOrFail(expression)
|
||||
val resultType = getInferredTypeWithImplicitCastsOrFail(expression).toIrType()
|
||||
return when (entries.size) {
|
||||
1 -> {
|
||||
val irArg = entries[0].genExpr()
|
||||
@@ -240,10 +245,10 @@ class StatementGenerator(
|
||||
}
|
||||
|
||||
override fun visitLiteralStringTemplateEntry(entry: KtLiteralStringTemplateEntry, data: Nothing?): IrStatement =
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.builtIns.stringType, entry.text)
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.text)
|
||||
|
||||
override fun visitEscapeStringTemplateEntry(entry: KtEscapeStringTemplateEntry, data: Nothing?): IrStatement =
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.builtIns.stringType, entry.unescapedValue)
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.unescapedValue)
|
||||
|
||||
override fun visitStringTemplateEntryWithExpression(entry: KtStringTemplateEntryWithExpression, data: Nothing?): IrStatement =
|
||||
entry.expression!!.genExpr()
|
||||
@@ -309,15 +314,22 @@ class StatementGenerator(
|
||||
override fun visitThisExpression(expression: KtThisExpression, data: Nothing?): IrExpression {
|
||||
val referenceTarget = getOrFail(BindingContext.REFERENCE_TARGET, expression.instanceReference) { "No reference target for this" }
|
||||
return when (referenceTarget) {
|
||||
is ClassDescriptor ->
|
||||
is ClassDescriptor -> {
|
||||
val thisAsReceiverParameter = referenceTarget.thisAsReceiverParameter
|
||||
val thisType = thisAsReceiverParameter.type.toIrType()
|
||||
IrGetValueImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
context.symbolTable.referenceValueParameter(referenceTarget.thisAsReceiverParameter)
|
||||
thisType,
|
||||
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
|
||||
)
|
||||
}
|
||||
|
||||
is CallableDescriptor -> {
|
||||
val extensionReceiver = referenceTarget.extensionReceiverParameter ?: TODO("No extension receiver: $referenceTarget")
|
||||
val extensionReceiverType = extensionReceiver.type.toIrType()
|
||||
IrGetValueImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
extensionReceiverType,
|
||||
context.symbolTable.referenceValueParameter(extensionReceiver)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user