Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

424 lines
8.3 KiB

4 years ago
  1. /**********************************************************************/
  2. /** Microsoft LAN Manager **/
  3. /** Copyright(c) Microsoft Corp., 1987-1990 **/
  4. /**********************************************************************/
  5. /*
  6. midlnode.hxx
  7. MIDL Constants for Type Graph
  8. This class introduces constants used throughout the type graph.
  9. */
  10. /*
  11. FILE HISTORY :
  12. VibhasC 28-Aug-1990 Created.
  13. DonnaLi 17-Oct-1990 Split midltype.hxx off rpctypes.hxx.
  14. DonnaLi 11-Dec-1990 Changed to midlnode.hxx.
  15. */
  16. #ifndef __MIDLNODE_HXX__
  17. #define __MIDLNODE_HXX__
  18. /****************************************************************************
  19. * definitions
  20. ****************************************************************************/
  21. #include "common.hxx"
  22. //
  23. // node decriptor mask
  24. //
  25. /**
  26. ** Talk to VibhasC before changing any attributes here
  27. **
  28. ** they are broken into groups, and there is an array of names in
  29. ** front\attrnode.cxx
  30. **/
  31. typedef enum _attr_t
  32. {
  33. ATTR_NONE
  34. ,ATTR_FIRST
  35. ,ATTR_LAST
  36. ,ATTR_LENGTH
  37. ,ATTR_MIN
  38. ,ATTR_MAX
  39. ,ATTR_SIZE
  40. ,ATTR_CASE
  41. ,ATTR_FUNCDESCATTR
  42. ,ATTR_IDLDESCATTR
  43. ,ATTR_TYPEDESCATTR
  44. ,ATTR_VARDESCATTR
  45. ,ATTR_TYPE
  46. ,ATTR_MEMBER
  47. ,REDUNDANT_ATTR_END = ATTR_MEMBER
  48. // attributes which may not be duplicated
  49. ,ATTR_ID
  50. ,ATTR_HELPCONTEXT
  51. ,ATTR_HELPSTRINGCONTEXT
  52. ,ATTR_LCID
  53. ,ATTR_DLLNAME
  54. ,ATTR_HELPSTRING
  55. ,ATTR_HELPFILE
  56. ,ATTR_ENTRY
  57. ,ATTR_GUID
  58. ,ATTR_VERSION
  59. ,ATTR_SWITCH_IS
  60. ,ATTR_IID_IS
  61. ,ATTR_DEFAULTVALUE
  62. /*
  63. * type attributes other than
  64. * <usage_attributes>
  65. * <inline/outofline_attributes>
  66. * <heap_attribute>
  67. */
  68. ,ATTR_TRANSMIT
  69. ,ATTR_WIRE_MARSHAL
  70. ,ATTR_REPRESENT_AS
  71. ,ATTR_CALL_AS
  72. // last attribute that may not be duplicated
  73. ,NO_DUPLICATES_END = ATTR_CALL_AS
  74. ,ATTR_CUSTOM
  75. ,ATTR_SWITCH_TYPE
  76. ,ATTR_HANDLE
  77. ,ATTR_USER_MARSHAL
  78. ,ATTR_MS_UNION
  79. ,ATTR_V1_ENUM
  80. // <usage_attributes> from idl
  81. ,ATTR_FLCID
  82. ,ATTR_HIDDEN
  83. ,ATTR_PTR_KIND
  84. ,ATTR_STRING
  85. ,ATTR_BSTRING
  86. /*
  87. * interface attributes other than
  88. * <pointer_attributes>
  89. * <code/nocode_attributes>
  90. * <inline/outofline_attributes>
  91. */
  92. ,ATTR_ENDPOINT
  93. ,ATTR_LOCAL
  94. ,ATTR_OBJECT
  95. /*
  96. * field attributes other than
  97. * <usage_attributes>
  98. * <pointer_attributes>
  99. */
  100. ,ATTR_IGNORE
  101. ,ATTR_OPAQUE
  102. /*
  103. * operation attributes other than
  104. * <usage_attributes>
  105. * <pointer_attributes>
  106. * <code/nocode_attributes>
  107. * <comm_status_attribute>
  108. */
  109. ,ATTR_IDEMPOTENT
  110. ,ATTR_BROADCAST
  111. ,ATTR_MAYBE
  112. ,ATTR_ASYNC
  113. ,ATTR_INPUTSYNC
  114. ,ATTR_BYTE_COUNT
  115. ,ATTR_CALLBACK
  116. /*
  117. * param attributes other than
  118. * <comm_status_attribute>
  119. * <heap_attribute>
  120. */
  121. ,ATTR_IN
  122. ,ATTR_OUT
  123. // attribute on base types
  124. ,ATTR_DEFAULT
  125. ,ACF_ATTR_START
  126. ,ATTR_CONTEXT = ACF_ATTR_START
  127. ,ATTR_CODE
  128. ,ATTR_NOCODE
  129. ,ATTR_OPTIMIZE
  130. ,ATTR_COMMSTAT
  131. ,ATTR_FAULTSTAT
  132. ,ATTR_ALLOCATE
  133. ,ATTR_HEAP
  134. ,ATTR_IMPLICIT
  135. ,ATTR_EXPLICIT
  136. ,ATTR_AUTO
  137. ,ATTR_PTRSIZE
  138. ,ATTR_NOTIFY
  139. ,ATTR_NOTIFY_FLAG
  140. ,ATTR_ENABLE_ALLOCATE
  141. ,ATTR_ENCODE
  142. ,ATTR_DECODE
  143. ,ACF_ATTR_END
  144. /** Temp padding has been introduced to bunch all the new attributes together */
  145. ,ATTR_CPORT_ATTRIBUTES_START = ACF_ATTR_END
  146. ,ATTR_EXTERN = ATTR_CPORT_ATTRIBUTES_START
  147. ,ATTR_STATIC
  148. ,ATTR_AUTOMATIC
  149. ,ATTR_REGISTER
  150. ,ATTR_FAR
  151. ,ATTR_NEAR
  152. ,ATTR_MSCUNALIGNED
  153. ,ATTR_HUGE
  154. ,ATTR_PASCAL
  155. ,ATTR_FORTRAN
  156. ,ATTR_CDECL
  157. ,ATTR_STDCALL
  158. ,ATTR_LOADDS
  159. ,ATTR_SAVEREGS
  160. ,ATTR_FASTCALL
  161. ,ATTR_SEGMENT
  162. ,ATTR_INTERRUPT
  163. ,ATTR_SELF
  164. ,ATTR_EXPORT
  165. ,ATTR_CONST
  166. ,ATTR_VOLATILE
  167. ,ATTR_BASE
  168. ,ATTR_UNSIGNED
  169. ,ATTR_SIGNED
  170. ,ATTR_PROC_CONST
  171. ,ATTR_C_INLINE // c compiler _inline
  172. ,ATTR_RPC_FAR
  173. ,ATTR_TAGREF
  174. ,ATTR_DLLIMPORT
  175. ,ATTR_DLLEXPORT
  176. ,ATTR_CPORT_ATTRIBUTES_END = ATTR_DLLEXPORT
  177. ,ATTR_END = ATTR_CPORT_ATTRIBUTES_END
  178. } ATTR_T;
  179. #define MODIFIER_BITS ( ATTR_CPORT_ATTRIBUTES_END - ATTR_CPORT_ATTRIBUTES_START )
  180. #define MAX_ATTR_SUMMARY_ELEMENTS 3
  181. #define ATTR_VECTOR_SIZE (MAX_ATTR_SUMMARY_ELEMENTS)
  182. typedef unsigned long ATTR_SUMMARY[ATTR_VECTOR_SIZE];
  183. typedef ATTR_SUMMARY ATTR_VECTOR;
  184. // array of pointers to attributes
  185. class node_base_attr;
  186. typedef node_base_attr * ATTR_POINTER_VECTOR[ ACF_ATTR_END ];
  187. #define SetModifierBit(A) ( (A)<ATTR_CPORT_ATTRIBUTES_START ? 0 : \
  188. 1UL << ((A) - ATTR_CPORT_ATTRIBUTES_START) )
  189. #define SET_ATTR(Array, A) ( (Array)[(A) / 32UL] |= (1UL << ((A) % 32UL)) )
  190. #define RESET_ATTR(Array, A) ( (Array)[(A) / 32UL] &= ~(1UL << ((A) % 32UL)) )
  191. #define IS_ATTR(Array, A) ( (Array)[(A) / 32UL] & (1UL << ((A) % 32UL)) )
  192. BOOL COMPARE_ATTR( ATTR_VECTOR &, ATTR_VECTOR & );
  193. void OR_ATTR( ATTR_VECTOR &, ATTR_VECTOR & );
  194. void XOR_ATTR( ATTR_VECTOR &, ATTR_VECTOR & );
  195. inline void
  196. AND_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2 )
  197. {
  198. A1[0] &= A2[0];
  199. A1[1] &= A2[1];
  200. #if MAX_ATTR_SUMMARY_ELEMENTS > 2
  201. A1[2] &= A2[2];
  202. #if MAX_ATTR_SUMMARY_ELEMENTS > 3
  203. A1[3] &= A2[3];
  204. #endif
  205. #endif
  206. }
  207. inline void
  208. COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2 )
  209. {
  210. A1[0] = A2[0];
  211. A1[1] = A2[1];
  212. #if MAX_ATTR_SUMMARY_ELEMENTS > 2
  213. A1[2] = A2[2];
  214. #if MAX_ATTR_SUMMARY_ELEMENTS > 3
  215. A1[3] = A2[3];
  216. #endif
  217. #endif
  218. }
  219. inline void
  220. MASKED_COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2, ATTR_VECTOR & M )
  221. {
  222. A1[0] = A2[0] & M[0];
  223. A1[1] = A2[1] & M[1];
  224. #if MAX_ATTR_SUMMARY_ELEMENTS > 2
  225. A1[2] = A2[2] & M[2];
  226. #if MAX_ATTR_SUMMARY_ELEMENTS > 3
  227. A1[3] = A2[3] & M[3];
  228. #endif
  229. #endif
  230. }
  231. inline BOOL IS_CLEAR_ATTR( ATTR_VECTOR & A)
  232. {
  233. return (BOOL) (
  234. ( A[0] | A[1]
  235. #if MAX_ATTR_SUMMARY_ELEMENTS > 2
  236. | A[2]
  237. #if MAX_ATTR_SUMMARY_ELEMENTS > 3
  238. | A[3]
  239. #endif
  240. #endif
  241. ) == 0);
  242. }
  243. void CLEAR_ATTR( ATTR_VECTOR &);
  244. void SET_ALL_ATTR( ATTR_VECTOR &);
  245. ATTR_T CLEAR_FIRST_SET_ATTR ( ATTR_VECTOR & );
  246. typedef enum _tattr_t
  247. {
  248. TATTR_BEGIN,
  249. TATTR_PUBLIC = TATTR_BEGIN,
  250. TATTR_APPOBJECT,
  251. TATTR_CONTROL,
  252. TATTR_DUAL,
  253. TATTR_LICENSED,
  254. TATTR_NONEXTENSIBLE,
  255. TATTR_OLEAUTOMATION,
  256. TATTR_NONCREATABLE,
  257. TATTR_AGGREGATABLE,
  258. TATTR_END = TATTR_OLEAUTOMATION
  259. } TATTR_T;
  260. typedef enum _mattr_t
  261. {
  262. MATTR_BEGIN,
  263. MATTR_READONLY = MATTR_BEGIN,
  264. MATTR_SOURCE,
  265. MATTR_BINDABLE,
  266. MATTR_DISPLAYBIND,
  267. MATTR_DEFAULTBIND,
  268. MATTR_REQUESTEDIT,
  269. MATTR_PROPGET,
  270. MATTR_PROPPUT,
  271. MATTR_PROPPUTREF,
  272. MATTR_RESTRICTED,
  273. MATTR_OPTIONAL,
  274. MATTR_RETVAL,
  275. MATTR_VARARG,
  276. MATTR_PREDECLID,
  277. MATTR_UIDEFAULT,
  278. MATTR_NONBROWSABLE,
  279. MATTR_DEFAULTCOLLELEM,
  280. MATTR_DEFAULTVTABLE,
  281. MATTR_IMMEDIATEBIND,
  282. MATTR_USESGETLASTERROR,
  283. MATTR_REPLACEABLE,
  284. MATTR_END = MATTR_PREDECLID
  285. } MATTR_T;
  286. ///////////////////////////////////////////////////////////////////////////////
  287. enum _edge_t
  288. {
  289. EDGE_DEF
  290. ,EDGE_USE
  291. };
  292. typedef _edge_t EDGE_T;
  293. enum node_t
  294. {
  295. NODE_ILLEGAL = 0
  296. ,BASE_NODE_START = 1
  297. ,NODE_FLOAT = BASE_NODE_START
  298. ,NODE_DOUBLE
  299. ,NODE_HYPER
  300. ,NODE_INT64
  301. ,NODE_LONG
  302. ,NODE_LONGLONG
  303. ,NODE_SHORT
  304. ,NODE_INT
  305. ,NODE_SMALL
  306. ,NODE_CHAR
  307. ,NODE_BOOLEAN
  308. ,NODE_BYTE
  309. ,NODE_VOID
  310. ,NODE_HANDLE_T
  311. ,NODE_FORWARD
  312. ,NODE_WCHAR_T
  313. ,BASE_NODE_END
  314. ,INTERNAL_NODE_START = BASE_NODE_END
  315. // constructed types
  316. ,NODE_STRUCT = INTERNAL_NODE_START
  317. ,NODE_UNION
  318. ,NODE_ENUM
  319. ,NODE_LABEL
  320. ,NODE_PIPE
  321. // midl compiler internal representation node types
  322. ,NODE_PROC
  323. ,NODE_PARAM
  324. ,NODE_FIELD
  325. ,NODE_DEF
  326. ,NODE_ID
  327. ,NODE_FILE
  328. ,NODE_INTERFACE
  329. ,NODE_ECHO_STRING
  330. ,NODE_E_STATUS_T
  331. ,NODE_INTERFACE_REFERENCE
  332. ,NODE_OBJECT
  333. ,NODE_COM_SERVER
  334. ,NODE_HREF
  335. ,NODE_LIBRARY
  336. ,NODE_MODULE
  337. ,NODE_DISPINTERFACE
  338. ,NODE_COCLASS
  339. ,NAMED_NODE_END = NODE_COCLASS
  340. ,NODE_POINTER
  341. ,NODE_ARRAY
  342. ,NODE_SAFEARRAY
  343. ,NODE_SOURCE
  344. ,NODE_ERROR
  345. ,INTERNAL_NODE_END
  346. // attribute node types
  347. };
  348. typedef node_t NODE_T;
  349. //
  350. // useful macros
  351. //
  352. #define IS_BASE_TYPE_NODE( t ) ((t >= BASE_NODE_START) && (t < BASE_NODE_END))
  353. #define IS_NAMED_NODE( t ) (t <= NAMED_NODE_END)
  354. #endif // __MIDLNODE_HXX__