2 {-# LANGUAGE OverloadedStrings #-}
3 module Mate.Utilities where
6 import qualified Data.Map as M
7 import qualified Data.ByteString.Lazy as B
14 -- TODO: actually this function already exists in hs-java-0.3!
15 lookupMethod :: B.ByteString -> Class Resolved -> Maybe (Method Resolved)
16 lookupMethod name cls = look (classMethods cls)
20 | methodName f == name = Just f
23 buildMethodID :: Class Resolved -> Word16 -> MethodInfo
24 buildMethodID cls idx = MethodInfo (ntName nt) rc (ntSignature nt)
26 (CMethod rc nt) = (constsPool cls) M.! idx
28 buildStaticFieldID :: Class Resolved -> Word16 -> StaticFieldInfo
29 buildStaticFieldID cls idx = StaticFieldInfo rc (ntName fnt)
30 where (CField rc fnt) = (constsPool cls) M.! idx
32 buildFieldOffset :: Class Resolved -> Word16 -> (B.ByteString, B.ByteString)
33 buildFieldOffset cls idx = (rc, ntName fnt)
34 where (CField rc fnt) = (constsPool cls) M.! idx
36 buildClassID :: Class Resolved -> Word16 -> B.ByteString
37 buildClassID cls idx = cl
38 where (CClass cl) = (constsPool cls) M.! idx
40 methodGetArgsCount :: Class Resolved -> Word16 -> Word32
41 methodGetArgsCount cls idx = fromIntegral $ length args
43 (CMethod _ nt) = (constsPool cls) M.! idx
44 (MethodSignature args _) = ntSignature nt
46 -- TODO(bernhard): Extend it to more than just int, and provide typeinformation
47 methodHaveReturnValue :: Class Resolved -> Word16 -> Bool
48 methodHaveReturnValue cls idx = case ret of
50 (Returns IntType) -> True;
51 (Returns (ObjectType _)) -> True;
52 _ -> error "methodHaveReturnValue: todo"
54 (CMethod _ nt) = (constsPool cls) M.! idx
55 (MethodSignature _ ret) = ntSignature nt