gboolean isSlice;
IDL_tree ts = forb_cbe_get_typespec(parm);
int n = oidl_param_info (ts, role, &isSlice);
- fprintf(of, " ");
- forb_cbe_write_typespec(of, IDL_PARAM_DCL(parm).param_type_spec);
if (IDL_NODE_TYPE(forb_cbe_get_typespec(parm)) == IDLN_INTERFACE) {
- fprintf(ci->fh, "_deserialize(req.cdr_reply, %s, _obj->orb);\n", name);
+ fprintf(of, " ");
+ forb_cbe_write_typespec(of, IDL_PARAM_DCL(parm).param_type_spec);
+ fprintf(ci->fh, "_deserialize(req.cdr_reply, %s, _obj->orb);\n", name);
} else {
+ if (IDL_NODE_TYPE(forb_cbe_get_typespec(parm)) == IDLN_TYPE_SEQUENCE &&
+ role == DATA_OUT) { /* Allocate out sequence */
+ fprintf(ci->fh, " *%s = forb_malloc(sizeof(**%s));\n", name, name);
+ fprintf(ci->fh, " if (!*%s) { ev->major = FORB_EX_NO_MEMORY; goto exception; }\n", name);
+ /* TODO: Free previously allocated parameters on no memory error. */
+ }
+ fprintf(of, " ");
+ forb_cbe_write_typespec(of, IDL_PARAM_DCL(parm).param_type_spec);
fprintf(ci->fh, "_deserialize(req.cdr_reply, %s%s);\n", n==2?"*":"", name);
}
}