Move IrSuspendableExpression and SuspensionPoint from Kotlin/Native to common part

This commit is contained in:
Roman Artemev
2018-06-20 15:06:00 +03:00
committed by Roman Artemev
parent c312fddb45
commit c0f53f3a4d
6 changed files with 95 additions and 0 deletions
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.declarations.IrVariable
interface IrSuspensionPoint : IrExpression {
var suspensionPointIdParameter: IrVariable
var result: IrExpression
var resumeResult: IrExpression
}
interface IrSuspendableExpression : IrExpression {
var suspensionPointId: IrExpression
var result: IrExpression
}
@@ -0,0 +1,56 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrSuspendableExpression
import org.jetbrains.kotlin.ir.expressions.IrSuspensionPoint
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.types.KotlinType
class IrSuspensionPointImpl(
startOffset: Int, endOffset: Int, type: KotlinType,
override var suspensionPointIdParameter: IrVariable,
override var result: IrExpression,
override var resumeResult: IrExpression
) : IrExpressionBase(startOffset, endOffset, type), IrSuspensionPoint {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitSuspensionPoint(this, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
suspensionPointIdParameter.accept(visitor, data)
result.accept(visitor, data)
resumeResult.accept(visitor, data)
}
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
suspensionPointIdParameter = suspensionPointIdParameter.transform(transformer, data) as IrVariable
result = result.transform(transformer, data)
resumeResult = resumeResult.transform(transformer, data)
}
}
class IrSuspendableExpressionImpl(
startOffset: Int, endOffset: Int, type: KotlinType,
override var suspensionPointId: IrExpression, override var result: IrExpression
) : IrExpressionBase(startOffset, endOffset, type), IrSuspendableExpression {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitSuspendableExpression(this, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
suspensionPointId.accept(visitor, data)
result.accept(visitor, data)
}
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
suspensionPointId = suspensionPointId.transform(transformer, data)
result = result.transform(transformer, data)
}
}
@@ -58,6 +58,9 @@ interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
override fun visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data)
override fun visitSyntheticBody(body: IrSyntheticBody, data: D) = visitBody(body, data)
override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D) = visitExpression(expression, data)
override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = visitExpression(expression, data)
override fun visitExpression(expression: IrExpression, data: D): IrExpression =
expression.also { it.transformChildren(this, data) }
@@ -99,6 +99,13 @@ abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?> {
open fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
override final fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = visitSyntheticBody(body)
open fun visitSuspendableExpression(expression: IrSuspendableExpression) = visitExpression(expression)
override final fun visitSuspendableExpression(expression: IrSuspendableExpression, data: Nothing?) =
visitSuspendableExpression(expression)
open fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression)
override final fun visitSuspensionPoint(expression: IrSuspensionPoint, data: Nothing?) = visitSuspensionPoint(expression)
open fun visitExpression(expression: IrExpression): IrExpression = expression.transformChildren()
override final fun visitExpression(expression: IrExpression, data: Nothing?): IrExpression = visitExpression(expression)
@@ -47,6 +47,9 @@ interface IrElementVisitor<out R, in D> {
fun visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data)
fun visitSyntheticBody(body: IrSyntheticBody, data: D) = visitBody(body, data)
fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D) = visitExpression(expression, data)
fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = visitExpression(expression, data)
fun visitExpression(expression: IrExpression, data: D) = visitElement(expression, data)
fun <T> visitConst(expression: IrConst<T>, data: D) = visitExpression(expression, data)
fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, data)
@@ -92,6 +92,12 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
override fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = visitSyntheticBody(body)
fun visitSuspendableExpression(expression: IrSuspendableExpression) = visitExpression(expression)
override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: Nothing?) = visitSuspendableExpression(expression)
fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression)
override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: Nothing?) = visitSuspensionPoint(expression)
fun visitExpression(expression: IrExpression) = visitElement(expression)
override fun visitExpression(expression: IrExpression, data: Nothing?) = visitExpression(expression)