[FIR] Make Stack an abstract class
This commit is contained in:
@@ -10,11 +10,11 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
|
||||||
interface Stack<T> {
|
abstract class Stack<T> {
|
||||||
val size: Int
|
abstract val size: Int
|
||||||
fun top(): T
|
abstract fun top(): T
|
||||||
fun pop(): T
|
abstract fun pop(): T
|
||||||
fun push(value: T)
|
abstract fun push(value: T)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> stackOf(vararg values: T): Stack<T> = StackImpl(*values)
|
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
|
val Stack<*>.isNotEmpty: Boolean get() = size != 0
|
||||||
fun <T> Stack<T>.topOrNull(): T? = if (size == 0) null else top()
|
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)
|
private val stack = mutableListOf(*values)
|
||||||
|
|
||||||
override fun top(): T = stack[stack.size - 1]
|
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
|
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 stack: Stack<N> = StackImpl()
|
||||||
private val map: MutableMap<T, N> = mutableMapOf()
|
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 stack: Stack<N> = StackImpl()
|
||||||
private val map: MutableMap<FirBasedSymbol<*>, N> = mutableMapOf()
|
private val map: MutableMap<FirBasedSymbol<*>, N> = mutableMapOf()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user