/**********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1987-1999 **/ /**********************************************************************/ /* midlnode.hxx MIDL Constants for Type Graph This class introduces constants used throughout the type graph. */ /* FILE HISTORY : VibhasC 28-Aug-1990 Created. DonnaLi 17-Oct-1990 Split midltype.hxx off rpctypes.hxx. DonnaLi 11-Dec-1990 Changed to midlnode.hxx. */ #ifndef __MIDLNODE_HXX__ #define __MIDLNODE_HXX__ /**************************************************************************** * definitions ****************************************************************************/ #include "common.hxx" // // node decriptor mask // /** ** they are broken into groups, and there is an array of names in ** front\attrnode.cxx **/ typedef enum _attr_t { ATTR_NONE ,ATTR_FIRST ,ATTR_LAST ,ATTR_LENGTH ,ATTR_MIN ,ATTR_MAX ,ATTR_SIZE ,ATTR_RANGE ,ATTR_CASE ,ATTR_FUNCDESCATTR ,ATTR_IDLDESCATTR ,ATTR_TYPEDESCATTR ,ATTR_VARDESCATTR ,ATTR_TYPE ,ATTR_MEMBER ,REDUNDANT_ATTR_END = ATTR_MEMBER // attributes which may not be duplicated ,ATTR_ID ,ATTR_HELPCONTEXT ,ATTR_HELPSTRINGCONTEXT ,ATTR_LCID ,ATTR_DLLNAME ,ATTR_HELPSTRING ,ATTR_HELPFILE ,ATTR_HELPSTRINGDLL ,ATTR_ENTRY ,ATTR_GUID ,ATTR_ASYNCUUID ,ATTR_VERSION ,ATTR_SWITCH_IS ,ATTR_IID_IS ,ATTR_DEFAULTVALUE /* * type attributes other than * * * */ ,ATTR_TRANSMIT ,ATTR_WIRE_MARSHAL ,ATTR_REPRESENT_AS ,ATTR_CALL_AS // last attribute that may not be duplicated ,NO_DUPLICATES_END = ATTR_CALL_AS ,ATTR_CUSTOM ,ATTR_SWITCH_TYPE ,ATTR_HANDLE ,ATTR_USER_MARSHAL ,ATTR_MS_UNION ,ATTR_MS_CONF_STRUCT ,ATTR_V1_ENUM // from idl ,ATTR_FLCID ,ATTR_HIDDEN ,ATTR_PTR_KIND ,ATTR_STRING ,ATTR_BSTRING /* * interface attributes other than * * * */ ,ATTR_ENDPOINT ,ATTR_LOCAL ,ATTR_OBJECT /* * field attributes other than * * */ ,ATTR_IGNORE ,ATTR_UNUSED1 //was ATTR_OPAQUE /* * operation attributes other than * * * * */ ,ATTR_IDEMPOTENT ,ATTR_BROADCAST ,ATTR_MAYBE ,ATTR_ASYNC ,ATTR_INPUTSYNC ,ATTR_BYTE_COUNT ,ATTR_CALLBACK ,ATTR_MESSAGE /* * param attributes other than * * */ ,ATTR_IN ,ATTR_OUT ,ATTR_PARTIAL_IGNORE // attribute on base types ,ATTR_DEFAULT // acf attributes ,ACF_ATTR_START ,ATTR_CONTEXT = ACF_ATTR_START ,ATTR_CODE ,ATTR_NOCODE ,ATTR_OPTIMIZE ,ATTR_COMMSTAT ,ATTR_FAULTSTAT ,ATTR_ALLOCATE ,ATTR_HEAP ,ATTR_IMPLICIT ,ATTR_EXPLICIT ,ATTR_AUTO ,ATTR_PTRSIZE ,ATTR_NOTIFY ,ATTR_NOTIFY_FLAG ,ATTR_ENABLE_ALLOCATE ,ATTR_ENCODE ,ATTR_DECODE ,ATTR_STRICT_CONTEXT_HANDLE ,ATTR_NOSERIALIZE ,ATTR_SERIALIZE ,ATTR_FORCEALLOCATE /* * international character support attributes */ ,ATTR_DRTAG ,ATTR_RTAG ,ATTR_STAG ,ATTR_CSCHAR ,ATTR_CSTAGRTN ,ACF_ATTR_END // end of acf attributes /** Temp padding has been introduced to bunch all the new attributes together */ ,ATTR_CPORT_ATTRIBUTES_START = ACF_ATTR_END ,ATTR_EXTERN = ATTR_CPORT_ATTRIBUTES_START ,ATTR_STATIC ,ATTR_AUTOMATIC ,ATTR_REGISTER ,ATTR_FAR ,ATTR_NEAR ,ATTR_MSCUNALIGNED ,ATTR_HUGE ,ATTR_PASCAL ,ATTR_FORTRAN ,ATTR_CDECL ,ATTR_STDCALL ,ATTR_LOADDS ,ATTR_SAVEREGS ,ATTR_FASTCALL ,ATTR_SEGMENT ,ATTR_INTERRUPT ,ATTR_SELF ,ATTR_EXPORT ,ATTR_CONST ,ATTR_VOLATILE ,ATTR_BASE ,ATTR_UNSIGNED ,ATTR_SIGNED ,ATTR_PROC_CONST ,ATTR_C_INLINE // c compiler _inline ,ATTR_RPC_FAR ,ATTR_TAGREF ,ATTR_DLLIMPORT ,ATTR_DLLEXPORT ,ATTR_W64 ,ATTR_PTR32 ,ATTR_PTR64 ,ATTR_DECLSPEC_ALIGN ,ATTR_DECLSPEC_UNKNOWN ,ATTR_CPORT_ATTRIBUTES_END = ATTR_PTR64 ,ATTR_END = ATTR_CPORT_ATTRIBUTES_END } ATTR_T; #define MODIFIER_BITS ( ATTR_CPORT_ATTRIBUTES_END - ATTR_CPORT_ATTRIBUTES_START ) #define MAX_ATTR_SUMMARY_ELEMENTS 3 #define ATTR_VECTOR_SIZE (MAX_ATTR_SUMMARY_ELEMENTS) typedef unsigned long ATTR_SUMMARY[ATTR_VECTOR_SIZE]; typedef ATTR_SUMMARY ATTR_VECTOR; // array of pointers to attributes class node_base_attr; typedef node_base_attr * ATTR_POINTER_VECTOR[ ACF_ATTR_END ]; #define SetModifierBit(A) ( (A) 2 A1[2] &= A2[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3 A1[3] &= A2[3]; #endif #endif } inline void COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2 ) { A1[0] = A2[0]; A1[1] = A2[1]; #if MAX_ATTR_SUMMARY_ELEMENTS > 2 A1[2] = A2[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3 A1[3] = A2[3]; #endif #endif } inline void MASKED_COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2, ATTR_VECTOR & M ) { A1[0] = A2[0] & M[0]; A1[1] = A2[1] & M[1]; #if MAX_ATTR_SUMMARY_ELEMENTS > 2 A1[2] = A2[2] & M[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3 A1[3] = A2[3] & M[3]; #endif #endif } inline BOOL IS_CLEAR_ATTR( ATTR_VECTOR & A) { return (BOOL) ( ( A[0] | A[1] #if MAX_ATTR_SUMMARY_ELEMENTS > 2 | A[2] #if MAX_ATTR_SUMMARY_ELEMENTS > 3 | A[3] #endif #endif ) == 0); } void CLEAR_ATTR( ATTR_VECTOR &); void SET_ALL_ATTR( ATTR_VECTOR &); ATTR_T CLEAR_FIRST_SET_ATTR ( ATTR_VECTOR & ); typedef enum _tattr_t { TATTR_BEGIN, TATTR_PUBLIC = TATTR_BEGIN, TATTR_APPOBJECT, TATTR_CONTROL, TATTR_DUAL, TATTR_LICENSED, TATTR_NONEXTENSIBLE, TATTR_OLEAUTOMATION, TATTR_NONCREATABLE, TATTR_AGGREGATABLE, TATTR_PROXY, TATTR_END = TATTR_OLEAUTOMATION } TATTR_T; typedef enum _mattr_t { MATTR_BEGIN, MATTR_READONLY = MATTR_BEGIN, MATTR_SOURCE, MATTR_BINDABLE, MATTR_DISPLAYBIND, MATTR_DEFAULTBIND, MATTR_REQUESTEDIT, MATTR_PROPGET, MATTR_PROPPUT, MATTR_PROPPUTREF, MATTR_RESTRICTED, MATTR_OPTIONAL, MATTR_RETVAL, MATTR_VARARG, MATTR_PREDECLID, MATTR_UIDEFAULT, MATTR_NONBROWSABLE, MATTR_DEFAULTCOLLELEM, MATTR_DEFAULTVTABLE, MATTR_IMMEDIATEBIND, MATTR_USESGETLASTERROR, MATTR_REPLACEABLE, MATTR_END = MATTR_PREDECLID } MATTR_T; /////////////////////////////////////////////////////////////////////////////// enum _edge_t { EDGE_DEF ,EDGE_USE }; typedef _edge_t EDGE_T; // // Note: type lib generator has a table that depends on the order of node_t enums. // Please modify rgMapBaseTypeToVARTYPE in tlgen.cxx when you add a base node. // enum node_t { NODE_ILLEGAL = 0 ,BASE_NODE_START = 1 ,NODE_FLOAT = BASE_NODE_START ,NODE_DOUBLE ,NODE_FLOAT80 ,NODE_FLOAT128 ,NODE_HYPER ,NODE_INT64 ,NODE_INT128 ,NODE_INT3264 ,NODE_INT32 ,NODE_LONG ,NODE_LONGLONG ,NODE_SHORT ,NODE_INT ,NODE_SMALL ,NODE_CHAR ,NODE_BOOLEAN ,NODE_BYTE ,NODE_VOID ,NODE_HANDLE_T ,NODE_FORWARD ,NODE_WCHAR_T ,BASE_NODE_END ,INTERNAL_NODE_START = BASE_NODE_END // constructed types ,NODE_STRUCT = INTERNAL_NODE_START ,NODE_UNION ,NODE_ENUM ,NODE_LABEL ,NODE_PIPE // midl compiler internal representation node types ,NODE_PROC ,NODE_PARAM ,NODE_FIELD ,NODE_DEF ,NODE_ID ,NODE_FILE ,NODE_INTERFACE ,NODE_ECHO_STRING ,NODE_E_STATUS_T ,NODE_INTERFACE_REFERENCE ,NODE_PIPE_INTERFACE ,NODE_HREF ,NODE_LIBRARY ,NODE_MODULE ,NODE_DISPINTERFACE ,NODE_ASYNC_HANDLE ,NODE_DECL_GUID ,NODE_COCLASS ,NAMED_NODE_END = NODE_COCLASS ,NODE_POINTER ,NODE_ARRAY ,NODE_SAFEARRAY ,NODE_SOURCE ,NODE_ERROR ,NODE_MIDL_PRAGMA ,INTERNAL_NODE_END // attribute node types }; typedef node_t NODE_T; // // useful macros // #define IS_BASE_TYPE_NODE( t ) ((t >= BASE_NODE_START) && (t < BASE_NODE_END)) #define IS_NAMED_NODE( t ) (t <= NAMED_NODE_END) #endif // __MIDLNODE_HXX__