feat: Field and attribute parsing

This commit is contained in:
vegowotenks 2025-07-12 23:17:24 +02:00
parent 62b537a93f
commit f9fbedc87a
8 changed files with 136 additions and 7 deletions

View 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