From e30e3b02e10bb8e3bc61311586a003eb036dc46e Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Sun, 13 Jul 2025 10:08:45 +0200 Subject: [PATCH] feat: Reference type family --- src/Language/Java/Classfile.hs | 8 ++++---- src/Language/Java/Classfile/ConstantPool/References.hs | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Language/Java/Classfile.hs b/src/Language/Java/Classfile.hs index 84b5e12..1c7a8b0 100644 --- a/src/Language/Java/Classfile.hs +++ b/src/Language/Java/Classfile.hs @@ -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 diff --git a/src/Language/Java/Classfile/ConstantPool/References.hs b/src/Language/Java/Classfile/ConstantPool/References.hs index a9e3fca..eefed7f 100644 --- a/src/Language/Java/Classfile/ConstantPool/References.hs +++ b/src/Language/Java/Classfile/ConstantPool/References.hs @@ -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