feat: Reference type family

This commit is contained in:
vegowotenks 2025-07-13 10:08:45 +02:00
parent 00898b18dc
commit e30e3b02e1
2 changed files with 12 additions and 5 deletions

View file

@ -20,7 +20,7 @@ import Language.Java.Classfile.Extractable (Extractable)
import Language.Java.Classfile.ConstantPool (ConstantPool) import Language.Java.Classfile.ConstantPool (ConstantPool)
import Language.Java.Classfile.Flags (Flags) import Language.Java.Classfile.Flags (Flags)
import Language.Java.Classfile.ClassFlag (ClassFlag) import Language.Java.Classfile.ClassFlag (ClassFlag)
import Language.Java.Classfile.ConstantPool.References (ClassReference) import Language.Java.Classfile.ConstantPool.References (Class)
import Language.Java.Classfile.Interfaces (Interfaces) import Language.Java.Classfile.Interfaces (Interfaces)
import Language.Java.Classfile.Fields (Fields) import Language.Java.Classfile.Fields (Fields)
import Language.Java.Classfile.Methods (Methods) import Language.Java.Classfile.Methods (Methods)
@ -33,8 +33,8 @@ data Classfile stage = Classfile
, version :: Version , version :: Version
, constantPool :: ConstantPool stage , constantPool :: ConstantPool stage
, accessFlags :: ClassFlags stage , accessFlags :: ClassFlags stage
, this :: ClassReference , this :: Class stage
, super :: ClassReference , super :: Class stage
, interfaces :: Interfaces , interfaces :: Interfaces
, fields :: Fields , fields :: Fields
, methods :: Methods , methods :: Methods
@ -42,7 +42,7 @@ data Classfile stage = Classfile
} }
deriving stock (Generic) deriving stock (Generic)
deriving instance (Show (Magic stage), Show (ConstantPool stage), Show (ClassFlags stage)) => Show (Classfile stage) deriving instance (Show (Magic stage), Show (ConstantPool stage), Show (ClassFlags stage), Show (Class stage)) => Show (Classfile stage)
deriving via Generically (Classfile Parse) instance (Extractable (Classfile Parse)) deriving via Generically (Classfile Parse) instance (Extractable (Classfile Parse))
type ClassFlags :: Stage -> Type type ClassFlags :: Stage -> Type

View file

@ -4,16 +4,23 @@
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE InstanceSigs #-} {-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
module Language.Java.Classfile.ConstantPool.References (Utf8Reference(..), ClassReference(..), NameAndTypeReference(..), MethodHandleReferenceKind(..), OpaqueReference(..), BootstrapMethodIndex(..)) where {-# LANGUAGE StandaloneKindSignatures #-}
module Language.Java.Classfile.ConstantPool.References (Utf8Reference(..), ClassReference(..), NameAndTypeReference(..), MethodHandleReferenceKind(..), OpaqueReference(..), BootstrapMethodIndex(..), Class) where
import Data.Word (Word16, Word8) import Data.Word (Word16, Word8)
import Language.Java.Classfile.Extractable (Extractable) import Language.Java.Classfile.Extractable (Extractable)
import Language.Java.Classfile.Extractable.AsTag import Language.Java.Classfile.Extractable.AsTag
( TagValue(..), AsTag, AsTag(..) ) ( TagValue(..), AsTag, AsTag(..) )
import Language.Java.Classfile.Stage (Stage(..))
import Data.Kind (Type)
newtype Utf8Reference = Utf8Reference Word16 newtype Utf8Reference = Utf8Reference Word16
deriving stock (Show) deriving stock (Show)
deriving newtype Extractable deriving newtype Extractable
type Class :: Stage -> Type
type family Class stage where
Class Parse = ClassReference
newtype ClassReference = ClassReference Word16 newtype ClassReference = ClassReference Word16
deriving stock (Show) deriving stock (Show)
deriving newtype Extractable deriving newtype Extractable