VirtualBox

Changeset 72973 in vbox


Ignore:
Timestamp:
Jul 8, 2018 1:23:58 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123525
Message:

Main: Some early sketches on how to get proper C++ enums with xpidl.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/com/array.h

    r70385 r72973  
    236236
    237237    /** Initializes memory for aElem. */
    238     static void Init(T &aElem) { aElem = 0; }
     238    static void Init(T &aElem) { aElem = (T)0; }
    239239
    240240    /** Initializes memory occupied by aElem. */
  • trunk/src/VBox/Main/idl/comimpl.xsl

    r60977 r72973  
    303303    <xsl:choose>
    304304      <xsl:when test="@safearray='yes'">
    305          <xsl:variable name="elemtype">
    306            <xsl:call-template name="typeIdl2Back">
    307              <xsl:with-param name="type" select="@type" />
    308              <xsl:with-param name="safearray" select="''" />
    309              <xsl:with-param name="dir" select="'in'" />
    310            </xsl:call-template>
    311          </xsl:variable>
    312          <xsl:value-of select="       '#ifdef RT_OS_WINDOWS&#10;'"/>
    313          <xsl:value-of select="concat('              SAFEARRAY *aPtr_', @name, ' = va_arg(args, SAFEARRAY *);&#10;')"/>
    314          <xsl:value-of select="concat('              com::SafeArray&lt;', $elemtype,'&gt;   aArr_', @name, '(aPtr_', @name, ');&#10;')"/>
    315          <xsl:value-of select="       '#else&#10;'"/>
    316          <xsl:value-of select="concat('              PRUint32 aArrSize_', @name, ' = va_arg(args, PRUint32);&#10;')"/>
    317          <xsl:value-of select="concat('              void*    aPtr_', @name, ' = va_arg(args, void*);&#10;')"/>
    318          <xsl:value-of select="concat('              com::SafeArray&lt;', $elemtype,'&gt;   aArr_', @name, '(aArrSize_', @name, ', (', $elemtype,'*)aPtr_', @name, ');&#10;')"/>
    319          <xsl:value-of select="       '#endif&#10;'"/>
    320          <xsl:value-of select="concat('              ',$obj, '->set_', @name, '(ComSafeArrayAsInParam(aArr_', @name, '));&#10;')"/>
     305        <xsl:variable name="elemtype">
     306          <xsl:call-template name="typeIdl2Back">
     307            <xsl:with-param name="type" select="@type" />
     308            <xsl:with-param name="safearray" select="''" />
     309            <xsl:with-param name="dir" select="'in'" />
     310          </xsl:call-template>
     311        </xsl:variable>
     312        <xsl:value-of select="       '#ifdef RT_OS_WINDOWS&#10;'"/>
     313        <xsl:value-of select="concat('              SAFEARRAY *aPtr_', @name, ' = va_arg(args, SAFEARRAY *);&#10;')"/>
     314        <xsl:value-of select="concat('              com::SafeArray&lt;', $elemtype,'&gt;   aArr_', @name, '(aPtr_', @name, ');&#10;')"/>
     315        <xsl:value-of select="       '#else&#10;'"/>
     316        <xsl:value-of select="concat('              PRUint32 aArrSize_', @name, ' = va_arg(args, PRUint32);&#10;')"/>
     317        <xsl:value-of select="concat('              void*    aPtr_', @name, ' = va_arg(args, void*);&#10;')"/>
     318        <xsl:value-of select="concat('              com::SafeArray&lt;', $elemtype,'&gt;   aArr_', @name, '(aArrSize_', @name, ', (', $elemtype,'*)aPtr_', @name, ');&#10;')"/>
     319        <xsl:value-of select="       '#endif&#10;'"/>
     320        <xsl:value-of select="concat('              ',$obj, '->set_', @name, '(ComSafeArrayAsInParam(aArr_', @name, '));&#10;')"/>
     321      </xsl:when>
     322      <xsl:when test="substring($aType, string-length($aType) - 1) = '_T'"> <!-- To avoid pedantic gcc warnings/errors. -->
     323        <xsl:value-of select="       '#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK&#10;'"/>
     324        <xsl:value-of select="concat('              ',$aTypeName, ' = (',$aType,')va_arg(args, int);&#10;')"/>
     325        <xsl:value-of select="       '#else&#10;'"/>
     326        <xsl:value-of select="concat('              ',$aTypeName, ' = va_arg(args, ',$aType,');&#10;')"/>
     327        <xsl:value-of select="       '#endif&#10;'"/>
     328        <xsl:value-of select="concat('              ',$obj, '->set_', @name, '(',$aName, ');&#10;')"/>
    321329      </xsl:when>
    322330      <xsl:otherwise>
  • trunk/src/VBox/Main/idl/xpidl.xsl

    r69379 r72973  
    2323
    2424<xsl:include href="typemap-shared.inc.xsl"/>
     25
     26
     27<!-- - - - - - - - - - - - - - - - - - - - - - -
     28   XSLT parameters
     29 - - - - - - - - - - - - - - - - - - - - - - -->
     30
     31<!-- xpidl doesn't support enums. This parameter performs certain hacks that helps
     32     us bridge the gap and get similar behaviour as msidl.
     33
     34     The https://bugzilla.mozilla.org/show_bug.cgi?id=8781 bug discusses why xpidl
     35     doesn't do enums.  It boils down to the gcc short-enum option and similar
     36     portability concerns.
     37 -->
     38<xsl:param name="g_fHackEnumsOntoCppEnums" select="'no'"/>
     39
    2540
    2641<!--
     
    701716  </xsl:for-each>
    702717  <xsl:text>};&#x0A;&#x0A;</xsl:text>
    703   <!-- -->
    704   <xsl:value-of select="concat('/* cross-platform type name for ', @name, ' */&#x0A;')"/>
    705   <xsl:text>%{C++&#x0A;</xsl:text>
    706   <xsl:value-of select="concat('#define ', @name, '_T', ' ',
    707                                'PRUint32&#x0A;')"/>
    708   <xsl:text>%}&#x0A;&#x0A;</xsl:text>
    709   <!-- -->
    710   <xsl:value-of select="concat('/* cross-platform constants for ', @name, ' */&#x0A;')"/>
    711   <xsl:text>%{C++&#x0A;</xsl:text>
    712   <xsl:for-each select="const">
    713     <xsl:value-of select="concat('#define ', ../@name, '_', @name, ' ',
    714                                  ../@name, '::', @name, '&#x0A;')"/>
    715   </xsl:for-each>
    716   <xsl:text>%}&#x0A;&#x0A;</xsl:text>
     718  <xsl:choose>
     719    <xsl:when test="$g_fHackEnumsOntoCppEnums = 'yes'">
     720      <xsl:text>
     721/* IDL typedef for enum ', @name, ' */
     722typedef PRUint32 </xsl:text><xsl:value-of select="concat(@name, '_EnumT')" /><xsl:text>;
     723
     724/* C++ enum type name for ', @name, ' */
     725%{C++
     726typedef enum </xsl:text>
     727      <xsl:value-of select="concat(@name, '_T')" />
     728      <xsl:text> {
     729</xsl:text>
     730      <xsl:for-each select="const">
     731        <xsl:value-of select="concat('    ', ../@name, '_', @name, ' = ', ../@name, '::', @name, ',&#x0A;')"/>
     732      </xsl:for-each>
     733      <xsl:value-of select="concat('    ', @name, '_32BitHack = 0x7fffffff', '&#x0A;')"/>
     734      <xsl:text>} </xsl:text><xsl:value-of select="concat(@name, '_T')"/><xsl:text>;
     735#ifdef AssertCompileSize
     736AssertCompileSize(</xsl:text><xsl:value-of select="concat(@name, '_T')"/><xsl:text>, sizeof(PRUint32));
     737#endif
     738/* Use the preprocessor to replace the IDL enum typedef with our C++ enum so it will
     739   behave just like we had real enum support in xpidl or if were using msidl. */
     740#define </xsl:text><xsl:value-of select="concat(@name, '_EnumT ', @name, '_T')" /><xsl:text>
     741#ifndef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     742# define VBOX_WITH_XPCOM_CPP_ENUM_HACK 1
     743#endif
     744%}
     745
     746</xsl:text>
     747    </xsl:when>
     748
     749    <xsl:otherwise>
     750      <!-- -->
     751      <xsl:value-of select="concat('/* cross-platform type name for ', @name, ' */&#x0A;')"/>
     752      <xsl:text>%{C++&#x0A;</xsl:text>
     753      <xsl:value-of select="concat('#define ', @name, '_T', ' ',
     754                                   'PRUint32&#x0A;')"/>
     755      <xsl:text>%}&#x0A;&#x0A;</xsl:text>
     756      <!-- -->
     757      <xsl:value-of select="concat('/* cross-platform constants for ', @name, ' */&#x0A;')"/>
     758      <xsl:text>%{C++&#x0A;</xsl:text>
     759      <xsl:for-each select="const">
     760        <xsl:value-of select="concat('#define ', ../@name, '_', @name, ' ',
     761                                     ../@name, '::', @name, '&#x0A;')"/>
     762      </xsl:for-each>
     763      <xsl:text>%}&#x0A;&#x0A;</xsl:text>
     764    </xsl:otherwise>
     765  </xsl:choose>
    717766</xsl:template>
    718767
     
    902951              (ancestor::library/application/if[@target=$self_target]/enum[@name=current()])
    903952            ">
    904               <xsl:text>PRUint32</xsl:text>
     953              <xsl:choose>
     954                <xsl:when test="$g_fHackEnumsOntoCppEnums = 'yes'">
     955                  <xsl:value-of select="concat(., '_EnumT')" />
     956                </xsl:when>
     957                <xsl:otherwise>
     958                  <xsl:text>PRUint32</xsl:text>
     959                </xsl:otherwise>
     960              </xsl:choose>
    905961            </xsl:when>
    906962            <!-- custom interface types -->
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r72919 r72973  
    25792579                case NetworkAdapterType_Virtio:
    25802580                    break;
    2581                 case NetworkAdapterType_Null: AssertFailedBreak(); /* Shut up MSC */
     2581                case NetworkAdapterType_Null:      AssertFailedBreak(); /* (compiler warnings) */
     2582#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     2583                case NetworkAdapterType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
     2584#endif
    25822585            }
    25832586
     
    28672870                        InsertConfigString (pCfg, "DebugPathOut", strDebugPathOut);
    28682871                }
     2872                default: AssertFailedBreak();
    28692873            }
    28702874
  • trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp

    r71825 r72973  
    13321332             * flags untouched. */
    13331333            break;
     1334#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     1335        case ProcessStatus_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
     1336#endif
    13341337    }
    13351338
  • trunk/src/VBox/Main/src-server/ApplianceImpl.cpp

    r72902 r72973  
    323323        case NetworkAttachmentType_NATNetwork: strType = "NATNetwork"; break;
    324324        case NetworkAttachmentType_Null: strType = "Null"; break;
     325#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     326        case NetworkAttachmentType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
     327#endif
    325328    }
    326329    return strType;
     
    14851488            case VirtualSystemDescriptionValueType_Auto: aValues[i]  = vsde->strVBoxCurrent; break;
    14861489            case VirtualSystemDescriptionValueType_ExtraConfig: aValues[i] = vsde->strExtraConfigCurrent; break;
     1490#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     1491            case VirtualSystemDescriptionValueType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
     1492#endif
    14871493        }
    14881494    }
  • trunk/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp

    r69500 r72973  
    175175        m.realIPV6PrefixLength = m.IPV6NetworkMaskPrefixLength = iPrefixIPv6;
    176176        m.hardwareAddress = Bstr(Utf8StrFmt("%RTmac", &info.MACAddress));
    177 #ifdef RT_OS_WINDOWS
    178         m.mediumType = (HostNetworkInterfaceMediumType)info.enmMediumType;
    179         m.status = (HostNetworkInterfaceStatus)info.enmStatus;
    180 #else /* !RT_OS_WINDOWS */
    181         m.mediumType = info.enmMediumType;
    182         m.status = info.enmStatus;
    183 #endif /* !RT_OS_WINDOWS */
     177        AssertCompile((unsigned)NETIF_T_UNKNOWN == (unsigned)HostNetworkInterfaceMediumType_Unknown);
     178        m.mediumType = (HostNetworkInterfaceMediumType_T)info.enmMediumType;
     179        AssertCompile((unsigned)NETIF_S_UNKNOWN == (unsigned)HostNetworkInterfaceStatus_Unknown);
     180        m.status = (HostNetworkInterfaceStatus_T)info.enmStatus;
    184181        m.speedMbits = info.uSpeedMbits;
    185182        m.wireless = info.fWireless;
     
    239236    m.dhcpEnabled = pIf->fDhcpEnabled;
    240237    m.hardwareAddress = Bstr(Utf8StrFmt("%RTmac", &pIf->MACAddress));
    241 #ifdef RT_OS_WINDOWS
    242     m.mediumType = (HostNetworkInterfaceMediumType)pIf->enmMediumType;
    243     m.status = (HostNetworkInterfaceStatus)pIf->enmStatus;
    244 #else /* !RT_OS_WINDOWS */
    245     m.mediumType = pIf->enmMediumType;
    246     m.status = pIf->enmStatus;
    247 #endif /* !RT_OS_WINDOWS */
     238    AssertCompile((unsigned)NETIF_T_UNKNOWN == (unsigned)HostNetworkInterfaceMediumType_Unknown);
     239    m.mediumType = (HostNetworkInterfaceMediumType_T)pIf->enmMediumType;
     240    AssertCompile((unsigned)NETIF_S_UNKNOWN == (unsigned)HostNetworkInterfaceStatus_Unknown);
     241    m.status = (HostNetworkInterfaceStatus_T)pIf->enmStatus;
    248242    m.speedMbits = pIf->uSpeedMbits;
    249243    m.wireless = pIf->fWireless;
  • trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp

    r72883 r72973  
    934934        switch (d->mode)
    935935        {
    936             case CloneMode_MachineState:          d->queryMediasForMachineState(machineList, fAttachLinked,
    937                                                                                 uCount, uTotalWeight);
    938                                                   break;
    939             case CloneMode_MachineAndChildStates: d->queryMediasForMachineAndChildStates(machineList, fAttachLinked,
    940                                                                                          uCount, uTotalWeight);
    941                                                   break;
    942             case CloneMode_AllStates:             d->queryMediasForAllStates(machineList, fAttachLinked, uCount,
    943                                                                              uTotalWeight);
    944                                                   break;
     936            case CloneMode_MachineState:
     937                d->queryMediasForMachineState(machineList, fAttachLinked, uCount, uTotalWeight);
     938                break;
     939            case CloneMode_MachineAndChildStates:
     940                d->queryMediasForMachineAndChildStates(machineList, fAttachLinked, uCount, uTotalWeight);
     941                break;
     942            case CloneMode_AllStates:
     943                d->queryMediasForAllStates(machineList, fAttachLinked, uCount, uTotalWeight);
     944                break;
     945#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     946            case CloneMode_32BitHack: /* (compiler warnings) */
     947                AssertFailedBreak();
     948#endif
    945949        }
    946950
  • trunk/src/VBox/Main/src-server/SerialPortImpl.cpp

    r70766 r72973  
    289289            case PortMode_Disconnected:
    290290                break;
     291#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     292            case PortMode_32BitHack: /* (compiler warnings) */
     293                AssertFailedBreak();
     294#endif
    291295        }
    292296
  • trunk/src/VBox/Main/src-server/StorageControllerImpl.cpp

    r66126 r72973  
    165165            break;
    166166        case StorageBus_Null: break; /* Shut up MSC. */
     167#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     168        case StorageBus_32BitHack: break; /* Shut up GCC. */
     169#endif
    167170    }
    168171
  • trunk/src/VBox/Main/xml/Settings.cpp

    r72332 r72973  
    68336833        switch (machineUserData.enmFaultToleranceState)
    68346834        {
    6835         case FaultToleranceState_Inactive:
    6836             pelmFaultTolerance->setAttribute("state", "inactive");
    6837             break;
    6838         case FaultToleranceState_Master:
    6839             pelmFaultTolerance->setAttribute("state", "master");
    6840             break;
    6841         case FaultToleranceState_Standby:
    6842             pelmFaultTolerance->setAttribute("state", "standby");
    6843             break;
     6835            case FaultToleranceState_Inactive:
     6836                pelmFaultTolerance->setAttribute("state", "inactive");
     6837                break;
     6838            case FaultToleranceState_Master:
     6839                pelmFaultTolerance->setAttribute("state", "master");
     6840                break;
     6841            case FaultToleranceState_Standby:
     6842                pelmFaultTolerance->setAttribute("state", "standby");
     6843                break;
     6844#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     6845            case FaultToleranceState_32BitHack: /* (compiler warnings) */
     6846                AssertFailedBreak();
     6847#endif
    68446848        }
    68456849
     
    69216925    /* On Linux, we need to check at runtime what's actually supported. */
    69226926    static RTCLockMtx s_mtx;
    6923     static AudioDriverType_T s_linuxDriver = -1;
     6927    static AudioDriverType_T s_enmLinuxDriver = AudioDriverType_Null;
    69246928    RTCLock lock(s_mtx);
    6925     if (s_linuxDriver == (AudioDriverType_T)-1)
     6929    if (s_enmLinuxDriver == AudioDriverType_Null)
    69266930    {
    69276931# ifdef VBOX_WITH_AUDIO_PULSE
     
    69296933        if (RTProcIsRunningByName("pulseaudio") &&
    69306934            RTLdrIsLoadable("libpulse.so.0"))
    6931             s_linuxDriver = AudioDriverType_Pulse;
     6935            s_enmLinuxDriver = AudioDriverType_Pulse;
    69326936        else
    69336937# endif /* VBOX_WITH_AUDIO_PULSE */
     
    69356939            /* Check if we can load the ALSA library */
    69366940             if (RTLdrIsLoadable("libasound.so.2"))
    6937                 s_linuxDriver = AudioDriverType_ALSA;
     6941                s_enmLinuxDriver = AudioDriverType_ALSA;
    69386942        else
    69396943# endif /* VBOX_WITH_AUDIO_ALSA */
    6940             s_linuxDriver = AudioDriverType_OSS;
    6941     }
    6942     return s_linuxDriver;
     6944            s_enmLinuxDriver = AudioDriverType_OSS;
     6945    }
     6946    return s_enmLinuxDriver;
    69436947
    69446948#elif defined(RT_OS_DARWIN)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette