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 visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data)
|
||||||
override fun visitSyntheticBody(body: IrSyntheticBody, 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 =
|
override fun visitExpression(expression: IrExpression, data: D): IrExpression =
|
||||||
expression.also { it.transformChildren(this, data) }
|
expression.also { it.transformChildren(this, data) }
|
||||||
|
|
||||||
|
|||||||
@@ -99,6 +99,13 @@ abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?> {
|
|||||||
open fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
|
open fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
|
||||||
override final fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = visitSyntheticBody(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()
|
open fun visitExpression(expression: IrExpression): IrExpression = expression.transformChildren()
|
||||||
override final fun visitExpression(expression: IrExpression, data: Nothing?): IrExpression = visitExpression(expression)
|
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 visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data)
|
||||||
fun visitSyntheticBody(body: IrSyntheticBody, 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 visitExpression(expression: IrExpression, data: D) = visitElement(expression, data)
|
||||||
fun <T> visitConst(expression: IrConst<T>, data: D) = visitExpression(expression, data)
|
fun <T> visitConst(expression: IrConst<T>, data: D) = visitExpression(expression, data)
|
||||||
fun visitVararg(expression: IrVararg, 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)
|
fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
|
||||||
override fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = visitSyntheticBody(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)
|
fun visitExpression(expression: IrExpression) = visitElement(expression)
|
||||||
override fun visitExpression(expression: IrExpression, data: Nothing?) = visitExpression(expression)
|
override fun visitExpression(expression: IrExpression, data: Nothing?) = visitExpression(expression)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user