19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum { 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NO_EXTRA_TEXT = 0, 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SHORT_COMMENT, 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LONG_COMMENT, 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project COPY_TEXT, 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WHITESPACE 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} which_extra_text; 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct extra_text_type { 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned lineno; 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project which_extra_text which; 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* data; 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned len; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct extra_text_type* next; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} extra_text_type; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct buffer_type { 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned lineno; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned token; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char *data; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extra_text_type* extra; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} buffer_type; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct type_type { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type type; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type array_token; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int dimension; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} type_type; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct arg_type { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type comma_token; // empty in the first one in the list 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type direction; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type_type type; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct arg_type *next; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} arg_type; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project METHOD_TYPE 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct interface_item_type { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned item_type; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct interface_item_type* next; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} interface_item_type; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct method_type { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_item_type interface_item; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type_type type; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool oneway; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type oneway_token; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type open_paren_token; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg_type* args; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type close_paren_token; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX missing comments/copy text here 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type semicolon_token; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type* comments_token; // points into this structure, DO NOT DELETE 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} method_type; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 66a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato USER_DATA_TYPE = 12, 67fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato INTERFACE_TYPE_BINDER, 68fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato INTERFACE_TYPE_RPC 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct document_item_type { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned item_type; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct document_item_type* next; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} document_item_type; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 76a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato 77a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato// for user_data_type.flattening_methods 78a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onoratoenum { 79a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato PARCELABLE_DATA = 0x1, 80a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato RPC_DATA = 0x2 81a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato}; 82a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato 83a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onoratotypedef struct user_data_type { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type document_item; 85a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato buffer_type keyword_token; // only the first one 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* package; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type semicolon_token; 89a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato int flattening_methods; 90a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato} user_data_type; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct interface_type { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type document_item; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type interface_token; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool oneway; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type oneway_token; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* package; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type open_brace_token; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_item_type* interface_items; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type close_brace_token; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type* comments_token; // points into this structure, DO NOT DELETE 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} interface_type; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef union lexer_type { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type buffer; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type_type type; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg_type *arg; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project method_type* method; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_item_type* interface_item; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_type* interface_obj; 112a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato user_data_type* user_data; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type* document_item; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} lexer_type; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define YYSTYPE lexer_type 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if __cplusplus 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint parse_aidl(char const *); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// strips off the leading whitespace, the "import" text 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// also returns whether it's a local or system import 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// we rely on the input matching the import regex from below 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectchar* parse_import_statement(const char* text); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// in, out or inout 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IN_PARAMETER = 1, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OUT_PARAMETER = 2, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INOUT_PARAMETER = 3 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint convert_direction(const char* direction); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// callbacks from within the parser 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// these functions all take ownership of the strings 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct ParserCallbacks { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*document)(document_item_type* items); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*import)(buffer_type* statement); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} ParserCallbacks; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern ParserCallbacks* g_callbacks; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// true if there was an error parsing, false otherwise 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern int g_error; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// the name of the file we're currently parsing 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern char const* g_currentFilename; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// the package name for our current file 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern char const* g_currentPackage; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STATEMENT_INSIDE_INTERFACE 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} error_type; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid init_buffer_type(buffer_type* buf, int lineno); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if __cplusplus 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H 169