BTypesFromSymbols

dotty.tools.backend.jvm.BTypesFromSymbols
class BTypesFromSymbols[I <: DottyBackendInterface](val int: I, val frontendAccess: PostProcessorFrontendAccess) extends BTypes

This class mainly contains the method classBTypeFromSymbol, which extracts the necessary information from a symbol and its type to create the corresponding ClassBType. It requires access to the compiler (global parameter).

Attributes

Graph
Supertypes
class BTypes
class Object
trait Matchable
class Any

Members list

Type members

Inherited classlikes

case class ArrayBType(componentType: BType) extends RefBType

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
trait RefBType
trait BType
class Object
trait Matchable
class Any
Show all
case object BOOL extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
trait BType

A BType is either a primitve type, a ClassBType, an ArrayBType of one of these, or a MethodType referring to BTypes.

A BType is either a primitve type, a ClassBType, an ArrayBType of one of these, or a MethodType referring to BTypes.

Attributes

Inherited from:
BTypes
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class MethodBType
object BOOL
object BYTE
object CHAR
object DOUBLE
object FLOAT
object INT
object LONG
object SHORT
object UNIT
trait RefBType
class ArrayBType
class ClassBType
Show all
case object BYTE extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case object CHAR extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
final class ClassBType(val internalName: String) extends RefBType

A ClassBType represents a class or interface type. The necessary information to build a ClassBType is extracted from compiler symbols and types, see BTypesFromSymbols.

A ClassBType represents a class or interface type. The necessary information to build a ClassBType is extracted from compiler symbols and types, see BTypesFromSymbols.

The offset and length fields are used to represent the internal name of the class. They are indices into some character array. The internal name can be obtained through the method internalNameString, which is abstract in this component. Name creation is assumed to be hash-consed, so if two ClassBTypes have the same internal name, they NEED to have the same offset and length.

The actual implementation in subclass BTypesFromSymbols uses the global chrs array from the name table. This representation is efficient because the JVM class name is obtained through classSymbol.javaBinaryName. This already adds the necessary string to the chrs array, so it makes sense to reuse the same name table in the backend.

ClassBType is not a case class because we want a custom equals method, and because the extractor extracts the internalName, which is what you typically need.

Attributes

Inherited from:
BTypes
Supertypes
trait RefBType
trait BType
class Object
trait Matchable
class Any
object ClassBType

Attributes

Inherited from:
BTypes
Supertypes
class Object
trait Matchable
class Any
case class ClassInfo(superClass: Option[ClassBType], interfaces: List[ClassBType], flags: Int, memberClasses: List[ClassBType], nestedInfo: Option[NestedInfo])

The type info for a class. Used for symboltable-independent subtype checks in the backend.

The type info for a class. Used for symboltable-independent subtype checks in the backend.

Value parameters

flags

The java flags, obtained through javaFlags. Used also to derive the flags for InnerClass entries.

interfaces

All transitively implemented interfaces, except for those inherited through the superclass.

memberClasses

Classes nested in this class. Those need to be added to the InnerClass table, see the InnerClass spec summary above.

nestedInfo

If this describes a nested class, information for the InnerClass table.

superClass

The super class, not defined for class java/lang/Object.

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
case object DOUBLE extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case object FLOAT extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case object INT extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case class InnerClassEntry(name: String, outerName: String, innerName: String, flags: Int)

This class holds the data for an entry in the InnerClass table. See the InnerClass summary above in this file.

This class holds the data for an entry in the InnerClass table. See the InnerClass summary above in this file.

There's some overlap with the class NestedInfo, but it's not exactly the same and cleaner to keep separate.

Value parameters

flags

The flags for this class in the InnerClass entry.

innerName

The simple name of the inner class, may be null.

name

The internal name of the class.

outerName

The internal name of the outer class, may be null.

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
case object LONG extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case class MethodBType(argumentTypes: List[BType], returnType: BType) extends BType

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case class MethodNameAndType(name: String, methodType: MethodBType)

Just a named pair, used in CoreBTypes.asmBoxTo/asmUnboxTo.

Just a named pair, used in CoreBTypes.asmBoxTo/asmUnboxTo.

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
case class NestedInfo(enclosingClass: ClassBType, outerName: Option[String], innerName: Option[String], isStaticNestedClass: Boolean)

Information required to add a class to an InnerClass table. The spec summary above explains what information is required for the InnerClass entry.

Information required to add a class to an InnerClass table. The spec summary above explains what information is required for the InnerClass entry.

Value parameters

enclosingClass

The enclosing class, if it is also nested. When adding a class to the InnerClass table, enclosing nested classes are also added.

innerName

The innerName field, may be None.

isStaticNestedClass

True if this is a static nested class (not inner class) () () Note that the STATIC flag in ClassInfo.flags, obtained through javaFlags(classSym), is not correct for the InnerClass entry, see javaFlags. The static flag in the InnerClass describes a source-level propety: if the class is in a static context (does not have an outer pointer). This is checked when building the NestedInfo.

outerName

The outerName field in the InnerClass entry, may be None.

Attributes

Inherited from:
BTypes
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
sealed trait PrimitiveBType extends BType

Attributes

Inherited from:
BTypes
Supertypes
trait BType
class Object
trait Matchable
class Any
Known subtypes
object BOOL
object BYTE
object CHAR
object DOUBLE
object FLOAT
object INT
object LONG
object SHORT
object UNIT
Show all
sealed trait RefBType extends BType

Attributes

Inherited from:
BTypes
Supertypes
trait BType
class Object
trait Matchable
class Any
Known subtypes
class ArrayBType
class ClassBType
case object SHORT extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all
case object UNIT extends PrimitiveBType

Attributes

Inherited from:
BTypes
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait BType
class Object
trait Matchable
class Any
Show all

Value members

Concrete methods

final def classBTypeFromSymbol(classSym: Symbol): ClassBType

The ClassBType for a class symbol sym.

The ClassBType for a class symbol sym.

Attributes

final def javaFlags(sym: Symbol): Int

Return the Java modifiers for the given symbol. Java modifiers for classes:

Return the Java modifiers for the given symbol. Java modifiers for classes:

  • public, abstract, final, strictfp (not used) for interfaces:
  • the same as for classes, without 'final' for fields:
  • public, private (*)
  • static, final for methods:
  • the same as for fields, plus:
  • abstract, synchronized (not used), strictfp (not used), native (not used) for all:
  • deprecated

(*) protected cannot be used, since inner classes 'see' protected members, and they would fail verification after lifted.

Attributes

final def mirrorClassBTypeFromSymbol(moduleClassSym: Symbol): ClassBType

Inherited methods

Obtain a previously constructed ClassBType for a given internal name.

Obtain a previously constructed ClassBType for a given internal name.

Attributes

Inherited from:
BTypes

Concrete fields

lazy val TransientAttr: Symbol
lazy val VolatileAttr: Symbol
val coreBTypes: CoreBTypes { Unsupported[Not supported type in refinement AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class jvm)),class BTypesFromSymbols),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class jvm)),class BTypesFromSymbols)),type I)))]; }
val int: I