feat: partial classfile staging

This commit is contained in:
vegowotenks 2025-07-13 10:00:15 +02:00
parent d692c3a6c0
commit 00898b18dc
10 changed files with 136 additions and 35 deletions

View file

@ -1,9 +1,19 @@
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE TypeFamilies #-}
module Language.Java.Classfile (Classfile(..)) where
import GHC.Generics (Generic, Generically(Generically))
import Data.Kind (Type)
import Language.Java.Classfile.Stage (Stage(Parse))
import Language.Java.Classfile.Version (Version)
import Language.Java.Classfile.Magic (Magic)
import Language.Java.Classfile.Extractable (Extractable)
@ -17,11 +27,12 @@ import Language.Java.Classfile.Methods (Methods)
import Language.Java.Classfile.Attributes (Attributes)
data Classfile = Classfile
{ magic :: Magic
type Classfile :: Stage -> Type
data Classfile stage = Classfile
{ magic :: Magic stage
, version :: Version
, constantPool :: ConstantPool
, accessFlags :: Flags ClassFlag
, constantPool :: ConstantPool stage
, accessFlags :: ClassFlags stage
, this :: ClassReference
, super :: ClassReference
, interfaces :: Interfaces
@ -29,5 +40,14 @@ data Classfile = Classfile
, methods :: Methods
, attributes :: Attributes
}
deriving stock (Generic)
deriving instance (Show (Magic stage), Show (ConstantPool stage), Show (ClassFlags stage)) => Show (Classfile stage)
deriving via Generically (Classfile Parse) instance (Extractable (Classfile Parse))
type ClassFlags :: Stage -> Type
data family ClassFlags stage
newtype instance ClassFlags Parse = ClassFlags (Flags ClassFlag)
deriving stock (Show, Generic)
deriving Extractable via Generically Classfile
deriving Extractable via Generically (ClassFlags Parse)