Changed the C and C++ backends to take in a Structured rather than a Process as the top-level item
This commit is contained in:
parent
3727307a78
commit
12191cb36a
|
@ -151,7 +151,7 @@ data GenOps = GenOps {
|
||||||
genTLPChannel :: GenOps -> TLPChannel -> CGen (),
|
genTLPChannel :: GenOps -> TLPChannel -> CGen (),
|
||||||
genTimerRead :: GenOps -> A.Variable -> A.Variable -> CGen (),
|
genTimerRead :: GenOps -> A.Variable -> A.Variable -> CGen (),
|
||||||
genTimerWait :: GenOps -> A.Expression -> CGen (),
|
genTimerWait :: GenOps -> A.Expression -> CGen (),
|
||||||
genTopLevel :: GenOps -> A.Process -> CGen (),
|
genTopLevel :: GenOps -> A.Structured -> CGen (),
|
||||||
-- | Generates the type as it might be used in a cast expression
|
-- | Generates the type as it might be used in a cast expression
|
||||||
genType :: GenOps -> A.Type -> CGen (),
|
genType :: GenOps -> A.Type -> CGen (),
|
||||||
genTypeSymbol :: GenOps -> String -> A.Type -> CGen (),
|
genTypeSymbol :: GenOps -> String -> A.Type -> CGen (),
|
||||||
|
@ -258,12 +258,12 @@ cgenOps = GenOps {
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
--{{{ top-level
|
--{{{ top-level
|
||||||
generate :: GenOps -> A.Process -> PassM String
|
generate :: GenOps -> A.Structured -> PassM String
|
||||||
generate ops ast
|
generate ops ast
|
||||||
= do (a, out) <- runWriterT (call genTopLevel ops ast)
|
= do (a, out) <- runWriterT (call genTopLevel ops ast)
|
||||||
return $ concat out
|
return $ concat out
|
||||||
|
|
||||||
generateC :: A.Process -> PassM String
|
generateC :: A.Structured -> PassM String
|
||||||
generateC = generate cgenOps
|
generateC = generate cgenOps
|
||||||
|
|
||||||
cgenTLPChannel :: GenOps -> TLPChannel -> CGen ()
|
cgenTLPChannel :: GenOps -> TLPChannel -> CGen ()
|
||||||
|
@ -271,14 +271,14 @@ cgenTLPChannel _ TLPIn = tell ["in"]
|
||||||
cgenTLPChannel _ TLPOut = tell ["out"]
|
cgenTLPChannel _ TLPOut = tell ["out"]
|
||||||
cgenTLPChannel _ TLPError = tell ["err"]
|
cgenTLPChannel _ TLPError = tell ["err"]
|
||||||
|
|
||||||
cgenTopLevel :: GenOps -> A.Process -> CGen ()
|
cgenTopLevel :: GenOps -> A.Structured -> CGen ()
|
||||||
cgenTopLevel ops p
|
cgenTopLevel ops s
|
||||||
= do tell ["#include <tock_support.h>\n"]
|
= do tell ["#include <tock_support.h>\n"]
|
||||||
cs <- get
|
cs <- get
|
||||||
tell ["extern int " ++ nameString n ++ "_stack_size;\n"
|
tell ["extern int " ++ nameString n ++ "_stack_size;\n"
|
||||||
| n <- Set.toList $ csParProcs cs]
|
| n <- Set.toList $ csParProcs cs]
|
||||||
sequence_ $ map (call genForwardDeclaration ops) (listify (const True :: A.Specification -> Bool) p)
|
sequence_ $ map (call genForwardDeclaration ops) (listify (const True :: A.Specification -> Bool) s)
|
||||||
call genProcess ops p
|
call genStructured ops s (\s -> tell ["\n#error Invalid top-level item: ",show s])
|
||||||
(name, chans) <- tlpInterface
|
(name, chans) <- tlpInterface
|
||||||
tell ["void tock_main (Process *me, Channel *in, Channel *out, Channel *err) {\n"]
|
tell ["void tock_main (Process *me, Channel *in, Channel *out, Channel *err) {\n"]
|
||||||
genName name
|
genName name
|
||||||
|
|
|
@ -156,16 +156,16 @@ chansToAny x = do st <- get
|
||||||
|
|
||||||
--{{{ top-level
|
--{{{ top-level
|
||||||
-- | Transforms the given AST into a pass that generates C++ code.
|
-- | Transforms the given AST into a pass that generates C++ code.
|
||||||
generateCPPCSP :: A.Process -> PassM String
|
generateCPPCSP :: A.Structured -> PassM String
|
||||||
generateCPPCSP = generate cppgenOps
|
generateCPPCSP = generate cppgenOps
|
||||||
|
|
||||||
-- | Generates the top-level code for an AST.
|
-- | Generates the top-level code for an AST.
|
||||||
cppgenTopLevel :: GenOps -> A.Process -> CGen ()
|
cppgenTopLevel :: GenOps -> A.Structured -> CGen ()
|
||||||
cppgenTopLevel ops p
|
cppgenTopLevel ops s
|
||||||
= do tell ["#include <tock_support_cppcsp.h>\n"]
|
= do tell ["#include <tock_support_cppcsp.h>\n"]
|
||||||
--In future, these declarations could be moved to a header file:
|
--In future, these declarations could be moved to a header file:
|
||||||
sequence_ $ map (call genForwardDeclaration ops) (listify (const True :: A.Specification -> Bool) p)
|
sequence_ $ map (call genForwardDeclaration ops) (listify (const True :: A.Specification -> Bool) s)
|
||||||
call genProcess ops p
|
call genStructured ops s (\s -> tell ["\n#error Invalid top-level item: ",show s])
|
||||||
(name, chans) <- tlpInterface
|
(name, chans) <- tlpInterface
|
||||||
tell ["int main (int argc, char** argv) { csp::Start_CPPCSP();"]
|
tell ["int main (int argc, char** argv) { csp::Start_CPPCSP();"]
|
||||||
(chanType,writer) <-
|
(chanType,writer) <-
|
||||||
|
|
Loading…
Reference in New Issue
Block a user