1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifndef AIDL_AST_H 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#define AIDL_AST_H 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string> 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <vector> 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <set> 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdarg.h> 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdio.h> 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace std; 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass Type; 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskienum { 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski PACKAGE_PRIVATE = 0x00000000, 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski PUBLIC = 0x00000001, 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski PRIVATE = 0x00000002, 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski PROTECTED = 0x00000003, 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SCOPE_MASK = 0x00000003, 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski STATIC = 0x00000010, 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FINAL = 0x00000020, 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ABSTRACT = 0x00000040, 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski OVERRIDE = 0x00000100, 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ALL_MODIFIERS = 0xffffffff 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Write the modifiers that are set in both mod and mask 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskivoid WriteModifiers(FILE* to, int mod, int mask); 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct ClassElement 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ClassElement(); 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ClassElement(); 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void GatherTypes(set<Type*>* types) const = 0; 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to) = 0; 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Expression 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Expression(); 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to) = 0; 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct LiteralExpression : public Expression 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string value; 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski LiteralExpression(const string& value); 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~LiteralExpression(); 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// TODO: also escape the contents. not needed for now 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct StringLiteralExpression : public Expression 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string value; 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StringLiteralExpression(const string& value); 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~StringLiteralExpression(); 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Variable : public Expression 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* type; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string name; 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int dimension; 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable(); 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable(Type* type, const string& name); 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable(Type* type, const string& name, int dimension); 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Variable(); 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void GatherTypes(set<Type*>* types) const; 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void WriteDeclaration(FILE* to); 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void Write(FILE* to); 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct FieldVariable : public Expression 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* object; 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* clazz; 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string name; 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FieldVariable(Expression* object, const string& name); 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FieldVariable(Type* clazz, const string& name); 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~FieldVariable(); 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void Write(FILE* to); 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Field : public ClassElement 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string comment; 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int modifiers; 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable *variable; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string value; 102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Field(); 104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Field(int modifiers, Variable* variable); 105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Field(); 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void GatherTypes(set<Type*>* types) const; 108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Statement 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Statement(); 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to) = 0; 115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct StatementBlock : public Statement 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Statement*> statements; 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock(); 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~StatementBlock(); 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void Add(Statement* statement); 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void Add(Expression* expression); 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct ExpressionStatement : public Statement 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* expression; 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ExpressionStatement(Expression* expression); 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ExpressionStatement(); 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Assignment : public Expression 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable* lvalue; 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* rvalue; 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* cast; 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Assignment(Variable* lvalue, Expression* rvalue); 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Assignment(Variable* lvalue, Expression* rvalue, Type* cast); 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Assignment(); 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct MethodCall : public Expression 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* obj; 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* clazz; 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string name; 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Expression*> arguments; 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<string> exceptions; 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(const string& name); 159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(const string& name, int argc, ...); 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(Expression* obj, const string& name); 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(Type* clazz, const string& name); 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(Expression* obj, const string& name, int argc, ...); 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MethodCall(Type* clazz, const string& name, int argc, ...); 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~MethodCall(); 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate: 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void init(int n, va_list args); 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Comparison : public Expression 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* lvalue; 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string op; 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* rvalue; 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Comparison(Expression* lvalue, const string& op, Expression* rvalue); 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Comparison(); 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct NewExpression : public Expression 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* type; 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Expression*> arguments; 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski NewExpression(Type* type); 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski NewExpression(Type* type, int argc, ...); 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~NewExpression(); 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate: 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void init(int n, va_list args); 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct NewArrayExpression : public Expression 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* type; 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* size; 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski NewArrayExpression(Type* type, Expression* size); 202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~NewArrayExpression(); 203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Ternary : public Expression 207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* condition; 209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* ifpart; 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* elsepart; 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Ternary(); 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Ternary(Expression* condition, Expression* ifpart, Expression* elsepart); 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Ternary(); 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Cast : public Expression 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* type; 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* expression; 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Cast(); 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Cast(Type* type, Expression* expression); 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Cast(); 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct VariableDeclaration : public Statement 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable* lvalue; 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* cast; 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* rvalue; 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski VariableDeclaration(Variable* lvalue); 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski VariableDeclaration(Variable* lvalue, Expression* rvalue, Type* cast = NULL); 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~VariableDeclaration(); 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct IfStatement : public Statement 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* expression; 244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski IfStatement* elseif; 246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski IfStatement(); 248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~IfStatement(); 249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct ReturnStatement : public Statement 253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* expression; 255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ReturnStatement(Expression* expression); 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ReturnStatement(); 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct TryStatement : public Statement 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TryStatement(); 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~TryStatement(); 267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct CatchStatement : public Statement 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Variable* exception; 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CatchStatement(Variable* exception); 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~CatchStatement(); 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct FinallyStatement : public Statement 281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FinallyStatement(); 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~FinallyStatement(); 286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Case 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<string> cases; 292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Case(); 295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Case(const string& c); 296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Case(); 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct SwitchStatement : public Statement 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Expression* expression; 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Case*> cases; 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SwitchStatement(Expression* expression); 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~SwitchStatement(); 307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Break : public Statement 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Break(); 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Break(); 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Method : public ClassElement 318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string comment; 320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int modifiers; 321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* returnType; 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t returnTypeDimension; 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string name; 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Variable*> parameters; 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Type*> exceptions; 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StatementBlock* statements; 327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Method(); 329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Method(); 330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void GatherTypes(set<Type*>* types) const; 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Class : public ClassElement 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski enum { 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CLASS, 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski INTERFACE 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string comment; 343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int modifiers; 344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int what; // CLASS or INTERFACE 345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* type; 346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type* extends; 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Type*> interfaces; 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<ClassElement*> elements; 349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Class(); 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Class(); 352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void GatherTypes(set<Type*>* types) const; 354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct Document 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string comment; 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string package; 361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string originalSrc; 362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski set<Type*> imports; 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<Class*> classes; 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Document(); 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Document(); 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void Write(FILE* to); 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // AIDL_AST_H 372