[dfg] Added field.type
This commit is contained in:
+2
@@ -669,6 +669,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
|
||||
receiver,
|
||||
DataFlowIR.Field(
|
||||
receiverType,
|
||||
symbolTable.mapType(value.symbol.owner.type),
|
||||
name.localHash.value,
|
||||
takeName { name }
|
||||
),
|
||||
@@ -684,6 +685,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
|
||||
receiver,
|
||||
DataFlowIR.Field(
|
||||
receiverType,
|
||||
symbolTable.mapType(value.symbol.owner.type),
|
||||
name.localHash.value,
|
||||
takeName { name }
|
||||
),
|
||||
|
||||
+6
-5
@@ -407,12 +407,13 @@ internal object DFGSerializer {
|
||||
}
|
||||
}
|
||||
|
||||
class Field(val type: Int?, val hash: Long, val name: String?) {
|
||||
class Field(val receiverType: Int?, val type: Int, val hash: Long, val name: String?) {
|
||||
|
||||
constructor(data: ArraySlice) : this(data.readNullableInt(), data.readLong(), data.readNullable { readString() })
|
||||
constructor(data: ArraySlice) : this(data.readNullableInt(), data.readInt(), data.readLong(), data.readNullable { readString() })
|
||||
|
||||
fun write(result: ArraySlice) {
|
||||
result.writeNullableInt(type)
|
||||
result.writeNullableInt(receiverType)
|
||||
result.writeInt(type)
|
||||
result.writeLong(hash)
|
||||
result.writeNullable(name) { writeString(it) }
|
||||
}
|
||||
@@ -869,7 +870,7 @@ internal object DFGSerializer {
|
||||
VirtualCall(buildCall(virtualCall), typeMap[virtualCall.receiverType]!!)
|
||||
|
||||
fun buildField(field: DataFlowIR.Field) =
|
||||
Field(field.type?.let { typeMap[it]!! }, field.hash, field.name)
|
||||
Field(field.receiverType?.let { typeMap[it]!! }, typeMap[field.type]!!, field.hash, field.name)
|
||||
|
||||
when (node) {
|
||||
is DataFlowIR.Node.Parameter -> Node.parameter(node.index)
|
||||
@@ -1076,7 +1077,7 @@ internal object DFGSerializer {
|
||||
}
|
||||
|
||||
fun deserializeField(field: Field) =
|
||||
DataFlowIR.Field(field.type?.let { types[it] }, field.hash, field.name)
|
||||
DataFlowIR.Field(field.receiverType?.let { types[it] }, types[field.type], field.hash, field.name)
|
||||
|
||||
fun deserializeBody(body: FunctionBody): DataFlowIR.FunctionBody {
|
||||
val nodes = body.nodes.map {
|
||||
|
||||
+1
-1
@@ -209,7 +209,7 @@ internal object DataFlowIR {
|
||||
}
|
||||
}
|
||||
|
||||
data class Field(val type: Type?, val hash: Long, val name: String? = null)
|
||||
data class Field(val receiverType: Type?, val type: Type, val hash: Long, val name: String? = null)
|
||||
|
||||
class Edge(val castToType: Type?) {
|
||||
|
||||
|
||||
+2
-2
@@ -163,7 +163,7 @@ internal object Devirtualization {
|
||||
|
||||
class VirtualCallSiteReceivers(val receiver: Node, val caller: DataFlowIR.FunctionSymbol, val devirtualizedCallees: List<DevirtualizedCallee>)
|
||||
|
||||
class ConstraintGraph : DirectedGraph<Node, Node> {
|
||||
inner class ConstraintGraph : DirectedGraph<Node, Node> {
|
||||
|
||||
private var nodesCount = 0
|
||||
|
||||
@@ -172,7 +172,7 @@ internal object Devirtualization {
|
||||
|
||||
val voidNode = addNode { Node.Ordinary(it, { "Void" }) }
|
||||
val virtualNode = addNode { Node.Source(it, VIRTUAL_TYPE_ID, { "Virtual" }) }
|
||||
val arrayItemField = DataFlowIR.Field(null, 1, "Array\$Item")
|
||||
val arrayItemField = DataFlowIR.Field(null, symbolTable.mapClass(context.irBuiltIns.anyClass.owner), 1, "Array\$Item")
|
||||
val functions = mutableMapOf<DataFlowIR.FunctionSymbol, Function>()
|
||||
val concreteClasses = mutableMapOf<DataFlowIR.Type.Declared, Node>()
|
||||
val externalFunctions = mutableMapOf<DataFlowIR.FunctionSymbol, Node>()
|
||||
|
||||
Reference in New Issue
Block a user