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 Detail

      • filepathType

        public static final LangObjType filepathType
      • typeClassType

        public static final LangObjType typeClassType
      • numericType

        public static final LangObjType numericType
      • 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
      • 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
      • 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 Detail

      • 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
      • 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
      • getElementType

        public Type getElementType()
      • elementGetterMethodName

        public String elementGetterMethodName()
      • elementSetterMethodName

        public String elementSetterMethodName()