{-# 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