break;
case IDLN_TYPE_ARRAY:
break;
- case IDLN_TYPE_SEQUENCE:
- fprintf(ci->fh, " ");
- fprintf(ci->fh, "if (CORBA_sequence_get_release(%s%s)) { forb_free(%s%s_buffer); }\n",
- n==2?"":"&",name, name, n==2?"->":".");
+ case IDLN_TYPE_SEQUENCE: {
+ char *dot = n==2?"->":".";
+ IDL_tree simple_type = forb_cbe_get_typespec(IDL_TYPE_SEQUENCE(type_spec).simple_type_spec);
+
+ fprintf(ci->fh, " if (CORBA_sequence_get_release(%s%s)) {\n",
+ n==2?"":"&",name);
+ if (IDLN_NATIVE == IDL_NODE_TYPE(simple_type)) {
+ char *typename = forb_cbe_get_typespec_str(IDL_NATIVE(type_spec).ident);
+ fprintf(ci->fh, " int i;\n"
+ " for (i=0; i<%s%s_length; i++)\n"
+ " %s_free(%s%s_buffer[i]);\n",
+ name, dot, forb_cbe_get_typespec_str(IDL_NATIVE(type_spec).ident),
+ name, dot);
+ }
+ fprintf(ci->fh, " forb_free(%s%s_buffer);\n"
+ " }\n", name, dot);
if (n==2) {
fprintf(ci->fh, " ");
fprintf(ci->fh, "forb_free(%s);\n", name);
}
break;
+ }
case IDLN_NATIVE:
fprintf(ci->fh, " ");
fprintf(ci->fh, "%s_free(%s);\n",