Move IrSuspendableExpression and SuspensionPoint from Kotlin/Native to common part
This commit is contained in:
committed by
Roman Artemev
parent
c312fddb45
commit
c0f53f3a4d
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user