X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=Mate%2FTypes.hs;h=5e5bf221e0ba26420943967d2b77e2cdcedb7ab6;hb=c803146cc80b61305fde8279f0a36f8fe6ef7eb2;hp=831744ab27e1c0d96e162cd16fe6de4707b86dc2;hpb=094e3cea9aa9d638b071fb52a12f04f6ddd80dc1;p=mate.git diff --git a/Mate/Types.hs b/Mate/Types.hs index 831744a..5e5bf22 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,20 +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 + VirtualCall Bool MethodInfo (IO NativeWord) | -- for invoke{interface,virtual} InstanceOf B.ByteString | -- class name NewObject B.ByteString | -- class name - StaticField StaticFieldInfo deriving Show + StaticField StaticFieldInfo data StaticFieldInfo = StaticFieldInfo { sfiClassName :: B.ByteString, @@ -51,8 +52,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, @@ -75,7 +76,7 @@ data ClassInfo = ClassInfo { ciStaticMap :: FieldMap, ciFieldMap :: FieldMap, ciMethodMap :: FieldMap, - ciMethodBase :: Word32, + ciMethodBase :: NativeWord, ciInitDone :: Bool } @@ -85,20 +86,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 {-