[FIR] Make Stack an abstract class

This commit is contained in:
Dmitriy Novozhilov
2020-01-29 13:56:23 +03:00
parent 5de37baf6e
commit c78da854f7
@@ -10,11 +10,11 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
interface Stack<T> {
val size: Int
fun top(): T
fun pop(): T
fun push(value: T)
abstract class Stack<T> {
abstract val size: Int
abstract fun top(): T
abstract fun pop(): T
abstract fun push(value: T)
}
fun <T> stackOf(vararg values: T): Stack<T> = StackImpl(*values)
@@ -22,7 +22,7 @@ val Stack<*>.isEmpty: Boolean get() = size == 0
val Stack<*>.isNotEmpty: Boolean get() = size != 0
fun <T> Stack<T>.topOrNull(): T? = if (size == 0) null else top()
private class StackImpl<T>(vararg values: T) : Stack<T> {
private class StackImpl<T>(vararg values: T) : Stack<T>() {
private val stack = mutableListOf(*values)
override fun top(): T = stack[stack.size - 1]
@@ -35,7 +35,7 @@ private class StackImpl<T>(vararg values: T) : Stack<T> {
override val size: Int get() = stack.size
}
class NodeStorage<T : FirElement, N : CFGNode<T>>() : Stack<N> {
class NodeStorage<T : FirElement, N : CFGNode<T>> : Stack<N>(){
private val stack: Stack<N> = StackImpl()
private val map: MutableMap<T, N> = mutableMapOf()
@@ -57,7 +57,7 @@ class NodeStorage<T : FirElement, N : CFGNode<T>>() : Stack<N> {
}
}
class SymbolBasedNodeStorage<T, N : CFGNode<T>> : Stack<N> where T : FirElement {
class SymbolBasedNodeStorage<T, N : CFGNode<T>> : Stack<N>() where T : FirElement {
private val stack: Stack<N> = StackImpl()
private val map: MutableMap<FirBasedSymbol<*>, N> = mutableMapOf()