let rec dummy_val_of_type = function
Base(t) ->
(try
(let dummy_value = List.assoc t dummy_values_string_list in
let dummy_value_id = string_id#register_name dummy_value 0 in
if (type_table#register_type dummy_value_id (Base(t)) <> (Base(t))) then
add_sem_error
(20, "constant "^dummy_value^" declared with incorrect type (reserved)", "", "","","");
Base(Const(dummy_value_id)))
with Not_found ->
(let dummy_value_id = string_id#register_name "dummy_msg" 0
in
if (type_table#register_type dummy_value_id (Base(Message)) <> (Base(Message))) then
add_sem_error
(20, "constant dummy_msg declared with incorrect type (reserved)", "", "","","");
Base(Const(dummy_value_id))))
| Inv(Base(Public_key)) ->
Inv(dummy_val_of_type (Base(Public_key)))
| Pair(t1,t2) ->
Pair(dummy_val_of_type t1, dummy_val_of_type t2)
| Scrypt(t1,t2) ->
Scrypt(dummy_val_of_type t1, dummy_val_of_type t2)
| Crypt(t1,t2) ->
Crypt(dummy_val_of_type t1, dummy_val_of_type t2)
| Function(_) as t ->
(let dummy_value_id = string_id#register_name "dummy_func" 0
in
if (type_table#register_type dummy_value_id t <> t) then
add_sem_error
(20, "constant dummy_func declared with incorrect type (reserved)", "", "","","");
Base(Const(dummy_value_id)))
| Set(_) ->
(let dummy_value_id = string_id#register_name "dummy_set" 0
in
if (type_table#register_type dummy_value_id (Set([Base(Message)])) <> (Set([Base(Message)]))) then
add_sem_error
(20, "constant dummy_set declared with incorrect type (reserved)", "", "","","");
Base(Const(dummy_value_id)))
| _ ->
(let dummy_value_id = string_id#register_name "dummy_msg" 0
in
if (type_table#register_type dummy_value_id (Base(Message)) <> (Base(Message))) then
add_sem_error
(20, "constant dummy_msg declared with incorrect type (reserved)", "", "","","");
Base(Const(dummy_value_id)))