20 lines
793 B
Haskell
20 lines
793 B
Haskell
{-# LANGUAGE DerivingStrategies #-}
|
|
{-# LANGUAGE InstanceSigs #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
module Language.Java.Classfile.ConstantPool (ConstantPool(..)) where
|
|
import Data.Word (Word16)
|
|
import Data.Array.IArray (Array, listArray)
|
|
import Language.Java.Classfile.ConstantPool.Entry (Entry)
|
|
import Language.Java.Classfile.Extractable (Extractable (extract))
|
|
import Language.Java.Classfile.Extract (Extract, traceIndex)
|
|
import Control.Monad (forM)
|
|
|
|
newtype ConstantPool = ConstantPool (Array Word16 Entry)
|
|
deriving stock (Show)
|
|
|
|
instance Extractable ConstantPool where
|
|
extract :: Extract ConstantPool
|
|
extract = do
|
|
count <- extract @Word16
|
|
elements <- forM [1..fromIntegral count - 1] $ \ i -> traceIndex i extract
|
|
pure . ConstantPool $ listArray (1, count - 1) elements
|