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

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

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

import ClassHierarchy._
import nir._

object ClassHierarchyExtractors {
  trait Extractor[T] {
    def unapply(ty: nir.Type)(implicit top: Top): Option[T] = ty match {
      case ty: Type.Named => unapply(ty.name)
      case _              => None
    }
    def unapply(name: Global)(implicit top: Top): Option[T]
  }

  object Ref extends Extractor[Node] {
    def unapply(name: Global)(implicit top: Top): Option[Node] =
      top.nodes.get(name)
  }

  object ScopeRef extends Extractor[Scope] {
    def unapply(name: Global)(implicit top: Top): Option[Scope] =
      top.nodes.get(name).collect {
        case node: Scope => node
      }
  }

  object StructRef extends Extractor[Struct] {
    def unapply(name: Global)(implicit top: Top): Option[Struct] =
      top.nodes.get(name).collect {
        case node: Struct => node
      }
  }

  object ClassRef extends Extractor[Class] {
    def unapply(name: Global)(implicit top: Top): Option[Class] =
      top.nodes.get(name).collect {
        case node: Class => node
      }
  }

  object TraitRef extends Extractor[Trait] {
    def unapply(name: Global)(implicit top: Top): Option[Trait] =
      top.nodes.get(name).collect {
        case node: Trait => node
      }
  }

  object MethodRef extends Extractor[(Scope, Method)] {
    def unapply(name: Global)(implicit top: Top): Option[(Scope, Method)] =
      top.nodes.get(name).collect {
        case node: Method => (node.in, node)
      }
  }

  object FieldRef extends Extractor[(Scope, Field)] {
    def unapply(name: Global)(implicit top: Top): Option[(Scope, Field)] =
      top.nodes.get(name).collect {
        case node: Field => (node.in, node)
      }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy