[KLIB] Optimize deserialization a bit
This commit is contained in:
committed by
teamcityserver
parent
7add820f0d
commit
3dcee8fda8
@@ -177,7 +177,7 @@ class SymbolTable(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline fun referenced(d: D, orElse: () -> S): S {
|
inline fun referenced(d: D, reg: Boolean = true, orElse: () -> S): S {
|
||||||
synchronized(lock) {
|
synchronized(lock) {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
val d0 = d.original as D
|
val d0 = d.original as D
|
||||||
@@ -187,8 +187,10 @@ class SymbolTable(
|
|||||||
val s = get(d0)
|
val s = get(d0)
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
val new = orElse()
|
val new = orElse()
|
||||||
assert(unboundSymbols.add(new)) {
|
if (reg) {
|
||||||
"Symbol for $new was already referenced"
|
assert(unboundSymbols.add(new)) {
|
||||||
|
"Symbol for $new was already referenced"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set(new)
|
set(new)
|
||||||
return new
|
return new
|
||||||
@@ -198,12 +200,14 @@ class SymbolTable(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
inline fun referenced(sig: IdSignature, orElse: () -> S): S {
|
inline fun referenced(sig: IdSignature, reg: Boolean = true, orElse: () -> S): S {
|
||||||
synchronized(lock) {
|
synchronized(lock) {
|
||||||
return get(sig) ?: run {
|
return get(sig) ?: run {
|
||||||
val new = orElse()
|
val new = orElse()
|
||||||
assert(unboundSymbols.add(new)) {
|
if (reg) {
|
||||||
"Symbol for ${new.signature} was already referenced"
|
assert(unboundSymbols.add(new)) {
|
||||||
|
"Symbol for ${new.signature} was already referenced"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set(new)
|
set(new)
|
||||||
new
|
new
|
||||||
@@ -515,7 +519,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referenceClassFromLinker(sig: IdSignature): IrClassSymbol =
|
override fun referenceClassFromLinker(sig: IdSignature): IrClassSymbol =
|
||||||
classSymbolTable.run {
|
classSymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrClassPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrClassPublicSymbolImpl(sig) }
|
||||||
else IrClassSymbolImpl()
|
else IrClassSymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,7 +586,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referenceConstructorFromLinker(sig: IdSignature): IrConstructorSymbol =
|
override fun referenceConstructorFromLinker(sig: IdSignature): IrConstructorSymbol =
|
||||||
constructorSymbolTable.run {
|
constructorSymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrConstructorPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrConstructorPublicSymbolImpl(sig) }
|
||||||
else IrConstructorSymbolImpl()
|
else IrConstructorSymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -634,7 +638,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referenceEnumEntryFromLinker(sig: IdSignature) =
|
override fun referenceEnumEntryFromLinker(sig: IdSignature) =
|
||||||
enumEntrySymbolTable.run {
|
enumEntrySymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrEnumEntryPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrEnumEntryPublicSymbolImpl(sig) }
|
||||||
else IrEnumEntrySymbolImpl()
|
else IrEnumEntrySymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,7 +790,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referencePropertyFromLinker(sig: IdSignature): IrPropertySymbol =
|
override fun referencePropertyFromLinker(sig: IdSignature): IrPropertySymbol =
|
||||||
propertySymbolTable.run {
|
propertySymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrPropertyPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrPropertyPublicSymbolImpl(sig) }
|
||||||
else IrPropertySymbolImpl()
|
else IrPropertySymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -817,7 +821,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referenceTypeAliasFromLinker(sig: IdSignature) =
|
override fun referenceTypeAliasFromLinker(sig: IdSignature) =
|
||||||
typeAliasSymbolTable.run {
|
typeAliasSymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrTypeAliasPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrTypeAliasPublicSymbolImpl(sig) }
|
||||||
else IrTypeAliasSymbolImpl()
|
else IrTypeAliasSymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -894,7 +898,7 @@ class SymbolTable(
|
|||||||
|
|
||||||
override fun referenceSimpleFunctionFromLinker(sig: IdSignature): IrSimpleFunctionSymbol {
|
override fun referenceSimpleFunctionFromLinker(sig: IdSignature): IrSimpleFunctionSymbol {
|
||||||
return simpleFunctionSymbolTable.run {
|
return simpleFunctionSymbolTable.run {
|
||||||
if (sig.isPubliclyVisible) referenced(sig) { IrSimpleFunctionPublicSymbolImpl(sig) }
|
if (sig.isPubliclyVisible) referenced(sig, false) { IrSimpleFunctionPublicSymbolImpl(sig) }
|
||||||
else IrSimpleFunctionSymbolImpl()
|
else IrSimpleFunctionSymbolImpl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1025,7 +1029,7 @@ class SymbolTable(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun referenceGlobalTypeParameterFromLinker(sig: IdSignature): IrTypeParameterSymbol {
|
override fun referenceGlobalTypeParameterFromLinker(sig: IdSignature): IrTypeParameterSymbol {
|
||||||
return globalTypeParameterSymbolTable.referenced(sig) {
|
return globalTypeParameterSymbolTable.referenced(sig, false) {
|
||||||
if (sig.isPubliclyVisible) IrTypeParameterPublicSymbolImpl(sig) else IrTypeParameterSymbolImpl()
|
if (sig.isPubliclyVisible) IrTypeParameterPublicSymbolImpl(sig) else IrTypeParameterSymbolImpl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user