Class TypeManager

java.lang.Object
de.inetsoftware.jwebassembly.module.TypeManager

public class TypeManager extends Object
Manage the written and to write types (classes)
  • Field Details

    • FIELD_VTABLE

      static final String FIELD_VTABLE
      name of virtual function table, start with a point for an invalid Java identifier
      See Also:
    • FIELD_HASHCODE

      static final String FIELD_HASHCODE
      Name of field with system hash code, start with a point for an invalid Java identifier.
      See Also:
    • FIELD_VALUE

      public static final String FIELD_VALUE
      Name of field with array value.
      See Also:
    • TYPE_DESCRIPTION_INTERFACE_OFFSET

      public static final int TYPE_DESCRIPTION_INTERFACE_OFFSET
      Byte position in the type description that contains the offset to the interfaces. Length 4 bytes.
      See Also:
    • TYPE_DESCRIPTION_INSTANCEOF_OFFSET

      public static final int TYPE_DESCRIPTION_INSTANCEOF_OFFSET
      Byte position in the type description that contains the offset to the instanceof list. Length 4 bytes.
      See Also:
    • TYPE_DESCRIPTION_TYPE_NAME

      public static final int TYPE_DESCRIPTION_TYPE_NAME
      Byte position in the type description that contains the offset to class name idx in the string constant table. Length 4 bytes.
      See Also:
    • TYPE_DESCRIPTION_ARRAY_TYPE

      public static final int TYPE_DESCRIPTION_ARRAY_TYPE
      Byte position in the type description that contains the type of the array (component type). Length 4 bytes.
      See Also:
    • VTABLE_FIRST_FUNCTION_INDEX

      private static final int VTABLE_FIRST_FUNCTION_INDEX
      The reserved position on start of the vtable:
    • offset of interface call table (itable)
    • offset of instanceof list
    • offset of class name idx in the string constant table
    • See Also:
    • CLASS_CONSTANT_FUNCTION

      private static final FunctionName CLASS_CONSTANT_FUNCTION
    • BOOLEAN

      public static final int BOOLEAN
      Type id of primitive class
      See Also:
    • BYTE

      public static final int BYTE
      Type id of primitive class
      See Also:
    • CHAR

      public static final int CHAR
      Type id of primitive class
      See Also:
    • DOUBLE

      public static final int DOUBLE
      Type id of primitive class
      See Also:
    • FLOAT

      public static final int FLOAT
      Type id of primitive class
      See Also:
    • INT

      public static final int INT
      Type id of primitive class
      See Also:
    • LONG

      public static final int LONG
      Type id of primitive class
      See Also:
    • SHORT

      public static final int SHORT
      Type id of primitive class
      See Also:
    • VOID

      public static final int VOID
      Type id of primitive class
      See Also:
    • PRIMITIVE_CLASSES

      private static final String[] PRIMITIVE_CLASSES
      the list of primitive types. The order is important and must correlate with getPrimitiveClass.
      See Also:
      • invalid reference
        ReplacementForClass#getPrimitiveClass(String)
    • structTypes

      private final Map<Object,TypeManager.StructType> structTypes
    • blockTypes

      private final Map<TypeManager.BlockType,TypeManager.BlockType> blockTypes
    • typeIndexCounter

      private int typeIndexCounter
    • isFinish

      private boolean isFinish
    • options

      final WasmOptions options
    • typeTableOffset

      private int typeTableOffset
    • classFileLoader

      private ClassFileLoader classFileLoader
  • Constructor Details

    • TypeManager

      TypeManager(WasmOptions options)
      Initialize the type manager.
      Parameters:
      options - compiler properties
  • Method Details

    • init

      void init(ClassFileLoader classFileLoader)
      Initialize the type manager
      Parameters:
      classFileLoader - for loading the class files
    • size

      public int size()
      Count of used types
      Returns:
      the count
    • isFinish

      boolean isFinish()
      If the scan phase is finish
      Returns:
      true, if scan phase is finish
    • scanTypeHierarchy

      void scanTypeHierarchy() throws IOException
      Scan the hierarchy of the types.
      Throws:
      IOException - if any I/O error occur on loading or writing
    • prepareFinish

      void prepareFinish(ModuleWriter writer) throws IOException
      Finish the prepare and write the types. Now no new types and functions should be added.
      Parameters:
      writer - the targets for the types
      Throws:
      IOException - if any I/O error occur on loading or writing
    • getTypeTableMemoryOffsetFunctionName

      WatCodeSyntheticFunctionName getTypeTableMemoryOffsetFunctionName()
      Create an accessor for typeTableOffset and mark it.
      Returns:
      the function name
    • getClassConstantFunction

      @Nonnull FunctionName getClassConstantFunction()
      Get the function name to get a constant class.
      Returns:
      the function
    • checkStructTypesState

      private void checkStructTypesState(Object newType)
      Check the internal state of the manager and create initial classes.
      Parameters:
      newType - the requested type for debug output
    • valueOf

      @Nonnull public TypeManager.StructType valueOf(String name)
      Get the StructType. If needed an instance is created.
      Parameters:
      name - the type name like java/lang/Object
      Returns:
      the struct type
    • arrayType

      @Nonnull public ArrayType arrayType(AnyType arrayType)
      Get the array type for the given component type.
      Parameters:
      arrayType - the component type of the array
      Returns:
      the array type
    • lambdaType

      TypeManager.LambdaType lambdaType(@Nonnull BootstrapMethod method, ArrayList<AnyType> params, TypeManager.StructType interfaceType, String interfaceMethodName)
      Create a lambda type
      Parameters:
      method - the name BootstrapMethod from the parsed class file
      params - the parameters of the constructor and type fields
      interfaceType - the implemented interface
      interfaceMethodName - the name of the implemented method in the interface
      Returns:
      the type
    • blockType

      @Nonnull TypeManager.BlockType blockType(List<AnyType> params, List<AnyType> results)
      Create block type
      Parameters:
      params - the parameters
      results - the results
      Returns:
      the type
    • createCallVirtual

      Create the FunctionName for a virtual call. The function has 2 parameters (THIS, virtualfunctionIndex) and returns the index of the function.
      Returns:
      the name
    • createCallInterface

      @Nonnull WatCodeSyntheticFunctionName createCallInterface()
      Create the FunctionName for a interface call. The function has 3 parameters (THIS,classIndex, virtualfunctionIndex) and returns the index of the function.
      Returns:
      the name
    • createInstanceOf

      WatCodeSyntheticFunctionName createInstanceOf()
      Create the FunctionName for the INSTANCEOF operation and mark it as used. The function has 2 parameters (THIS, classIndex) and returns true if there is a match.
      Returns:
      the name
    • createCast

      Create the FunctionName for the CAST operation and mark it as used. The function has 2 parameters (THIS, classIndex) and returns this if the type match else it throw an exception.
      Returns:
      the name