let rec compile_callbacks callbacks state_name =
match callbacks with
cur::rest ->
let field, foo =
(match cur with
SynFsmOnInit s -> "onInit", s
| SynFsmOnMoveRequest s -> "onMoveRequest", s
| SynFsmOnTeammateDeath s -> "onTeammateDeath", s
| SynFsmOnBombDetonate s -> "onBombDetonate", s
| SynFsmOnDeath s -> "onDeath", s)
in
(if field = "onInit" then
[ SynVarAssign
(SynVarAssignment
(SynStructOrEnumValue
(SynVarName state_name,
"init",
ref VIdUnspecified),
SynVarIdentifier
(SynVarName foo))) ]
else
[ SynVarAssign
(SynVarAssignment
((SynStructOrEnumValue
(SynVarName (concat [state_name;"_callbacks"]),
field, ref VIdUnspecified)),
(SynVarIdentifier
(SynVarName foo)))) ])
@ compile_callbacks rest state_name
| [] -> []