thanks for this. I made one such change, and now I have a problem:
errors.add_error (ec_dt_container_gen_param_type_mismatch, <<(1).out, a_hash_table.generating_type.name_32, type_name_of_type (att_static_cont_item_tid), val.generating_type.name_32>>, "populate_eif_container_from_dt")
and the signature of add_error() is:
add_error (a_code: STRING; args: detachable ARRAY[STRING]; a_loc: detachable STRING)
Now I get the error that the <<>> string array is an ARRAY [ANY] rather than the required ARRAY [STRING_8]. The 'ANY' is being inferred because there is a mixture of STRING_8 and STRING_32; the latter 'STRING_8' is being silently assumed by the compiler when it sees the 'STRING' in the above signature. I don't remember the rule for how this happens, and I also don't understand why we can't any STRING_32, except for talking to Windows UI libs (apparently it's needed there). (Our app is all Unicode UTF-8, and ideally I don't want any STRING_32 anywhere...)
In any case, to at least get things compiling, I need to have a way of including a obj.generating_type call that generates a normal STRING_8. But there is no 'name_8'...
I can do an explicit conversion via STRING_32.to_string_8; this works, but it means that every place I had x.generating_type (reasonably common in this application), now I have to put x.generating_type.name_32.as_string_8.
That seems pretty awful. Wouldn't it be better to have a 'name' feature that is statically defined as STRING (or IMMUTABLE_STRING), and converted silently as needed to the 8 or 32 form?
Or better, just get rid of the static type declarations with _32 and _8 altogether!
- thomas