if (!fill_pd_as_nsresult(meth->result)) return FALSE;
typelib_op_dcl(TreeState *state){    XPTInterfaceDescriptor *id = CURRENT(state);    XPTMethodDescriptor *meth;    struct _IDL_OP_DCL *op = &IDL_OP_DCL(state->tree);    IDL_tree iter;    uint16 num_args = 0;    uint8 op_flags = 0;    if (!XPT_InterfaceDescriptorAddMethods(id, 1))        return FALSE;    meth = &id->method_descriptors[NEXT_METH(state)];    for (iter = op->parameter_dcls; iter; iter = IDL_LIST(iter).next)        num_args++;             /* count params */    if (op->op_type_spec)        num_args++;             /* fake param for _retval */    if (op->f_noscript)        op_flags |= XPT_MD_HIDDEN;    if (op->f_varargs)        op_flags |= XPT_MD_VARARGS;    /* XXXshaver constructor? */#ifdef DEBUG_shaver    fprintf(stdout, "DBG: adding method %s (nargs %d)\n",            IDL_IDENT(op->ident).str, num_args);#endif    if (!XPT_FillMethodDescriptor(meth, op_flags, IDL_IDENT(op->ident).str,                                  num_args))        return FALSE;    for (num_args = 0, iter = op->parameter_dcls; iter;         iter = IDL_LIST(iter).next, num_args++) {        if (!fill_pd_from_param(state, &meth->params[num_args],                                IDL_LIST(iter).data))            return FALSE;    }    /* XXX unless [nonxpcom] */    if (op->op_type_spec) {        if (!fill_pd_from_type(state, &meth->params[num_args],                               XPT_PD_RETVAL | XPT_PD_OUT,                               op->op_type_spec))        return FALSE;    }        if (!fill_pd_as_nsresult(meth->result))        return FALSE;    NEXT_METH(state)++;    return TRUE;}