feat: Field and attribute parsing
This commit is contained in:
parent
62b537a93f
commit
f9fbedc87a
8 changed files with 136 additions and 7 deletions
55
src/Language/Java/Classfile/Fields.hs
Normal file
55
src/Language/Java/Classfile/Fields.hs
Normal file
|
@ -0,0 +1,55 @@
|
|||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||
{-# LANGUAGE DerivingVia #-}
|
||||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
{-# LANGUAGE InstanceSigs #-}
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
module Language.Java.Classfile.Fields (Fields(..)) where
|
||||
import Data.Array.IArray (Array)
|
||||
import Data.Word (Word16)
|
||||
import Language.Java.Classfile.Extractable (Extractable)
|
||||
import GHC.Generics ( Generically, Generic, Generically(..) )
|
||||
import Language.Java.Classfile.Flags (Flags)
|
||||
import Language.Java.Classfile.Flag (FlagMask (..))
|
||||
import Language.Java.Classfile.ConstantPool.References (Utf8Reference)
|
||||
import Language.Java.Classfile.Attributes (Attributes)
|
||||
|
||||
newtype Fields = Fields (Array Word16 Field)
|
||||
deriving stock Show
|
||||
deriving newtype Extractable
|
||||
|
||||
data FieldFlag
|
||||
= Public
|
||||
| Private
|
||||
| Protected
|
||||
| Static
|
||||
| Final
|
||||
| Volatile
|
||||
| Transient
|
||||
| Synthetic
|
||||
| Enumeration -- original "Enum"
|
||||
deriving stock (Show, Eq, Ord, Enum, Bounded)
|
||||
|
||||
instance FlagMask FieldFlag where
|
||||
type FlagType FieldFlag = Word16
|
||||
maskOf :: FieldFlag -> FlagType FieldFlag
|
||||
maskOf = \case
|
||||
Public -> 0x0001
|
||||
Private -> 0x0002
|
||||
Protected -> 0x0004
|
||||
Static -> 0x0008
|
||||
Final -> 0x0010
|
||||
Volatile -> 0x0040
|
||||
Transient -> 0x0080
|
||||
Synthetic -> 0x1000
|
||||
Enumeration -> 0x4000
|
||||
|
||||
|
||||
data Field = Field
|
||||
{ flags :: Flags FieldFlag
|
||||
, name :: Utf8Reference
|
||||
, descriptor :: Utf8Reference
|
||||
, attribute :: Attributes
|
||||
}
|
||||
deriving stock (Show, Generic)
|
||||
deriving Extractable via Generically Field
|
Loading…
Add table
Add a link
Reference in a new issue