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.Flags (Flags)
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.Fields (Fields)
import Language.Java.Classfile.Methods (Methods)
@ -33,8 +33,8 @@ data Classfile stage = Classfile
, version :: Version
, constantPool :: ConstantPool stage
, accessFlags :: ClassFlags stage
, this :: ClassReference
, super :: ClassReference
, this :: Class stage
, super :: Class stage
, interfaces :: Interfaces
, fields :: Fields
, methods :: Methods
@ -42,7 +42,7 @@ data Classfile stage = Classfile
}
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))
type ClassFlags :: Stage -> Type

View file

@ -4,16 +4,23 @@
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE InstanceSigs #-}
{-# 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 Language.Java.Classfile.Extractable (Extractable)
import Language.Java.Classfile.Extractable.AsTag
( TagValue(..), AsTag, AsTag(..) )
import Language.Java.Classfile.Stage (Stage(..))
import Data.Kind (Type)
newtype Utf8Reference = Utf8Reference Word16
deriving stock (Show)
deriving newtype Extractable
type Class :: Stage -> Type
type family Class stage where
Class Parse = ClassReference
newtype ClassReference = ClassReference Word16
deriving stock (Show)
deriving newtype Extractable