let compile_transition_target (targ_name,targ_weight) transition_name env =
let targ_id, new_env =
if List.mem_assoc targ_name env then
List.assoc targ_name env, env
else
let id = make_id() in
id, (targ_name,id)::env
in
let tuple_name = concat [transition_name;"_target_";string_of_int (make_id())] in
[
SynVarDeclare
(SynVarDeclareNoInit
(SynEnumOrStructType
("fsmTransitionTarget", ref []),
tuple_name));
SynVarAssign
(SynVarAssignment
(SynStructOrEnumValue
(SynVarName tuple_name,
"id",
ref VIdUnspecified),
SynValue
(SynIntValue targ_id)));
SynVarAssign
(SynVarAssignment
(SynStructOrEnumValue
(SynVarName tuple_name,
"weight",
ref VIdUnspecified),
SynValue
(SynFloatValue targ_weight)));
SynVarAssign
(SynVarModify
(SynStructOrEnumValue
(SynVarName transition_name,
"targets",
ref VIdUnspecified),
SynBinopCons,
SynVarIdentifier
(SynVarName tuple_name))) ], new_env, targ_id