let compile_transition (preds,targs) state_name env =
let name = concat [state_name;"_transition_";string_of_int (make_id())] in
let predvars = List.map varify preds in
let target_result, target_env, target_ids = compile_transition_targets targs name env in
[
SynVarDeclare
(SynVarDeclareNoInit
(SynEnumOrStructType ("fsmTransition",ref []),
name));
SynVarAssign
(SynVarAssignment
(SynStructOrEnumValue
(SynVarName name,
"predicates",
ref VIdUnspecified),
(SynListValueProducer
(SynListList predvars))))]
@ target_result
@ [ SynVarAssign
(SynVarModify
(SynStructOrEnumValue
(SynVarName state_name,
"transitionList",
ref VIdUnspecified),
SynBinopCons,
(SynVarIdentifier
(SynVarName name)))) ], target_env, target_ids