From c0f53f3a4d19b1a3e26f769355eba1f03b5ed3bc Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Wed, 20 Jun 2018 15:06:00 +0300 Subject: [PATCH] Move IrSuspendableExpression and SuspensionPoint from Kotlin/Native to common part --- .../kotlin/ir/expressions/IrSuspend.kt | 20 +++++++ .../ir/expressions/impl/IrSuspendImpl.kt | 56 +++++++++++++++++++ .../ir/visitors/IrElementTransformer.kt | 3 + .../ir/visitors/IrElementTransformerVoid.kt | 7 +++ .../kotlin/ir/visitors/IrElementVisitor.kt | 3 + .../ir/visitors/IrElementVisitorVoid.kt | 6 ++ 6 files changed, 95 insertions(+) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt new file mode 100644 index 00000000000..2446da6115b --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt @@ -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 +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt new file mode 100644 index 00000000000..624c75f0d46 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R = + visitor.visitSuspensionPoint(this, data) + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + suspensionPointIdParameter.accept(visitor, data) + result.accept(visitor, data) + resumeResult.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, 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 accept(visitor: IrElementVisitor, data: D): R = + visitor.visitSuspendableExpression(this, data) + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + suspensionPointId.accept(visitor, data) + result.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + suspensionPointId = suspensionPointId.transform(transformer, data) + result = result.transform(transformer, data) + } +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt index c5f13956f88..0731d431922 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt @@ -58,6 +58,9 @@ interface IrElementTransformer : IrElementVisitor { 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) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt index 7b6b861a9f7..520aab4de42 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt @@ -99,6 +99,13 @@ abstract class IrElementTransformerVoid : IrElementTransformer { 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) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt index 1c27a94a07b..3eb1ee28cab 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt @@ -47,6 +47,9 @@ interface IrElementVisitor { 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 visitConst(expression: IrConst, data: D) = visitExpression(expression, data) fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt index 4377ac056a9..6b5192d3063 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt @@ -92,6 +92,12 @@ interface IrElementVisitorVoid : IrElementVisitor { 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)