aidl_language.h revision fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20
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 { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PARCELABLE_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 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct parcelable_type { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type document_item; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type parcelable_token; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* package; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type semicolon_token; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} parcelable_type; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct interface_type { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type document_item; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type interface_token; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool oneway; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type oneway_token; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* package; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type name; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type open_brace_token; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_item_type* interface_items; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type close_brace_token; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type* comments_token; // points into this structure, DO NOT DELETE 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} interface_type; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef union lexer_type { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_type buffer; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type_type type; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg_type *arg; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project method_type* method; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_item_type* interface_item; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface_type* interface_obj; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcelable_type* parcelable; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project document_item_type* document_item; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} lexer_type; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define YYSTYPE lexer_type 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if __cplusplus 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint parse_aidl(char const *); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// strips off the leading whitespace, the "import" text 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// also returns whether it's a local or system import 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// we rely on the input matching the import regex from below 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectchar* parse_import_statement(const char* text); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// in, out or inout 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IN_PARAMETER = 1, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OUT_PARAMETER = 2, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INOUT_PARAMETER = 3 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint convert_direction(const char* direction); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// callbacks from within the parser 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// these functions all take ownership of the strings 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct ParserCallbacks { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*document)(document_item_type* items); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*import)(buffer_type* statement); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} ParserCallbacks; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern ParserCallbacks* g_callbacks; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// true if there was an error parsing, false otherwise 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern int g_error; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// the name of the file we're currently parsing 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern char const* g_currentFilename; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// the package name for our current file 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern char const* g_currentPackage; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STATEMENT_INSIDE_INTERFACE 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} error_type; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid init_buffer_type(buffer_type* buf, int lineno); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if __cplusplus 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H 161