Class LangObjType

All Implemented Interfaces:
TypeValue, Type
Direct Known Subclasses:
SeqSizeType

public class LangObjType extends SpecialObjectType implements TypeValue
A wrapper around a class type. A LangObjType is implemented using some class type, but may have a custom (language-specific) coercion method, constructor, and name.
  • Field Details

    • pathType

      public static final LangObjType pathType
    • filepathType

      public static final LangObjType filepathType
    • URIType

      public static final LangObjType URIType
    • typeClass

      public static final LangObjType typeClass
    • typeType

      public static final LangObjType typeType
    • typeClassType

      public static final LangObjType typeClassType
    • numericType

      public static final LangObjType numericType
    • realType

      public static final LangObjType realType
    • rationalType

      public static final LangObjType rationalType
    • integerType

      public static final LangObjType integerType
    • dflonumType

      public static final LangObjType dflonumType
    • vectorType

      public static final LangObjType vectorType
    • gvectorType

      public static final LangObjType gvectorType
    • constVectorType

      public static final LangObjType constVectorType
    • s8vectorType

      public static final LangObjType s8vectorType
    • u8vectorType

      public static final LangObjType u8vectorType
    • s16vectorType

      public static final LangObjType s16vectorType
    • u16vectorType

      public static final LangObjType u16vectorType
    • s32vectorType

      public static final LangObjType s32vectorType
    • u32vectorType

      public static final LangObjType u32vectorType
    • s64vectorType

      public static final LangObjType s64vectorType
    • u64vectorType

      public static final LangObjType u64vectorType
    • f32vectorType

      public static final LangObjType f32vectorType
    • f64vectorType

      public static final LangObjType f64vectorType
    • c16vectorType

      public static final LangObjType c16vectorType
    • bitvectorType

      public static final LangObjType bitvectorType
    • regexType

      public static final LangObjType regexType
    • stringType

      public static final LangObjType stringType
    • jstringType

      public static final LangObjType jstringType
      Wrapper for java.lang.String, with extra coercions.
    • istringType

      public static final LangObjType istringType
      Immutuable string, implemented using IString
    • listType

      public static final LangObjType listType
    • procedureType

      public static final LangObjType procedureType
    • promiseType

      public static final LangObjType promiseType
    • sequenceType

      public static final LangObjType sequenceType
    • dynamicType

      public static final LangObjType dynamicType
    • argListType

      public static final LangObjType argListType
    • argVectorType

      public static final LangObjType argVectorType
    • typeLangObjType

      public static final ClassType typeLangObjType
  • Method Details

    • getInstanceFromClass

      public static LangObjType getInstanceFromClass(String name)
    • isCompatibleWithValue

      public int isCompatibleWithValue(Type valueType)
      Description copied from class: Type
      If this is the target type, is a given source type compatible?
      Overrides:
      isCompatibleWithValue in class Type
      Returns:
      -1 if not compatible; 0 if need to check at run-time; 1 if compatible; 2 if compatible and no conversion or cast needed. We also return 0 for some "narrowing" conversions even if we know they will always succeed, so as to make such conversions less preferred when doing method overloading.
    • compare

      public int compare(Type other)
      Description copied from class: Type
      Return a numeric code showing "subtype" relationship: 1: if other is a pure subtype of this; 0: if has the same values; -1: if this is a pure subtype of other; -2: if they have values in common but neither is a subtype of the other; -3: if the types have no values in common. "Same values" is rather loose; by "A is a subtype of B" we mean that all instance of A can be "widened" to B. More formally, A.compare(B) returns: 1: all B values can be converted to A without a coercion failure (i.e. a ClassCastException or overflow or major loss of information), but not vice versa. 0: all A values can be converted to B without a coercion failure and vice versa; -1: all A values can be converted to B without a coercion failure but not vice versa; -2: there are (potentially) some A values that can be converted to B, and some B values can be converted to A; -3: there are no A values that can be converted to B, and neither are there any B values that can be converted to A.
      Overrides:
      compare in class SpecialObjectType
    • emitIsInstance

      public void emitIsInstance(Variable incoming, Compilation comp, Target target)
      Description copied from interface: TypeValue
      Emit code for incoming instanceof this_type. The implementation can use InstanceOf .emitIsInstance which is a conveniece method that calls emitTestIf.
      Specified by:
      emitIsInstance in interface TypeValue
      Parameters:
      incoming - Contains the value we are testing to see if it has the the type of 'this'. If null, use top-of-stack.
      comp - The compilation state.
      target - Where to leave the result.
    • coerceNumeric

      public static Numeric coerceNumeric(Object value)
    • coerceRealNum

      public static RealNum coerceRealNum(Object value)
    • coerceDFloNum

      public static DFloNum coerceDFloNum(Object value)
    • coerceRatNum

      public static RatNum coerceRatNum(Object value)
    • coerceIntNum

      public static IntNum coerceIntNum(Object value)
    • coerceToClassOrNull

      public static Class coerceToClassOrNull(Object type)
    • coerceToClass

      public static Class coerceToClass(Object obj)
    • coerceToClassTypeOrNull

      public static ClassType coerceToClassTypeOrNull(Object type)
    • coerceToClassType

      public static ClassType coerceToClassType(Object obj)
    • coerceToTypeOrNull

      public static Type coerceToTypeOrNull(Object type)
    • coerceToType

      public static Type coerceToType(Object obj)
    • coerceToConstVector

      public static FVector coerceToConstVector(Object obj)
    • coerceToProcedureOrNull

      public static Procedure coerceToProcedureOrNull(Object value)
    • coerceToProcedure

      public static Procedure coerceToProcedure(Object obj)
    • coerceToU8Vector

      public static U8Vector coerceToU8Vector(Object obj)
    • coercionOrNullMethod

      protected Method coercionOrNullMethod()
    • emitCoercionOrNull

      public boolean emitCoercionOrNull(CodeAttr code)
    • emitTestIf

      public void emitTestIf(Variable incoming, Declaration decl, Compilation comp)
      Description copied from interface: TypeValue
      Emit code for if (incoming instanceof this_type) decl = incoming .... This method is designed for typeswitch applications, where this call is the first part of a conditional, so it must be followed by calls to emitElse and emitFi.
      Specified by:
      emitTestIf in interface TypeValue
      Parameters:
      incoming - Contains the value we are testing to see if it has the type of this. If null, use top-of-stack. May not be null if decl is non-null.
      decl - If non-null, assign value after coercion to Declaration.
      comp - The compilation state.
    • coerceFromObject

      public Object coerceFromObject(Object obj)
      Description copied from class: Type
      Convert an object to a value of this Type. The result is actually of the implementation type, boxed as appropriate, so it is suitable for standard reflective operations, like the arguments to Field#set or Method#invoke. Throw a ClassCastException when this is not possible.
      Overrides:
      coerceFromObject in class ObjectType
    • emitConvertFromPrimitive

      public void emitConvertFromPrimitive(Type stackType, CodeAttr code)
      Description copied from class: Type
      Convert from stackType (usually PrimType) to this type. However, we might only convert part-way, to some object type. If converting to this type might fail at run-time, only convert to Object (as by emitCoerceToObject); a caller can use stackType.emitConvertFromObject to convert the rest, but that might throw an exception. (This is a bit of a kludge.)
      Overrides:
      emitConvertFromPrimitive in class Type
    • convertValue

      public Expression convertValue(Expression value)
      Description copied from interface: TypeValue
      Return converted expression or null.
      Specified by:
      convertValue in interface TypeValue
    • emitCoerceFromObject

      public void emitCoerceFromObject(CodeAttr code)
      Description copied from class: ObjectType
      Compile (in given method) cast from Object to this Type.
      Overrides:
      emitCoerceFromObject in class ObjectType
    • getConstructorType

      public ObjectType getConstructorType()
    • getConstructor

      public Procedure getConstructor()
      Description copied from interface: TypeValue
      Get the constructor function for this type. Returns null if there is no contructor function. Also returns null if this extends ClassType or ArrayType and standard Java constructors (<init> methods) should be used.
      Specified by:
      getConstructor in interface TypeValue
    • encodeType

      public String encodeType(Language language)
      Specified by:
      encodeType in interface TypeValue
    • getElementType

      public Type getElementType()
    • elementGetterMethodName

      public String elementGetterMethodName()
    • elementSetterMethodName

      public String elementSetterMethodName()
    • getBuildObject

      public CompileBuildObject getBuildObject()