-- Copyright 2020 United States Government as represented by the -- Administrator of the National Aeronautics and Space Administration. All -- Rights Reserved. -- -- Disclaimers -- -- No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY -- OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT -- LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO -- SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -- PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE -- SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF -- PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN -- ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR -- RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR -- ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER, -- GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING -- THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES -- IT "AS IS." -- -- Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST -- THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS -- ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN -- ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE, -- INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S -- USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE -- UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY -- PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY -- FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS -- AGREEMENT. -- -- | Copilot's representation and conversion of C Structs from C's AST. module Language.Copilot.CStruct ( -- * CStruct CStruct(..) , CField(..) ) where -- | A C struct is a name and fields with different types. data CStruct = CStruct { CStruct -> String cStructName :: String , CStruct -> [CField] cStructFields :: [CField] } deriving (CStruct -> CStruct -> Bool (CStruct -> CStruct -> Bool) -> (CStruct -> CStruct -> Bool) -> Eq CStruct forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: CStruct -> CStruct -> Bool == :: CStruct -> CStruct -> Bool $c/= :: CStruct -> CStruct -> Bool /= :: CStruct -> CStruct -> Bool Eq, Int -> CStruct -> ShowS [CStruct] -> ShowS CStruct -> String (Int -> CStruct -> ShowS) -> (CStruct -> String) -> ([CStruct] -> ShowS) -> Show CStruct forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> CStruct -> ShowS showsPrec :: Int -> CStruct -> ShowS $cshow :: CStruct -> String show :: CStruct -> String $cshowList :: [CStruct] -> ShowS showList :: [CStruct] -> ShowS Show) -- | A field may have a name and a type, or be an array with a name, type and -- length. Pointers are not currently supported. data CField = CPlain String String | CArray String String Integer deriving (CField -> CField -> Bool (CField -> CField -> Bool) -> (CField -> CField -> Bool) -> Eq CField forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: CField -> CField -> Bool == :: CField -> CField -> Bool $c/= :: CField -> CField -> Bool /= :: CField -> CField -> Bool Eq, Int -> CField -> ShowS [CField] -> ShowS CField -> String (Int -> CField -> ShowS) -> (CField -> String) -> ([CField] -> ShowS) -> Show CField forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> CField -> ShowS showsPrec :: Int -> CField -> ShowS $cshow :: CField -> String show :: CField -> String $cshowList :: [CField] -> ShowS showList :: [CField] -> ShowS Show)