feat: partial classfile staging
This commit is contained in:
parent
d692c3a6c0
commit
00898b18dc
10 changed files with 136 additions and 35 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue