skate: make generated C code compile
authorReto Achermann <reto.achermann@inf.ethz.ch>
Sat, 27 May 2017 11:22:07 +0000 (13:22 +0200)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Sat, 27 May 2017 11:22:07 +0000 (13:22 +0200)
Signed-off-by: Reto Achermann <reto.achermann@inf.ethz.ch>

tools/skate/SkateBackendCode.hs
tools/skate/SkateBackendCommon.hs
tools/skate/SkateBackendHeader.hs
tools/skate/SkateTypes.hs

index 845939a..88eaf73 100644 (file)
@@ -73,8 +73,10 @@ skate_c_body sr infile =
 
 skate_c_includes :: String -> C.Unit
 skate_c_includes sr = C.UnitList [
-    C.Include C.Standard (skate_c_includepath sr),
-    C.Include C.Standard "skb/skb.h"]
+    C.Include C.Standard "barrelfish/barrelfish.h",
+    C.Include C.Standard "skb/skb.h",
+    C.Include C.Standard (skate_c_includepath sr)
+    ]
 
 
 {------------------------------------------------------------------------------
@@ -85,7 +87,7 @@ skate_c_vardecl :: C.TypeSpec -> String -> Maybe C.Expr -> C.Stmt
 skate_c_vardecl t s e = C.VarDecl C.NoScope C.NonConst  t s e
 
 skate_c_vardecl_err :: C.Stmt
-skate_c_vardecl_err = skate_c_vardecl (C.TypeName "errval") "err" Nothing
+skate_c_vardecl_err = skate_c_vardecl (C.TypeName "errval_t") "err" Nothing
 
 skate_c_errvar :: C.Expr
 skate_c_errvar = C.Variable "err"
@@ -126,13 +128,13 @@ skate_c_code_fact def@(Fact i d attrib sp) ttbl = [
     (skate_c_code_add def ttbl)
 
 
-skate_c_header_one_def :: Declaration -> [TT.TTEntry] -> [ C.Unit ]
-skate_c_header_one_def de@(Fact i d a sp) tt = skate_c_code_fact de tt
-skate_c_header_one_def de@(Flags i d w f sp) _ = [] --skate_c_header_flags i d w f sp
-skate_c_header_one_def de@(Constants i d t f sp) _ = [] --skate_c_header_const i d t f sp
-skate_c_header_one_def de@(Enumeration i d f sp) _ = [] --skate_c_header_enum i d f sp
-skate_c_header_one_def _  _ = []
+skate_c_code_one_def :: Declaration -> [TT.TTEntry] -> [ C.Unit ]
+skate_c_code_one_def de@(Fact i d a sp) tt = skate_c_code_fact de tt
+skate_c_code_one_def de@(Flags i d w f sp) _ = [] --skate_c_header_flags i d w f sp
+skate_c_code_one_def de@(Constants i d t f sp) _ = [] --skate_c_header_const i d t f sp
+skate_c_code_one_def de@(Enumeration i d f sp) _ = [] --skate_c_header_enum i d f sp
+skate_c_code_one_def _  _ = []
 
 
 skate_c_code_defs :: [Declaration] -> [TT.TTEntry] -> [ C.Unit ]
-skate_c_code_defs decls ttbl = [C.UnitList $ skate_c_header_one_def d ttbl | d <- decls]
+skate_c_code_defs decls ttbl = [C.UnitList $ skate_c_code_one_def d ttbl | d <- decls]
index 9f1d86a..bb5991d 100644 (file)
@@ -164,10 +164,10 @@ skate_c_fn_decl_describe fn = skate_c_fn_decl skate_c_void_t fn_name doxy []
 
 
 skate_c_fn_def_describe :: String -> [ C.Stmt ] -> C.Unit
-skate_c_fn_def_describe fn = C.FunctionDef C.NoScope skate_c_errval_t fn_name params
+skate_c_fn_def_describe fn stmt = skate_c_fn_def skate_c_void_t fn_name doxy [] stmt
     where
         fn_name = identifier_to_cname ((skate_c_fn_name_describe fn))
-        params = []
+        doxy = ["@brief Describes the " ++ fn]
 
 
 {-----------------------------------------------------------------------------
@@ -228,7 +228,7 @@ skate_c_fn_name_list fn = (make_qualified_identifer fn "list")
 skate_c_fn_params_fact :: String -> ([String], [C.Param])
 skate_c_fn_params_fact fact = (
     ["@param fact  Pointer to a struct " ++ fact],
-    [C.Param  (C.Ptr $ C.Struct ( identifier_to_cname fact)) "fact" ])
+    [C.Param  (C.Ptr $ C.Struct ( make_type_name (identifier_to_cname fact))) "fact" ])
 
 skate_c_fn_params :: C.TypeSpec -> String -> [C.Param]
 skate_c_fn_params t var = [C.Param t var]
@@ -244,7 +244,6 @@ skate_c_fn_decls_facts fn attribs = [
 
 skate_c_fn_defs_facts :: String -> [FactAttrib] -> [C.Stmt] -> [C.Unit]
 skate_c_fn_defs_facts fn attribs stmt = [
-    skate_c_fn_def_describe fn stmt,
     skate_c_fn_def_add fn p stmt]
         where
             p = skate_c_fn_params_fact fn
index 6e9e451..8180054 100644 (file)
@@ -89,7 +89,9 @@ skate_header_body sr infile =
 ------------------------------------------------------------------------------}
 
 skate_c_stdincludes :: [ C.Unit ]
-skate_c_stdincludes = [C.Include C.Standard "stdint.h" ]
+skate_c_stdincludes = [
+    C.Include C.Standard "stdint.h",
+    C.Include C.Standard "errno.h" ]
 
 -- Header files info
 skate_c_headerfiles :: [String] -> [ C.Unit ]
@@ -253,8 +255,8 @@ skate_c_prolog_strings i t = C.UnitList [
     C.Blank]
     where
         cname = (identifier_to_cname i)
-        wr_fmt = concat (intersperse " \", \" " [fmt_wr a | a <- t])
-        rd_fmt = concat (intersperse " \", \" " [fmt_rd a | a <- t])
+        wr_fmt = "\"%\" " ++ concat (intersperse " \", %\" " [fmt_wr a | a <- t])
+        rd_fmt = "\"%\" " ++ concat (intersperse " \", %\" " [fmt_rd a | a <- t])
         prolog = "\"" ++ (identifier_to_prolog i) ++ "(\" "
 
 fmt_wr :: TypeRef -> String
index 2ca778b..a958152 100644 (file)
@@ -108,9 +108,9 @@ builtin_fmt_wr (Int32)   = "PRIi32"
 builtin_fmt_wr (Int64)   = "PRIi64"
 builtin_fmt_wr (IntPtr)  = "PRIuPTR"
 builtin_fmt_wr (Size)    = "PRIuSIZE"
-builtin_fmt_wr (Bool)    = "\"%i\""
-builtin_fmt_wr (String)  = "\"%s\""
-builtin_fmt_wr (Char)    = "\"%c\""
+builtin_fmt_wr (Bool)    = "\"i\""
+builtin_fmt_wr (String)  = "\"s\""
+builtin_fmt_wr (Char)    = "\"c\""
 
 
 builtin_fmt_rd :: TypeBuiltIn -> String
@@ -125,9 +125,9 @@ builtin_fmt_rd (Int32)   = "SCNi32"
 builtin_fmt_rd (Int64)   = "SCNi64"
 builtin_fmt_rd (IntPtr)  = "SCNuPTR"
 builtin_fmt_rd (Size)    = "SCNuSIZE"
-builtin_fmt_rd (Bool)    = "\"%i\""
-builtin_fmt_rd (String)  = "\"%s\""
-builtin_fmt_rd (Char)    = "\"%c\""
+builtin_fmt_rd (Bool)    = "\"i\""
+builtin_fmt_rd (String)  = "\"s\""
+builtin_fmt_rd (Char)    = "\"c\""
 
 builtin_get_bits:: TypeBuiltIn -> Integer
 builtin_get_bits (UInt8)   = 8