{-# LANGUAGE LambdaCase #-} module JVM.Data.Convert.Type where import Data.Text (Text) import JVM.Data.Abstract.Name (toInternalName) import JVM.Data.Abstract.Type qualified as Abs baseTypeDescriptor :: Abs.PrimitiveType -> Text baseTypeDescriptor :: PrimitiveType -> Text baseTypeDescriptor = \case PrimitiveType Abs.Byte -> Text "B" PrimitiveType Abs.Char -> Text "C" PrimitiveType Abs.Double -> Text "D" PrimitiveType Abs.Float -> Text "F" PrimitiveType Abs.Int -> Text "I" PrimitiveType Abs.Long -> Text "J" PrimitiveType Abs.Short -> Text "S" PrimitiveType Abs.Boolean -> Text "Z" fieldTypeDescriptor :: Abs.FieldType -> Text fieldTypeDescriptor :: FieldType -> Text fieldTypeDescriptor = \case Abs.PrimitiveFieldType PrimitiveType base -> PrimitiveType -> Text baseTypeDescriptor PrimitiveType base Abs.ObjectFieldType QualifiedClassName name -> Text "L" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> QualifiedClassName -> Text toInternalName QualifiedClassName name Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text ";" Abs.ArrayFieldType FieldType fieldType -> Text "[" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> FieldType -> Text fieldTypeDescriptor FieldType fieldType classInfoTypeDescriptor :: Abs.ClassInfoType -> Text classInfoTypeDescriptor :: ClassInfoType -> Text classInfoTypeDescriptor = \case Abs.ClassInfoType QualifiedClassName name -> QualifiedClassName -> Text toInternalName QualifiedClassName name Abs.ArrayClassInfoType ClassInfoType classInfoType -> Text "[" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> ClassInfoType -> Text classInfoTypeDescriptor ClassInfoType classInfoType Abs.PrimitiveClassInfoType PrimitiveType base -> PrimitiveType -> Text baseTypeDescriptor PrimitiveType base