r2corba 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES +159 -0
- data/LICENSE +59 -0
- data/README +62 -0
- data/THANKS +52 -0
- data/bin/r2corba +8 -0
- data/bin/ridlc +11 -0
- data/bin/rins +7 -0
- data/ext/ext.mwc +6 -0
- data/ext/extload/extload.c +60 -0
- data/ext/libr2tao/any.cpp +1543 -0
- data/ext/libr2tao/exception.cpp +202 -0
- data/ext/libr2tao/exception.h +104 -0
- data/ext/libr2tao/longdouble.cpp +173 -0
- data/ext/libr2tao/longdouble.h +31 -0
- data/ext/libr2tao/object.cpp +1150 -0
- data/ext/libr2tao/object.h +38 -0
- data/ext/libr2tao/orb.cpp +1029 -0
- data/ext/libr2tao/orb.h +36 -0
- data/ext/libr2tao/r2tao_export.h +45 -0
- data/ext/libr2tao/r2tao_ext.h +38 -0
- data/ext/libr2tao/required.cpp +463 -0
- data/ext/libr2tao/required.h +187 -0
- data/ext/libr2tao/typecode.cpp +888 -0
- data/ext/libr2tao/typecode.h +45 -0
- data/ext/libr2tao/values.cpp +2938 -0
- data/ext/libr2tao/values.h +396 -0
- data/ext/librpoa/iortable.cpp +250 -0
- data/ext/librpoa/poa.cpp +1076 -0
- data/ext/librpoa/poa.h +24 -0
- data/ext/librpoa/rpoa_export.h +44 -0
- data/ext/librpoa/servant.cpp +1338 -0
- data/ext/librpoa/servant.h +116 -0
- data/ext/librpoa/srvreq_fix.cpp +283 -0
- data/ext/librpoa/srvreq_fix.h +149 -0
- data/ext/librpol/policies.cpp +763 -0
- data/ext/librpol/policies.h +15 -0
- data/ext/librpol/rpol_export.h +44 -0
- data/lib/corba/cbase/IORMap.rb +33 -0
- data/lib/corba/cbase/ORB.rb +231 -0
- data/lib/corba/cbase/Request.rb +134 -0
- data/lib/corba/cbase/Streams.rb +129 -0
- data/lib/corba/cbase/Stub.rb +19 -0
- data/lib/corba/cbase/Typecode.rb +441 -0
- data/lib/corba/cbase/Values.rb +129 -0
- data/lib/corba/cbase/exception.rb +66 -0
- data/lib/corba/cbase/poa.rb +23 -0
- data/lib/corba/cbase/policies.rb +78 -0
- data/lib/corba/cbase/post_require.rb +14 -0
- data/lib/corba/cbase/require.rb +28 -0
- data/lib/corba/cmds/base.rb +85 -0
- data/lib/corba/cmds/test.rb +30 -0
- data/lib/corba/common/Any.rb +91 -0
- data/lib/corba/common/IDL.rb +104 -0
- data/lib/corba/common/ORB.rb +368 -0
- data/lib/corba/common/Object.rb +208 -0
- data/lib/corba/common/Request.rb +20 -0
- data/lib/corba/common/Servant.rb +108 -0
- data/lib/corba/common/Struct.rb +22 -0
- data/lib/corba/common/Stub.rb +79 -0
- data/lib/corba/common/Typecode.rb +1121 -0
- data/lib/corba/common/Union.rb +56 -0
- data/lib/corba/common/Values.rb +92 -0
- data/lib/corba/common/const.rb +22 -0
- data/lib/corba/common/exception.rb +68 -0
- data/lib/corba/common/require.rb +27 -0
- data/lib/corba/common/version.rb +22 -0
- data/lib/corba/idl/IDL.rb +21 -0
- data/lib/corba/idl/IORTable.pidl +62 -0
- data/lib/corba/idl/TAO_Ext.pidl +46 -0
- data/lib/corba/idl/require.rb +20 -0
- data/lib/corba/jbase/Any.rb +273 -0
- data/lib/corba/jbase/IORMap.rb +36 -0
- data/lib/corba/jbase/ORB.rb +99 -0
- data/lib/corba/jbase/Object.rb +98 -0
- data/lib/corba/jbase/Request.rb +226 -0
- data/lib/corba/jbase/Servant.rb +247 -0
- data/lib/corba/jbase/ServerRequest.rb +128 -0
- data/lib/corba/jbase/Streams.rb +671 -0
- data/lib/corba/jbase/Stub.rb +38 -0
- data/lib/corba/jbase/Typecode.rb +520 -0
- data/lib/corba/jbase/Values.rb +173 -0
- data/lib/corba/jbase/exception.rb +106 -0
- data/lib/corba/jbase/poa.rb +229 -0
- data/lib/corba/jbase/policies.rb +300 -0
- data/lib/corba/jbase/post_require.rb +14 -0
- data/lib/corba/jbase/require.rb +86 -0
- data/lib/corba/naming.rb +14 -0
- data/lib/corba/naming_service.rb +15 -0
- data/lib/corba/poa.rb +15 -0
- data/lib/corba/policies.rb +18 -0
- data/lib/corba/require.rb +17 -0
- data/lib/corba/svcs/ins/cos_naming.rb +426 -0
- data/lib/corba/svcs/ins/ins.rb +526 -0
- data/lib/corba/svcs/ins/naming_service.rb +119 -0
- data/lib/corba.rb +16 -0
- data/lib/ridlbe/ruby/config.rb +336 -0
- data/lib/ridlbe/ruby/require.rb +16 -0
- data/lib/ridlbe/ruby/walker.rb +1582 -0
- data/mkrf_conf_srcgem.rb +186 -0
- data/rakelib/bin.rake +80 -0
- data/rakelib/bin.rb +146 -0
- data/rakelib/build.rake +87 -0
- data/rakelib/config.rake +52 -0
- data/rakelib/config.rb +450 -0
- data/rakelib/ext.rake +242 -0
- data/rakelib/ext.rb +308 -0
- data/rakelib/ext_r2tao.rb +232 -0
- data/rakelib/gem.rake +212 -0
- data/rakelib/gem.rb +146 -0
- data/rakelib/package.rake +26 -0
- data/rakelib/test.rake +23 -0
- data/test/BiDirectional/Test.idl +34 -0
- data/test/BiDirectional/client.rb +132 -0
- data/test/BiDirectional/run_test.rb +68 -0
- data/test/BiDirectional/server.rb +169 -0
- data/test/CORBA_Services/Naming/BindingIterator/Test.idl +27 -0
- data/test/CORBA_Services/Naming/BindingIterator/client.rb +121 -0
- data/test/CORBA_Services/Naming/BindingIterator/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/BindingIterator/server.rb +109 -0
- data/test/CORBA_Services/Naming/Corbaname/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Corbaname/client.rb +85 -0
- data/test/CORBA_Services/Naming/Corbaname/run_test.rb +88 -0
- data/test/CORBA_Services/Naming/Corbaname/server.rb +135 -0
- data/test/CORBA_Services/Naming/Simple/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Simple/client.rb +84 -0
- data/test/CORBA_Services/Naming/Simple/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/Simple/server.rb +109 -0
- data/test/Collocation/Diamond.idl +39 -0
- data/test/Collocation/run_test.rb +52 -0
- data/test/Collocation/test.rb +195 -0
- data/test/Connect_Timeout/Test.idl +27 -0
- data/test/Connect_Timeout/client.rb +111 -0
- data/test/Connect_Timeout/run_test.rb +52 -0
- data/test/DII/Test.idl +27 -0
- data/test/DII/client.rb +115 -0
- data/test/DII/run_test.rb +69 -0
- data/test/DII/server.rb +95 -0
- data/test/DSI/Test.idl +27 -0
- data/test/DSI/client.rb +66 -0
- data/test/DSI/run_test.rb +69 -0
- data/test/DSI/server.rb +106 -0
- data/test/Exceptions/Test.idl +48 -0
- data/test/Exceptions/client.rb +118 -0
- data/test/Exceptions/run_test.rb +69 -0
- data/test/Exceptions/server.rb +131 -0
- data/test/Hello/Test.idl +27 -0
- data/test/Hello/client.rb +78 -0
- data/test/Hello/run_test.rb +71 -0
- data/test/Hello/server.rb +95 -0
- data/test/IDL_Test/Test.idl +113 -0
- data/test/IDL_Test/Test_inc.idl +17 -0
- data/test/IDL_Test/client.rb +102 -0
- data/test/IDL_Test/run_test.rb +69 -0
- data/test/IDL_Test/server.rb +99 -0
- data/test/IORMap/Test.idl +27 -0
- data/test/IORMap/client.rb +73 -0
- data/test/IORMap/run_test.rb +69 -0
- data/test/IORMap/server.rb +114 -0
- data/test/IORTable/Test.idl +27 -0
- data/test/IORTable/client.rb +75 -0
- data/test/IORTable/run_test.rb +69 -0
- data/test/IORTable/server.rb +130 -0
- data/test/Implicit_Conversion/Test.idl +31 -0
- data/test/Implicit_Conversion/client.rb +110 -0
- data/test/Implicit_Conversion/run_test.rb +69 -0
- data/test/Implicit_Conversion/server.rb +99 -0
- data/test/Multi_Threading/Multiple_ORB/Test.idl +27 -0
- data/test/Multi_Threading/Multiple_ORB/client.rb +82 -0
- data/test/Multi_Threading/Multiple_ORB/run_test.rb +71 -0
- data/test/Multi_Threading/Multiple_ORB/server.rb +108 -0
- data/test/Multi_Threading/Simple/Test.idl +27 -0
- data/test/Multi_Threading/Simple/client.rb +88 -0
- data/test/Multi_Threading/Simple/run_test.rb +69 -0
- data/test/Multi_Threading/Simple/server.rb +118 -0
- data/test/Multi_Threading/Threads/Test.idl +31 -0
- data/test/Multi_Threading/Threads/client.rb +80 -0
- data/test/Multi_Threading/Threads/run_test.rb +76 -0
- data/test/Multi_Threading/Threads/server.rb +119 -0
- data/test/Multi_Threading/Threads/watchdog.rb +87 -0
- data/test/Multiple_Servant_Interfaces/Test.idl +34 -0
- data/test/Multiple_Servant_Interfaces/client.rb +70 -0
- data/test/Multiple_Servant_Interfaces/run_test.rb +69 -0
- data/test/Multiple_Servant_Interfaces/server.rb +102 -0
- data/test/Nil/Test.idl +27 -0
- data/test/Nil/run_test.rb +52 -0
- data/test/Nil/test.rb +78 -0
- data/test/OBV/AbstractInterface/client.rb +179 -0
- data/test/OBV/AbstractInterface/run_test.rb +69 -0
- data/test/OBV/AbstractInterface/server.rb +149 -0
- data/test/OBV/AbstractInterface/test.idl +53 -0
- data/test/OBV/Custom/OBV.idl +18 -0
- data/test/OBV/Custom/OBV_impl.rb +40 -0
- data/test/OBV/Custom/client.rb +86 -0
- data/test/OBV/Custom/run_test.rb +69 -0
- data/test/OBV/Custom/server.rb +100 -0
- data/test/OBV/Simple/OBV.idl +15 -0
- data/test/OBV/Simple/OBV_impl.rb +26 -0
- data/test/OBV/Simple/client.rb +86 -0
- data/test/OBV/Simple/run_test.rb +69 -0
- data/test/OBV/Simple/server.rb +100 -0
- data/test/OBV/Simple_Event/Event.idl +15 -0
- data/test/OBV/Simple_Event/Event_impl.rb +26 -0
- data/test/OBV/Simple_Event/client.rb +86 -0
- data/test/OBV/Simple_Event/run_test.rb +69 -0
- data/test/OBV/Simple_Event/server.rb +100 -0
- data/test/OBV/Supports/client.rb +116 -0
- data/test/OBV/Supports/run_test.rb +69 -0
- data/test/OBV/Supports/server.rb +103 -0
- data/test/OBV/Supports/supports.idl +33 -0
- data/test/OBV/Supports/supports_impl.rb +57 -0
- data/test/OBV/Tree/client.rb +116 -0
- data/test/OBV/Tree/run_test.rb +69 -0
- data/test/OBV/Tree/server.rb +117 -0
- data/test/OBV/Tree/test.idl +32 -0
- data/test/OBV/Truncatable/Extra.idl +27 -0
- data/test/OBV/Truncatable/Truncatable.idl +105 -0
- data/test/OBV/Truncatable/Truncatable_impl.rb +86 -0
- data/test/OBV/Truncatable/client.rb +279 -0
- data/test/OBV/Truncatable/run_test.rb +69 -0
- data/test/OBV/Truncatable/server.rb +89 -0
- data/test/OBV/ValueBox/client.rb +497 -0
- data/test/OBV/ValueBox/run_test.rb +69 -0
- data/test/OBV/ValueBox/server.rb +271 -0
- data/test/OBV/ValueBox/valuebox.idl +101 -0
- data/test/OBV/ValueBox/vb_basic.idl +75 -0
- data/test/OBV/ValueBox/vb_struct.idl +68 -0
- data/test/OBV/ValueBox/vb_union.idl +21 -0
- data/test/Object/Test.idl +27 -0
- data/test/Object/client.rb +103 -0
- data/test/Object/run_test.rb +69 -0
- data/test/Object/server.rb +126 -0
- data/test/POA/Test.idl +27 -0
- data/test/POA/run_test.rb +52 -0
- data/test/POA/test.rb +112 -0
- data/test/Param_Test/Test.idl +182 -0
- data/test/Param_Test/client.rb +277 -0
- data/test/Param_Test/run_test.rb +69 -0
- data/test/Param_Test/server.rb +296 -0
- data/test/Performance/Simple/Test.idl +27 -0
- data/test/Performance/Simple/client.rb +90 -0
- data/test/Performance/Simple/run_test.rb +69 -0
- data/test/Performance/Simple/server.rb +95 -0
- data/test/Policies/Test.idl +27 -0
- data/test/Policies/run_test.rb +52 -0
- data/test/Policies/test.rb +144 -0
- data/test/Timeout/client.rb +207 -0
- data/test/Timeout/run_test.rb +69 -0
- data/test/Timeout/server.rb +109 -0
- data/test/Timeout/test.idl +19 -0
- data/test/lib/assert.rb +43 -0
- data/test/lib/test.rb +542 -0
- data/test/test_runner.rb +193 -0
- metadata +334 -0
data/ext/libr2tao/orb.h
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# orb.h - R2TAO CORBA ORB support
|
|
3
|
+
#
|
|
4
|
+
# Author: Martin Corino
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
|
8
|
+
# included with this program.
|
|
9
|
+
#
|
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
|
11
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
|
12
|
+
#------------------------------------------------------------------*/
|
|
13
|
+
#ifndef __R2TAO_ORB_H
|
|
14
|
+
#define __R2TAO_ORB_H
|
|
15
|
+
|
|
16
|
+
#include "required.h"
|
|
17
|
+
#include "tao/ORB.h"
|
|
18
|
+
|
|
19
|
+
extern void r2tao_Init_ORB();
|
|
20
|
+
|
|
21
|
+
// Ruby CORBA::Native::ORB
|
|
22
|
+
extern R2TAO_EXPORT VALUE r2corba_cORB;
|
|
23
|
+
// Ruby CORBA::ORB
|
|
24
|
+
extern R2TAO_EXPORT VALUE r2tao_cORB;
|
|
25
|
+
|
|
26
|
+
// wraps TAO CORBA::ORB in Ruby CORBA::Native::ORB
|
|
27
|
+
extern R2TAO_EXPORT VALUE r2tao_ORB_t2r(CORBA::ORB_ptr obj);
|
|
28
|
+
// unwraps TAO CORBA::ORB from Ruby CORBA::Native::ORB
|
|
29
|
+
extern R2TAO_EXPORT CORBA::ORB_ptr r2tao_ORB_r2t(VALUE obj);
|
|
30
|
+
|
|
31
|
+
// wraps TAO CORBA::ORB as Ruby CORBA::Native::ORB in CORBA::ORB
|
|
32
|
+
extern R2TAO_EXPORT VALUE r2corba_ORB_t2r(CORBA::ORB_ptr obj);
|
|
33
|
+
// unwraps TAO CORBA::ORB from Ruby CORBA::Native::ORB in CORBA::ORB
|
|
34
|
+
extern R2TAO_EXPORT CORBA::ORB_ptr r2corba_ORB_r2t(VALUE obj);
|
|
35
|
+
|
|
36
|
+
#endif
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// -*- C++ -*-
|
|
2
|
+
/*--------------------------------------------------------------------
|
|
3
|
+
# r2tao_ext.h - R2TAO CORBA basic support
|
|
4
|
+
#
|
|
5
|
+
# Author: Martin Corino
|
|
6
|
+
#
|
|
7
|
+
# This program is free software; you can redistribute it and/or
|
|
8
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
|
9
|
+
# included with this program.
|
|
10
|
+
#
|
|
11
|
+
# Copyright (c) Remedy IT Expertise BV
|
|
12
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
|
13
|
+
#------------------------------------------------------------------*/
|
|
14
|
+
#ifndef R2TAO_EXPORT_H
|
|
15
|
+
#define R2TAO_EXPORT_H
|
|
16
|
+
|
|
17
|
+
#include "ace/config-all.h"
|
|
18
|
+
|
|
19
|
+
#if defined (ACE_AS_STATIC_LIBS) && !defined (R2TAO_HAS_DLL)
|
|
20
|
+
# define R2TAO_HAS_DLL 0
|
|
21
|
+
#endif /* ACE_AS_STATIC_LIBS && R2TAO_HAS_DLL */
|
|
22
|
+
|
|
23
|
+
#if !defined (R2TAO_HAS_DLL)
|
|
24
|
+
# define R2TAO_HAS_DLL 1
|
|
25
|
+
#endif /* ! R2TAO_HAS_DLL */
|
|
26
|
+
|
|
27
|
+
#if defined (R2TAO_HAS_DLL) && (R2TAO_HAS_DLL == 1)
|
|
28
|
+
# if defined (R2TAO_BUILD_DLL)
|
|
29
|
+
# define R2TAO_EXPORT ACE_Proper_Export_Flag
|
|
30
|
+
# define R2TAO_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
|
|
31
|
+
# define R2TAO_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
|
|
32
|
+
# else /* R2TAO_BUILD_DLL */
|
|
33
|
+
# define R2TAO_EXPORT ACE_Proper_Import_Flag
|
|
34
|
+
# define R2TAO_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
|
|
35
|
+
# define R2TAO_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
|
|
36
|
+
# endif /* R2TAO_BUILD_DLL */
|
|
37
|
+
#else /* R2TAO_HAS_DLL == 1 */
|
|
38
|
+
# define R2TAO_EXPORT
|
|
39
|
+
# define R2TAO_SINGLETON_DECLARATION(T)
|
|
40
|
+
# define R2TAO_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
|
|
41
|
+
#endif /* R2TAO_HAS_DLL == 1 */
|
|
42
|
+
|
|
43
|
+
#endif /* R2TAO_EXPORT_H */
|
|
44
|
+
|
|
45
|
+
// End of auto generated file.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# r2tao_ext.h - R2TAO CORBA basic support
|
|
3
|
+
#
|
|
4
|
+
# Author: Martin Corino
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
|
8
|
+
# included with this program.
|
|
9
|
+
#
|
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
|
11
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
|
12
|
+
#------------------------------------------------------------------*/
|
|
13
|
+
#ifndef __R2TAO_EXT_H
|
|
14
|
+
#define __R2TAO_EXT_H
|
|
15
|
+
|
|
16
|
+
#if defined (__cplusplus)
|
|
17
|
+
};
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#if defined (OLD_MSC_VER)
|
|
21
|
+
// un-fudge the version macro here that was fudged
|
|
22
|
+
// in required.h otherwise ACE will complain
|
|
23
|
+
#undef _MSC_VER
|
|
24
|
+
#define _MSC_VER OLD_MSC_VER
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
#include <ace/pre.h>
|
|
28
|
+
|
|
29
|
+
#include <ace/config-all.h>
|
|
30
|
+
|
|
31
|
+
#include <ace/post.h>
|
|
32
|
+
|
|
33
|
+
#if defined (__cplusplus)
|
|
34
|
+
extern "C" {
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#endif
|
|
38
|
+
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# required.h - R2TAO CORBA basic support
|
|
3
|
+
#
|
|
4
|
+
# Author: Martin Corino
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
|
8
|
+
# included with this program.
|
|
9
|
+
#
|
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
|
11
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
|
12
|
+
#------------------------------------------------------------------*/
|
|
13
|
+
|
|
14
|
+
#include "required.h"
|
|
15
|
+
#include "exception.h"
|
|
16
|
+
#include "typecode.h"
|
|
17
|
+
#include "ace/Env_Value_T.h"
|
|
18
|
+
#include "ace/Null_Mutex.h"
|
|
19
|
+
#include "ace/Singleton.h"
|
|
20
|
+
#include "ace/TSS_T.h"
|
|
21
|
+
#include "tao/AnyTypeCode/Any.h"
|
|
22
|
+
#include "tao/DynamicInterface/Unknown_User_Exception.h"
|
|
23
|
+
#include "tao/debug.h"
|
|
24
|
+
|
|
25
|
+
#define RUBY_INVOKE_FUNC RUBY_ALLOC_FUNC
|
|
26
|
+
|
|
27
|
+
R2TAO_EXPORT VALUE r2tao_nsCORBA = 0;
|
|
28
|
+
R2TAO_EXPORT VALUE r2tao_nsCORBA_Native = 0;
|
|
29
|
+
|
|
30
|
+
extern void r2tao_Init_Exception();
|
|
31
|
+
extern void r2tao_Init_Object();
|
|
32
|
+
extern void r2tao_Init_ORB();
|
|
33
|
+
extern void r2tao_Init_Typecode();
|
|
34
|
+
extern void r2tao_init_Values();
|
|
35
|
+
|
|
36
|
+
class R2TAO_ObjectRegistry
|
|
37
|
+
{
|
|
38
|
+
friend class ACE_Singleton<R2TAO_ObjectRegistry, ACE_Null_Mutex>;
|
|
39
|
+
private:
|
|
40
|
+
R2TAO_ObjectRegistry()
|
|
41
|
+
: registry_ (Qnil)
|
|
42
|
+
{
|
|
43
|
+
// create an anchoring object
|
|
44
|
+
R2TAO_ObjectRegistry::registry_anchor_ = Data_Wrap_Struct (rb_cObject, 0, R2TAO_ObjectRegistry::registry_free, this);
|
|
45
|
+
// prevent GC while Ruby lives
|
|
46
|
+
rb_gc_register_address (&R2TAO_ObjectRegistry::registry_anchor_);
|
|
47
|
+
// create registry Hash
|
|
48
|
+
this->registry_ = rb_hash_new ();
|
|
49
|
+
// create an instance variable to hold registry (prevents GC since anchor is registered)
|
|
50
|
+
rb_ivar_set (R2TAO_ObjectRegistry::registry_anchor_, rb_intern ("@registry_"), this->registry_);
|
|
51
|
+
R2TAO_ObjectRegistry::has_singleton_ = true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static VALUE registry_anchor_;
|
|
55
|
+
static bool has_singleton_;
|
|
56
|
+
|
|
57
|
+
public:
|
|
58
|
+
~R2TAO_ObjectRegistry()
|
|
59
|
+
{
|
|
60
|
+
// no need to unregister; as we live as long as Ruby does
|
|
61
|
+
// we had better let Ruby take care of cleaning up otherwise
|
|
62
|
+
// we may end up in a race condition
|
|
63
|
+
// Just mark the registry as destroyed
|
|
64
|
+
R2TAO_ObjectRegistry::has_singleton_ = false;
|
|
65
|
+
this->registry_ = Qnil;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void register_object (VALUE rbobj)
|
|
69
|
+
{
|
|
70
|
+
if (TAO_debug_level > 9)
|
|
71
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_ObjectRegistry::register_object(%@) - reg=%@\n", rbobj, this->registry_));
|
|
72
|
+
|
|
73
|
+
if (!NIL_P(this->registry_))
|
|
74
|
+
{
|
|
75
|
+
rb_hash_aset (this->registry_, rbobj, rbobj);
|
|
76
|
+
}
|
|
77
|
+
else
|
|
78
|
+
{
|
|
79
|
+
if (TAO_debug_level > 1)
|
|
80
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_ObjectRegistry::register_object(%@) - "
|
|
81
|
+
"not registring since registry is nil\n", rbobj));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void unregister_object (VALUE rbobj)
|
|
86
|
+
{
|
|
87
|
+
if (TAO_debug_level > 9)
|
|
88
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_ObjectRegistry::unregister_object(%@) - reg=%@\n", rbobj, this->registry_));
|
|
89
|
+
|
|
90
|
+
if (!NIL_P(this->registry_))
|
|
91
|
+
{
|
|
92
|
+
rb_hash_delete (this->registry_, rbobj);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
static bool has_singleton ();
|
|
97
|
+
|
|
98
|
+
private:
|
|
99
|
+
VALUE registry_;
|
|
100
|
+
|
|
101
|
+
void clear_registry ()
|
|
102
|
+
{
|
|
103
|
+
this->registry_ = Qnil;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static void registry_free(void *ptr)
|
|
107
|
+
{
|
|
108
|
+
// what came first? is registry singleton still there?
|
|
109
|
+
if (R2TAO_ObjectRegistry::has_singleton ())
|
|
110
|
+
{
|
|
111
|
+
// registry anchor is being GC-ed so clean up to prevent illegal access
|
|
112
|
+
R2TAO_ObjectRegistry* objreg = reinterpret_cast<R2TAO_ObjectRegistry*> (ptr);
|
|
113
|
+
objreg->clear_registry ();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
VALUE R2TAO_ObjectRegistry::registry_anchor_ = Qnil;
|
|
120
|
+
bool R2TAO_ObjectRegistry::has_singleton_ = false;
|
|
121
|
+
|
|
122
|
+
bool R2TAO_ObjectRegistry::has_singleton ()
|
|
123
|
+
{
|
|
124
|
+
return R2TAO_ObjectRegistry::has_singleton_;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
typedef ACE_Singleton<R2TAO_ObjectRegistry, ACE_Null_Mutex> R2TAO_OBJECTREGISTRY;
|
|
128
|
+
|
|
129
|
+
#if defined(WIN32) && defined(_DEBUG)
|
|
130
|
+
extern "C" R2TAO_EXPORT void Init_libr2taod()
|
|
131
|
+
#else
|
|
132
|
+
extern "C" R2TAO_EXPORT void Init_libr2tao()
|
|
133
|
+
#endif
|
|
134
|
+
{
|
|
135
|
+
rb_eval_string("puts 'Init_libr2tao start' if $VERBOSE");
|
|
136
|
+
|
|
137
|
+
if (r2tao_nsCORBA) return;
|
|
138
|
+
|
|
139
|
+
// TAO itself only does this when an ORB is initialized; we want it sooner
|
|
140
|
+
if (TAO_debug_level <= 0)
|
|
141
|
+
TAO_debug_level = ACE_Env_Value<u_int> ("TAO_ORB_DEBUG", 0);
|
|
142
|
+
|
|
143
|
+
rb_eval_string("puts 'Init_libr2tao 2' if $VERBOSE");
|
|
144
|
+
|
|
145
|
+
VALUE klass = rb_define_module_under (rb_eval_string ("::R2CORBA"), "TAO");
|
|
146
|
+
rb_define_const (klass, "MAJOR_VERSION", INT2NUM (TAO_MAJOR_VERSION));
|
|
147
|
+
rb_define_const (klass, "MINOR_VERSION", INT2NUM (TAO_MINOR_VERSION));
|
|
148
|
+
rb_define_const (klass, "BETA_VERSION", INT2NUM (TAO_BETA_VERSION));
|
|
149
|
+
rb_define_const (klass, "VERSION", rb_str_new2 (TAO_VERSION));
|
|
150
|
+
rb_define_const (klass, "RUBY_THREAD_SUPPORT",
|
|
151
|
+
#ifdef R2TAO_THREAD_SAFE
|
|
152
|
+
Qtrue
|
|
153
|
+
#else
|
|
154
|
+
Qfalse
|
|
155
|
+
#endif
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
r2tao_nsCORBA = rb_eval_string("::R2CORBA::CORBA");
|
|
159
|
+
|
|
160
|
+
r2tao_nsCORBA_Native = rb_define_module_under (r2tao_nsCORBA, "Native");
|
|
161
|
+
|
|
162
|
+
rb_eval_string("puts 'Init_libr2tao r2tao_Init_Exception' if $VERBOSE");
|
|
163
|
+
|
|
164
|
+
r2tao_Init_Exception();
|
|
165
|
+
|
|
166
|
+
rb_eval_string("puts 'Init_libr2tao r2tao_Init_Object' if $VERBOSE");
|
|
167
|
+
|
|
168
|
+
r2tao_Init_Object();
|
|
169
|
+
|
|
170
|
+
rb_eval_string("puts 'Init_libr2tao r2tao_Init_ORB' if $VERBOSE");
|
|
171
|
+
|
|
172
|
+
r2tao_Init_ORB();
|
|
173
|
+
|
|
174
|
+
rb_eval_string("puts 'Init_libr2tao r2tao_Init_Typecode' if $VERBOSE");
|
|
175
|
+
|
|
176
|
+
r2tao_Init_Typecode();
|
|
177
|
+
|
|
178
|
+
rb_eval_string("puts 'Init_libr2tao r2tao_Init_Values' if $VERBOSE");
|
|
179
|
+
|
|
180
|
+
r2tao_init_Values();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
R2TAO_EXPORT void r2tao_check_type(VALUE x, VALUE t)
|
|
184
|
+
{
|
|
185
|
+
if (rb_obj_is_kind_of(x, t) != Qtrue)
|
|
186
|
+
{
|
|
187
|
+
VALUE rb_dump = rb_funcall (x, rb_intern ("inspect"), 0);
|
|
188
|
+
rb_raise(r2tao_cBAD_PARAM, "wrong argument type %s (expected %s)\n",
|
|
189
|
+
RSTRING_PTR(rb_dump), rb_class2name(t));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
R2TAO_EXPORT void r2tao_register_object(VALUE rbobj)
|
|
194
|
+
{
|
|
195
|
+
R2TAO_OBJECTREGISTRY::instance ()->register_object (rbobj);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
R2TAO_EXPORT void r2tao_unregister_object(VALUE rbobj)
|
|
199
|
+
{
|
|
200
|
+
if (R2TAO_ObjectRegistry::has_singleton ())
|
|
201
|
+
{
|
|
202
|
+
R2TAO_OBJECTREGISTRY::instance ()->unregister_object (rbobj);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
#if defined (R2TAO_THREAD_SAFE)
|
|
207
|
+
|
|
208
|
+
class R2TAO_GVLGuard
|
|
209
|
+
{
|
|
210
|
+
public:
|
|
211
|
+
R2TAO_GVLGuard (bool lock=true) : lock_(lock) { TSSManager::set_indicator (this->lock_); }
|
|
212
|
+
~R2TAO_GVLGuard () { TSSManager::set_indicator (!this->lock_); }
|
|
213
|
+
|
|
214
|
+
static bool gvl_locked (bool start_locked=false)
|
|
215
|
+
{
|
|
216
|
+
if (start_locked && !TSSManager::has_indicator ())
|
|
217
|
+
{
|
|
218
|
+
TSSManager::set_indicator (start_locked);
|
|
219
|
+
}
|
|
220
|
+
return TSSManager::indicator ();
|
|
221
|
+
}
|
|
222
|
+
private:
|
|
223
|
+
bool lock_;
|
|
224
|
+
|
|
225
|
+
class TSSManager
|
|
226
|
+
{
|
|
227
|
+
public:
|
|
228
|
+
TSSManager ()
|
|
229
|
+
{
|
|
230
|
+
gvl_indicator_ = new ACE_TSS< ACE_TSS_Type_Adapter<u_int> > ();
|
|
231
|
+
}
|
|
232
|
+
~TSSManager ()
|
|
233
|
+
{
|
|
234
|
+
delete gvl_indicator_;
|
|
235
|
+
gvl_indicator_ = 0;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
static void set_indicator (bool val)
|
|
239
|
+
{
|
|
240
|
+
if (gvl_indicator_)
|
|
241
|
+
(*gvl_indicator_)->operator u_int & () = (val ? 1 : 0);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
static bool has_indicator ()
|
|
245
|
+
{
|
|
246
|
+
return (gvl_indicator_ && (*gvl_indicator_).ts_object ());
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
static bool indicator ()
|
|
250
|
+
{
|
|
251
|
+
// if the TSS storage has alredy been destroyed we're in the exit procedure and the
|
|
252
|
+
// GVL is always locked
|
|
253
|
+
return (gvl_indicator_ == 0 || (*gvl_indicator_)->operator u_int () == 1);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private:
|
|
257
|
+
static ACE_TSS< ACE_TSS_Type_Adapter<u_int> >* gvl_indicator_;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
static TSSManager tss_gvl_flag_;
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
ACE_TSS< ACE_TSS_Type_Adapter<u_int> >* R2TAO_GVLGuard::TSSManager::gvl_indicator_;
|
|
264
|
+
R2TAO_GVLGuard::TSSManager R2TAO_GVLGuard::tss_gvl_flag_;
|
|
265
|
+
|
|
266
|
+
template <typename FTYPE>
|
|
267
|
+
struct r2tao_gvl_call_arg
|
|
268
|
+
{
|
|
269
|
+
r2tao_gvl_call_arg (FTYPE func, void* data)
|
|
270
|
+
: func_ (func), data_ (data) {}
|
|
271
|
+
FTYPE func_;
|
|
272
|
+
void* data_;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
void* r2tao_call_with_gvl (void *data)
|
|
276
|
+
{
|
|
277
|
+
R2TAO_GVLGuard gvl_guard_;
|
|
278
|
+
r2tao_gvl_call_arg<void*(*)(void*)>& arg = *reinterpret_cast<r2tao_gvl_call_arg<void*(*)(void*)>*> (data);
|
|
279
|
+
return (*arg.func_) (arg.data_);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
# if RUBY_VER_MAJOR < 2
|
|
283
|
+
VALUE r2tao_call_without_gvl (void *data)
|
|
284
|
+
{
|
|
285
|
+
R2TAO_GVLGuard gvl_guard_ (false);
|
|
286
|
+
r2tao_gvl_call_arg<VALUE(*)(void*)>& arg = *reinterpret_cast<r2tao_gvl_call_arg<VALUE(*)(void*)>*> (data);
|
|
287
|
+
return (*arg.func_) (arg.data_);
|
|
288
|
+
}
|
|
289
|
+
# else
|
|
290
|
+
void* r2tao_call_without_gvl (void *data)
|
|
291
|
+
{
|
|
292
|
+
R2TAO_GVLGuard gvl_guard_ (false);
|
|
293
|
+
r2tao_gvl_call_arg<void*(*)(void*)>& arg = *reinterpret_cast<r2tao_gvl_call_arg<void*(*)(void*)>*> (data);
|
|
294
|
+
return (*arg.func_) (arg.data_);
|
|
295
|
+
}
|
|
296
|
+
# endif
|
|
297
|
+
#endif
|
|
298
|
+
|
|
299
|
+
R2TAO_EXPORT void* r2tao_call_thread_safe (void *(*func)(void *), void *data)
|
|
300
|
+
{
|
|
301
|
+
#if defined (R2TAO_THREAD_SAFE)
|
|
302
|
+
if (!R2TAO_GVLGuard::gvl_locked ())
|
|
303
|
+
{
|
|
304
|
+
r2tao_gvl_call_arg<void*(*)(void*)> arg(func, data);
|
|
305
|
+
return rb_thread_call_with_gvl(r2tao_call_with_gvl, &arg);
|
|
306
|
+
}
|
|
307
|
+
#endif
|
|
308
|
+
return (*func) (data);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
R2TAO_EXPORT VALUE r2tao_blocking_call (VALUE (*func)(void*), void*data)
|
|
312
|
+
{
|
|
313
|
+
#if defined (R2TAO_THREAD_SAFE)
|
|
314
|
+
if (R2TAO_GVLGuard::gvl_locked (true))
|
|
315
|
+
{
|
|
316
|
+
r2tao_gvl_call_arg<VALUE(*)(void*)> arg(func, data);
|
|
317
|
+
# if RUBY_VER_MAJOR < 2
|
|
318
|
+
return rb_thread_call_without_gvl(r2tao_call_without_gvl, &arg, RUBY_UBF_IO, 0);
|
|
319
|
+
# else
|
|
320
|
+
void *rc = rb_thread_call_without_gvl(r2tao_call_without_gvl, &arg, RUBY_UBF_IO, 0);
|
|
321
|
+
return reinterpret_cast<VALUE> (rc);
|
|
322
|
+
# endif
|
|
323
|
+
}
|
|
324
|
+
#endif
|
|
325
|
+
return (*func) (data);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
R2TAO_EXPORT VALUE r2tao_blocking_call_ex (VALUE (*func)(void*), void*data,
|
|
329
|
+
void (*unblock_func)(void*), void*unblock_data)
|
|
330
|
+
{
|
|
331
|
+
#if defined (R2TAO_THREAD_SAFE)
|
|
332
|
+
if (R2TAO_GVLGuard::gvl_locked (true))
|
|
333
|
+
{
|
|
334
|
+
r2tao_gvl_call_arg<VALUE(*)(void*)> arg(func, data);
|
|
335
|
+
# if RUBY_VER_MAJOR < 2
|
|
336
|
+
return rb_thread_call_without_gvl(r2tao_call_without_gvl, &arg,
|
|
337
|
+
unblock_func, unblock_data);
|
|
338
|
+
# else
|
|
339
|
+
void *rc = rb_thread_call_without_gvl(r2tao_call_without_gvl, &arg,
|
|
340
|
+
unblock_func, unblock_data);
|
|
341
|
+
return reinterpret_cast<VALUE> (rc);
|
|
342
|
+
# endif
|
|
343
|
+
}
|
|
344
|
+
#else
|
|
345
|
+
ACE_UNUSED_ARG(unblock_func);
|
|
346
|
+
ACE_UNUSED_ARG(unblock_data);
|
|
347
|
+
#endif
|
|
348
|
+
return (*func) (data);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
R2TAO_RBFuncall::R2TAO_RBFuncall (ID fnid, bool throw_on_ex)
|
|
352
|
+
: fn_id_ (fnid),
|
|
353
|
+
throw_on_ex_ (throw_on_ex),
|
|
354
|
+
ex_caught_ (false)
|
|
355
|
+
{
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
R2TAO_RBFuncall::R2TAO_RBFuncall (const char* fn, bool throw_on_ex)
|
|
359
|
+
: fn_id_ (rb_intern (fn)),
|
|
360
|
+
throw_on_ex_ (throw_on_ex),
|
|
361
|
+
ex_caught_ (false)
|
|
362
|
+
{
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
R2TAO_RBFuncall::~R2TAO_RBFuncall ()
|
|
366
|
+
{
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
VALUE R2TAO_RBFuncall::invoke (VALUE rcvr, VALUE args)
|
|
370
|
+
{
|
|
371
|
+
return this->_invoke (FuncArgArray (rcvr, args));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
VALUE R2TAO_RBFuncall::invoke (VALUE rcvr, int argc, VALUE *args)
|
|
375
|
+
{
|
|
376
|
+
return this->_invoke (FuncArgList (rcvr, argc, args));
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
VALUE R2TAO_RBFuncall::invoke (VALUE rcvr)
|
|
380
|
+
{
|
|
381
|
+
return this->_invoke (FuncArgList (rcvr, 0, 0));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
VALUE R2TAO_RBFuncall::_invoke (const FuncArgs& fa)
|
|
385
|
+
{
|
|
386
|
+
static ID interface_repository_id_ID = rb_intern ("_interface_repository_id");;
|
|
387
|
+
|
|
388
|
+
this->ex_caught_ = false; // reset
|
|
389
|
+
|
|
390
|
+
int invoke_state = 0;
|
|
391
|
+
HelperArgs ha (*this, fa);
|
|
392
|
+
VALUE result = rb_protect (RUBY_INVOKE_FUNC (R2TAO_RBFuncall::invoke_helper),
|
|
393
|
+
(VALUE)&ha,
|
|
394
|
+
&invoke_state);
|
|
395
|
+
if (invoke_state)
|
|
396
|
+
{
|
|
397
|
+
if (this->throw_on_ex_)
|
|
398
|
+
{
|
|
399
|
+
// handle exception
|
|
400
|
+
VALUE rexc = rb_gv_get ("$!");
|
|
401
|
+
if (rb_obj_is_kind_of(rexc, r2tao_cUserException) == Qtrue)
|
|
402
|
+
{
|
|
403
|
+
VALUE rextc = rb_eval_string ("R2CORBA::CORBA::Any.typecode_for_any ($!)");
|
|
404
|
+
if (rextc != Qnil)
|
|
405
|
+
{
|
|
406
|
+
CORBA::Any _xval;
|
|
407
|
+
CORBA::TypeCode_ptr _xtc = r2corba_TypeCode_r2t (rextc);
|
|
408
|
+
r2tao_Ruby2Any(_xval, _xtc, rexc);
|
|
409
|
+
throw ::CORBA::UnknownUserException (_xval);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (rb_obj_is_kind_of(rexc, r2tao_cSystemException) == Qtrue)
|
|
414
|
+
{
|
|
415
|
+
VALUE rid = rb_funcall (rexc, interface_repository_id_ID, 0);
|
|
416
|
+
CORBA::SystemException* _exc = TAO::create_system_exception (RSTRING_PTR (rid));
|
|
417
|
+
|
|
418
|
+
_exc->minor (
|
|
419
|
+
static_cast<CORBA::ULong> (NUM2ULONG (rb_iv_get (rexc, "@minor"))));
|
|
420
|
+
_exc->completed (
|
|
421
|
+
static_cast<CORBA::CompletionStatus> (NUM2ULONG (rb_iv_get (rexc, "@completed"))));
|
|
422
|
+
|
|
423
|
+
ACE_Auto_Basic_Ptr<CORBA::SystemException> e_ptr(_exc);
|
|
424
|
+
_exc->_raise ();
|
|
425
|
+
}
|
|
426
|
+
else
|
|
427
|
+
{
|
|
428
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
429
|
+
throw ::CORBA::UNKNOWN (0, CORBA::COMPLETED_MAYBE);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else
|
|
433
|
+
{
|
|
434
|
+
this->ex_caught_ = true;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
else
|
|
438
|
+
{
|
|
439
|
+
return result;
|
|
440
|
+
}
|
|
441
|
+
return Qnil;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
VALUE R2TAO_RBFuncall::FuncArgArray::rb_invoke (ID fnid) const
|
|
445
|
+
{
|
|
446
|
+
return rb_apply (this->receiver_, fnid, this->args_);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
VALUE R2TAO_RBFuncall::FuncArgList::rb_invoke (ID fnid) const
|
|
450
|
+
{
|
|
451
|
+
return rb_funcall2 (this->receiver_, fnid, this->argc_, this->args_);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
VALUE R2TAO_RBFuncall::invoke_inner (const FuncArgs& fnargs)
|
|
455
|
+
{
|
|
456
|
+
return fnargs.rb_invoke (this->fn_id_);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
VALUE R2TAO_RBFuncall::invoke_helper (VALUE arg)
|
|
460
|
+
{
|
|
461
|
+
HelperArgs* ha = reinterpret_cast<HelperArgs*> (arg);
|
|
462
|
+
return ha->caller_.invoke_inner (ha->fnargs_);
|
|
463
|
+
}
|