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