diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/SymbolTable.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/SymbolTable.kt index d810d30e13a..0827f7456ff 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/SymbolTable.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/SymbolTable.kt @@ -32,39 +32,28 @@ class SymbolTable { protected abstract fun get(d: D): S? protected abstract fun set(d: D, s: S) - fun markAsUnbound(s: S) { - assert(unboundSymbols.add(s)) { - "Symbol for ${s.descriptor} was already referenced" - } - } - - fun markAsBound(s: S) { - unboundSymbols.remove(s) - } - inline fun declare(d: D, createSymbol: () -> S, createOwner: (S) -> B): B { - val symbol = getOrCreateSymbol(d, createSymbol) - val owner = createOwner(symbol) - return owner - } - - inline fun getOrCreateSymbol(d: D, createSymbol: () -> S): S { val existing = get(d) - return if (existing == null) { + val symbol = if (existing == null) { val new = createSymbol() set(d, new) new } else { - markAsBound(existing) + unboundSymbols.remove(existing) existing } + val owner = createOwner(symbol) + return owner } inline fun referenced(d: D, createSymbol: () -> S): S { val s = get(d) if (s == null) { - val new = createSymbol().also { markAsUnbound(it) } + val new = createSymbol() + assert(unboundSymbols.add(new)) { + "Symbol for ${new.descriptor} was already referenced" + } set(d, new) return new }