- in Class {
- constantPool = pool,
- classAccess = convertAccess accessFlags,
- this = className $ pool ! thisClass,
- super = if superClass == 0 then Nothing else Just superName,
- implements = map (\i -> className $ pool ! i) interfaces,
- fields = map (convertField pool) classFields,
- methods = map (convertMethod pool) classMethods,
- classAttrs = convertAttrs pool classAttributes }
-
-classFile :: Class -> ClassFile
-classFile (Class {..}) = ClassFile {
- magic = 0xCAFEBABE,
- minorVersion = 0,
- majorVersion = 50,
- constsPoolSize = fromIntegral (length poolInfo),
+ d = defaultClass :: Class Direct
+ in d {
+ constsPoolSize = fromIntegral (M.size pool),
+ constsPool = pool,
+ accessFlags = accessFile2Direct accessFlags,
+ thisClass = className $ pool ! thisClass,
+ superClass = if superClass == 0 then "" else superName,
+ interfacesCount = interfacesCount,
+ interfaces = map (\i -> className $ pool ! i) interfaces,
+ classFieldsCount = classFieldsCount,
+ classFields = map (fieldFile2Direct pool) classFields,
+ classMethodsCount = classMethodsCount,
+ classMethods = map (methodFile2Direct pool) classMethods,
+ classAttributesCount = classAttributesCount,
+ classAttributes = attributesFile2Direct pool classAttributes }
+
+classDirect2File :: Class Direct -> Class File
+classDirect2File (Class {..}) =
+ let d = defaultClass :: Class File
+ in d {
+ constsPoolSize = fromIntegral (M.size poolInfo + 1),