All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.scalanative.optimizer.analysis.VirtualTable.scala Maven / Gradle / Ivy

The newest version!
package scala.scalanative
package optimizer
package analysis

import scala.collection.mutable
import ClassHierarchy._
import nir._

class VirtualTable(cls: Class) {
  val entries: mutable.UnrolledBuffer[Method] =
    cls.parent.fold {
      mutable.UnrolledBuffer.empty[Method]
    } { parent =>
      parent.vtable.entries.clone
    }
  val values: mutable.UnrolledBuffer[Val] =
    cls.parent.fold {
      mutable.UnrolledBuffer.empty[Val]
    } { parent =>
      parent.vtable.values.clone
    }
  cls.methods.foreach { meth =>
    meth.overrides
      .collect {
        case ovmeth if ovmeth.inClass =>
          values(index(ovmeth)) = meth.value
      }
      .headOption
      .getOrElse {
        if (meth.isVirtual) {
          entries += meth
          values += meth.value
        }
      }
  }
  val ty: Type =
    Type.Array(Type.Ptr, values.length)
  val value: Val =
    Val.Array(Type.Ptr, values)
  def index(meth: Method): Int =
    meth.overrides
      .collectFirst {
        case ovmeth if ovmeth.inClass =>
          index(ovmeth)
      }
      .getOrElse {
        entries.indexOf(meth)
      }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy