3 #include "forb-idl-c-backend.h"
8 cs_output_stub (IDL_tree tree,
17 gboolean has_retval, has_args;
19 g_return_if_fail (idx != NULL);
21 iface_id = IDL_ns_ident_to_qstring (
22 IDL_IDENT_TO_NS (IDL_INTERFACE (
23 IDL_get_parent_node (tree, IDLN_INTERFACE, NULL)
25 opname_plain = IDL_IDENT(IDL_OP_DCL (tree).ident).str;
26 opname = IDL_ns_ident_to_qstring (IDL_IDENT_TO_NS (IDL_OP_DCL (tree).ident), "_", 0);
28 has_retval = IDL_OP_DCL (tree).op_type_spec != NULL;
29 has_args = IDL_OP_DCL (tree).parameter_dcls != NULL;
31 forb_cbe_op_write_proto (of, tree, "", FALSE);
33 fprintf (of, "\n{\n");
37 forb_cbe_write_param_typespec (of, tree);
38 fprintf (of, " " FORB_RETVAL_VAR_NAME ";\n");
41 fprintf(of, " if (_obj->type == %s_type) {\n"
42 " if (_obj->methods) {\n"
43 " /* in-proc object */\n"
46 fprintf(of, FORB_RETVAL_VAR_NAME " = ");
48 fprintf(of, "forb_%s_methods(obj)->%s(_obj, ",
49 iface_id, opname_plain);
50 for (sub = IDL_OP_DCL (tree).parameter_dcls; sub; sub = IDL_LIST (sub).next) {
51 IDL_tree parm = IDL_LIST (sub).data;
52 fprintf (of, "%s, ", IDL_IDENT (IDL_PARAM_DCL (parm).simple_declarator).str);
54 fprintf(of, "ev);\n");
56 fprintf(of, " } else {\n");
57 fprintf(of, " /* remote object */\n"
59 " CDR_codec_init_static(&codec);\n");
60 fprintf(of, " forb_prepare_request(&codec, _obj, FORB_METHOD_INDEX(%s));\n",
62 for (sub = IDL_OP_DCL (tree).parameter_dcls; sub; sub = IDL_LIST (sub).next) {
63 IDL_tree parm = IDL_LIST (sub).data;
65 role = oidl_attr_to_paramrole(IDL_PARAM_DCL(parm).attr);
66 if (role == DATA_IN || role == DATA_INOUT) {
67 char *name = IDL_IDENT(IDL_PARAM_DCL(parm).simple_declarator).str;
69 forb_cbe_write_typespec(of, IDL_PARAM_DCL(parm).param_type_spec);
70 fprintf(of, "_serialize(&codec, %s);\n", name);
73 fprintf(of, " /* TODO: Send request */\n");
76 forb_cbe_write_typespec(of, IDL_OP_DCL(tree).op_type_spec);
77 fprintf(of, "_deserialize(&codec, &"FORB_RETVAL_VAR_NAME");\n");
79 for (sub = IDL_OP_DCL (tree).parameter_dcls; sub; sub = IDL_LIST (sub).next) {
80 IDL_tree parm = IDL_LIST (sub).data;
82 role = oidl_attr_to_paramrole(IDL_PARAM_DCL(parm).attr);
83 if (role == DATA_OUT || role == DATA_INOUT) {
84 char *name = IDL_IDENT(IDL_PARAM_DCL(parm).simple_declarator).str;
86 forb_cbe_write_typespec(of, IDL_PARAM_DCL(parm).param_type_spec);
87 fprintf(of, "_deserialize(&codec, %s);\n", name);
91 fprintf(of, " } else {\n");
92 fprintf(of, " ev->major = FORB_EX_BAD_OPERATION;\n");
95 fprintf(of, " return " FORB_RETVAL_VAR_NAME ";\n");
98 fprintf (of, "}\n\n");
107 cs_output_stubs (IDL_tree tree,
114 switch (IDL_NODE_TYPE (tree)) {
116 cs_output_stubs (IDL_MODULE (tree).definition_list, ci, idx);
121 for (sub = tree; sub; sub = IDL_LIST (sub).next)
122 cs_output_stubs (IDL_LIST (sub).data, ci, idx);
125 case IDLN_ATTR_DCL: {
128 /* for (node = IDL_ATTR_DCL (tree).simple_declarations; node; node = IDL_LIST (node).next) { */
129 /* OIDL_Attr_Info *ai; */
131 /* ai = IDL_LIST (node).data->data; */
133 /* cs_output_stubs (ai->op1, ci, idx); */
136 /* cs_output_stubs (ai->op2, ci, idx); */
140 case IDLN_INTERFACE: {
143 cs_output_stubs (IDL_INTERFACE (tree).body, ci, &real_idx);
147 cs_output_stub (tree, ci, idx);
155 forb_idl_output_c_stubs (IDL_tree tree,
156 OIDL_Run_Info *rinfo,
159 fprintf (ci->fh, OIDL_C_WARNING);
160 /* fprintf (ci->fh, "#include <string.h>\n"); */
161 /* fprintf (ci->fh, "#define FORB2_STUBS_API\n"); */
162 fprintf (ci->fh, "#include \"%s.h\"\n\n", ci->base_name);
164 cs_output_stubs (tree, ci, NULL);