+-- | Generate a class
+generate :: [Tree CPEntry] -> B.ByteString -> Generate () -> Class Direct
+generate cp name gen =
+ let generator = do
+ initClass name
+ gen
+ res = execState generator (emptyGState {classPath = cp})
+ code = genCode res
+ d = defaultClass :: Class Direct
+ in d {
+ constsPoolSize = fromIntegral $ M.size (currentPool res),
+ constsPool = currentPool res,
+ accessFlags = S.fromList [ACC_PUBLIC, ACC_STATIC],
+ thisClass = name,
+ superClass = "java/lang/Object",
+ classMethodsCount = fromIntegral $ length (doneMethods res),
+ classMethods = doneMethods res }
+