⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 call.py

📁 编译工具
💻 PY
📖 第 1 页 / 共 3 页
字号:
            n = n + 1            arg_n = "tcd->arg_" + str(n)            argtype = types.Type(argument.paramType())            ((h_is_const,h_is_ptr),(s_is_holder,s_is_var)) = \                         _arg_info(argtype,argument.direction())            if h_is_ptr:                arg_n = "*" + arg_n            if s_is_holder and s_is_var:                if argument.is_in():                    if argument.is_out():                        arg_n = arg_n + ".inout()"                    else:                        arg_n = arg_n + ".in()"                else:                    arg_n = arg_n + ".out()"            impl_args.append(arg_n)        if self.__has_return_value:            result_string = "tcd->result = "        else:            result_string = ""                if self.__contexts:            impl_args.append("ctxt")        # If we have no return value and no arguments at all then we don't        # need to fetch the call descriptor. This suppresses a warning in gcc        # about an unused variable.        if result_string != "" or impl_args != []:            get_cd = self.__name + "* tcd = (" + self.__name + "*)cd;"        else:            get_cd = ""        impl_call = output.StringStream()        catch = output.StringStream()        # Deal with context        if self.__contexts:            impl_call.out(template.interface_callback_context,                          cname = self.__context_name,                          count = str(len(self.__contexts)))        # Deal with user exceptions        raises = self.__exceptions        if raises:            for exception in raises:                ex_scopedName = id.Name(exception.scopedName())                catch.out(template.interface_operation_catch_exn,                          exname = ex_scopedName.fullyQualify())            impl_call.out(template.interface_callback_tryblock,                          result = result_string,                          cxx_operation_name = operation,                          operation_arguments = string.join(impl_args, ", "),                          catch = str(catch))        else:            impl_call.out(template.interface_callback_invoke,                          result = result_string,                          cxx_operation_name = operation,                          operation_arguments = string.join(impl_args, ", "))        stream.out(template.interface_callback,                   local_call_descriptor = function_name,                   get_call_descriptor = get_cd,                   impl_fqname =interface_name.prefix("_impl_").fullyQualify(),                   name = interface_name.fullyQualify(),                   impl_call = str(impl_call))    def out_objrefcall(self,stream,operation,args,localcall_fn,environment):        assert isinstance(stream, output.Stream)        ctor_args = [ localcall_fn, "\"" + operation + "\"",                      str(len(operation) + 1) ]        assign_args = []        assign_res = []        n = -1        for argument in self.__arguments:            n = n + 1            arg_n = "_call_desc.arg_" + str(n)            argtype = types.Type(argument.paramType())            ((h_is_const,h_is_ptr),(s_is_holder,s_is_var)) = \                         _arg_info(argtype,argument.direction())            if s_is_holder:                if argument.is_in():                    rvalue = args[n]                    if argtype.array():                        rvalue = "&" + rvalue + "[0]"                    if h_is_ptr:                        rvalue = "&(" + argtype.base(environment) + "&) " \                                 + rvalue                    assign_args.append(arg_n + " = " + rvalue + ";")                else:                    if s_is_var:                        arg_n = arg_n + "._retn()"                    assign_res.append(args[n] + " = " \                                      + arg_n + ";")            else:                rvalue = args[n]                if argtype.array():                    rvalue = "&" + rvalue + "[0]"                if h_is_ptr:                    rvalue = "&(" + argtype.base(environment) + "&) " \                             + rvalue                assign_args.append(arg_n + " = " + rvalue + ";")        if self.__has_return_value:            argtype = types.Type(self.__returntype)            ((h_is_const,h_is_ptr),(s_is_holder,s_is_var)) = \                         _arg_info(argtype,3)            if s_is_var:                assign_res.append("return _call_desc.result._retn();")            else:                assign_res.append("return _call_desc.result;")        if self.__contexts:            assign_context = "_call_desc.ctxt = "\                             "CORBA::Context::_duplicate(_ctxt);"        else:            assign_context = ""                stream.out(template.interface_operation,                   call_descriptor = self.__name,                   call_desc_args = string.join(ctor_args, ", "),                   assign_args = string.join(assign_args,"\n"),                   assign_res = string.join(assign_res,"\n"),                   assign_context = assign_context)    def out_implcall(self,stream,operation,localcall_fn):        assert isinstance(stream, output.Stream)        ctor_args = [localcall_fn, "\"" + operation + "\"",                          str(len(operation)+1),str(1) ]                prepare_out_args = []                if self.__has_out_args:             n = -1            for argument in self.__arguments:                n = n + 1                if argument.is_out() and not argument.is_in():                    arg_n = "_call_desc.arg_" + str(n)                    argtype = types.Type(argument.paramType())                    ((h_is_const,h_is_ptr),(s_is_holder,s_is_var)) = \                                    _arg_info(argtype,argument.direction())                    if not s_is_holder:                        rvalue = arg_n + "_"                        if s_is_var:                            rvalue = rvalue + ".out()"                        if h_is_ptr:                            rvalue = "&" + rvalue                        prepare_out_args.append(arg_n + " = " + rvalue + ";")                    # main block of code goes here        stream.out(template.interface_operation_dispatch,                   idl_operation_name = operation,                   call_descriptor = self.__name,                   call_desc_args = string.join(ctor_args, ", "),                   prepare_out_args = string.join(prepare_out_args,"\n"))    def __out_declaration(self,stream):        # build up the constructor argument list, the initialisation        # list and the data members list        ctor_args = ["LocalCallFn lcfn", "const char* op_", "size_t oplen",                     "_CORBA_Boolean upcall=0" ]        base_ctor = "omniCallDescriptor(lcfn, op_, oplen, " + \                    str(self.__oneway)        if self.__exceptions != []:            base_ctor = base_ctor + ", _user_exns, "            user_exceptions_decl = \            "void userException(cdrStream&,_OMNI_NS(IOP_C)*,const char*);\n"+\            "static const char* const _user_exns[];\n"        else:            base_ctor = base_ctor + ", 0, "            user_exceptions_decl = ""        base_ctor = base_ctor + str(len(self.__exceptions)) + ", upcall)"        in_arguments_decl = ""        out_arguments_decl = ""        if self.__has_in_args or self.__contexts:            in_arguments_decl = "void marshalArguments(cdrStream&);\n" + \                                "void unmarshalArguments(cdrStream&);\n"        if self.__has_out_args or self.__has_return_value:            out_arguments_decl = \                              "void unmarshalReturnedValues(cdrStream&);\n" + \                              "void marshalReturnedValues(cdrStream&);\n"        data_members = []        n = -1        for argument in self.__arguments:            n = n + 1            holder_n = "arg_" + str(n)            argtype = types.Type(argument.paramType())            ((h_is_const,h_is_ptr),\             (s_is_holder,s_is_var)) = _arg_info(argtype,argument.direction())            if s_is_var:                storage = argtype._var()            else:                storage = argtype.base()            storage_n = holder_n            if not s_is_holder:                storage_n = storage_n + "_"            data_members.append(storage + " " + storage_n + ";")            if not s_is_holder:                holder = argtype.base()                if h_is_const:                    holder = "const " + holder                if argtype.array():                    holder = holder + "_slice*"                if h_is_ptr:                    holder = holder + "*"                data_members.append(holder + " " + holder_n + ";")        if self.__has_return_value:            returntype = types.Type(self.__returntype)            ((h_is_const,h_is_ptr),\             (s_is_holder,s_is_var)) = _arg_info(returntype,3)            holder_n = "result"            if s_is_var:                storage = returntype._var()            else:                storage = returntype.base()            storage_n = holder_n            if not s_is_holder:                storage_n = storage_n + "_"            data_members.append(storage + " " + storage_n + ";")        if self.__contexts:            data_members.append("CORBA::Context_var ctxt;");                # Write the proxy class definition        stream.out(template.interface_proxy_class,                   signature = self.__signature,                   call_descriptor = self.__name,                   ctor_args = string.join(ctor_args,","),                   base_ctor = base_ctor,                   in_arguments_decl = in_arguments_decl,                   out_arguments_decl = out_arguments_decl,                   user_exceptions_decl = user_exceptions_decl,                   member_data = string.join(data_members,"\n"))    def __out_contextDescriptor(self,stream):        if self.__contexts:            contexts = output.StringStream()            for context in self.__contexts:                contexts.out('"' + context + '",')            stream.out(template.interface_context_array,                       context_descriptor = self.__context_name,                       contexts = str(contexts))    def __out_marshalArgument(self,stream):        if not (self.__has_in_args or self.__contexts): return        marshal_block = output.StringStream()        self.__out_marshalArgument_shared(marshal_block,1)        if self.__contexts:            marshal_block.out(template.interface_proxy_marshal_context,                              name  = self.__context_name,                              count = str(len(self.__contexts)))        stream.out(template.interface_proxy_marshal_arguments,                   call_descriptor = self.__name,                   marshal_block = marshal_block)            def __out_marshalReturnedValues(self,stream):        if not (self.__has_out_args or self.__has_return_value): return        marshal_block = output.StringStream()        if self.__has_return_value:            argtype = types.Type(self.__returntype)            ((h_is_const,h_is_ptr),(s_is_holder,s_is_var)) = \                         _arg_info(argtype,3)            argname = "result"            if (h_is_ptr):                argname = "*" + argname            skutil.marshall(marshal_block, None, argtype, None, argname, "_n")            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -