, ExceptionMap
, JpcNpcMap
, RawMethod(..)
+ , TrapPatcher, TrapPatcherEax, TrapPatcherEaxEsp
, TrapMap, MethodMap, ClassMap, FieldMap
, StringMap, VirtualMap, InterfaceMap
, InterfaceMethodMap
import Data.Functor
import Data.Word
import qualified Data.Map as M
+import qualified Data.Bimap as BI
import qualified Data.ByteString.Lazy as B
import Data.IORef
type BlockID = Int
-- Represents a CFG node
data BasicBlock = BasicBlock {
- code :: [Instruction],
+ code :: [(Int, Instruction)],
bblength :: Int,
successor :: BBEnd }
type ExceptionMap = M.Map (Word16, Word16) [(B.ByteString, Word16)]
-- java byte code PC -> native PC
-type JpcNpcMap = M.Map Word32 Int
+type JpcNpcMap = BI.Bimap Int Word32
data RawMethod = RawMethod {
rawMapBB :: MapBB,
type TrapMap = M.Map NativeWord TrapCause
type TrapPatcher = CPtrdiff -> CodeGen () () CPtrdiff
-type TrapPatcherEax = CPtrdiff -> CPtrdiff -> CodeGen () () CPtrdiff
-type TrapPatcherEsp = TrapPatcherEax
+type TrapPatcherEax = CPtrdiff -> TrapPatcher
+type TrapPatcherEaxEsp = CPtrdiff -> TrapPatcherEax
data TrapCause
= StaticMethod TrapPatcher -- for static calls
| VirtualCall Bool MethodInfo (IO NativeWord) -- for invoke{interface,virtual}
| InstanceOf TrapPatcherEax
- | ThrowException TrapPatcherEsp
+ | ThrowException TrapPatcherEaxEsp
| NewObject TrapPatcher
| StaticField StaticFieldInfo
| ObjectField TrapPatcher