dxcisense.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // dxcisense.h //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // Provides declarations for the DirectX Compiler IntelliSense component. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #ifndef __DXC_ISENSE__
  12. #define __DXC_ISENSE__
  13. typedef enum DxcGlobalOptions
  14. {
  15. DxcGlobalOpt_None = 0x0,
  16. DxcGlobalOpt_ThreadBackgroundPriorityForIndexing = 0x1,
  17. DxcGlobalOpt_ThreadBackgroundPriorityForEditing = 0x2,
  18. DxcGlobalOpt_ThreadBackgroundPriorityForAll =
  19. DxcGlobalOpt_ThreadBackgroundPriorityForIndexing | DxcGlobalOpt_ThreadBackgroundPriorityForEditing
  20. } DxcGlobalOptions;
  21. typedef enum DxcTokenKind
  22. {
  23. DxcTokenKind_Punctuation = 0, // A token that contains some kind of punctuation.
  24. DxcTokenKind_Keyword = 1, // A language keyword.
  25. DxcTokenKind_Identifier = 2, // An identifier (that is not a keyword).
  26. DxcTokenKind_Literal = 3, // A numeric, string, or character literal.
  27. DxcTokenKind_Comment = 4, // A comment.
  28. DxcTokenKind_Unknown = 5, // An unknown token (possibly known to a future version).
  29. DxcTokenKind_BuiltInType = 6, // A built-in type like int, void or float3.
  30. } DxcTokenKind;
  31. typedef enum DxcTypeKind
  32. {
  33. DxcTypeKind_Invalid = 0, // Reprents an invalid type (e.g., where no type is available).
  34. DxcTypeKind_Unexposed = 1, // A type whose specific kind is not exposed via this interface.
  35. // Builtin types
  36. DxcTypeKind_Void = 2,
  37. DxcTypeKind_Bool = 3,
  38. DxcTypeKind_Char_U = 4,
  39. DxcTypeKind_UChar = 5,
  40. DxcTypeKind_Char16 = 6,
  41. DxcTypeKind_Char32 = 7,
  42. DxcTypeKind_UShort = 8,
  43. DxcTypeKind_UInt = 9,
  44. DxcTypeKind_ULong = 10,
  45. DxcTypeKind_ULongLong = 11,
  46. DxcTypeKind_UInt128 = 12,
  47. DxcTypeKind_Char_S = 13,
  48. DxcTypeKind_SChar = 14,
  49. DxcTypeKind_WChar = 15,
  50. DxcTypeKind_Short = 16,
  51. DxcTypeKind_Int = 17,
  52. DxcTypeKind_Long = 18,
  53. DxcTypeKind_LongLong = 19,
  54. DxcTypeKind_Int128 = 20,
  55. DxcTypeKind_Float = 21,
  56. DxcTypeKind_Double = 22,
  57. DxcTypeKind_LongDouble = 23,
  58. DxcTypeKind_NullPtr = 24,
  59. DxcTypeKind_Overload = 25,
  60. DxcTypeKind_Dependent = 26,
  61. DxcTypeKind_ObjCId = 27,
  62. DxcTypeKind_ObjCClass = 28,
  63. DxcTypeKind_ObjCSel = 29,
  64. DxcTypeKind_FirstBuiltin = DxcTypeKind_Void,
  65. DxcTypeKind_LastBuiltin = DxcTypeKind_ObjCSel,
  66. DxcTypeKind_Complex = 100,
  67. DxcTypeKind_Pointer = 101,
  68. DxcTypeKind_BlockPointer = 102,
  69. DxcTypeKind_LValueReference = 103,
  70. DxcTypeKind_RValueReference = 104,
  71. DxcTypeKind_Record = 105,
  72. DxcTypeKind_Enum = 106,
  73. DxcTypeKind_Typedef = 107,
  74. DxcTypeKind_ObjCInterface = 108,
  75. DxcTypeKind_ObjCObjectPointer = 109,
  76. DxcTypeKind_FunctionNoProto = 110,
  77. DxcTypeKind_FunctionProto = 111,
  78. DxcTypeKind_ConstantArray = 112,
  79. DxcTypeKind_Vector = 113,
  80. DxcTypeKind_IncompleteArray = 114,
  81. DxcTypeKind_VariableArray = 115,
  82. DxcTypeKind_DependentSizedArray = 116,
  83. DxcTypeKind_MemberPointer = 117
  84. } DxcTypeKind;
  85. // Describes the severity of a particular diagnostic.
  86. typedef enum DxcDiagnosticSeverity
  87. {
  88. // A diagnostic that has been suppressed, e.g., by a command-line option.
  89. DxcDiagnostic_Ignored = 0,
  90. // This diagnostic is a note that should be attached to the previous (non-note) diagnostic.
  91. DxcDiagnostic_Note = 1,
  92. // This diagnostic indicates suspicious code that may not be wrong.
  93. DxcDiagnostic_Warning = 2,
  94. // This diagnostic indicates that the code is ill-formed.
  95. DxcDiagnostic_Error = 3,
  96. // This diagnostic indicates that the code is ill-formed such that future
  97. // parser rec unlikely to produce useful results.
  98. DxcDiagnostic_Fatal = 4
  99. } DxcDiagnosticSeverity;
  100. // Options to control the display of diagnostics.
  101. typedef enum DxcDiagnosticDisplayOptions
  102. {
  103. // Display the source-location information where the diagnostic was located.
  104. DxcDiagnostic_DisplaySourceLocation = 0x01,
  105. // If displaying the source-location information of the diagnostic,
  106. // also include the column number.
  107. DxcDiagnostic_DisplayColumn = 0x02,
  108. // If displaying the source-location information of the diagnostic,
  109. // also include information about source ranges in a machine-parsable format.
  110. DxcDiagnostic_DisplaySourceRanges = 0x04,
  111. // Display the option name associated with this diagnostic, if any.
  112. DxcDiagnostic_DisplayOption = 0x08,
  113. // Display the category number associated with this diagnostic, if any.
  114. DxcDiagnostic_DisplayCategoryId = 0x10,
  115. // Display the category name associated with this diagnostic, if any.
  116. DxcDiagnostic_DisplayCategoryName = 0x20,
  117. // Display the severity of the diagnostic message.
  118. DxcDiagnostic_DisplaySeverity = 0x200
  119. } DxcDiagnosticDisplayOptions;
  120. typedef enum DxcTranslationUnitFlags
  121. {
  122. // Used to indicate that no special translation-unit options are needed.
  123. DxcTranslationUnitFlags_None = 0x0,
  124. // Used to indicate that the parser should construct a "detailed"
  125. // preprocessing record, including all macro definitions and instantiations.
  126. DxcTranslationUnitFlags_DetailedPreprocessingRecord = 0x01,
  127. // Used to indicate that the translation unit is incomplete.
  128. DxcTranslationUnitFlags_Incomplete = 0x02,
  129. // Used to indicate that the translation unit should be built with an
  130. // implicit precompiled header for the preamble.
  131. DxcTranslationUnitFlags_PrecompiledPreamble = 0x04,
  132. // Used to indicate that the translation unit should cache some
  133. // code-completion results with each reparse of the source file.
  134. DxcTranslationUnitFlags_CacheCompletionResults = 0x08,
  135. // Used to indicate that the translation unit will be serialized with
  136. // SaveTranslationUnit.
  137. DxcTranslationUnitFlags_ForSerialization = 0x10,
  138. // DEPRECATED
  139. DxcTranslationUnitFlags_CXXChainedPCH = 0x20,
  140. // Used to indicate that function/method bodies should be skipped while parsing.
  141. DxcTranslationUnitFlags_SkipFunctionBodies = 0x40,
  142. // Used to indicate that brief documentation comments should be
  143. // included into the set of code completions returned from this translation
  144. // unit.
  145. DxcTranslationUnitFlags_IncludeBriefCommentsInCodeCompletion = 0x80,
  146. // Used to indicate that compilation should occur on the caller's thread.
  147. DxcTranslationUnitFlags_UseCallerThread = 0x800
  148. } DxcTranslationUnitFlags;
  149. typedef enum DxcCursorFormatting
  150. {
  151. DxcCursorFormatting_Default = 0x0, // Default rules, language-insensitive formatting.
  152. DxcCursorFormatting_UseLanguageOptions = 0x1, // Language-sensitive formatting.
  153. DxcCursorFormatting_SuppressSpecifiers = 0x2, // Supresses type specifiers.
  154. DxcCursorFormatting_SuppressTagKeyword = 0x4, // Suppressed tag keyword (eg, 'class').
  155. DxcCursorFormatting_IncludeNamespaceKeyword = 0x8, // Include namespace keyword.
  156. } DxcCursorFormatting;
  157. enum DxcCursorKind {
  158. /* Declarations */
  159. DxcCursor_UnexposedDecl = 1, // A declaration whose specific kind is not exposed via this interface.
  160. DxcCursor_StructDecl = 2, // A C or C++ struct.
  161. DxcCursor_UnionDecl = 3, // A C or C++ union.
  162. DxcCursor_ClassDecl = 4, // A C++ class.
  163. DxcCursor_EnumDecl = 5, // An enumeration.
  164. DxcCursor_FieldDecl = 6, // A field (in C) or non-static data member (in C++) in a struct, union, or C++ class.
  165. DxcCursor_EnumConstantDecl = 7, // An enumerator constant.
  166. DxcCursor_FunctionDecl = 8, // A function.
  167. DxcCursor_VarDecl = 9, // A variable.
  168. DxcCursor_ParmDecl = 10, // A function or method parameter.
  169. DxcCursor_ObjCInterfaceDecl = 11, // An Objective-C interface.
  170. DxcCursor_ObjCCategoryDecl = 12, // An Objective-C interface for a category.
  171. DxcCursor_ObjCProtocolDecl = 13, // An Objective-C protocol declaration.
  172. DxcCursor_ObjCPropertyDecl = 14, // An Objective-C property declaration.
  173. DxcCursor_ObjCIvarDecl = 15, // An Objective-C instance variable.
  174. DxcCursor_ObjCInstanceMethodDecl = 16, // An Objective-C instance method.
  175. DxcCursor_ObjCClassMethodDecl = 17, // An Objective-C class method.
  176. DxcCursor_ObjCImplementationDecl = 18, // An Objective-C \@implementation.
  177. DxcCursor_ObjCCategoryImplDecl = 19, // An Objective-C \@implementation for a category.
  178. DxcCursor_TypedefDecl = 20, // A typedef
  179. DxcCursor_CXXMethod = 21, // A C++ class method.
  180. DxcCursor_Namespace = 22, // A C++ namespace.
  181. DxcCursor_LinkageSpec = 23, // A linkage specification, e.g. 'extern "C"'.
  182. DxcCursor_Constructor = 24, // A C++ constructor.
  183. DxcCursor_Destructor = 25, // A C++ destructor.
  184. DxcCursor_ConversionFunction = 26, // A C++ conversion function.
  185. DxcCursor_TemplateTypeParameter = 27, // A C++ template type parameter.
  186. DxcCursor_NonTypeTemplateParameter = 28, // A C++ non-type template parameter.
  187. DxcCursor_TemplateTemplateParameter = 29, // A C++ template template parameter.
  188. DxcCursor_FunctionTemplate = 30, // A C++ function template.
  189. DxcCursor_ClassTemplate = 31, // A C++ class template.
  190. DxcCursor_ClassTemplatePartialSpecialization = 32, // A C++ class template partial specialization.
  191. DxcCursor_NamespaceAlias = 33, // A C++ namespace alias declaration.
  192. DxcCursor_UsingDirective = 34, // A C++ using directive.
  193. DxcCursor_UsingDeclaration = 35, // A C++ using declaration.
  194. DxcCursor_TypeAliasDecl = 36, // A C++ alias declaration
  195. DxcCursor_ObjCSynthesizeDecl = 37, // An Objective-C \@synthesize definition.
  196. DxcCursor_ObjCDynamicDecl = 38, // An Objective-C \@dynamic definition.
  197. DxcCursor_CXXAccessSpecifier = 39, // An access specifier.
  198. DxcCursor_FirstDecl = DxcCursor_UnexposedDecl,
  199. DxcCursor_LastDecl = DxcCursor_CXXAccessSpecifier,
  200. /* References */
  201. DxcCursor_FirstRef = 40, /* Decl references */
  202. DxcCursor_ObjCSuperClassRef = 40,
  203. DxcCursor_ObjCProtocolRef = 41,
  204. DxcCursor_ObjCClassRef = 42,
  205. /**
  206. * \brief A reference to a type declaration.
  207. *
  208. * A type reference occurs anywhere where a type is named but not
  209. * declared. For example, given:
  210. *
  211. * \code
  212. * typedef unsigned size_type;
  213. * size_type size;
  214. * \endcode
  215. *
  216. * The typedef is a declaration of size_type (DxcCursor_TypedefDecl),
  217. * while the type of the variable "size" is referenced. The cursor
  218. * referenced by the type of size is the typedef for size_type.
  219. */
  220. DxcCursor_TypeRef = 43, // A reference to a type declaration.
  221. DxcCursor_CXXBaseSpecifier = 44,
  222. DxcCursor_TemplateRef = 45, // A reference to a class template, function template, template template parameter, or class template partial specialization.
  223. DxcCursor_NamespaceRef = 46, // A reference to a namespace or namespace alias.
  224. DxcCursor_MemberRef = 47, // A reference to a member of a struct, union, or class that occurs in some non-expression context, e.g., a designated initializer.
  225. /**
  226. * \brief A reference to a labeled statement.
  227. *
  228. * This cursor kind is used to describe the jump to "start_over" in the
  229. * goto statement in the following example:
  230. *
  231. * \code
  232. * start_over:
  233. * ++counter;
  234. *
  235. * goto start_over;
  236. * \endcode
  237. *
  238. * A label reference cursor refers to a label statement.
  239. */
  240. DxcCursor_LabelRef = 48, // A reference to a labeled statement.
  241. // A reference to a set of overloaded functions or function templates
  242. // that has not yet been resolved to a specific function or function template.
  243. //
  244. // An overloaded declaration reference cursor occurs in C++ templates where
  245. // a dependent name refers to a function.
  246. DxcCursor_OverloadedDeclRef = 49,
  247. DxcCursor_VariableRef = 50, // A reference to a variable that occurs in some non-expression context, e.g., a C++ lambda capture list.
  248. DxcCursor_LastRef = DxcCursor_VariableRef,
  249. /* Error conditions */
  250. DxcCursor_FirstInvalid = 70,
  251. DxcCursor_InvalidFile = 70,
  252. DxcCursor_NoDeclFound = 71,
  253. DxcCursor_NotImplemented = 72,
  254. DxcCursor_InvalidCode = 73,
  255. DxcCursor_LastInvalid = DxcCursor_InvalidCode,
  256. /* Expressions */
  257. DxcCursor_FirstExpr = 100,
  258. /**
  259. * \brief An expression whose specific kind is not exposed via this
  260. * interface.
  261. *
  262. * Unexposed expressions have the same operations as any other kind
  263. * of expression; one can extract their location information,
  264. * spelling, children, etc. However, the specific kind of the
  265. * expression is not reported.
  266. */
  267. DxcCursor_UnexposedExpr = 100, // An expression whose specific kind is not exposed via this interface.
  268. DxcCursor_DeclRefExpr = 101, // An expression that refers to some value declaration, such as a function, varible, or enumerator.
  269. DxcCursor_MemberRefExpr = 102, // An expression that refers to a member of a struct, union, class, Objective-C class, etc.
  270. DxcCursor_CallExpr = 103, // An expression that calls a function.
  271. DxcCursor_ObjCMessageExpr = 104, // An expression that sends a message to an Objective-C object or class.
  272. DxcCursor_BlockExpr = 105, // An expression that represents a block literal.
  273. DxcCursor_IntegerLiteral = 106, // An integer literal.
  274. DxcCursor_FloatingLiteral = 107, // A floating point number literal.
  275. DxcCursor_ImaginaryLiteral = 108, // An imaginary number literal.
  276. DxcCursor_StringLiteral = 109, // A string literal.
  277. DxcCursor_CharacterLiteral = 110, // A character literal.
  278. DxcCursor_ParenExpr = 111, // A parenthesized expression, e.g. "(1)". This AST node is only formed if full location information is requested.
  279. DxcCursor_UnaryOperator = 112, // This represents the unary-expression's (except sizeof and alignof).
  280. DxcCursor_ArraySubscriptExpr = 113, // [C99 6.5.2.1] Array Subscripting.
  281. DxcCursor_BinaryOperator = 114, // A builtin binary operation expression such as "x + y" or "x <= y".
  282. DxcCursor_CompoundAssignOperator = 115, // Compound assignment such as "+=".
  283. DxcCursor_ConditionalOperator = 116, // The ?: ternary operator.
  284. DxcCursor_CStyleCastExpr = 117, // An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr.cast]), which uses the syntax (Type)expr, eg: (int)f.
  285. DxcCursor_CompoundLiteralExpr = 118, // [C99 6.5.2.5]
  286. DxcCursor_InitListExpr = 119, // Describes an C or C++ initializer list.
  287. DxcCursor_AddrLabelExpr = 120, // The GNU address of label extension, representing &&label.
  288. DxcCursor_StmtExpr = 121, // This is the GNU Statement Expression extension: ({int X=4; X;})
  289. DxcCursor_GenericSelectionExpr = 122, // Represents a C11 generic selection.
  290. /** \brief Implements the GNU __null extension, which is a name for a null
  291. * pointer constant that has integral type (e.g., int or long) and is the same
  292. * size and alignment as a pointer.
  293. *
  294. * The __null extension is typically only used by system headers, which define
  295. * NULL as __null in C++ rather than using 0 (which is an integer that may not
  296. * match the size of a pointer).
  297. */
  298. DxcCursor_GNUNullExpr = 123,
  299. DxcCursor_CXXStaticCastExpr = 124, // C++'s static_cast<> expression.
  300. DxcCursor_CXXDynamicCastExpr = 125, // C++'s dynamic_cast<> expression.
  301. DxcCursor_CXXReinterpretCastExpr = 126, // C++'s reinterpret_cast<> expression.
  302. DxcCursor_CXXConstCastExpr = 127, // C++'s const_cast<> expression.
  303. /** \brief Represents an explicit C++ type conversion that uses "functional"
  304. * notion (C++ [expr.type.conv]).
  305. *
  306. * Example:
  307. * \code
  308. * x = int(0.5);
  309. * \endcode
  310. */
  311. DxcCursor_CXXFunctionalCastExpr = 128,
  312. DxcCursor_CXXTypeidExpr = 129, // A C++ typeid expression (C++ [expr.typeid]).
  313. DxcCursor_CXXBoolLiteralExpr = 130, // [C++ 2.13.5] C++ Boolean Literal.
  314. DxcCursor_CXXNullPtrLiteralExpr = 131, // [C++0x 2.14.7] C++ Pointer Literal.
  315. DxcCursor_CXXThisExpr = 132, // Represents the "this" expression in C++
  316. DxcCursor_CXXThrowExpr = 133, // [C++ 15] C++ Throw Expression, both 'throw' and 'throw' assignment-expression.
  317. DxcCursor_CXXNewExpr = 134, // A new expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
  318. DxcCursor_CXXDeleteExpr = 135, // A delete expression for memory deallocation and destructor calls, e.g. "delete[] pArray".
  319. DxcCursor_UnaryExpr = 136, // A unary expression.
  320. DxcCursor_ObjCStringLiteral = 137, // An Objective-C string literal i.e. @"foo".
  321. DxcCursor_ObjCEncodeExpr = 138, // An Objective-C \@encode expression.
  322. DxcCursor_ObjCSelectorExpr = 139, // An Objective-C \@selector expression.
  323. DxcCursor_ObjCProtocolExpr = 140, // An Objective-C \@protocol expression.
  324. /** \brief An Objective-C "bridged" cast expression, which casts between
  325. * Objective-C pointers and C pointers, transferring ownership in the process.
  326. *
  327. * \code
  328. * NSString *str = (__bridge_transfer NSString *)CFCreateString();
  329. * \endcode
  330. */
  331. DxcCursor_ObjCBridgedCastExpr = 141,
  332. /** \brief Represents a C++0x pack expansion that produces a sequence of
  333. * expressions.
  334. *
  335. * A pack expansion expression contains a pattern (which itself is an
  336. * expression) followed by an ellipsis. For example:
  337. *
  338. * \code
  339. * template<typename F, typename ...Types>
  340. * void forward(F f, Types &&...args) {
  341. * f(static_cast<Types&&>(args)...);
  342. * }
  343. * \endcode
  344. */
  345. DxcCursor_PackExpansionExpr = 142,
  346. /** \brief Represents an expression that computes the length of a parameter
  347. * pack.
  348. *
  349. * \code
  350. * template<typename ...Types>
  351. * struct count {
  352. * static const unsigned value = sizeof...(Types);
  353. * };
  354. * \endcode
  355. */
  356. DxcCursor_SizeOfPackExpr = 143,
  357. /* \brief Represents a C++ lambda expression that produces a local function
  358. * object.
  359. *
  360. * \code
  361. * void abssort(float *x, unsigned N) {
  362. * std::sort(x, x + N,
  363. * [](float a, float b) {
  364. * return std::abs(a) < std::abs(b);
  365. * });
  366. * }
  367. * \endcode
  368. */
  369. DxcCursor_LambdaExpr = 144,
  370. DxcCursor_ObjCBoolLiteralExpr = 145, // Objective-c Boolean Literal.
  371. DxcCursor_ObjCSelfExpr = 146, // Represents the "self" expression in a ObjC method.
  372. DxcCursor_LastExpr = DxcCursor_ObjCSelfExpr,
  373. /* Statements */
  374. DxcCursor_FirstStmt = 200,
  375. /**
  376. * \brief A statement whose specific kind is not exposed via this
  377. * interface.
  378. *
  379. * Unexposed statements have the same operations as any other kind of
  380. * statement; one can extract their location information, spelling,
  381. * children, etc. However, the specific kind of the statement is not
  382. * reported.
  383. */
  384. DxcCursor_UnexposedStmt = 200,
  385. /** \brief A labelled statement in a function.
  386. *
  387. * This cursor kind is used to describe the "start_over:" label statement in
  388. * the following example:
  389. *
  390. * \code
  391. * start_over:
  392. * ++counter;
  393. * \endcode
  394. *
  395. */
  396. DxcCursor_LabelStmt = 201,
  397. DxcCursor_CompoundStmt = 202, // A group of statements like { stmt stmt }. This cursor kind is used to describe compound statements, e.g. function bodies.
  398. DxcCursor_CaseStmt = 203, // A case statement.
  399. DxcCursor_DefaultStmt = 204, // A default statement.
  400. DxcCursor_IfStmt = 205, // An if statement
  401. DxcCursor_SwitchStmt = 206, // A switch statement.
  402. DxcCursor_WhileStmt = 207, // A while statement.
  403. DxcCursor_DoStmt = 208, // A do statement.
  404. DxcCursor_ForStmt = 209, // A for statement.
  405. DxcCursor_GotoStmt = 210, // A goto statement.
  406. DxcCursor_IndirectGotoStmt = 211, // An indirect goto statement.
  407. DxcCursor_ContinueStmt = 212, // A continue statement.
  408. DxcCursor_BreakStmt = 213, // A break statement.
  409. DxcCursor_ReturnStmt = 214, // A return statement.
  410. DxcCursor_GCCAsmStmt = 215, // A GCC inline assembly statement extension.
  411. DxcCursor_AsmStmt = DxcCursor_GCCAsmStmt,
  412. DxcCursor_ObjCAtTryStmt = 216, // Objective-C's overall \@try-\@catch-\@finally statement.
  413. DxcCursor_ObjCAtCatchStmt = 217, // Objective-C's \@catch statement.
  414. DxcCursor_ObjCAtFinallyStmt = 218, // Objective-C's \@finally statement.
  415. DxcCursor_ObjCAtThrowStmt = 219, // Objective-C's \@throw statement.
  416. DxcCursor_ObjCAtSynchronizedStmt = 220, // Objective-C's \@synchronized statement.
  417. DxcCursor_ObjCAutoreleasePoolStmt = 221, // Objective-C's autorelease pool statement.
  418. DxcCursor_ObjCForCollectionStmt = 222, // Objective-C's collection statement.
  419. DxcCursor_CXXCatchStmt = 223, // C++'s catch statement.
  420. DxcCursor_CXXTryStmt = 224, // C++'s try statement.
  421. DxcCursor_CXXForRangeStmt = 225, // C++'s for (* : *) statement.
  422. DxcCursor_SEHTryStmt = 226, // Windows Structured Exception Handling's try statement.
  423. DxcCursor_SEHExceptStmt = 227, // Windows Structured Exception Handling's except statement.
  424. DxcCursor_SEHFinallyStmt = 228, // Windows Structured Exception Handling's finally statement.
  425. DxcCursor_MSAsmStmt = 229, // A MS inline assembly statement extension.
  426. DxcCursor_NullStmt = 230, // The null satement ";": C99 6.8.3p3.
  427. DxcCursor_DeclStmt = 231, // Adaptor class for mixing declarations with statements and expressions.
  428. DxcCursor_OMPParallelDirective = 232, // OpenMP parallel directive.
  429. DxcCursor_OMPSimdDirective = 233, // OpenMP SIMD directive.
  430. DxcCursor_OMPForDirective = 234, // OpenMP for directive.
  431. DxcCursor_OMPSectionsDirective = 235, // OpenMP sections directive.
  432. DxcCursor_OMPSectionDirective = 236, // OpenMP section directive.
  433. DxcCursor_OMPSingleDirective = 237, // OpenMP single directive.
  434. DxcCursor_OMPParallelForDirective = 238, // OpenMP parallel for directive.
  435. DxcCursor_OMPParallelSectionsDirective = 239, // OpenMP parallel sections directive.
  436. DxcCursor_OMPTaskDirective = 240, // OpenMP task directive.
  437. DxcCursor_OMPMasterDirective = 241, // OpenMP master directive.
  438. DxcCursor_OMPCriticalDirective = 242, // OpenMP critical directive.
  439. DxcCursor_OMPTaskyieldDirective = 243, // OpenMP taskyield directive.
  440. DxcCursor_OMPBarrierDirective = 244, // OpenMP barrier directive.
  441. DxcCursor_OMPTaskwaitDirective = 245, // OpenMP taskwait directive.
  442. DxcCursor_OMPFlushDirective = 246, // OpenMP flush directive.
  443. DxcCursor_SEHLeaveStmt = 247, // Windows Structured Exception Handling's leave statement.
  444. DxcCursor_OMPOrderedDirective = 248, // OpenMP ordered directive.
  445. DxcCursor_OMPAtomicDirective = 249, // OpenMP atomic directive.
  446. DxcCursor_OMPForSimdDirective = 250, // OpenMP for SIMD directive.
  447. DxcCursor_OMPParallelForSimdDirective = 251, // OpenMP parallel for SIMD directive.
  448. DxcCursor_OMPTargetDirective = 252, // OpenMP target directive.
  449. DxcCursor_OMPTeamsDirective = 253, // OpenMP teams directive.
  450. DxcCursor_OMPTaskgroupDirective = 254, // OpenMP taskgroup directive.
  451. DxcCursor_OMPCancellationPointDirective = 255, // OpenMP cancellation point directive.
  452. DxcCursor_OMPCancelDirective = 256, // OpenMP cancel directive.
  453. DxcCursor_LastStmt = DxcCursor_OMPCancelDirective,
  454. DxcCursor_TranslationUnit = 300, // Cursor that represents the translation unit itself.
  455. /* Attributes */
  456. DxcCursor_FirstAttr = 400,
  457. /**
  458. * \brief An attribute whose specific kind is not exposed via this
  459. * interface.
  460. */
  461. DxcCursor_UnexposedAttr = 400,
  462. DxcCursor_IBActionAttr = 401,
  463. DxcCursor_IBOutletAttr = 402,
  464. DxcCursor_IBOutletCollectionAttr = 403,
  465. DxcCursor_CXXFinalAttr = 404,
  466. DxcCursor_CXXOverrideAttr = 405,
  467. DxcCursor_AnnotateAttr = 406,
  468. DxcCursor_AsmLabelAttr = 407,
  469. DxcCursor_PackedAttr = 408,
  470. DxcCursor_PureAttr = 409,
  471. DxcCursor_ConstAttr = 410,
  472. DxcCursor_NoDuplicateAttr = 411,
  473. DxcCursor_CUDAConstantAttr = 412,
  474. DxcCursor_CUDADeviceAttr = 413,
  475. DxcCursor_CUDAGlobalAttr = 414,
  476. DxcCursor_CUDAHostAttr = 415,
  477. DxcCursor_CUDASharedAttr = 416,
  478. DxcCursor_LastAttr = DxcCursor_CUDASharedAttr,
  479. /* Preprocessing */
  480. DxcCursor_PreprocessingDirective = 500,
  481. DxcCursor_MacroDefinition = 501,
  482. DxcCursor_MacroExpansion = 502,
  483. DxcCursor_MacroInstantiation = DxcCursor_MacroExpansion,
  484. DxcCursor_InclusionDirective = 503,
  485. DxcCursor_FirstPreprocessing = DxcCursor_PreprocessingDirective,
  486. DxcCursor_LastPreprocessing = DxcCursor_InclusionDirective,
  487. /* Extra Declarations */
  488. /**
  489. * \brief A module import declaration.
  490. */
  491. DxcCursor_ModuleImportDecl = 600,
  492. DxcCursor_FirstExtraDecl = DxcCursor_ModuleImportDecl,
  493. DxcCursor_LastExtraDecl = DxcCursor_ModuleImportDecl
  494. };
  495. enum DxcCursorKindFlags
  496. {
  497. DxcCursorKind_None = 0,
  498. DxcCursorKind_Declaration = 0x1,
  499. DxcCursorKind_Reference = 0x2,
  500. DxcCursorKind_Expression = 0x4,
  501. DxcCursorKind_Statement = 0x8,
  502. DxcCursorKind_Attribute = 0x10,
  503. DxcCursorKind_Invalid = 0x20,
  504. DxcCursorKind_TranslationUnit = 0x40,
  505. DxcCursorKind_Preprocessing = 0x80,
  506. DxcCursorKind_Unexposed = 0x100,
  507. };
  508. struct IDxcCursor;
  509. struct IDxcDiagnostic;
  510. struct IDxcFile;
  511. struct IDxcInclusion;
  512. struct IDxcIntelliSense;
  513. struct IDxcIndex;
  514. struct IDxcSourceLocation;
  515. struct IDxcSourceRange;
  516. struct IDxcToken;
  517. struct IDxcTranslationUnit;
  518. struct IDxcType;
  519. struct IDxcUnsavedFile;
  520. struct __declspec(uuid("1467b985-288d-4d2a-80c1-ef89c42c40bc"))
  521. IDxcCursor : public IUnknown
  522. {
  523. virtual HRESULT STDMETHODCALLTYPE GetExtent(_Outptr_result_nullonfailure_ IDxcSourceRange** pRange) = 0;
  524. virtual HRESULT STDMETHODCALLTYPE GetLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation** pResult) = 0;
  525. virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcCursorKind* pResult) = 0;
  526. virtual HRESULT STDMETHODCALLTYPE GetKindFlags(_Out_ DxcCursorKindFlags* pResult) = 0;
  527. virtual HRESULT STDMETHODCALLTYPE GetSemanticParent(_Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  528. virtual HRESULT STDMETHODCALLTYPE GetLexicalParent(_Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  529. virtual HRESULT STDMETHODCALLTYPE GetCursorType(_Outptr_result_nullonfailure_ IDxcType** pResult) = 0;
  530. virtual HRESULT STDMETHODCALLTYPE GetNumArguments(_Out_ int* pResult) = 0;
  531. virtual HRESULT STDMETHODCALLTYPE GetArgumentAt(int index, _Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  532. virtual HRESULT STDMETHODCALLTYPE GetReferencedCursor(_Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  533. /// <summary>For a cursor that is either a reference to or a declaration of some entity, retrieve a cursor that describes the definition of that entity.</summary>
  534. /// <remarks>Some entities can be declared multiple times within a translation unit, but only one of those declarations can also be a definition.</remarks>
  535. /// <returns>A cursor to the definition of this entity; nullptr if there is no definition in this translation unit.</returns>
  536. virtual HRESULT STDMETHODCALLTYPE GetDefinitionCursor(_Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  537. virtual HRESULT STDMETHODCALLTYPE FindReferencesInFile(
  538. _In_ IDxcFile* file, unsigned skip, unsigned top,
  539. _Out_ unsigned* pResultLength, _Outptr_result_buffer_maybenull_(*pResultLength) IDxcCursor*** pResult) = 0;
  540. /// <summary>Gets the name for the entity references by the cursor, e.g. foo for an 'int foo' variable.</summary>
  541. virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Outptr_result_maybenull_ LPSTR* pResult) = 0;
  542. virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcCursor* other, _Out_ BOOL* pResult) = 0;
  543. virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL* pResult) = 0;
  544. virtual HRESULT STDMETHODCALLTYPE IsDefinition(_Out_ BOOL* pResult) = 0;
  545. /// <summary>Gets the display name for the cursor, including e.g. parameter types for a function.</summary>
  546. virtual HRESULT STDMETHODCALLTYPE GetDisplayName(_Out_ BSTR* pResult) = 0;
  547. /// <summary>Gets the qualified name for the symbol the cursor refers to.</summary>
  548. virtual HRESULT STDMETHODCALLTYPE GetQualifiedName(BOOL includeTemplateArgs, _Outptr_result_maybenull_ BSTR* pResult) = 0;
  549. /// <summary>Gets a name for the cursor, applying the specified formatting flags.</summary>
  550. virtual HRESULT STDMETHODCALLTYPE GetFormattedName(DxcCursorFormatting formatting , _Outptr_result_maybenull_ BSTR* pResult) = 0;
  551. /// <summary>Gets children in pResult up to top elements.</summary>
  552. virtual HRESULT STDMETHODCALLTYPE GetChildren(
  553. unsigned skip, unsigned top,
  554. _Out_ unsigned* pResultLength, _Outptr_result_buffer_maybenull_(*pResultLength) IDxcCursor*** pResult) = 0;
  555. /// <summary>Gets the cursor following a location within a compound cursor.</summary>
  556. virtual HRESULT STDMETHODCALLTYPE GetSnappedChild(_In_ IDxcSourceLocation* location, _Outptr_result_maybenull_ IDxcCursor** pResult) = 0;
  557. };
  558. struct __declspec(uuid("4f76b234-3659-4d33-99b0-3b0db994b564"))
  559. IDxcDiagnostic : public IUnknown
  560. {
  561. virtual HRESULT STDMETHODCALLTYPE FormatDiagnostic(
  562. DxcDiagnosticDisplayOptions options,
  563. _Outptr_result_maybenull_ LPSTR* pResult) = 0;
  564. virtual HRESULT STDMETHODCALLTYPE GetSeverity(_Out_ DxcDiagnosticSeverity* pResult) = 0;
  565. virtual HRESULT STDMETHODCALLTYPE GetLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation** pResult) = 0;
  566. virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Outptr_result_maybenull_ LPSTR* pResult) = 0;
  567. virtual HRESULT STDMETHODCALLTYPE GetCategoryText(_Outptr_result_maybenull_ LPSTR* pResult) = 0;
  568. virtual HRESULT STDMETHODCALLTYPE GetNumRanges(_Out_ unsigned* pResult) = 0;
  569. virtual HRESULT STDMETHODCALLTYPE GetRangeAt(unsigned index, _Outptr_result_nullonfailure_ IDxcSourceRange** pResult) = 0;
  570. virtual HRESULT STDMETHODCALLTYPE GetNumFixIts(_Out_ unsigned* pResult) = 0;
  571. virtual HRESULT STDMETHODCALLTYPE GetFixItAt(unsigned index,
  572. _Outptr_result_nullonfailure_ IDxcSourceRange** pReplacementRange, _Outptr_result_maybenull_ LPSTR* pText) = 0;
  573. };
  574. struct __declspec(uuid("bb2fca9e-1478-47ba-b08c-2c502ada4895"))
  575. IDxcFile : public IUnknown
  576. {
  577. /// <summary>Gets the file name for this file.</summary>
  578. virtual HRESULT STDMETHODCALLTYPE GetName(_Outptr_result_maybenull_ LPSTR* pResult) = 0;
  579. /// <summary>Checks whether this file is equal to the other specified file.</summary>
  580. virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcFile* other, _Out_ BOOL* pResult) = 0;
  581. };
  582. struct __declspec(uuid("0c364d65-df44-4412-888e-4e552fc5e3d6"))
  583. IDxcInclusion : public IUnknown
  584. {
  585. virtual HRESULT STDMETHODCALLTYPE GetIncludedFile(_Outptr_result_nullonfailure_ IDxcFile** pResult) = 0;
  586. virtual HRESULT STDMETHODCALLTYPE GetStackLength(_Out_ unsigned *pResult) = 0;
  587. virtual HRESULT STDMETHODCALLTYPE GetStackItem(unsigned index, _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0;
  588. };
  589. struct __declspec(uuid("b1f99513-46d6-4112-8169-dd0d6053f17d"))
  590. IDxcIntelliSense : public IUnknown
  591. {
  592. virtual HRESULT STDMETHODCALLTYPE CreateIndex(_Outptr_result_nullonfailure_ IDxcIndex** index) = 0;
  593. virtual HRESULT STDMETHODCALLTYPE GetNullLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation** location) = 0;
  594. virtual HRESULT STDMETHODCALLTYPE GetNullRange(_Outptr_result_nullonfailure_ IDxcSourceRange** location) = 0;
  595. virtual HRESULT STDMETHODCALLTYPE GetRange(
  596. _In_ IDxcSourceLocation* start,
  597. _In_ IDxcSourceLocation* end,
  598. _Outptr_result_nullonfailure_ IDxcSourceRange** location) = 0;
  599. virtual HRESULT STDMETHODCALLTYPE GetDefaultDiagnosticDisplayOptions(
  600. _Out_ DxcDiagnosticDisplayOptions* pValue) = 0;
  601. virtual HRESULT STDMETHODCALLTYPE GetDefaultEditingTUOptions(_Out_ DxcTranslationUnitFlags* pValue) = 0;
  602. virtual HRESULT STDMETHODCALLTYPE CreateUnsavedFile(_In_ LPCSTR fileName, _In_ LPCSTR contents, unsigned contentLength, _Outptr_result_nullonfailure_ IDxcUnsavedFile** pResult) = 0;
  603. };
  604. struct __declspec(uuid("937824a0-7f5a-4815-9ba7-7fc0424f4173"))
  605. IDxcIndex : public IUnknown
  606. {
  607. virtual HRESULT STDMETHODCALLTYPE SetGlobalOptions(DxcGlobalOptions options) = 0;
  608. virtual HRESULT STDMETHODCALLTYPE GetGlobalOptions(_Out_ DxcGlobalOptions* options) = 0;
  609. virtual HRESULT STDMETHODCALLTYPE ParseTranslationUnit(
  610. _In_z_ const char *source_filename,
  611. _In_count_(num_command_line_args) const char * const *command_line_args,
  612. int num_command_line_args,
  613. _In_count_(num_unsaved_files) IDxcUnsavedFile** unsaved_files,
  614. unsigned num_unsaved_files,
  615. DxcTranslationUnitFlags options,
  616. _Out_ IDxcTranslationUnit** pTranslationUnit) = 0;
  617. };
  618. struct __declspec(uuid("8e7ddf1c-d7d3-4d69-b286-85fccba1e0cf"))
  619. IDxcSourceLocation : public IUnknown
  620. {
  621. virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcSourceLocation* other, _Out_ BOOL* pResult) = 0;
  622. virtual HRESULT STDMETHODCALLTYPE GetSpellingLocation(
  623. _Outptr_opt_ IDxcFile** pFile,
  624. _Out_opt_ unsigned* pLine,
  625. _Out_opt_ unsigned* pCol,
  626. _Out_opt_ unsigned* pOffset) = 0;
  627. virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL* pResult) = 0;
  628. };
  629. struct __declspec(uuid("f1359b36-a53f-4e81-b514-b6b84122a13f"))
  630. IDxcSourceRange : public IUnknown
  631. {
  632. virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL* pValue) = 0;
  633. virtual HRESULT STDMETHODCALLTYPE GetStart(_Out_ IDxcSourceLocation** pValue) = 0;
  634. virtual HRESULT STDMETHODCALLTYPE GetEnd(_Out_ IDxcSourceLocation** pValue) = 0;
  635. virtual HRESULT STDMETHODCALLTYPE GetOffsets(_Out_ unsigned* startOffset, _Out_ unsigned* endOffset) = 0;
  636. };
  637. struct __declspec(uuid("7f90b9ff-a275-4932-97d8-3cfd234482a2"))
  638. IDxcToken : public IUnknown
  639. {
  640. virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcTokenKind* pValue) = 0;
  641. virtual HRESULT STDMETHODCALLTYPE GetLocation(_Out_ IDxcSourceLocation** pValue) = 0;
  642. virtual HRESULT STDMETHODCALLTYPE GetExtent(_Out_ IDxcSourceRange** pValue) = 0;
  643. virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Out_ LPSTR* pValue) = 0;
  644. };
  645. struct __declspec(uuid("9677dee0-c0e5-46a1-8b40-3db3168be63d"))
  646. IDxcTranslationUnit : public IUnknown
  647. {
  648. virtual HRESULT STDMETHODCALLTYPE GetCursor(_Out_ IDxcCursor** pCursor) = 0;
  649. virtual HRESULT STDMETHODCALLTYPE Tokenize(
  650. _In_ IDxcSourceRange* range,
  651. _Outptr_result_buffer_maybenull_(*pTokenCount) IDxcToken*** pTokens,
  652. _Out_ unsigned* pTokenCount) = 0;
  653. virtual HRESULT STDMETHODCALLTYPE GetLocation(
  654. _In_ IDxcFile* file,
  655. unsigned line, unsigned column,
  656. _Outptr_result_nullonfailure_ IDxcSourceLocation** pResult) = 0;
  657. virtual HRESULT STDMETHODCALLTYPE GetNumDiagnostics(_Out_ unsigned* pValue) = 0;
  658. virtual HRESULT STDMETHODCALLTYPE GetDiagnostic(unsigned index, _Outptr_result_nullonfailure_ IDxcDiagnostic** pValue) = 0;
  659. virtual HRESULT STDMETHODCALLTYPE GetFile(_In_ const char* name, _Outptr_result_nullonfailure_ IDxcFile** pResult) = 0;
  660. virtual HRESULT STDMETHODCALLTYPE GetFileName(_Outptr_result_maybenull_ LPSTR* pResult) = 0;
  661. virtual HRESULT STDMETHODCALLTYPE Reparse(
  662. _In_count_(num_unsaved_files) IDxcUnsavedFile** unsaved_files,
  663. unsigned num_unsaved_files) = 0;
  664. virtual HRESULT STDMETHODCALLTYPE GetCursorForLocation(_In_ IDxcSourceLocation* location, _Outptr_result_nullonfailure_ IDxcCursor** pResult) = 0;
  665. virtual HRESULT STDMETHODCALLTYPE GetLocationForOffset(_In_ IDxcFile* file, unsigned offset, _Outptr_result_nullonfailure_ IDxcSourceLocation** pResult) = 0;
  666. virtual HRESULT STDMETHODCALLTYPE GetSkippedRanges(_In_ IDxcFile* file, _Out_ unsigned* pResultCount, _Outptr_result_buffer_(*pResultCount) IDxcSourceRange*** pResult) = 0;
  667. virtual HRESULT STDMETHODCALLTYPE GetDiagnosticDetails(unsigned index, DxcDiagnosticDisplayOptions options,
  668. _Out_ unsigned* errorCode,
  669. _Out_ unsigned* errorLine,
  670. _Out_ unsigned* errorColumn,
  671. _Out_ BSTR* errorFile,
  672. _Out_ unsigned* errorOffset,
  673. _Out_ unsigned* errorLength,
  674. _Out_ BSTR* errorMessage) = 0;
  675. virtual HRESULT STDMETHODCALLTYPE GetInclusionList(_Out_ unsigned* pResultCount, _Outptr_result_buffer_(*pResultCount) IDxcInclusion*** pResult) = 0;
  676. };
  677. struct __declspec(uuid("2ec912fd-b144-4a15-ad0d-1c5439c81e46"))
  678. IDxcType : public IUnknown
  679. {
  680. virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Outptr_result_z_ LPSTR* pResult) = 0;
  681. virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcType* other, _Out_ BOOL* pResult) = 0;
  682. virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcTypeKind* pResult) = 0;
  683. };
  684. struct __declspec(uuid("8ec00f98-07d0-4e60-9d7c-5a50b5b0017f"))
  685. IDxcUnsavedFile : public IUnknown
  686. {
  687. virtual HRESULT STDMETHODCALLTYPE GetFileName(_Outptr_result_z_ LPSTR* pFileName) = 0;
  688. virtual HRESULT STDMETHODCALLTYPE GetContents(_Outptr_result_z_ LPSTR* pContents) = 0;
  689. virtual HRESULT STDMETHODCALLTYPE GetLength(_Out_ unsigned* pLength) = 0;
  690. };
  691. // Fun fact: 'extern' is required because const is by default static in C++, so
  692. // CLSID_DxcIntelliSense is not visible externally (this is OK in C, since const is
  693. // not by default static in C)
  694. __declspec(selectany)
  695. extern const CLSID CLSID_DxcIntelliSense = { /* 3047833c-d1c0-4b8e-9d40-102878605985 */
  696. 0x3047833c,
  697. 0xd1c0,
  698. 0x4b8e,
  699. {0x9d, 0x40, 0x10, 0x28, 0x78, 0x60, 0x59, 0x85}
  700. };
  701. #endif