X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=Mate%2FTypes.hs;h=0fe838e0edd9524f62fc186659ce75757402d296;hb=120517704ac01a6d957b1904d63ab707a0c4ee95;hp=65c8546dc9b4429971430cac5a904c2b562b0a61;hpb=717a866d25642626b22b9b3abbd8f98ce95c5e10;p=mate.git diff --git a/Mate/Types.hs b/Mate/Types.hs index 65c8546..0fe838e 100644 --- a/Mate/Types.hs +++ b/Mate/Types.hs @@ -2,7 +2,6 @@ {-# LANGUAGE CPP #-} module Mate.Types where -import Data.Word import Data.Int import qualified Data.Map as M import qualified Data.ByteString.Lazy as B @@ -13,6 +12,8 @@ import System.IO.Unsafe import JVM.ClassFile import JVM.Assembler +import Mate.NativeSizes + type BlockID = Int -- Represents a CFG node @@ -29,18 +30,20 @@ data RawMethod = RawMethod { rawMapBB :: MapBB, rawLocals :: Int, rawStackSize :: Int, - rawArgCount :: Word32 } + rawArgCount :: NativeWord, + rawCodeLength :: NativeWord } --- Word32 = point of method call in generated code +-- NativeWord = point of method call in generated code -- MethodInfo = relevant information about callee -type TrapMap = M.Map Word32 TrapCause +type TrapMap = M.Map NativeWord TrapCause data TrapCause = StaticMethod MethodInfo | -- for static calls VirtualMethod Bool MethodInfo | -- for virtual calls InterfaceMethod Bool MethodInfo | -- for interface calls InstanceOf B.ByteString | -- class name + NewObject B.ByteString | -- class name StaticField StaticFieldInfo deriving Show data StaticFieldInfo = StaticFieldInfo { @@ -50,8 +53,8 @@ data StaticFieldInfo = StaticFieldInfo { -- B.ByteString = name of method --- Word32 = entrypoint of method -type MethodMap = M.Map MethodInfo Word32 +-- NativeWord = entrypoint of method +type MethodMap = M.Map MethodInfo NativeWord data MethodInfo = MethodInfo { methName :: B.ByteString, @@ -74,7 +77,7 @@ data ClassInfo = ClassInfo { ciStaticMap :: FieldMap, ciFieldMap :: FieldMap, ciMethodMap :: FieldMap, - ciMethodBase :: Word32, + ciMethodBase :: NativeWord, ciInitDone :: Bool } @@ -84,20 +87,20 @@ type FieldMap = M.Map B.ByteString Int32 -- java strings are allocated only once, therefore we -- use a hashmap to store the address for a String -type StringMap = M.Map B.ByteString Word32 +type StringMap = M.Map B.ByteString NativeWord -- map "methodtable addr" to "classname" -- we need that to identify the actual type -- on the invokevirtual insn -type VirtualMap = M.Map Word32 B.ByteString +type VirtualMap = M.Map NativeWord B.ByteString -- store each parsed Interface upon first loading type InterfaceMap = M.Map B.ByteString (Class Direct) -- store offset for each pair -type InterfaceMethodMap = M.Map B.ByteString Word32 +type InterfaceMethodMap = M.Map B.ByteString NativeWord {-