X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=hs-java.git;a=blobdiff_plain;f=JVM%2FClassFile.hs;h=d2f30297e955b720cef6382d4e38ba6f08e802f9;hp=2b7e1e7f965add890444ee4ad1511439c4121cbf;hb=c2fa4732b54ceb6d0329bb49ed110477acd735b6;hpb=752b12198fcd7cdc754f4488d3750da7ac154604 diff --git a/JVM/ClassFile.hs b/JVM/ClassFile.hs index 2b7e1e7..d2f3029 100644 --- a/JVM/ClassFile.hs +++ b/JVM/ClassFile.hs @@ -19,6 +19,7 @@ module JVM.ClassFile Constant (..), AccessFlag (..), AccessFlags, Attributes (..), + defaultClass, -- * Misc HasSignature (..), HasAttributes (..), NameType (..), @@ -35,6 +36,7 @@ import Data.Binary.Get import Data.Binary.Put import Data.Char import Data.List +import Data.Default import qualified Data.Set as S import qualified Data.Map as M import qualified Data.ByteString.Lazy as B @@ -96,10 +98,16 @@ data family Attributes stage data instance Attributes File = AP {attributesList :: [Attribute]} deriving (Eq, Show) +instance Default (Attributes File) where + def = AP [] + -- | At Direct stage, attributes are represented as a Map. data instance Attributes Direct = AR (M.Map B.ByteString B.ByteString) deriving (Eq, Show) +instance Default (Attributes Direct) where + def = AR M.empty + -- | Size of attributes set at Direct stage arsize :: Attributes Direct -> Int arsize (AR m) = M.size m @@ -214,6 +222,26 @@ deriving instance Eq (Constant File) deriving instance Eq (Constant Direct) deriving instance Show (Constant File) +defaultClass :: (Default (AccessFlags stage), Default (Link stage B.ByteString), Default (Attributes stage)) + => Class stage +defaultClass = Class { + magic = 0xCAFEBABE, + minorVersion = 0, + majorVersion = 50, + constsPoolSize = 0, + constsPool = def, + accessFlags = def, + thisClass = def, + superClass = def, + interfacesCount = 0, + interfaces = [], + classFieldsCount = 0, + classFields = [], + classMethodsCount = 0, + classMethods = [], + classAttributesCount = 0, + classAttributes = def } + instance Binary (Class File) where put (Class {..}) = do put magic