zeroc-ice 3.6.5 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BZIP2_LICENSE +42 -0
- data/ICE_LICENSE +17 -17
- data/LICENSE +12 -12
- data/bin/slice2rb +1 -1
- data/ext/Communicator.cpp +150 -53
- data/ext/Communicator.h +1 -1
- data/ext/Config.h +2 -12
- data/ext/Connection.cpp +89 -68
- data/ext/Connection.h +1 -1
- data/ext/Endpoint.cpp +16 -45
- data/ext/Endpoint.h +1 -1
- data/ext/ImplicitContext.cpp +1 -5
- data/ext/ImplicitContext.h +1 -1
- data/ext/Init.cpp +4 -1
- data/ext/Logger.cpp +1 -1
- data/ext/Logger.h +1 -1
- data/ext/Operation.cpp +33 -44
- data/ext/Operation.h +1 -1
- data/ext/Properties.cpp +1 -1
- data/ext/Properties.h +1 -1
- data/ext/Proxy.cpp +22 -57
- data/ext/Proxy.h +1 -1
- data/ext/Slice.cpp +5 -5
- data/ext/Slice.h +1 -1
- data/ext/Types.cpp +244 -171
- data/ext/Types.h +118 -66
- data/ext/Util.cpp +13 -9
- data/ext/Util.h +10 -10
- data/ext/ValueFactoryManager.cpp +445 -0
- data/ext/ValueFactoryManager.h +100 -0
- data/ext/extconf.rb +47 -45
- data/ext/ice/bzip2/blocksort.c +1094 -0
- data/ext/ice/bzip2/bzlib.c +1572 -0
- data/ext/ice/bzip2/bzlib.h +282 -0
- data/ext/ice/bzip2/bzlib_private.h +509 -0
- data/ext/ice/bzip2/compress.c +672 -0
- data/ext/ice/bzip2/crctable.c +104 -0
- data/ext/ice/bzip2/decompress.c +646 -0
- data/ext/ice/bzip2/huffman.c +205 -0
- data/ext/ice/bzip2/randtable.c +84 -0
- data/ext/ice/cpp/include/Ice/Application.h +77 -60
- data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
- data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
- data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
- data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
- data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
- data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
- data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
- data/ext/ice/cpp/include/Ice/Config.h +7 -36
- data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
- data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
- data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
- data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
- data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
- data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
- data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
- data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
- data/ext/ice/cpp/include/Ice/Exception.h +66 -56
- data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
- data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
- data/ext/ice/cpp/include/Ice/Format.h +6 -1
- data/ext/ice/cpp/include/Ice/Functional.h +33 -33
- data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
- data/ext/ice/cpp/include/Ice/Handle.h +6 -11
- data/ext/ice/cpp/include/Ice/Ice.h +9 -5
- data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
- data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
- data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
- data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
- data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
- data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
- data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
- data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
- data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
- data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
- data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
- data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
- data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
- data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
- data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
- data/ext/ice/cpp/include/Ice/Object.h +105 -56
- data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
- data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
- data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
- data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
- data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
- data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
- data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
- data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
- data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
- data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
- data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
- data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
- data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
- data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
- data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
- data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
- data/ext/ice/cpp/include/Ice/Service.h +13 -18
- data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
- data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
- data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
- data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
- data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
- data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
- data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
- data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
- data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
- data/ext/ice/cpp/include/Ice/Value.h +104 -0
- data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
- data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
- data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
- data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
- data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
- data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
- data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
- data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
- data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
- data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
- data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
- data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
- data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
- data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
- data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
- data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
- data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
- data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
- data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
- data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
- data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
- data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
- data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
- data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
- data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
- data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
- data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
- data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
- data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
- data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
- data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
- data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
- data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
- data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
- data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
- data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
- data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
- data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
- data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
- data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
- data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
- data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
- data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
- data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
- data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
- data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
- data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
- data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
- data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
- data/ext/ice/cpp/src/Ice/ACM.h +9 -2
- data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
- data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
- data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
- data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
- data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
- data/ext/ice/cpp/src/Ice/Base64.h +1 -1
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
- data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
- data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
- data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
- data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
- data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
- data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
- data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
- data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Connector.h +4 -3
- data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
- data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
- data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
- data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
- data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
- data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
- data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
- data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
- data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
- data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
- data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
- data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
- data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
- data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
- data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
- data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
- data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
- data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
- data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
- data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
- data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
- data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
- data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
- data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
- data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
- data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
- data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
- data/ext/ice/cpp/src/Ice/Instance.h +30 -18
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
- data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
- data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
- data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
- data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
- data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
- data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
- data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
- data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
- data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
- data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
- data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
- data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
- data/ext/ice/cpp/src/Ice/Network.h +100 -23
- data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
- data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
- data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
- data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
- data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
- data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
- data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
- data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
- data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
- data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
- data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
- data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
- data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
- data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
- data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
- data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
- data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
- data/ext/ice/cpp/src/Ice/Reference.h +27 -22
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
- data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
- data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
- data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
- data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
- data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
- data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
- data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
- data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
- data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
- data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
- data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
- data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
- data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
- data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
- data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
- data/ext/ice/cpp/src/Ice/Selector.h +100 -147
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
- data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
- data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
- data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
- data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
- data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
- data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
- data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
- data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
- data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
- data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
- data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
- data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
- data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
- data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
- data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
- data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
- data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
- data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
- data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
- data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
- data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
- data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
- data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
- data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
- data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
- data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
- data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
- data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
- data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
- data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
- data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
- data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
- data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
- data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
- data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
- data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
- data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
- data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
- data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
- data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
- data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
- data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
- data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
- data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
- data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
- data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
- data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
- data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
- data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
- data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
- data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
- data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
- data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
- data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
- data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
- data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
- data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
- data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
- data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
- data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
- data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
- data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
- data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
- data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
- data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
- data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
- data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
- data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
- data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
- data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
- data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
- data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
- data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
- data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
- data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
- data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
- data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
- data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
- data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
- data/ext/ice/cpp/src/Slice/MD5.h +1 -1
- data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
- data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
- data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
- data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
- data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
- data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
- data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
- data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
- data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
- data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
- data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
- data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
- data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
- data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
- data/ext/ice/cpp/src/Slice/Util.h +54 -0
- data/ext/ice/mcpp/Makefile +5 -2
- data/ice.gemspec +2 -7
- data/lib/Glacier2.rb +1 -1
- data/lib/Glacier2/Metrics.rb +7 -46
- data/lib/Glacier2/PermissionsVerifier.rb +24 -95
- data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
- data/lib/Glacier2/Router.rb +32 -74
- data/lib/Glacier2/RouterF.rb +3 -3
- data/lib/Glacier2/SSLInfo.rb +4 -7
- data/lib/Glacier2/Session.rb +88 -307
- data/lib/Ice.rb +83 -52
- data/lib/Ice/BuiltinSequences.rb +4 -4
- data/lib/Ice/Communicator.rb +56 -58
- data/lib/Ice/CommunicatorF.rb +3 -3
- data/lib/Ice/Connection.rb +153 -162
- data/lib/Ice/ConnectionF.rb +3 -3
- data/lib/Ice/Current.rb +4 -11
- data/lib/Ice/Endpoint.rb +57 -133
- data/lib/Ice/EndpointF.rb +3 -3
- data/lib/Ice/EndpointTypes.rb +3 -7
- data/lib/Ice/FacetMap.rb +4 -4
- data/lib/Ice/Identity.rb +5 -8
- data/lib/Ice/ImplicitContext.rb +5 -34
- data/lib/Ice/ImplicitContextF.rb +3 -3
- data/lib/Ice/Instrumentation.rb +23 -275
- data/lib/Ice/InstrumentationF.rb +3 -3
- data/lib/Ice/LocalException.rb +95 -141
- data/lib/Ice/Locator.rb +51 -165
- data/lib/Ice/LocatorF.rb +3 -3
- data/lib/Ice/Logger.rb +5 -34
- data/lib/Ice/LoggerF.rb +3 -3
- data/lib/Ice/Metrics.rb +61 -416
- data/lib/Ice/ObjectAdapter.rb +34 -0
- data/lib/Ice/ObjectAdapterF.rb +3 -3
- data/lib/Ice/ObjectFactory.rb +5 -30
- data/lib/Ice/Plugin.rb +7 -60
- data/lib/Ice/PluginF.rb +3 -3
- data/lib/Ice/Process.rb +16 -52
- data/lib/Ice/ProcessF.rb +3 -3
- data/lib/Ice/Properties.rb +5 -41
- data/lib/Ice/PropertiesAdmin.rb +19 -56
- data/lib/Ice/PropertiesF.rb +3 -3
- data/lib/Ice/RemoteLogger.rb +34 -115
- data/lib/Ice/Router.rb +29 -101
- data/lib/Ice/RouterF.rb +3 -3
- data/lib/Ice/ServantLocator.rb +31 -0
- data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
- data/lib/Ice/SliceChecksumDict.rb +3 -3
- data/lib/Ice/ValueFactory.rb +33 -0
- data/lib/Ice/Version.rb +5 -11
- data/lib/IceBox.rb +1 -1
- data/lib/IceBox/IceBox.rb +44 -148
- data/lib/IceGrid.rb +1 -4
- data/lib/IceGrid/Admin.rb +551 -427
- data/lib/IceGrid/Descriptor.rb +62 -529
- data/lib/IceGrid/Exception.rb +24 -45
- data/lib/IceGrid/FileParser.rb +14 -50
- data/lib/IceGrid/PluginFacade.rb +40 -0
- data/lib/IceGrid/Registry.rb +151 -58
- data/lib/IceGrid/Session.rb +25 -64
- data/lib/IceGrid/UserAccountMapper.rb +14 -50
- data/lib/IcePatch2.rb +1 -1
- data/lib/IcePatch2/FileInfo.rb +5 -11
- data/lib/IcePatch2/FileServer.rb +33 -76
- data/lib/IceStorm.rb +1 -1
- data/lib/IceStorm/IceStorm.rb +79 -206
- data/lib/IceStorm/Metrics.rb +11 -89
- data/slice/Glacier2/Metrics.ice +8 -4
- data/slice/Glacier2/PermissionsVerifier.ice +10 -7
- data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
- data/slice/Glacier2/Router.ice +10 -8
- data/slice/Glacier2/RouterF.ice +7 -4
- data/slice/Glacier2/SSLInfo.ice +8 -5
- data/slice/Glacier2/Session.ice +15 -13
- data/slice/Ice/BuiltinSequences.ice +7 -4
- data/slice/Ice/Communicator.ice +141 -66
- data/slice/Ice/CommunicatorF.ice +7 -4
- data/slice/Ice/Connection.ice +183 -86
- data/slice/Ice/ConnectionF.ice +7 -4
- data/slice/Ice/Current.ice +13 -9
- data/slice/Ice/Endpoint.ice +63 -14
- data/slice/Ice/EndpointF.ice +7 -4
- data/slice/Ice/EndpointTypes.ice +8 -6
- data/slice/Ice/FacetMap.ice +7 -4
- data/slice/Ice/Identity.ice +13 -5
- data/slice/Ice/ImplicitContext.ice +20 -18
- data/slice/Ice/ImplicitContextF.ice +7 -4
- data/slice/Ice/Instrumentation.ice +20 -19
- data/slice/Ice/InstrumentationF.ice +8 -5
- data/slice/Ice/LocalException.ice +87 -87
- data/slice/Ice/Locator.ice +19 -18
- data/slice/Ice/LocatorF.ice +7 -4
- data/slice/Ice/Logger.ice +9 -7
- data/slice/Ice/LoggerF.ice +7 -4
- data/slice/Ice/Metrics.ice +18 -14
- data/slice/Ice/ObjectAdapter.ice +30 -13
- data/slice/Ice/ObjectAdapterF.ice +7 -4
- data/slice/Ice/ObjectFactory.ice +15 -12
- data/slice/Ice/Plugin.ice +9 -6
- data/slice/Ice/PluginF.ice +8 -5
- data/slice/Ice/Process.ice +9 -6
- data/slice/Ice/ProcessF.ice +7 -4
- data/slice/Ice/Properties.ice +15 -12
- data/slice/Ice/PropertiesAdmin.ice +9 -5
- data/slice/Ice/PropertiesF.ice +7 -4
- data/slice/Ice/RemoteLogger.ice +33 -24
- data/slice/Ice/Router.ice +16 -7
- data/slice/Ice/RouterF.ice +7 -4
- data/slice/Ice/ServantLocator.ice +13 -10
- data/slice/Ice/ServantLocatorF.ice +7 -4
- data/slice/Ice/SliceChecksumDict.ice +7 -4
- data/slice/Ice/ValueFactory.ice +127 -0
- data/slice/Ice/Version.ice +9 -5
- data/slice/IceBT/ConnectionInfo.ice +53 -0
- data/slice/IceBT/EndpointInfo.ice +51 -0
- data/slice/IceBT/Types.ice +39 -0
- data/slice/IceBox/IceBox.ice +20 -21
- data/slice/IceDiscovery/IceDiscovery.ice +9 -5
- data/slice/IceGrid/Admin.ice +390 -30
- data/slice/IceGrid/Descriptor.ice +37 -29
- data/slice/IceGrid/Exception.ice +33 -27
- data/slice/IceGrid/FileParser.ice +9 -6
- data/slice/IceGrid/PluginFacade.ice +11 -9
- data/slice/IceGrid/Registry.ice +139 -16
- data/slice/IceGrid/Session.ice +10 -8
- data/slice/IceGrid/UserAccountMapper.ice +9 -6
- data/slice/IceIAP/ConnectionInfo.ice +70 -0
- data/slice/IceIAP/EndpointInfo.ice +64 -0
- data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
- data/slice/IcePatch2/FileInfo.ice +9 -8
- data/slice/IcePatch2/FileServer.ice +17 -13
- data/slice/IceSSL/ConnectionInfo.ice +14 -17
- data/slice/IceSSL/ConnectionInfoF.ice +24 -0
- data/slice/IceSSL/EndpointInfo.ice +9 -30
- data/slice/IceStorm/IceStorm.ice +22 -18
- data/slice/IceStorm/Metrics.ice +9 -5
- metadata +154 -120
- data/ext/ObjectFactory.cpp +0 -140
- data/ext/ObjectFactory.h +0 -50
- data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
- data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
- data/ext/ice/cpp/include/Ice/Connection.h +0 -497
- data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
- data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
- data/ext/ice/cpp/include/Ice/Identity.h +0 -168
- data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
- data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
- data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
- data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
- data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
- data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
- data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
- data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
- data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
- data/ext/ice/cpp/include/Ice/Process.h +0 -574
- data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
- data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
- data/ext/ice/cpp/include/Ice/Router.h +0 -1159
- data/ext/ice/cpp/include/Ice/Stream.h +0 -447
- data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
- data/ext/ice/cpp/include/Ice/Version.h +0 -262
- data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
- data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
- data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
- data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
- data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
- data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
- data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
- data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
- data/ext/ice/cpp/include/Slice/Util.h +0 -56
- data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
- data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
- data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
- data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
- data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
- data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
- data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
- data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
- data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
- data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
- data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
- data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
- data/lib/IceGrid/Locator.rb +0 -106
- data/lib/IceGrid/Observer.rb +0 -572
- data/lib/IceGrid/Query.rb +0 -169
- data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
- data/slice/Freeze/CatalogData.ice +0 -49
- data/slice/Freeze/Connection.ice +0 -121
- data/slice/Freeze/DB.ice +0 -37
- data/slice/Freeze/Evictor.ice +0 -346
- data/slice/Freeze/EvictorF.ice +0 -22
- data/slice/Freeze/EvictorStorage.ice +0 -72
- data/slice/Freeze/Exception.ice +0 -100
- data/slice/Freeze/Transaction.ice +0 -58
- data/slice/Freeze/TransactionalEvictor.ice +0 -50
- data/slice/IceGrid/Locator.ice +0 -57
- data/slice/IceGrid/Observer.ice +0 -395
- data/slice/IceGrid/Query.ice +0 -131
@@ -1,6 +1,6 @@
|
|
1
1
|
// **********************************************************************
|
2
2
|
//
|
3
|
-
// Copyright (c) 2003-
|
3
|
+
// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
|
4
4
|
//
|
5
5
|
// This copy of Ice is licensed to you under the terms described in the
|
6
6
|
// ICE_LICENSE file included in this distribution.
|
@@ -63,6 +63,72 @@ filterOrderedOptionalDataMembers(const DataMemberList& members)
|
|
63
63
|
return result;
|
64
64
|
}
|
65
65
|
|
66
|
+
void
|
67
|
+
sortOptionalParameters(ParamDeclList& params)
|
68
|
+
{
|
69
|
+
//
|
70
|
+
// Sort optional parameters by tag.
|
71
|
+
//
|
72
|
+
class SortFn
|
73
|
+
{
|
74
|
+
public:
|
75
|
+
static bool compare(const ParamDeclPtr& lhs, const ParamDeclPtr& rhs)
|
76
|
+
{
|
77
|
+
return lhs->tag() < rhs->tag();
|
78
|
+
}
|
79
|
+
};
|
80
|
+
params.sort(SortFn::compare);
|
81
|
+
}
|
82
|
+
|
83
|
+
bool
|
84
|
+
isMutableAfterReturnType(const TypePtr& type)
|
85
|
+
{
|
86
|
+
//
|
87
|
+
// Returns true if the type contains data types which can be referenced by user code
|
88
|
+
// and mutated after a dispatch returns.
|
89
|
+
//
|
90
|
+
|
91
|
+
if(ClassDeclPtr::dynamicCast(type))
|
92
|
+
{
|
93
|
+
return true;
|
94
|
+
}
|
95
|
+
|
96
|
+
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
|
97
|
+
if(builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue))
|
98
|
+
{
|
99
|
+
return true;
|
100
|
+
}
|
101
|
+
|
102
|
+
if(SequencePtr::dynamicCast(type) || DictionaryPtr::dynamicCast(type))
|
103
|
+
{
|
104
|
+
return true;
|
105
|
+
}
|
106
|
+
|
107
|
+
StructPtr s = StructPtr::dynamicCast(type);
|
108
|
+
if(s)
|
109
|
+
{
|
110
|
+
return true;
|
111
|
+
}
|
112
|
+
|
113
|
+
return false;
|
114
|
+
}
|
115
|
+
|
116
|
+
void
|
117
|
+
checkDeprecatedType(const UnitPtr& unit, const TypePtr& type)
|
118
|
+
{
|
119
|
+
ClassDeclPtr decl = ClassDeclPtr::dynamicCast(type);
|
120
|
+
if(decl && !decl->isLocal() && decl->isInterface())
|
121
|
+
{
|
122
|
+
unit->warning(Deprecated, "interface by value is deprecated");
|
123
|
+
}
|
124
|
+
|
125
|
+
ProxyPtr proxy = ProxyPtr::dynamicCast(type);
|
126
|
+
if(proxy && !proxy->_class()->isInterface())
|
127
|
+
{
|
128
|
+
unit->warning(Deprecated, "proxy for a class is deprecated");
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
66
132
|
}
|
67
133
|
|
68
134
|
namespace Slice
|
@@ -79,6 +145,7 @@ Unit* unit;
|
|
79
145
|
Slice::DefinitionContext::DefinitionContext(int includeLevel, const StringList& metaData) :
|
80
146
|
_includeLevel(includeLevel), _metaData(metaData), _seenDefinition(false)
|
81
147
|
{
|
148
|
+
initSuppressedWarnings();
|
82
149
|
}
|
83
150
|
|
84
151
|
string
|
@@ -121,6 +188,7 @@ void
|
|
121
188
|
Slice::DefinitionContext::setMetaData(const StringList& metaData)
|
122
189
|
{
|
123
190
|
_metaData = metaData;
|
191
|
+
initSuppressedWarnings();
|
124
192
|
}
|
125
193
|
|
126
194
|
string
|
@@ -143,6 +211,74 @@ Slice::DefinitionContext::getMetaData() const
|
|
143
211
|
return _metaData;
|
144
212
|
}
|
145
213
|
|
214
|
+
void
|
215
|
+
Slice::DefinitionContext::warning(WarningCategory category, const string& file, int line, const string& msg) const
|
216
|
+
{
|
217
|
+
if(!suppressWarning(category))
|
218
|
+
{
|
219
|
+
emitWarning(file, line, msg);
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
void
|
224
|
+
Slice::DefinitionContext::warning(WarningCategory category, const string& file, const string& line, const string& msg) const
|
225
|
+
{
|
226
|
+
if(!suppressWarning(category))
|
227
|
+
{
|
228
|
+
emitWarning(file, line, msg);
|
229
|
+
}
|
230
|
+
}
|
231
|
+
|
232
|
+
bool
|
233
|
+
Slice::DefinitionContext::suppressWarning(WarningCategory category) const
|
234
|
+
{
|
235
|
+
return _suppressedWarnings.find(category) != _suppressedWarnings.end() ||
|
236
|
+
_suppressedWarnings.find(All) != _suppressedWarnings.end();
|
237
|
+
}
|
238
|
+
|
239
|
+
void
|
240
|
+
Slice::DefinitionContext::initSuppressedWarnings()
|
241
|
+
{
|
242
|
+
_suppressedWarnings.clear();
|
243
|
+
const string prefix = "suppress-warning";
|
244
|
+
string value = findMetaData(prefix);
|
245
|
+
if(value == prefix)
|
246
|
+
{
|
247
|
+
_suppressedWarnings.insert(All);
|
248
|
+
}
|
249
|
+
else if(!value.empty())
|
250
|
+
{
|
251
|
+
assert(value.length() > prefix.length());
|
252
|
+
if(value[prefix.length()] == ':')
|
253
|
+
{
|
254
|
+
value = value.substr(prefix.length() + 1);
|
255
|
+
vector<string> result;
|
256
|
+
IceUtilInternal::splitString(value, ",", result);
|
257
|
+
for(vector<string>::iterator p = result.begin(); p != result.end(); ++p)
|
258
|
+
{
|
259
|
+
string s = IceUtilInternal::trim(*p);
|
260
|
+
if(s == "all")
|
261
|
+
{
|
262
|
+
_suppressedWarnings.insert(All);
|
263
|
+
}
|
264
|
+
else if(s == "deprecated")
|
265
|
+
{
|
266
|
+
_suppressedWarnings.insert(Deprecated);
|
267
|
+
}
|
268
|
+
else if(s == "invalid-metadata")
|
269
|
+
{
|
270
|
+
_suppressedWarnings.insert(InvalidMetaData);
|
271
|
+
}
|
272
|
+
else
|
273
|
+
{
|
274
|
+
warning(InvalidMetaData, "", "", string("invalid category `") + s +
|
275
|
+
"' in global metadata suppress-warning");
|
276
|
+
}
|
277
|
+
}
|
278
|
+
}
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
146
282
|
// ----------------------------------------------------------------------
|
147
283
|
// SyntaxTreeBase
|
148
284
|
// ----------------------------------------------------------------------
|
@@ -258,6 +394,11 @@ Slice::Builtin::typeId() const
|
|
258
394
|
return "::Ice::LocalObject";
|
259
395
|
break;
|
260
396
|
}
|
397
|
+
case KindValue:
|
398
|
+
{
|
399
|
+
return "::Ice::Value";
|
400
|
+
break;
|
401
|
+
}
|
261
402
|
}
|
262
403
|
assert(false);
|
263
404
|
return ""; // Keep the compiler happy.
|
@@ -266,7 +407,7 @@ Slice::Builtin::typeId() const
|
|
266
407
|
bool
|
267
408
|
Slice::Builtin::usesClasses() const
|
268
409
|
{
|
269
|
-
return _kind == KindObject;
|
410
|
+
return _kind == KindObject || _kind == KindValue;
|
270
411
|
}
|
271
412
|
|
272
413
|
size_t
|
@@ -283,7 +424,8 @@ Slice::Builtin::minWireSize() const
|
|
283
424
|
8, // KindDouble
|
284
425
|
1, // KindString: at least one byte for an empty string.
|
285
426
|
1, // KindObject: at least one byte (to marshal an index instead of an instance).
|
286
|
-
2
|
427
|
+
2, // KindObjectProxy: at least an empty identity for a nil proxy, that is, 2 bytes.
|
428
|
+
1 // KindValue: at least one byte (to marshal an index instead of an instance).
|
287
429
|
};
|
288
430
|
|
289
431
|
assert(_kind != KindLocalObject);
|
@@ -293,7 +435,7 @@ Slice::Builtin::minWireSize() const
|
|
293
435
|
bool
|
294
436
|
Slice::Builtin::isVariableLength() const
|
295
437
|
{
|
296
|
-
return _kind == KindString || _kind == KindObject || _kind == KindObjectProxy;
|
438
|
+
return _kind == KindString || _kind == KindObject || _kind == KindObjectProxy || _kind == KindValue;
|
297
439
|
}
|
298
440
|
|
299
441
|
Builtin::Kind
|
@@ -320,7 +462,8 @@ const char* Slice::Builtin::builtinTable[] =
|
|
320
462
|
"string",
|
321
463
|
"Object",
|
322
464
|
"Object*",
|
323
|
-
"LocalObject"
|
465
|
+
"LocalObject",
|
466
|
+
"Value"
|
324
467
|
};
|
325
468
|
|
326
469
|
Slice::Builtin::Builtin(const UnitPtr& unit, Kind kind) :
|
@@ -368,12 +511,13 @@ string
|
|
368
511
|
Slice::Contained::flattenedScope() const
|
369
512
|
{
|
370
513
|
string s = scope();
|
371
|
-
string
|
372
|
-
|
514
|
+
string::size_type pos = 0;
|
515
|
+
while((pos = s.find("::", pos)) != string::npos)
|
373
516
|
{
|
374
|
-
|
517
|
+
s.replace(pos, 2, "_");
|
518
|
+
|
375
519
|
}
|
376
|
-
return
|
520
|
+
return s;
|
377
521
|
}
|
378
522
|
|
379
523
|
string
|
@@ -496,12 +640,6 @@ Slice::Contained::operator==(const Contained& rhs) const
|
|
496
640
|
return _scoped == rhs._scoped;
|
497
641
|
}
|
498
642
|
|
499
|
-
bool
|
500
|
-
Slice::Contained::operator!=(const Contained& rhs) const
|
501
|
-
{
|
502
|
-
return _scoped != rhs._scoped;
|
503
|
-
}
|
504
|
-
|
505
643
|
Slice::Contained::Contained(const ContainerPtr& container, const string& name) :
|
506
644
|
SyntaxTreeBase(container->unit()),
|
507
645
|
_container(container),
|
@@ -876,17 +1014,6 @@ Slice::Container::createSequence(const string& name, const TypePtr& type, const
|
|
876
1014
|
{
|
877
1015
|
checkIdentifier(name);
|
878
1016
|
|
879
|
-
if(_unit->profile() == IceE && !local)
|
880
|
-
{
|
881
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
|
882
|
-
if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(type))
|
883
|
-
{
|
884
|
-
string msg = "Sequence `" + name + "' cannot contain object values.";
|
885
|
-
_unit->error(msg);
|
886
|
-
return 0;
|
887
|
-
}
|
888
|
-
}
|
889
|
-
|
890
1017
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
891
1018
|
if(!matches.empty())
|
892
1019
|
{
|
@@ -930,6 +1057,8 @@ Slice::Container::createSequence(const string& name, const TypePtr& type, const
|
|
930
1057
|
_unit->error(msg);
|
931
1058
|
}
|
932
1059
|
|
1060
|
+
checkDeprecatedType(_unit, type);
|
1061
|
+
|
933
1062
|
SequencePtr p = new Sequence(this, name, type, metaData, local);
|
934
1063
|
_contents.push_back(p);
|
935
1064
|
return p;
|
@@ -942,17 +1071,6 @@ Slice::Container::createDictionary(const string& name, const TypePtr& keyType, c
|
|
942
1071
|
{
|
943
1072
|
checkIdentifier(name);
|
944
1073
|
|
945
|
-
if(_unit->profile() == IceE && !local)
|
946
|
-
{
|
947
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(valueType);
|
948
|
-
if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(valueType))
|
949
|
-
{
|
950
|
-
string msg = "Dictionary `" + name + "' cannot contain object values.";
|
951
|
-
_unit->error(msg);
|
952
|
-
return 0;
|
953
|
-
}
|
954
|
-
}
|
955
|
-
|
956
1074
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
957
1075
|
if(!matches.empty())
|
958
1076
|
{
|
@@ -997,7 +1115,7 @@ Slice::Container::createDictionary(const string& name, const TypePtr& keyType, c
|
|
997
1115
|
}
|
998
1116
|
if(containsSequence)
|
999
1117
|
{
|
1000
|
-
_unit->warning("use of sequences in dictionary keys has been deprecated");
|
1118
|
+
_unit->warning(Deprecated, "use of sequences in dictionary keys has been deprecated");
|
1001
1119
|
}
|
1002
1120
|
}
|
1003
1121
|
|
@@ -1015,6 +1133,8 @@ Slice::Container::createDictionary(const string& name, const TypePtr& keyType, c
|
|
1015
1133
|
}
|
1016
1134
|
}
|
1017
1135
|
|
1136
|
+
checkDeprecatedType(_unit, valueType);
|
1137
|
+
|
1018
1138
|
DictionaryPtr p = new Dictionary(this, name, keyType, keyMetaData, valueType, valueMetaData, local);
|
1019
1139
|
_contents.push_back(p);
|
1020
1140
|
return p;
|
@@ -1068,13 +1188,11 @@ EnumeratorPtr
|
|
1068
1188
|
Slice::Container::createEnumerator(const string& name)
|
1069
1189
|
{
|
1070
1190
|
EnumeratorPtr p = validateEnumerator(name);
|
1071
|
-
if(p)
|
1191
|
+
if(!p)
|
1072
1192
|
{
|
1073
|
-
|
1193
|
+
p = new Enumerator(this, name);
|
1194
|
+
_contents.push_back(p);
|
1074
1195
|
}
|
1075
|
-
|
1076
|
-
p = new Enumerator(this, name);
|
1077
|
-
_contents.push_back(p);
|
1078
1196
|
return p;
|
1079
1197
|
}
|
1080
1198
|
|
@@ -1082,13 +1200,11 @@ EnumeratorPtr
|
|
1082
1200
|
Slice::Container::createEnumerator(const string& name, int value)
|
1083
1201
|
{
|
1084
1202
|
EnumeratorPtr p = validateEnumerator(name);
|
1085
|
-
if(p)
|
1203
|
+
if(!p)
|
1086
1204
|
{
|
1087
|
-
|
1205
|
+
p = new Enumerator(this, name, value);
|
1206
|
+
_contents.push_back(p);
|
1088
1207
|
}
|
1089
|
-
|
1090
|
-
p = new Enumerator(this, name, value);
|
1091
|
-
_contents.push_back(p);
|
1092
1208
|
return p;
|
1093
1209
|
}
|
1094
1210
|
|
@@ -1133,15 +1249,17 @@ Slice::Container::createConst(const string name, const TypePtr& constType, const
|
|
1133
1249
|
checkForGlobalDef(name, "constant"); // Don't return here -- we create the constant anyway.
|
1134
1250
|
}
|
1135
1251
|
|
1252
|
+
SyntaxTreeBasePtr resolvedValueType = valueType;
|
1253
|
+
|
1136
1254
|
//
|
1137
|
-
// Validate the constant and its value
|
1255
|
+
// Validate the constant and its value; for enums, find enumerator
|
1138
1256
|
//
|
1139
|
-
if(nt == Real && !validateConstant(name, constType,
|
1257
|
+
if(nt == Real && !validateConstant(name, constType, resolvedValueType, value, true))
|
1140
1258
|
{
|
1141
1259
|
return 0;
|
1142
1260
|
}
|
1143
1261
|
|
1144
|
-
ConstPtr p = new Const(this, name, constType, metaData,
|
1262
|
+
ConstPtr p = new Const(this, name, constType, metaData, resolvedValueType, value, literal);
|
1145
1263
|
_contents.push_back(p);
|
1146
1264
|
return p;
|
1147
1265
|
}
|
@@ -1178,16 +1296,8 @@ Slice::Container::lookupType(const string& scoped, bool printError)
|
|
1178
1296
|
return lookupTypeNoBuiltin(scoped, printError);
|
1179
1297
|
}
|
1180
1298
|
|
1181
|
-
//
|
1182
|
-
// TODO: Hack to keep binary compatibility with Ice 3.6.0, fix properly in Ice 3.7
|
1183
|
-
//
|
1184
|
-
namespace
|
1185
|
-
{
|
1186
|
-
bool ignoreUndefined = false;
|
1187
|
-
}
|
1188
|
-
|
1189
1299
|
TypeList
|
1190
|
-
Slice::Container::lookupTypeNoBuiltin(const string& scoped, bool printError)
|
1300
|
+
Slice::Container::lookupTypeNoBuiltin(const string& scoped, bool printError, bool ignoreUndefined)
|
1191
1301
|
{
|
1192
1302
|
//
|
1193
1303
|
// Remove whitespace.
|
@@ -1304,12 +1414,7 @@ Slice::Container::lookupTypeNoBuiltin(const string& scoped, bool printError)
|
|
1304
1414
|
ContainedPtr contained = ContainedPtr::dynamicCast(this);
|
1305
1415
|
if(contained)
|
1306
1416
|
{
|
1307
|
-
|
1308
|
-
{
|
1309
|
-
ignoreUndefined = true;
|
1310
|
-
}
|
1311
|
-
results = contained->container()->lookupTypeNoBuiltin(sc, printError);
|
1312
|
-
ignoreUndefined = false;
|
1417
|
+
results = contained->container()->lookupTypeNoBuiltin(sc, printError, typeError || ignoreUndefined);
|
1313
1418
|
}
|
1314
1419
|
else if(!typeError)
|
1315
1420
|
{
|
@@ -1433,7 +1538,6 @@ Slice::Container::unit() const
|
|
1433
1538
|
return SyntaxTreeBase::unit();
|
1434
1539
|
}
|
1435
1540
|
|
1436
|
-
|
1437
1541
|
ModuleList
|
1438
1542
|
Slice::Container::modules() const
|
1439
1543
|
{
|
@@ -1539,6 +1643,86 @@ Slice::Container::enums() const
|
|
1539
1643
|
return result;
|
1540
1644
|
}
|
1541
1645
|
|
1646
|
+
EnumeratorList
|
1647
|
+
Slice::Container::enumerators() const
|
1648
|
+
{
|
1649
|
+
EnumeratorList result;
|
1650
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
1651
|
+
{
|
1652
|
+
EnumeratorPtr q = EnumeratorPtr::dynamicCast(*p);
|
1653
|
+
if(q)
|
1654
|
+
{
|
1655
|
+
result.push_back(q);
|
1656
|
+
}
|
1657
|
+
}
|
1658
|
+
return result;
|
1659
|
+
}
|
1660
|
+
|
1661
|
+
//
|
1662
|
+
// Find enumerators using the old unscoped enumerators lookup
|
1663
|
+
//
|
1664
|
+
EnumeratorList
|
1665
|
+
Slice::Container::enumerators(const string& scoped) const
|
1666
|
+
{
|
1667
|
+
EnumeratorList result;
|
1668
|
+
string::size_type lastColon = scoped.rfind(':');
|
1669
|
+
|
1670
|
+
if(lastColon == string::npos)
|
1671
|
+
{
|
1672
|
+
// check all enclosing scopes
|
1673
|
+
ContainerPtr container = const_cast<Container*>(this);
|
1674
|
+
do
|
1675
|
+
{
|
1676
|
+
EnumList enums = container->enums();
|
1677
|
+
for(EnumList::iterator p = enums.begin(); p != enums.end(); ++p)
|
1678
|
+
{
|
1679
|
+
ContainedList cl = (*p)->lookupContained(scoped, false);
|
1680
|
+
if(!cl.empty())
|
1681
|
+
{
|
1682
|
+
result.push_back(EnumeratorPtr::dynamicCast(cl.front()));
|
1683
|
+
}
|
1684
|
+
}
|
1685
|
+
|
1686
|
+
ContainedPtr contained = ContainedPtr::dynamicCast(container);
|
1687
|
+
if(contained)
|
1688
|
+
{
|
1689
|
+
container = contained->container();
|
1690
|
+
}
|
1691
|
+
else
|
1692
|
+
{
|
1693
|
+
container = 0;
|
1694
|
+
}
|
1695
|
+
}
|
1696
|
+
while(result.empty() && container);
|
1697
|
+
}
|
1698
|
+
else
|
1699
|
+
{
|
1700
|
+
// Find the referenced scope
|
1701
|
+
ContainerPtr container = const_cast<Container*>(this);
|
1702
|
+
string scope = scoped.substr(0, scoped.rfind("::"));
|
1703
|
+
ContainedList cl = container->lookupContained(scope, false);
|
1704
|
+
if(!cl.empty())
|
1705
|
+
{
|
1706
|
+
container = ContainerPtr::dynamicCast(cl.front());
|
1707
|
+
if(container)
|
1708
|
+
{
|
1709
|
+
EnumList enums = container->enums();
|
1710
|
+
string name = scoped.substr(lastColon + 1);
|
1711
|
+
for(EnumList::iterator p = enums.begin(); p != enums.end(); ++p)
|
1712
|
+
{
|
1713
|
+
ContainedList cl = (*p)->lookupContained(name, false);
|
1714
|
+
if(!cl.empty())
|
1715
|
+
{
|
1716
|
+
result.push_back(EnumeratorPtr::dynamicCast(cl.front()));
|
1717
|
+
}
|
1718
|
+
}
|
1719
|
+
}
|
1720
|
+
}
|
1721
|
+
}
|
1722
|
+
|
1723
|
+
return result;
|
1724
|
+
}
|
1725
|
+
|
1542
1726
|
ConstList
|
1543
1727
|
Slice::Container::consts() const
|
1544
1728
|
{
|
@@ -1610,7 +1794,7 @@ Slice::Container::hasLocalClassDefsWithAsync() const
|
|
1610
1794
|
ClassDefPtr cl = ClassDefPtr::dynamicCast(*p);
|
1611
1795
|
if(cl && cl->isLocal())
|
1612
1796
|
{
|
1613
|
-
if(cl->hasMetaData("async"))
|
1797
|
+
if(cl->hasMetaData("async-oneway"))
|
1614
1798
|
{
|
1615
1799
|
return true;
|
1616
1800
|
}
|
@@ -1618,7 +1802,7 @@ Slice::Container::hasLocalClassDefsWithAsync() const
|
|
1618
1802
|
OperationList ol = cl->operations();
|
1619
1803
|
for(OperationList::const_iterator q = ol.begin(); q != ol.end(); ++q)
|
1620
1804
|
{
|
1621
|
-
if((*q)->hasMetaData("async"))
|
1805
|
+
if((*q)->hasMetaData("async-oneway"))
|
1622
1806
|
{
|
1623
1807
|
return true;
|
1624
1808
|
}
|
@@ -1677,7 +1861,47 @@ Slice::Container::hasNonLocalExceptions() const
|
|
1677
1861
|
return false;
|
1678
1862
|
}
|
1679
1863
|
|
1864
|
+
bool
|
1865
|
+
Slice::Container::hasStructs() const
|
1866
|
+
{
|
1867
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
1868
|
+
{
|
1869
|
+
StructPtr q = StructPtr::dynamicCast(*p);
|
1870
|
+
if(q)
|
1871
|
+
{
|
1872
|
+
return true;
|
1873
|
+
}
|
1874
|
+
|
1875
|
+
ContainerPtr container = ContainerPtr::dynamicCast(*p);
|
1876
|
+
if(container && container->hasStructs())
|
1877
|
+
{
|
1878
|
+
return true;
|
1879
|
+
}
|
1880
|
+
}
|
1881
|
+
|
1882
|
+
return false;
|
1883
|
+
}
|
1884
|
+
|
1885
|
+
bool
|
1886
|
+
Slice::Container::hasExceptions() const
|
1887
|
+
{
|
1888
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
1889
|
+
{
|
1890
|
+
ExceptionPtr q = ExceptionPtr::dynamicCast(*p);
|
1891
|
+
if(q)
|
1892
|
+
{
|
1893
|
+
return true;
|
1894
|
+
}
|
1895
|
+
|
1896
|
+
ContainerPtr container = ContainerPtr::dynamicCast(*p);
|
1897
|
+
if(container && container->hasExceptions())
|
1898
|
+
{
|
1899
|
+
return true;
|
1900
|
+
}
|
1901
|
+
}
|
1680
1902
|
|
1903
|
+
return false;
|
1904
|
+
}
|
1681
1905
|
|
1682
1906
|
bool
|
1683
1907
|
Slice::Container::hasClassDecls() const
|
@@ -1774,6 +1998,66 @@ Slice::Container::hasClassDefs() const
|
|
1774
1998
|
return false;
|
1775
1999
|
}
|
1776
2000
|
|
2001
|
+
bool
|
2002
|
+
Slice::Container::hasLocalClassDefs() const
|
2003
|
+
{
|
2004
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
2005
|
+
{
|
2006
|
+
ClassDefPtr cl = ClassDefPtr::dynamicCast(*p);
|
2007
|
+
if(cl && cl->isLocal())
|
2008
|
+
{
|
2009
|
+
return true;
|
2010
|
+
}
|
2011
|
+
|
2012
|
+
ContainerPtr container = ContainerPtr::dynamicCast(*p);
|
2013
|
+
if(container && container->hasLocalClassDefs())
|
2014
|
+
{
|
2015
|
+
return true;
|
2016
|
+
}
|
2017
|
+
}
|
2018
|
+
return false;
|
2019
|
+
}
|
2020
|
+
|
2021
|
+
bool
|
2022
|
+
Slice::Container::hasNonLocalInterfaceDefs() const
|
2023
|
+
{
|
2024
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
2025
|
+
{
|
2026
|
+
ClassDefPtr cl = ClassDefPtr::dynamicCast(*p);
|
2027
|
+
if(cl && !cl->isLocal() && (cl->isInterface() || !cl->allOperations().empty()))
|
2028
|
+
{
|
2029
|
+
return true;
|
2030
|
+
}
|
2031
|
+
|
2032
|
+
ContainerPtr container = ContainerPtr::dynamicCast(*p);
|
2033
|
+
if(container && container->hasNonLocalInterfaceDefs())
|
2034
|
+
{
|
2035
|
+
return true;
|
2036
|
+
}
|
2037
|
+
}
|
2038
|
+
return false;
|
2039
|
+
}
|
2040
|
+
|
2041
|
+
bool
|
2042
|
+
Slice::Container::hasValueDefs() const
|
2043
|
+
{
|
2044
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
2045
|
+
{
|
2046
|
+
ClassDefPtr cl = ClassDefPtr::dynamicCast(*p);
|
2047
|
+
if(cl && !cl->isLocal() && !cl->isInterface())
|
2048
|
+
{
|
2049
|
+
return true;
|
2050
|
+
}
|
2051
|
+
|
2052
|
+
ContainerPtr container = ContainerPtr::dynamicCast(*p);
|
2053
|
+
if(container && container->hasValueDefs())
|
2054
|
+
{
|
2055
|
+
return true;
|
2056
|
+
}
|
2057
|
+
}
|
2058
|
+
return false;
|
2059
|
+
}
|
2060
|
+
|
1777
2061
|
bool
|
1778
2062
|
Slice::Container::hasOnlyClassDecls() const
|
1779
2063
|
{
|
@@ -2001,7 +2285,7 @@ Slice::Container::mergeModules()
|
|
2001
2285
|
metaData2.unique();
|
2002
2286
|
if(!checkGlobalMetaData(metaData1, metaData2))
|
2003
2287
|
{
|
2004
|
-
unit()->warning("global metadata mismatch for module `" + mod1->name() + "' in files " +
|
2288
|
+
unit()->warning(All, "global metadata mismatch for module `" + mod1->name() + "' in files " +
|
2005
2289
|
dc1->filename() + " and " + dc2->filename());
|
2006
2290
|
}
|
2007
2291
|
|
@@ -2310,23 +2594,34 @@ Slice::Container::checkIdentifier(const string& name) const
|
|
2310
2594
|
//
|
2311
2595
|
// For rules controlled by a translator option, we don't complain about included files.
|
2312
2596
|
//
|
2313
|
-
|
2597
|
+
|
2598
|
+
DefinitionContextPtr dc = _unit->currentDefinitionContext();
|
2599
|
+
assert(dc);
|
2600
|
+
if(dc->findMetaData("underscore") != "underscore") // no "underscore" global metadata
|
2601
|
+
{
|
2602
|
+
_unit->error("illegal underscore in identifier `" + name + "'");
|
2603
|
+
}
|
2314
2604
|
}
|
2315
2605
|
|
2606
|
+
//
|
2607
|
+
// For rules controlled by a translator option, we don't complain about included files.
|
2608
|
+
//
|
2316
2609
|
if(_unit->currentIncludeLevel() == 0 && !_unit->allowIcePrefix())
|
2317
2610
|
{
|
2318
|
-
|
2319
|
-
|
2320
|
-
//
|
2321
|
-
if(name.size() >= 3)
|
2611
|
+
DefinitionContextPtr dc = _unit->currentDefinitionContext();
|
2612
|
+
assert(dc);
|
2613
|
+
if(dc->findMetaData("ice-prefix") != "ice-prefix") // no "ice-prefix" global metadata
|
2322
2614
|
{
|
2323
|
-
|
2324
|
-
prefix3 += ::tolower(static_cast<unsigned char>(name[0]));
|
2325
|
-
prefix3 += ::tolower(static_cast<unsigned char>(name[1]));
|
2326
|
-
prefix3 += ::tolower(static_cast<unsigned char>(name[2]));
|
2327
|
-
if(prefix3 == "ice")
|
2615
|
+
if(name.size() >= 3)
|
2328
2616
|
{
|
2329
|
-
|
2617
|
+
string prefix3;
|
2618
|
+
prefix3 += ::tolower(static_cast<unsigned char>(name[0]));
|
2619
|
+
prefix3 += ::tolower(static_cast<unsigned char>(name[1]));
|
2620
|
+
prefix3 += ::tolower(static_cast<unsigned char>(name[2]));
|
2621
|
+
if(prefix3 == "ice")
|
2622
|
+
{
|
2623
|
+
_unit->error("illegal identifier `" + name + "': `" + name.substr(0, 3) + "' prefix is reserved");
|
2624
|
+
}
|
2330
2625
|
}
|
2331
2626
|
}
|
2332
2627
|
}
|
@@ -2429,7 +2724,7 @@ Slice::Container::checkGlobalMetaData(const StringList& m1, const StringList& m2
|
|
2429
2724
|
}
|
2430
2725
|
|
2431
2726
|
bool
|
2432
|
-
Slice::Container::validateConstant(const string& name, const TypePtr& type,
|
2727
|
+
Slice::Container::validateConstant(const string& name, const TypePtr& type, SyntaxTreeBasePtr& valueType,
|
2433
2728
|
const string& value, bool isConstant)
|
2434
2729
|
{
|
2435
2730
|
//
|
@@ -2575,6 +2870,7 @@ Slice::Container::validateConstant(const string& name, const TypePtr& type, cons
|
|
2575
2870
|
case Builtin::KindObject:
|
2576
2871
|
case Builtin::KindObjectProxy:
|
2577
2872
|
case Builtin::KindLocalObject:
|
2873
|
+
case Builtin::KindValue:
|
2578
2874
|
{
|
2579
2875
|
assert(false);
|
2580
2876
|
break;
|
@@ -2657,20 +2953,57 @@ Slice::Container::validateConstant(const string& name, const TypePtr& type, cons
|
|
2657
2953
|
}
|
2658
2954
|
else
|
2659
2955
|
{
|
2660
|
-
|
2661
|
-
|
2662
|
-
if(!lte)
|
2956
|
+
if(valueType)
|
2663
2957
|
{
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2958
|
+
EnumeratorPtr lte = EnumeratorPtr::dynamicCast(valueType);
|
2959
|
+
|
2960
|
+
if(!lte)
|
2961
|
+
{
|
2962
|
+
string msg = "type of initializer is incompatible with the type of " + desc + " `" + name + "'";
|
2963
|
+
_unit->error(msg);
|
2964
|
+
return false;
|
2965
|
+
}
|
2966
|
+
EnumeratorList elist = e->enumerators();
|
2967
|
+
if(find(elist.begin(), elist.end(), lte) == elist.end())
|
2968
|
+
{
|
2969
|
+
string msg = "enumerator `" + value + "' is not defined in enumeration `" + e->scoped() + "'";
|
2970
|
+
_unit->error(msg);
|
2971
|
+
return false;
|
2972
|
+
}
|
2667
2973
|
}
|
2668
|
-
|
2669
|
-
if(find(elist.begin(), elist.end(), lte) == elist.end())
|
2974
|
+
else
|
2670
2975
|
{
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2976
|
+
// Check if value designates an enumerator of e
|
2977
|
+
string newVal = value;
|
2978
|
+
string::size_type lastColon = value.rfind(':');
|
2979
|
+
if(lastColon != string::npos && lastColon + 1 < value.length())
|
2980
|
+
{
|
2981
|
+
newVal = value.substr(0, lastColon + 1) + e->name() + "::" + value.substr(lastColon + 1);
|
2982
|
+
}
|
2983
|
+
|
2984
|
+
ContainedList clist = e->lookupContained(newVal, false);
|
2985
|
+
if(clist.empty())
|
2986
|
+
{
|
2987
|
+
string msg = "`" + value + "' does not designate an enumerator of `" + e->scoped() + "'";
|
2988
|
+
_unit->error(msg);
|
2989
|
+
return false;
|
2990
|
+
}
|
2991
|
+
EnumeratorPtr lte = EnumeratorPtr::dynamicCast(clist.front());
|
2992
|
+
if(lte)
|
2993
|
+
{
|
2994
|
+
valueType = lte;
|
2995
|
+
if(lastColon != string::npos)
|
2996
|
+
{
|
2997
|
+
_unit->warning(Deprecated, string("referencing enumerator `") + lte->name() +
|
2998
|
+
"' in its enumeration's enclosing scope is deprecated");
|
2999
|
+
}
|
3000
|
+
}
|
3001
|
+
else
|
3002
|
+
{
|
3003
|
+
string msg = "type of initializer is incompatible with the type of " + desc + " `" + name + "'";
|
3004
|
+
_unit->error(msg);
|
3005
|
+
return false;
|
3006
|
+
}
|
2674
3007
|
}
|
2675
3008
|
}
|
2676
3009
|
}
|
@@ -2697,20 +3030,17 @@ Slice::Container::validateEnumerator(const string& name)
|
|
2697
3030
|
}
|
2698
3031
|
if(matches.front()->name() == name)
|
2699
3032
|
{
|
2700
|
-
string
|
2701
|
-
msg += "' as enumerator";
|
2702
|
-
_unit->error(msg);
|
3033
|
+
_unit->error(string("redefinition of enumerator `") + name + "'");
|
2703
3034
|
}
|
2704
3035
|
else
|
2705
3036
|
{
|
2706
3037
|
string msg = "enumerator `" + name + "' differs only in capitalization from ";
|
2707
|
-
msg +=
|
3038
|
+
msg += "`" + matches.front()->name() + "'";
|
2708
3039
|
_unit->error(msg);
|
2709
3040
|
}
|
2710
3041
|
}
|
2711
3042
|
|
2712
|
-
nameIsLegal(name, "enumerator"); //
|
2713
|
-
|
3043
|
+
nameIsLegal(name, "enumerator"); // Ignore return value.
|
2714
3044
|
return 0;
|
2715
3045
|
}
|
2716
3046
|
|
@@ -3186,6 +3516,12 @@ Slice::ClassDef::createOperation(const string& name,
|
|
3186
3516
|
_unit->error(msg);
|
3187
3517
|
}
|
3188
3518
|
|
3519
|
+
if(!isInterface() && !isLocal() && !_hasOperations)
|
3520
|
+
{
|
3521
|
+
// Only warn for the first operation
|
3522
|
+
_unit->warning(Deprecated, "classes with operations are deprecated");
|
3523
|
+
}
|
3524
|
+
|
3189
3525
|
_hasOperations = true;
|
3190
3526
|
OperationPtr op = new Operation(this, name, returnType, optional, tag, mode);
|
3191
3527
|
_contents.push_back(op);
|
@@ -3199,28 +3535,6 @@ Slice::ClassDef::createDataMember(const string& name, const TypePtr& type, bool
|
|
3199
3535
|
{
|
3200
3536
|
checkIdentifier(name);
|
3201
3537
|
|
3202
|
-
if(_unit->profile() == IceE)
|
3203
|
-
{
|
3204
|
-
if(!isLocal())
|
3205
|
-
{
|
3206
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
|
3207
|
-
if((builtin && builtin->kind() == Builtin::KindObject))
|
3208
|
-
{
|
3209
|
-
string msg = "Class data member `" + name + "' cannot be a value object.";
|
3210
|
-
_unit->error(msg);
|
3211
|
-
return 0;
|
3212
|
-
}
|
3213
|
-
|
3214
|
-
ClassDeclPtr classDecl = ClassDeclPtr::dynamicCast(type);
|
3215
|
-
if(classDecl != 0 && !classDecl->isLocal())
|
3216
|
-
{
|
3217
|
-
string msg = "Class data member `" + name + "' cannot be a value object.";
|
3218
|
-
_unit->error(msg);
|
3219
|
-
return 0;
|
3220
|
-
}
|
3221
|
-
}
|
3222
|
-
}
|
3223
|
-
|
3224
3538
|
assert(!isInterface());
|
3225
3539
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
3226
3540
|
if(!matches.empty())
|
@@ -3303,7 +3617,7 @@ Slice::ClassDef::createDataMember(const string& name, const TypePtr& type, bool
|
|
3303
3617
|
string dv = defaultValue;
|
3304
3618
|
string dl = defaultLiteral;
|
3305
3619
|
|
3306
|
-
if(dlt)
|
3620
|
+
if(dlt || (EnumPtr::dynamicCast(type) && !dv.empty()))
|
3307
3621
|
{
|
3308
3622
|
//
|
3309
3623
|
// Validate the default value.
|
@@ -3336,6 +3650,8 @@ Slice::ClassDef::createDataMember(const string& name, const TypePtr& type, bool
|
|
3336
3650
|
}
|
3337
3651
|
}
|
3338
3652
|
|
3653
|
+
checkDeprecatedType(_unit, type);
|
3654
|
+
|
3339
3655
|
_hasDataMembers = true;
|
3340
3656
|
DataMemberPtr member = new DataMember(this, name, type, optional, tag, dlt, dv, dl);
|
3341
3657
|
_contents.push_back(member);
|
@@ -3456,7 +3772,9 @@ Slice::ClassDef::classDataMembers() const
|
|
3456
3772
|
if(q)
|
3457
3773
|
{
|
3458
3774
|
BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->type());
|
3459
|
-
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
3775
|
+
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
3776
|
+
(builtin && builtin->kind() == Builtin::KindValue) ||
|
3777
|
+
ClassDeclPtr::dynamicCast(q->type()))
|
3460
3778
|
{
|
3461
3779
|
result.push_back(q);
|
3462
3780
|
}
|
@@ -3603,6 +3921,17 @@ Slice::ClassDef::inheritsMetaData(const string& meta) const
|
|
3603
3921
|
return false;
|
3604
3922
|
}
|
3605
3923
|
|
3924
|
+
bool
|
3925
|
+
Slice::ClassDef::hasBaseDataMembers() const
|
3926
|
+
{
|
3927
|
+
if(!_bases.empty() && !_bases.front()->isInterface())
|
3928
|
+
{
|
3929
|
+
return !_bases.front()->allDataMembers().empty();
|
3930
|
+
}
|
3931
|
+
|
3932
|
+
return false;
|
3933
|
+
}
|
3934
|
+
|
3606
3935
|
Contained::ContainedType
|
3607
3936
|
Slice::ClassDef::containedType() const
|
3608
3937
|
{
|
@@ -3645,6 +3974,11 @@ Slice::ClassDef::compactId() const
|
|
3645
3974
|
return _compactId;
|
3646
3975
|
}
|
3647
3976
|
|
3977
|
+
bool
|
3978
|
+
Slice::ClassDef::isDelegate() const
|
3979
|
+
{
|
3980
|
+
return isLocal() && isInterface() && hasMetaData("delegate") && allOperations().size() == 1;
|
3981
|
+
}
|
3648
3982
|
Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, int id, bool intf, const ClassList& bases,
|
3649
3983
|
bool local) :
|
3650
3984
|
SyntaxTreeBase(container->unit()),
|
@@ -3657,6 +3991,17 @@ Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, int
|
|
3657
3991
|
_local(local),
|
3658
3992
|
_compactId(id)
|
3659
3993
|
{
|
3994
|
+
if(!local && !intf)
|
3995
|
+
{
|
3996
|
+
for(ClassList::const_iterator p = _bases.begin(); p != _bases.end(); ++p)
|
3997
|
+
{
|
3998
|
+
if((*p)->isInterface())
|
3999
|
+
{
|
4000
|
+
_unit->warning(Deprecated, "classes implementing interfaces are deprecated");
|
4001
|
+
break;
|
4002
|
+
}
|
4003
|
+
}
|
4004
|
+
}
|
3660
4005
|
//
|
3661
4006
|
// First element of bases may be a class, all others must be
|
3662
4007
|
// interfaces.
|
@@ -3681,13 +4026,13 @@ Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, int
|
|
3681
4026
|
bool
|
3682
4027
|
Slice::Proxy::isLocal() const
|
3683
4028
|
{
|
3684
|
-
return
|
4029
|
+
return _classDecl->isLocal();
|
3685
4030
|
}
|
3686
4031
|
|
3687
4032
|
string
|
3688
4033
|
Slice::Proxy::typeId() const
|
3689
4034
|
{
|
3690
|
-
return
|
4035
|
+
return _classDecl->scoped();
|
3691
4036
|
}
|
3692
4037
|
|
3693
4038
|
bool
|
@@ -3711,13 +4056,13 @@ Slice::Proxy::isVariableLength() const
|
|
3711
4056
|
ClassDeclPtr
|
3712
4057
|
Slice::Proxy::_class() const
|
3713
4058
|
{
|
3714
|
-
return
|
4059
|
+
return _classDecl;
|
3715
4060
|
}
|
3716
4061
|
|
3717
4062
|
Slice::Proxy::Proxy(const ClassDeclPtr& cl) :
|
3718
4063
|
SyntaxTreeBase(cl->unit()),
|
3719
4064
|
Type(cl->unit()),
|
3720
|
-
|
4065
|
+
_classDecl(cl)
|
3721
4066
|
{
|
3722
4067
|
}
|
3723
4068
|
|
@@ -3739,28 +4084,6 @@ Slice::Exception::createDataMember(const string& name, const TypePtr& type, bool
|
|
3739
4084
|
{
|
3740
4085
|
checkIdentifier(name);
|
3741
4086
|
|
3742
|
-
if(_unit->profile() == IceE)
|
3743
|
-
{
|
3744
|
-
if(!isLocal())
|
3745
|
-
{
|
3746
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
|
3747
|
-
if((builtin && builtin->kind() == Builtin::KindObject))
|
3748
|
-
{
|
3749
|
-
string msg = "Exception data member `" + name + "' cannot be a value object.";
|
3750
|
-
_unit->error(msg);
|
3751
|
-
return 0;
|
3752
|
-
}
|
3753
|
-
|
3754
|
-
ClassDeclPtr classDecl = ClassDeclPtr::dynamicCast(type);
|
3755
|
-
if(classDecl != 0 && !classDecl->isLocal())
|
3756
|
-
{
|
3757
|
-
string msg = "Exception data member `" + name + "' cannot be a value object.";
|
3758
|
-
_unit->error(msg);
|
3759
|
-
return 0;
|
3760
|
-
}
|
3761
|
-
}
|
3762
|
-
}
|
3763
|
-
|
3764
4087
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
3765
4088
|
if(!matches.empty())
|
3766
4089
|
{
|
@@ -3830,7 +4153,7 @@ Slice::Exception::createDataMember(const string& name, const TypePtr& type, bool
|
|
3830
4153
|
string dv = defaultValue;
|
3831
4154
|
string dl = defaultLiteral;
|
3832
4155
|
|
3833
|
-
if(dlt)
|
4156
|
+
if(dlt || (EnumPtr::dynamicCast(type) && !dv.empty()))
|
3834
4157
|
{
|
3835
4158
|
//
|
3836
4159
|
// Validate the default value.
|
@@ -3863,6 +4186,8 @@ Slice::Exception::createDataMember(const string& name, const TypePtr& type, bool
|
|
3863
4186
|
}
|
3864
4187
|
}
|
3865
4188
|
|
4189
|
+
checkDeprecatedType(_unit, type);
|
4190
|
+
|
3866
4191
|
DataMemberPtr p = new DataMember(this, name, type, optional, tag, dlt, dv, dl);
|
3867
4192
|
_contents.push_back(p);
|
3868
4193
|
return p;
|
@@ -3925,7 +4250,9 @@ Slice::Exception::classDataMembers() const
|
|
3925
4250
|
if(q)
|
3926
4251
|
{
|
3927
4252
|
BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->type());
|
3928
|
-
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
4253
|
+
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
4254
|
+
(builtin && builtin->kind() == Builtin::KindValue) ||
|
4255
|
+
ClassDeclPtr::dynamicCast(q->type()))
|
3929
4256
|
{
|
3930
4257
|
result.push_back(q);
|
3931
4258
|
}
|
@@ -4059,6 +4386,12 @@ Slice::Exception::inheritsMetaData(const string& meta) const
|
|
4059
4386
|
return false;
|
4060
4387
|
}
|
4061
4388
|
|
4389
|
+
bool
|
4390
|
+
Slice::Exception::hasBaseDataMembers() const
|
4391
|
+
{
|
4392
|
+
return _base && !_base->allDataMembers().empty();
|
4393
|
+
}
|
4394
|
+
|
4062
4395
|
string
|
4063
4396
|
Slice::Exception::kindOf() const
|
4064
4397
|
{
|
@@ -4093,29 +4426,6 @@ Slice::Struct::createDataMember(const string& name, const TypePtr& type, bool op
|
|
4093
4426
|
const SyntaxTreeBasePtr& defaultValueType, const string& defaultValue,
|
4094
4427
|
const string& defaultLiteral)
|
4095
4428
|
{
|
4096
|
-
checkIdentifier(name);
|
4097
|
-
|
4098
|
-
if(_unit->profile() == IceE)
|
4099
|
-
{
|
4100
|
-
if(!isLocal())
|
4101
|
-
{
|
4102
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
|
4103
|
-
if((builtin && builtin->kind() == Builtin::KindObject))
|
4104
|
-
{
|
4105
|
-
string msg = "Struct data member `" + name + "' cannot be a value object.";
|
4106
|
-
_unit->error(msg);
|
4107
|
-
return 0;
|
4108
|
-
}
|
4109
|
-
ClassDeclPtr classDecl = ClassDeclPtr::dynamicCast(type);
|
4110
|
-
if(classDecl != 0 && !classDecl->isLocal())
|
4111
|
-
{
|
4112
|
-
string msg = "Struct data member `" + name + "' cannot be a value object.";
|
4113
|
-
_unit->error(msg);
|
4114
|
-
return 0;
|
4115
|
-
}
|
4116
|
-
}
|
4117
|
-
}
|
4118
|
-
|
4119
4429
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
4120
4430
|
if(!matches.empty())
|
4121
4431
|
{
|
@@ -4167,7 +4477,7 @@ Slice::Struct::createDataMember(const string& name, const TypePtr& type, bool op
|
|
4167
4477
|
string dv = defaultValue;
|
4168
4478
|
string dl = defaultLiteral;
|
4169
4479
|
|
4170
|
-
if(dlt)
|
4480
|
+
if(dlt || (EnumPtr::dynamicCast(type) && !dv.empty()))
|
4171
4481
|
{
|
4172
4482
|
//
|
4173
4483
|
// Validate the default value.
|
@@ -4200,6 +4510,8 @@ Slice::Struct::createDataMember(const string& name, const TypePtr& type, bool op
|
|
4200
4510
|
}
|
4201
4511
|
}
|
4202
4512
|
|
4513
|
+
checkDeprecatedType(_unit, type);
|
4514
|
+
|
4203
4515
|
DataMemberPtr p = new DataMember(this, name, type, optional, tag, dlt, dv, dl);
|
4204
4516
|
_contents.push_back(p);
|
4205
4517
|
return p;
|
@@ -4230,7 +4542,9 @@ Slice::Struct::classDataMembers() const
|
|
4230
4542
|
if(q)
|
4231
4543
|
{
|
4232
4544
|
BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->type());
|
4233
|
-
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
4545
|
+
if((builtin && builtin->kind() == Builtin::KindObject) ||
|
4546
|
+
(builtin && builtin->kind() == Builtin::KindValue) ||
|
4547
|
+
ClassDeclPtr::dynamicCast(q->type()))
|
4234
4548
|
{
|
4235
4549
|
result.push_back(q);
|
4236
4550
|
}
|
@@ -4569,6 +4883,7 @@ Slice::Dictionary::legalKeyType(const TypePtr& type, bool& containsSequence)
|
|
4569
4883
|
case Builtin::KindObject:
|
4570
4884
|
case Builtin::KindObjectProxy:
|
4571
4885
|
case Builtin::KindLocalObject:
|
4886
|
+
case Builtin::KindValue:
|
4572
4887
|
{
|
4573
4888
|
return false;
|
4574
4889
|
break;
|
@@ -4630,71 +4945,9 @@ Slice::Dictionary::Dictionary(const ContainerPtr& container, const string& name,
|
|
4630
4945
|
void
|
4631
4946
|
Slice::Enum::destroy()
|
4632
4947
|
{
|
4633
|
-
_enumerators.clear();
|
4634
4948
|
SyntaxTreeBase::destroy();
|
4635
4949
|
}
|
4636
4950
|
|
4637
|
-
EnumeratorList
|
4638
|
-
Slice::Enum::getEnumerators()
|
4639
|
-
{
|
4640
|
-
return _enumerators;
|
4641
|
-
}
|
4642
|
-
|
4643
|
-
void
|
4644
|
-
Slice::Enum::setEnumerators(const EnumeratorList& ens)
|
4645
|
-
{
|
4646
|
-
_enumerators = ens;
|
4647
|
-
int lastValue = -1;
|
4648
|
-
set<int> values;
|
4649
|
-
for(EnumeratorList::iterator p = _enumerators.begin(); p != _enumerators.end(); ++p)
|
4650
|
-
{
|
4651
|
-
(*p)->_type = this;
|
4652
|
-
|
4653
|
-
if((*p)->_explicitValue)
|
4654
|
-
{
|
4655
|
-
_explicitValue = true;
|
4656
|
-
|
4657
|
-
if((*p)->_value < 0)
|
4658
|
-
{
|
4659
|
-
string msg = "value for enumerator `" + (*p)->name() + "' is out of range";
|
4660
|
-
_unit->error(msg);
|
4661
|
-
}
|
4662
|
-
}
|
4663
|
-
else
|
4664
|
-
{
|
4665
|
-
if(lastValue == Int32Max)
|
4666
|
-
{
|
4667
|
-
string msg = "value for enumerator `" + (*p)->name() + "' is out of range";
|
4668
|
-
_unit->error(msg);
|
4669
|
-
}
|
4670
|
-
|
4671
|
-
//
|
4672
|
-
// If the enumerator was not assigned an explicit value, we automatically assign
|
4673
|
-
// it one more than the previous enumerator.
|
4674
|
-
//
|
4675
|
-
(*p)->_value = lastValue + 1;
|
4676
|
-
}
|
4677
|
-
|
4678
|
-
if(values.count((*p)->_value) != 0)
|
4679
|
-
{
|
4680
|
-
string msg = "enumerator `" + (*p)->name() + "' has a duplicate value";
|
4681
|
-
_unit->error(msg);
|
4682
|
-
}
|
4683
|
-
values.insert((*p)->_value);
|
4684
|
-
|
4685
|
-
lastValue = (*p)->_value;
|
4686
|
-
|
4687
|
-
if(lastValue > _maxValue)
|
4688
|
-
{
|
4689
|
-
_maxValue = lastValue;
|
4690
|
-
}
|
4691
|
-
if(lastValue < _minValue)
|
4692
|
-
{
|
4693
|
-
_minValue = lastValue;
|
4694
|
-
}
|
4695
|
-
}
|
4696
|
-
}
|
4697
|
-
|
4698
4951
|
bool
|
4699
4952
|
Slice::Enum::explicitValue() const
|
4700
4953
|
{
|
@@ -4763,15 +5016,77 @@ Slice::Enum::recDependencies(set<ConstructedPtr>&)
|
|
4763
5016
|
|
4764
5017
|
Slice::Enum::Enum(const ContainerPtr& container, const string& name, bool local) :
|
4765
5018
|
SyntaxTreeBase(container->unit()),
|
5019
|
+
Container(container->unit()),
|
4766
5020
|
Type(container->unit()),
|
4767
5021
|
Contained(container, name),
|
4768
5022
|
Constructed(container, name, local),
|
4769
5023
|
_explicitValue(false),
|
4770
5024
|
_minValue(Int32Max),
|
4771
|
-
_maxValue(0)
|
5025
|
+
_maxValue(0),
|
5026
|
+
_lastValue(-1)
|
4772
5027
|
{
|
4773
5028
|
}
|
4774
5029
|
|
5030
|
+
int
|
5031
|
+
Slice::Enum::newEnumerator(const EnumeratorPtr& p)
|
5032
|
+
{
|
5033
|
+
if(p->explicitValue())
|
5034
|
+
{
|
5035
|
+
_explicitValue = true;
|
5036
|
+
_lastValue = p->value();
|
5037
|
+
|
5038
|
+
if(_lastValue < 0)
|
5039
|
+
{
|
5040
|
+
string msg = "value for enumerator `" + p->name() + "' is out of range";
|
5041
|
+
_unit->error(msg);
|
5042
|
+
}
|
5043
|
+
}
|
5044
|
+
else
|
5045
|
+
{
|
5046
|
+
if(_lastValue == Int32Max)
|
5047
|
+
{
|
5048
|
+
string msg = "value for enumerator `" + p->name() + "' is out of range";
|
5049
|
+
_unit->error(msg);
|
5050
|
+
}
|
5051
|
+
else
|
5052
|
+
{
|
5053
|
+
//
|
5054
|
+
// If the enumerator was not assigned an explicit value, we automatically assign
|
5055
|
+
// it one more than the previous enumerator.
|
5056
|
+
//
|
5057
|
+
++_lastValue;
|
5058
|
+
}
|
5059
|
+
}
|
5060
|
+
|
5061
|
+
bool checkForDuplicates = true;
|
5062
|
+
if(_lastValue > _maxValue)
|
5063
|
+
{
|
5064
|
+
_maxValue = _lastValue;
|
5065
|
+
checkForDuplicates = false;
|
5066
|
+
}
|
5067
|
+
if(_lastValue < _minValue)
|
5068
|
+
{
|
5069
|
+
_minValue = _lastValue;
|
5070
|
+
checkForDuplicates = false;
|
5071
|
+
}
|
5072
|
+
|
5073
|
+
if(checkForDuplicates)
|
5074
|
+
{
|
5075
|
+
EnumeratorList enl = enumerators();
|
5076
|
+
for(EnumeratorList::iterator q = enl.begin(); q != enl.end(); ++q)
|
5077
|
+
{
|
5078
|
+
EnumeratorPtr& r = *q;
|
5079
|
+
if(r != p && r->value() == _lastValue)
|
5080
|
+
{
|
5081
|
+
_unit->error(string("enumerator `") + p->name() + "' has the same value as enumerator `" +
|
5082
|
+
r->name() + "'");
|
5083
|
+
}
|
5084
|
+
}
|
5085
|
+
}
|
5086
|
+
|
5087
|
+
return _lastValue;
|
5088
|
+
}
|
5089
|
+
|
4775
5090
|
// ----------------------------------------------------------------------
|
4776
5091
|
// Enumerator
|
4777
5092
|
// ----------------------------------------------------------------------
|
@@ -4779,7 +5094,7 @@ Slice::Enum::Enum(const ContainerPtr& container, const string& name, bool local)
|
|
4779
5094
|
EnumPtr
|
4780
5095
|
Slice::Enumerator::type() const
|
4781
5096
|
{
|
4782
|
-
return
|
5097
|
+
return EnumPtr::dynamicCast(container());
|
4783
5098
|
}
|
4784
5099
|
|
4785
5100
|
Contained::ContainedType
|
@@ -4818,6 +5133,7 @@ Slice::Enumerator::Enumerator(const ContainerPtr& container, const string& name)
|
|
4818
5133
|
_explicitValue(false),
|
4819
5134
|
_value(-1)
|
4820
5135
|
{
|
5136
|
+
_value = EnumPtr::dynamicCast(container)->newEnumerator(this);
|
4821
5137
|
}
|
4822
5138
|
|
4823
5139
|
Slice::Enumerator::Enumerator(const ContainerPtr& container, const string& name, int value) :
|
@@ -4826,6 +5142,7 @@ Slice::Enumerator::Enumerator(const ContainerPtr& container, const string& name,
|
|
4826
5142
|
_explicitValue(true),
|
4827
5143
|
_value(value)
|
4828
5144
|
{
|
5145
|
+
EnumPtr::dynamicCast(container)->newEnumerator(this);
|
4829
5146
|
}
|
4830
5147
|
|
4831
5148
|
// ----------------------------------------------------------------------
|
@@ -4898,6 +5215,11 @@ Slice::Const::Const(const ContainerPtr& container, const string& name, const Typ
|
|
4898
5215
|
_value(value),
|
4899
5216
|
_literal(literal)
|
4900
5217
|
{
|
5218
|
+
if(valueType == 0)
|
5219
|
+
{
|
5220
|
+
cerr << "const " << name << " created with null valueType" << endl;
|
5221
|
+
}
|
5222
|
+
|
4901
5223
|
}
|
4902
5224
|
|
4903
5225
|
// ----------------------------------------------------------------------
|
@@ -4941,33 +5263,33 @@ Slice::Operation::sendMode() const
|
|
4941
5263
|
}
|
4942
5264
|
}
|
4943
5265
|
|
4944
|
-
|
4945
|
-
Slice::Operation::
|
5266
|
+
bool
|
5267
|
+
Slice::Operation::hasMarshaledResult() const
|
4946
5268
|
{
|
4947
|
-
|
4948
|
-
|
4949
|
-
if(
|
5269
|
+
ClassDefPtr cl = ClassDefPtr::dynamicCast(container());
|
5270
|
+
assert(cl);
|
5271
|
+
if(cl->hasMetaData("marshaled-result") || hasMetaData("marshaled-result"))
|
4950
5272
|
{
|
4951
|
-
|
4952
|
-
assert(cl);
|
4953
|
-
if(!cl->isLocal())
|
5273
|
+
if(returnType() && isMutableAfterReturnType(returnType()))
|
4954
5274
|
{
|
4955
|
-
|
4956
|
-
|
4957
|
-
|
4958
|
-
|
4959
|
-
|
4960
|
-
|
4961
|
-
}
|
4962
|
-
ClassDeclPtr classDecl = ClassDeclPtr::dynamicCast(type);
|
4963
|
-
if(classDecl != 0 && !classDecl->isLocal())
|
5275
|
+
return true;
|
5276
|
+
}
|
5277
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
5278
|
+
{
|
5279
|
+
ParamDeclPtr q = ParamDeclPtr::dynamicCast(*p);
|
5280
|
+
if(q->isOutParam() && isMutableAfterReturnType(q->type()))
|
4964
5281
|
{
|
4965
|
-
|
4966
|
-
_unit->error(msg);
|
4967
|
-
return 0;
|
5282
|
+
return true;
|
4968
5283
|
}
|
4969
5284
|
}
|
4970
5285
|
}
|
5286
|
+
return false;
|
5287
|
+
}
|
5288
|
+
|
5289
|
+
ParamDeclPtr
|
5290
|
+
Slice::Operation::createParamDecl(const string& name, const TypePtr& type, bool isOutParam, bool optional, int tag)
|
5291
|
+
{
|
5292
|
+
checkIdentifier(name);
|
4971
5293
|
|
4972
5294
|
ContainedList matches = _unit->findContents(thisScope() + name);
|
4973
5295
|
if(!matches.empty())
|
@@ -5023,6 +5345,11 @@ Slice::Operation::createParamDecl(const string& name, const TypePtr& type, bool
|
|
5023
5345
|
_unit->error(msg);
|
5024
5346
|
}
|
5025
5347
|
|
5348
|
+
//
|
5349
|
+
// Issue a warning for a deprecated parameter type.
|
5350
|
+
//
|
5351
|
+
checkDeprecatedType(_unit, type);
|
5352
|
+
|
5026
5353
|
if(optional)
|
5027
5354
|
{
|
5028
5355
|
//
|
@@ -5067,6 +5394,74 @@ Slice::Operation::parameters() const
|
|
5067
5394
|
return result;
|
5068
5395
|
}
|
5069
5396
|
|
5397
|
+
ParamDeclList
|
5398
|
+
Slice::Operation::inParameters() const
|
5399
|
+
{
|
5400
|
+
ParamDeclList result;
|
5401
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
5402
|
+
{
|
5403
|
+
ParamDeclPtr q = ParamDeclPtr::dynamicCast(*p);
|
5404
|
+
if(q && !q->isOutParam())
|
5405
|
+
{
|
5406
|
+
result.push_back(q);
|
5407
|
+
}
|
5408
|
+
}
|
5409
|
+
return result;
|
5410
|
+
}
|
5411
|
+
|
5412
|
+
void
|
5413
|
+
Slice::Operation::inParameters(ParamDeclList& required, ParamDeclList& optional) const
|
5414
|
+
{
|
5415
|
+
const ParamDeclList params = inParameters();
|
5416
|
+
for(ParamDeclList::const_iterator pli = params.begin(); pli != params.end(); ++pli)
|
5417
|
+
{
|
5418
|
+
if((*pli)->optional())
|
5419
|
+
{
|
5420
|
+
optional.push_back(*pli);
|
5421
|
+
}
|
5422
|
+
else
|
5423
|
+
{
|
5424
|
+
required.push_back(*pli);
|
5425
|
+
}
|
5426
|
+
}
|
5427
|
+
|
5428
|
+
sortOptionalParameters(optional);
|
5429
|
+
}
|
5430
|
+
|
5431
|
+
ParamDeclList
|
5432
|
+
Slice::Operation::outParameters() const
|
5433
|
+
{
|
5434
|
+
ParamDeclList result;
|
5435
|
+
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
|
5436
|
+
{
|
5437
|
+
ParamDeclPtr q = ParamDeclPtr::dynamicCast(*p);
|
5438
|
+
if(q && q->isOutParam())
|
5439
|
+
{
|
5440
|
+
result.push_back(q);
|
5441
|
+
}
|
5442
|
+
}
|
5443
|
+
return result;
|
5444
|
+
}
|
5445
|
+
|
5446
|
+
void
|
5447
|
+
Slice::Operation::outParameters(ParamDeclList& required, ParamDeclList& optional) const
|
5448
|
+
{
|
5449
|
+
const ParamDeclList params = outParameters();
|
5450
|
+
for(ParamDeclList::const_iterator pli = params.begin(); pli != params.end(); ++pli)
|
5451
|
+
{
|
5452
|
+
if((*pli)->optional())
|
5453
|
+
{
|
5454
|
+
optional.push_back(*pli);
|
5455
|
+
}
|
5456
|
+
else
|
5457
|
+
{
|
5458
|
+
required.push_back(*pli);
|
5459
|
+
}
|
5460
|
+
}
|
5461
|
+
|
5462
|
+
sortOptionalParameters(optional);
|
5463
|
+
}
|
5464
|
+
|
5070
5465
|
ExceptionList
|
5071
5466
|
Slice::Operation::throws() const
|
5072
5467
|
{
|
@@ -5218,13 +5613,26 @@ Slice::Operation::returnsData() const
|
|
5218
5613
|
return false;
|
5219
5614
|
}
|
5220
5615
|
|
5616
|
+
bool
|
5617
|
+
Slice::Operation::returnsMultipleValues() const
|
5618
|
+
{
|
5619
|
+
size_t count = outParameters().size();
|
5620
|
+
|
5621
|
+
if(returnType())
|
5622
|
+
{
|
5623
|
+
++count;
|
5624
|
+
}
|
5625
|
+
|
5626
|
+
return count > 1;
|
5627
|
+
}
|
5628
|
+
|
5221
5629
|
bool
|
5222
5630
|
Slice::Operation::sendsOptionals() const
|
5223
5631
|
{
|
5224
|
-
ParamDeclList pdl =
|
5632
|
+
ParamDeclList pdl = inParameters();
|
5225
5633
|
for(ParamDeclList::const_iterator i = pdl.begin(); i != pdl.end(); ++i)
|
5226
5634
|
{
|
5227
|
-
if(
|
5635
|
+
if((*i)->optional())
|
5228
5636
|
{
|
5229
5637
|
return true;
|
5230
5638
|
}
|
@@ -5263,7 +5671,7 @@ Slice::Operation::attributes() const
|
|
5263
5671
|
}
|
5264
5672
|
if(i == 2)
|
5265
5673
|
{
|
5266
|
-
|
5674
|
+
_unit->warning(InvalidMetaData, "invalid freeze metadata for operation");
|
5267
5675
|
}
|
5268
5676
|
else
|
5269
5677
|
{
|
@@ -5284,7 +5692,7 @@ Slice::Operation::attributes() const
|
|
5284
5692
|
{
|
5285
5693
|
if(result != 0 && (i == int(Supports) || i == int(Never)))
|
5286
5694
|
{
|
5287
|
-
|
5695
|
+
_unit->warning(InvalidMetaData, "invalid freeze metadata for operation");
|
5288
5696
|
}
|
5289
5697
|
else
|
5290
5698
|
{
|
@@ -5298,7 +5706,7 @@ Slice::Operation::attributes() const
|
|
5298
5706
|
|
5299
5707
|
if(i == 4)
|
5300
5708
|
{
|
5301
|
-
|
5709
|
+
_unit->warning(InvalidMetaData, "invalid freeze metadata for operation");
|
5302
5710
|
|
5303
5711
|
//
|
5304
5712
|
// Set default
|
@@ -5356,25 +5764,9 @@ Slice::Operation::Operation(const ContainerPtr& container,
|
|
5356
5764
|
_returnTag(returnTag),
|
5357
5765
|
_mode(mode)
|
5358
5766
|
{
|
5359
|
-
if(
|
5767
|
+
if(returnType)
|
5360
5768
|
{
|
5361
|
-
|
5362
|
-
assert(cl);
|
5363
|
-
if(!cl->isLocal())
|
5364
|
-
{
|
5365
|
-
BuiltinPtr builtin = BuiltinPtr::dynamicCast(returnType);
|
5366
|
-
if((builtin && builtin->kind() == Builtin::KindObject))
|
5367
|
-
{
|
5368
|
-
string msg = "Method `" + name + "' cannot return an object by value.";
|
5369
|
-
_unit->error(msg);
|
5370
|
-
}
|
5371
|
-
ClassDeclPtr classDecl = ClassDeclPtr::dynamicCast(returnType);
|
5372
|
-
if(classDecl != 0 && !classDecl->isLocal())
|
5373
|
-
{
|
5374
|
-
string msg = "Method `" + name + "' cannot return an object by value.";
|
5375
|
-
_unit->error(msg);
|
5376
|
-
}
|
5377
|
-
}
|
5769
|
+
checkDeprecatedType(_unit, returnType);
|
5378
5770
|
}
|
5379
5771
|
}
|
5380
5772
|
|
@@ -5800,13 +6192,6 @@ Slice::Unit::setSeenDefinition()
|
|
5800
6192
|
dc->setSeenDefinition();
|
5801
6193
|
}
|
5802
6194
|
|
5803
|
-
void
|
5804
|
-
Slice::Unit::error(const char* s)
|
5805
|
-
{
|
5806
|
-
emitError(currentFile(), _currentLine, s);
|
5807
|
-
_errors++;
|
5808
|
-
}
|
5809
|
-
|
5810
6195
|
void
|
5811
6196
|
Slice::Unit::error(const string& s)
|
5812
6197
|
{
|
@@ -5815,15 +6200,16 @@ Slice::Unit::error(const string& s)
|
|
5815
6200
|
}
|
5816
6201
|
|
5817
6202
|
void
|
5818
|
-
Slice::Unit::warning(const
|
5819
|
-
{
|
5820
|
-
emitWarning(currentFile(), _currentLine, s);
|
5821
|
-
}
|
5822
|
-
|
5823
|
-
void
|
5824
|
-
Slice::Unit::warning(const string& s) const
|
6203
|
+
Slice::Unit::warning(WarningCategory category, const string& msg) const
|
5825
6204
|
{
|
5826
|
-
|
6205
|
+
if(_definitionContextStack.empty())
|
6206
|
+
{
|
6207
|
+
emitWarning(currentFile(), _currentLine, msg);
|
6208
|
+
}
|
6209
|
+
else
|
6210
|
+
{
|
6211
|
+
_definitionContextStack.top()->warning(category, currentFile(), _currentLine, msg);
|
6212
|
+
}
|
5827
6213
|
}
|
5828
6214
|
|
5829
6215
|
ContainerPtr
|
@@ -6038,6 +6424,11 @@ Slice::Unit::usesNonLocals() const
|
|
6038
6424
|
return true;
|
6039
6425
|
}
|
6040
6426
|
|
6427
|
+
if(_builtins.find(Builtin::KindValue) != _builtins.end())
|
6428
|
+
{
|
6429
|
+
return true;
|
6430
|
+
}
|
6431
|
+
|
6041
6432
|
return false;
|
6042
6433
|
}
|
6043
6434
|
|
@@ -6059,12 +6450,6 @@ Slice::Unit::usesConsts() const
|
|
6059
6450
|
return false;
|
6060
6451
|
}
|
6061
6452
|
|
6062
|
-
FeatureProfile
|
6063
|
-
Slice::Unit::profile() const
|
6064
|
-
{
|
6065
|
-
return _featureProfile;
|
6066
|
-
}
|
6067
|
-
|
6068
6453
|
StringList
|
6069
6454
|
Slice::Unit::includeFiles() const
|
6070
6455
|
{
|
@@ -6084,7 +6469,7 @@ Slice::Unit::allFiles() const
|
|
6084
6469
|
}
|
6085
6470
|
|
6086
6471
|
int
|
6087
|
-
Slice::Unit::parse(const string& filename, FILE* file, bool debug
|
6472
|
+
Slice::Unit::parse(const string& filename, FILE* file, bool debug)
|
6088
6473
|
{
|
6089
6474
|
slice_debug = debug ? 1 : 0;
|
6090
6475
|
|
@@ -6094,7 +6479,6 @@ Slice::Unit::parse(const string& filename, FILE* file, bool debug, Slice::Featur
|
|
6094
6479
|
_currentComment = "";
|
6095
6480
|
_currentLine = 1;
|
6096
6481
|
_currentIncludeLevel = 0;
|
6097
|
-
_featureProfile = profile;
|
6098
6482
|
_topLevelFile = fullPath(filename);
|
6099
6483
|
pushContainer(this);
|
6100
6484
|
pushDefinitionContext();
|
@@ -6130,6 +6514,11 @@ Slice::Unit::parse(const string& filename, FILE* file, bool debug, Slice::Featur
|
|
6130
6514
|
popContainer();
|
6131
6515
|
assert(_definitionContextStack.size() == 1);
|
6132
6516
|
popDefinitionContext();
|
6517
|
+
|
6518
|
+
if(!checkUndefinedTypes())
|
6519
|
+
{
|
6520
|
+
status = EXIT_FAILURE;
|
6521
|
+
}
|
6133
6522
|
}
|
6134
6523
|
|
6135
6524
|
Slice::unit = 0;
|
@@ -6228,6 +6617,113 @@ Slice::Unit::eraseWhiteSpace(string& s)
|
|
6228
6617
|
}
|
6229
6618
|
}
|
6230
6619
|
|
6620
|
+
bool
|
6621
|
+
Slice::Unit::checkUndefinedTypes()
|
6622
|
+
{
|
6623
|
+
class Visitor : public ParserVisitor
|
6624
|
+
{
|
6625
|
+
public:
|
6626
|
+
|
6627
|
+
Visitor(int& errors) :
|
6628
|
+
_errors(errors),
|
6629
|
+
_local(false)
|
6630
|
+
{
|
6631
|
+
}
|
6632
|
+
|
6633
|
+
virtual bool visitClassDefStart(const ClassDefPtr& p)
|
6634
|
+
{
|
6635
|
+
_local = p->isLocal();
|
6636
|
+
return true;
|
6637
|
+
}
|
6638
|
+
|
6639
|
+
virtual bool visitExceptionStart(const ExceptionPtr& p)
|
6640
|
+
{
|
6641
|
+
_local = p->isLocal();
|
6642
|
+
return true;
|
6643
|
+
}
|
6644
|
+
|
6645
|
+
virtual bool visitStructStart(const StructPtr& p)
|
6646
|
+
{
|
6647
|
+
_local = p->isLocal();
|
6648
|
+
return true;
|
6649
|
+
}
|
6650
|
+
|
6651
|
+
virtual void visitOperation(const OperationPtr& p)
|
6652
|
+
{
|
6653
|
+
if(p->returnType())
|
6654
|
+
{
|
6655
|
+
checkUndefined(p->returnType(), "return type", p->file(), p->line());
|
6656
|
+
}
|
6657
|
+
ParamDeclList params = p->parameters();
|
6658
|
+
for(ParamDeclList::const_iterator q = params.begin(); q != params.end(); ++q)
|
6659
|
+
{
|
6660
|
+
checkUndefined((*q)->type(), "parameter " + (*q)->name(), (*q)->file(), (*q)->line());
|
6661
|
+
}
|
6662
|
+
}
|
6663
|
+
|
6664
|
+
virtual void visitParamDecl(const ParamDeclPtr& p)
|
6665
|
+
{
|
6666
|
+
checkUndefined(p->type(), "parameter " + p->name(), p->file(), p->line());
|
6667
|
+
}
|
6668
|
+
|
6669
|
+
virtual void visitDataMember(const DataMemberPtr& p)
|
6670
|
+
{
|
6671
|
+
checkUndefined(p->type(), "member " + p->name(), p->file(), p->line());
|
6672
|
+
}
|
6673
|
+
|
6674
|
+
virtual void visitSequence(const SequencePtr& p)
|
6675
|
+
{
|
6676
|
+
_local = p->isLocal();
|
6677
|
+
checkUndefined(p->type(), "element type", p->file(), p->line());
|
6678
|
+
}
|
6679
|
+
|
6680
|
+
virtual void visitDictionary(const DictionaryPtr& p)
|
6681
|
+
{
|
6682
|
+
_local = p->isLocal();
|
6683
|
+
checkUndefined(p->keyType(), "key type", p->file(), p->line());
|
6684
|
+
checkUndefined(p->valueType(), "value type", p->file(), p->line());
|
6685
|
+
}
|
6686
|
+
|
6687
|
+
private:
|
6688
|
+
|
6689
|
+
void checkUndefined(const TypePtr& type, const string& desc, const string& file, const string& line)
|
6690
|
+
{
|
6691
|
+
//
|
6692
|
+
// See ICE-6867. Any use of a proxy requires the full type definition, as does any
|
6693
|
+
// use of a class in a non-local context.
|
6694
|
+
//
|
6695
|
+
ProxyPtr p = ProxyPtr::dynamicCast(type);
|
6696
|
+
if(p)
|
6697
|
+
{
|
6698
|
+
const ClassDeclPtr cl = p->_class();
|
6699
|
+
if(!cl->definition())
|
6700
|
+
{
|
6701
|
+
ostringstream ostr;
|
6702
|
+
ostr << desc << " uses a proxy for undefined type `" << cl->scoped() << "'";
|
6703
|
+
emitError(file, line, ostr.str());
|
6704
|
+
_errors++;
|
6705
|
+
}
|
6706
|
+
}
|
6707
|
+
|
6708
|
+
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
|
6709
|
+
if(cl && !cl->definition() && !_local)
|
6710
|
+
{
|
6711
|
+
ostringstream ostr;
|
6712
|
+
ostr << desc << " refers to undefined type `" << cl->scoped() << "'";
|
6713
|
+
emitError(file, line, ostr.str());
|
6714
|
+
_errors++;
|
6715
|
+
}
|
6716
|
+
}
|
6717
|
+
|
6718
|
+
int& _errors;
|
6719
|
+
bool _local;
|
6720
|
+
};
|
6721
|
+
|
6722
|
+
Visitor v(_errors);
|
6723
|
+
visit(&v, true);
|
6724
|
+
return _errors == 0;
|
6725
|
+
}
|
6726
|
+
|
6231
6727
|
// ----------------------------------------------------------------------
|
6232
6728
|
// CICompare
|
6233
6729
|
// ----------------------------------------------------------------------
|
@@ -6270,7 +6766,6 @@ Slice::cICompare(const std::string& s1, const std::string& s2)
|
|
6270
6766
|
}
|
6271
6767
|
#endif
|
6272
6768
|
|
6273
|
-
|
6274
6769
|
// ----------------------------------------------------------------------
|
6275
6770
|
// DerivedToBaseCompare
|
6276
6771
|
// ----------------------------------------------------------------------
|