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
    [ 
     (** declare transition target tuple *)

      SynVarDeclare
        (SynVarDeclareNoInit
           (SynEnumOrStructType
              ("fsmTransitionTarget", ref []),
            tuple_name));
      
      (** set target id *)

      SynVarAssign
        (SynVarAssignment
           (SynStructOrEnumValue
              (SynVarName tuple_name,
               "id",
               ref VIdUnspecified),
            SynValue
              (SynIntValue targ_id)));
      
      (** set the target weight *)

      SynVarAssign
        (SynVarAssignment
           (SynStructOrEnumValue
              (SynVarName tuple_name,
               "weight",
               ref VIdUnspecified),
            SynValue
              (SynFloatValue targ_weight)));
      
      (** add tuple to transition list *)

      SynVarAssign
        (SynVarModify
           (SynStructOrEnumValue
              (SynVarName transition_name,
               "targets",
               ref VIdUnspecified),
            SynBinopCons,
            SynVarIdentifier
              (SynVarName tuple_name))) ], new_env, targ_id