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