+(* --------------------------------------------------------------------- *)
+
+let is_define_param_dots s =
+ match Ast0.unwrap s with
+ Ast0.DPdots(_) | Ast0.DPcircles(_) -> true
+ | _ -> false
+
+let rec define_param p =
+ match Ast0.unwrap p with
+ Ast0.DParam(id) ->
+ let id = ident id in mkres p (Ast0.DParam(id)) id id
+ | Ast0.DPComma(cm) ->
+ (*let cm = bad_mcode cm in*) (* why was this bad??? *)
+ let cm = normal_mcode cm in
+ let ln = promote_mcode cm in
+ mkres p (Ast0.DPComma(cm)) ln ln
+ | Ast0.DPdots(dots) ->
+ let dots = bad_mcode dots in
+ let ln = promote_mcode dots in
+ mkres p (Ast0.DPdots(dots)) ln ln
+ | Ast0.DPcircles(dots) ->
+ let dots = bad_mcode dots in
+ let ln = promote_mcode dots in
+ mkres p (Ast0.DPcircles(dots)) ln ln
+ | Ast0.OptDParam(dp) ->
+ let res = define_param dp in
+ mkres p (Ast0.OptDParam(res)) res res
+ | Ast0.UniqueDParam(dp) ->
+ let res = define_param dp in
+ mkres p (Ast0.UniqueDParam(res)) res res
+
+let define_parameters x id =
+ match Ast0.unwrap x with
+ Ast0.NoParams -> (x,id) (* no info, should be ignored *)
+ | Ast0.DParams(lp,dp,rp) ->
+ let lp = normal_mcode lp in
+ let dp = dots is_define_param_dots None define_param dp in
+ let rp = normal_mcode rp in
+ let l = promote_mcode lp in
+ let r = promote_mcode rp in
+ (mkres x (Ast0.DParams(lp,dp,rp)) l r, r)
+