]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
forb-idl generates correct deserialization of object references
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 3 Oct 2008 07:44:21 +0000 (09:44 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 3 Oct 2008 07:44:21 +0000 (09:44 +0200)
forb-idl/forb-idl-c-skels.c
tests-idl/interface.idl

index b49cde29b52ad560ed0e413e6b1774e79fac8040..eb169b507b2e5ccb6799914cbfe6a5af221d9edc 100644 (file)
@@ -245,9 +245,7 @@ static void free_memory_if_needed(IDL_tree type_spec, const char *name, OIDL_C_I
 
 bool is_object_reference(IDL_tree parm)
 {
-       if (IDL_NODE_TYPE(IDL_PARAM_DCL(parm).param_type_spec) != IDLN_IDENT)
-               return false;
-       return true;
+       return IDL_NODE_TYPE(forb_cbe_get_typespec(parm)) == IDLN_INTERFACE;
 }
 
 static void ck_output_op_skel(IDL_tree op, char *intf_id, OIDL_Run_Info *rinfo, OIDL_C_Info *ci)
@@ -294,8 +292,6 @@ static void ck_output_op_skel(IDL_tree op, char *intf_id, OIDL_Run_Info *rinfo,
                        char *name = IDL_IDENT(IDL_PARAM_DCL(parm).simple_declarator).str;
                        fprintf(ci->fh, /* "  r = " */ "    ");
                        forb_cbe_write_typespec(ci->fh, IDL_PARAM_DCL(parm).param_type_spec);
-                       forb_idl_print_node(parm, 6);
-                       //FIXME: We must determine, whether to parameter is of interface type.
                        if (is_object_reference(parm)) {
                          fprintf(ci->fh, "_deserialize(_obj->orb, cin, &%s);\n", name);
                        } else {
index 321262523fbe7a1aec75f53242322d23348348eb..4bcd998843ca36983a38c86067a8ed27b41e7d03 100644 (file)
@@ -10,7 +10,7 @@ interface myinterface {
        void square(inout long r);
        void message(in string msg);
        void last_message(out string msg);
-       void struct_method(in struct_t s);
+//     void struct_method(in struct_t s);
        void obj_method(in myinterface mi);
 //     void mytype_method(in mytype mt);
 };