+buildFieldOffset :: Class Direct -> Word16 -> (B.ByteString, B.ByteString)
+buildFieldOffset cls idx = (rc, ntName fnt)
+ where (CField rc fnt) = constsPool cls M.! idx
+
+buildClassID :: Class Direct -> Word16 -> B.ByteString
+buildClassID cls idx = cl
+ where (CClass cl) = constsPool cls M.! idx
+
+
+methodNameTypeByIdx :: Class Direct -> Word16 -> NameType (Method Direct)
+methodNameTypeByIdx cls idx = case constsPool cls M.! idx of
+ (CMethod _ nt') -> nt'
+ (CIfaceMethod _ nt') -> nt'
+ _ -> error "methodGetArgsCount: something wrong. abort."
+
+methodGetArgsCount :: NameType (Method Direct) -> NativeWord
+methodGetArgsCount nt = genericLength args
+ where (MethodSignature args _) = ntSignature nt
+
+-- TODO(bernhard): Extend it to more than just int, and provide typeinformation
+methodHaveReturnValue :: Class Direct -> Word16 -> Bool
+methodHaveReturnValue cls idx = case ret of
+ ReturnsVoid -> False;
+ (Returns BoolType) -> True
+ (Returns CharByte) -> True
+ (Returns IntType) -> True;
+ (Returns (Array _ _)) -> True
+ (Returns (ObjectType _)) -> True;
+ _ -> error $ "methodHaveReturnValue: todo: " ++ show ret