154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project#include "AST.h"
254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project#include "Type.h"
354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectWriteModifiers(FILE* to, int mod, int mask)
654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    int m = mod & mask;
854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
97ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet    if (m & OVERRIDE) {
107ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet        fprintf(to, "@Override ");
117ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet    }
127ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet
1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if ((m & SCOPE_MASK) == PUBLIC) {
1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "public ");
1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    else if ((m & SCOPE_MASK) == PRIVATE) {
1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "private ");
1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    else if ((m & SCOPE_MASK) == PROTECTED) {
2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "protected ");
2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (m & STATIC) {
2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "static ");
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (m & FINAL) {
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "final ");
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (m & ABSTRACT) {
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "abstract ");
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectWriteArgumentList(FILE* to, const vector<Expression*>& arguments)
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t N = arguments.size();
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (size_t i=0; i<N; i++) {
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        arguments[i]->Write(to);
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (i != N-1) {
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, ", ");
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClassElement::ClassElement()
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClassElement::~ClassElement()
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectField::Field()
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :ClassElement(),
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     modifiers(0),
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     variable(NULL)
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectField::Field(int m, Variable* v)
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :ClassElement(),
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     modifiers(m),
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     variable(v)
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectField::~Field()
7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
7554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectField::GatherTypes(set<Type*>* types) const
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
7754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    types->insert(this->variable->type);
7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
7954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectField::Write(FILE* to)
8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
8354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->comment.length() != 0) {
8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s\n", this->comment.c_str());
8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
867ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet    WriteModifiers(to, this->modifiers, SCOPE_MASK | STATIC | FINAL | OVERRIDE);
8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s %s", this->variable->type->QualifiedName().c_str(),
8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            this->variable->name.c_str());
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->value.length() != 0) {
9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, " = %s", this->value.c_str());
9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ";\n");
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectExpression::~Expression()
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectLiteralExpression::LiteralExpression(const string& v)
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :value(v)
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectLiteralExpression::~LiteralExpression()
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectLiteralExpression::Write(FILE* to)
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s", this->value.c_str());
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::Variable()
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(NULL),
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(),
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     dimension(0)
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::Variable(Type* t, const string& n)
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(t),
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n),
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     dimension(0)
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::Variable(Type* t, const string& n, int d)
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(t),
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n),
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     dimension(d)
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::~Variable()
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::GatherTypes(set<Type*>* types) const
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    types->insert(this->type);
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::WriteDeclaration(FILE* to)
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    string dim;
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (int i=0; i<this->dimension; i++) {
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        dim += "[]";
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s%s %s", this->type->QualifiedName().c_str(), dim.c_str(),
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            this->name.c_str());
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariable::Write(FILE* to)
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s", name.c_str());
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFieldVariable::FieldVariable(Expression* o, const string& n)
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :object(o),
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(NULL),
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFieldVariable::FieldVariable(Type* c, const string& n)
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :object(NULL),
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(c),
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFieldVariable::~FieldVariable()
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFieldVariable::Write(FILE* to)
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->object != NULL) {
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->object->Write(to);
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    else if (this->clazz != NULL) {
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s", this->clazz->QualifiedName().c_str());
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ".%s", name.c_str());
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatement::~Statement()
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatementBlock::StatementBlock()
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatementBlock::~StatementBlock()
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatementBlock::Write(FILE* to)
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "{\n");
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    int N = this->statements.size();
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (int i=0; i<N; i++) {
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->statements[i]->Write(to);
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "}\n");
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatementBlock::Add(Statement* statement)
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements.push_back(statement);
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectStatementBlock::Add(Expression* expression)
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements.push_back(new ExpressionStatement(expression));
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectExpressionStatement::ExpressionStatement(Expression* e)
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :expression(e)
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectExpressionStatement::~ExpressionStatement()
23454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
23554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
23654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
23854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectExpressionStatement::Write(FILE* to)
23954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->expression->Write(to);
24154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ";\n");
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectAssignment::Assignment(Variable* l, Expression* r)
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :lvalue(l),
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     rvalue(r),
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     cast(NULL)
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectAssignment::Assignment(Variable* l, Expression* r, Type* c)
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :lvalue(l),
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     rvalue(r),
25454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     cast(c)
25554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
25654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
25754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectAssignment::~Assignment()
25954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
26054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
26154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
26254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
26354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectAssignment::Write(FILE* to)
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->lvalue->Write(to);
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, " = ");
26754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->cast != NULL) {
26854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "(%s)", this->cast->QualifiedName().c_str());
26954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
27054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->rvalue->Write(to);
27154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
27254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::MethodCall(const string& n)
27454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :obj(NULL),
27554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(NULL),
27654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
27754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
27854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
27954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::MethodCall(Expression* o, const string& n)
28154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :obj(o),
28254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(NULL),
28354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
28454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
28554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
28654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::MethodCall(Type* t, const string& n)
28854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :obj(NULL),
28954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(t),
29054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
29154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
29254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
29354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
29454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::MethodCall(Expression* o, const string& n, int argc = 0, ...)
29554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :obj(o),
29654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(NULL),
29754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
29854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
29954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_list args;
30054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_start(args, argc);
30154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  init(argc, args);
30254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_end(args);
30354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
30454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
30554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::MethodCall(Type* t, const string& n, int argc = 0, ...)
30654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :obj(NULL),
30754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     clazz(t),
30854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     name(n)
30954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
31054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_list args;
31154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_start(args, argc);
31254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  init(argc, args);
31354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project  va_end(args);
31454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
31554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
31654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::~MethodCall()
31754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
31854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
31954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
32054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
32154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::init(int n, va_list args)
32254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
32354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (int i=0; i<n; i++) {
32454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Expression* expression = (Expression*)va_arg(args, void*);
32554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->arguments.push_back(expression);
32654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
32754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
32854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
32954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
33054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethodCall::Write(FILE* to)
33154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
33254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->obj != NULL) {
33354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->obj->Write(to);
33454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, ".");
33554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
33654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    else if (this->clazz != NULL) {
33754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s.", this->clazz->QualifiedName().c_str());
33854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
33954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s(", this->name.c_str());
34054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    WriteArgumentList(to, this->arguments);
34154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")");
34254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
34354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
34454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectComparison::Comparison(Expression* l, const string& o, Expression* r)
34554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :lvalue(l),
34654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     op(o),
34754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     rvalue(r)
34854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
34954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
35054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
35154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectComparison::~Comparison()
35254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
35354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
35454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
35554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
35654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectComparison::Write(FILE* to)
35754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
35854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "(");
35954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->lvalue->Write(to);
36054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s", this->op.c_str());
36154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->rvalue->Write(to);
36254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")");
36354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
36454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
36554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewExpression::NewExpression(Type* t)
36654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(t)
36754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
36854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
36954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
37054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewExpression::~NewExpression()
37154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
37254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
37354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
37454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
37554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewExpression::Write(FILE* to)
37654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
37754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "new %s(", this->type->InstantiableName().c_str());
37854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    WriteArgumentList(to, this->arguments);
37954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")");
38054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
38154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
38254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewArrayExpression::NewArrayExpression(Type* t, Expression* s)
38354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(t),
38454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     size(s)
38554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
38654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
38754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
38854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewArrayExpression::~NewArrayExpression()
38954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
39054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
39154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
39354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectNewArrayExpression::Write(FILE* to)
39454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
39554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "new %s[", this->type->QualifiedName().c_str());
39654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size->Write(to);
39754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "]");
39854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
39954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTernary::Ternary()
40154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :condition(NULL),
40254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     ifpart(NULL),
40354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     elsepart(NULL)
40454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
40554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
40654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTernary::Ternary(Expression* a, Expression* b, Expression* c)
40854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :condition(a),
40954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     ifpart(b),
41054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     elsepart(c)
41154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
41254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
41354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTernary::~Ternary()
41554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
41654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
41754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
41954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTernary::Write(FILE* to)
42054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
42154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "((");
42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->condition->Write(to);
42354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")?(");
42454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->ifpart->Write(to);
42554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "):(");
42654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->elsepart->Write(to);
42754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "))");
42854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
42954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCast::Cast()
43154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(NULL),
43254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     expression(NULL)
43354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
43454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
43554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCast::Cast(Type* t, Expression* e)
43754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :type(t),
43854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     expression(e)
43954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
44054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
44154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCast::~Cast()
44354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
44654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
44754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCast::Write(FILE* to)
44854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "((%s)", this->type->QualifiedName().c_str());
45054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    expression->Write(to);
45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")");
45254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableDeclaration::VariableDeclaration(Variable* l, Expression* r, Type* c)
45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :lvalue(l),
45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     cast(c),
45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     rvalue(r)
45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
45954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
46054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
46154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableDeclaration::VariableDeclaration(Variable* l)
46254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :lvalue(l),
46354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     cast(NULL),
46454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     rvalue(NULL)
46554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
46654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
46754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
46854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableDeclaration::~VariableDeclaration()
46954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
47054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
47154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
47254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
47354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectVariableDeclaration::Write(FILE* to)
47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->lvalue->WriteDeclaration(to);
47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->rvalue != NULL) {
47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, " = ");
47854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (this->cast != NULL) {
47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, "(%s)", this->cast->QualifiedName().c_str());
48054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->rvalue->Write(to);
48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ";\n");
48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectIfStatement::IfStatement()
48754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :expression(NULL),
48854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     statements(new StatementBlock),
48954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     elseif(NULL)
49054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
49154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
49254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
49354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectIfStatement::~IfStatement()
49454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
49554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
49654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
49754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
49854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectIfStatement::Write(FILE* to)
49954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
50054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->expression != NULL) {
50154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "if (");
50254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->expression->Write(to);
50354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, ") ");
50454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements->Write(to);
50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->elseif != NULL) {
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "else ");
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->elseif->Write(to);
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectReturnStatement::ReturnStatement(Expression* e)
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :expression(e)
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectReturnStatement::~ReturnStatement()
51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
52254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectReturnStatement::Write(FILE* to)
52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
52454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "return ");
52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->expression->Write(to);
52654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ";\n");
52754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTryStatement::TryStatement()
53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :statements(new StatementBlock)
53154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
53354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTryStatement::~TryStatement()
53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
53854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
53954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectTryStatement::Write(FILE* to)
54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
54154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "try ");
54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements->Write(to);
54354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
54454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
54554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCatchStatement::CatchStatement(Variable* e)
54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :statements(new StatementBlock),
54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     exception(e)
54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCatchStatement::~CatchStatement()
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCatchStatement::Write(FILE* to)
55754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "catch ");
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->exception != NULL) {
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "(");
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->exception->WriteDeclaration(to);
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, ") ");
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements->Write(to);
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFinallyStatement::FinallyStatement()
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :statements(new StatementBlock)
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
57054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFinallyStatement::~FinallyStatement()
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectFinallyStatement::Write(FILE* to)
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "finally ");
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->statements->Write(to);
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCase::Case()
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :statements(new StatementBlock)
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCase::Case(const string& c)
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :statements(new StatementBlock)
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    cases.push_back(c);
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCase::~Case()
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectCase::Write(FILE* to)
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    int N = this->cases.size();
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (N > 0) {
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        for (int i=0; i<N; i++) {
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            string s = this->cases[i];
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (s.length() != 0) {
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                fprintf(to, "case %s:\n", s.c_str());
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                fprintf(to, "default:\n");
60954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
61054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
61154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    } else {
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "default:\n");
61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    statements->Write(to);
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectSwitchStatement::SwitchStatement(Expression* e)
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :expression(e)
61954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectSwitchStatement::~SwitchStatement()
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
62454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectSwitchStatement::Write(FILE* to)
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "switch (");
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    this->expression->Write(to);
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")\n{\n");
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    int N = this->cases.size();
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (int i=0; i<N; i++) {
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->cases[i]->Write(to);
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "}\n");
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethod::Method()
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :ClassElement(),
64154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     modifiers(0),
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     returnType(NULL), // (NULL means constructor)
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     returnTypeDimension(0),
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     statements(NULL)
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethod::~Method()
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethod::GatherTypes(set<Type*>* types) const
65454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t N, i;
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->returnType) {
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        types->insert(this->returnType);
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->parameters.size();
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->parameters[i]->GatherTypes(types);
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->exceptions.size();
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        types->insert(this->exceptions[i]);
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectMethod::Write(FILE* to)
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t N, i;
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->comment.length() != 0) {
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s\n", this->comment.c_str());
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6817ea9d79e302b1d71c62802aa514566c9b7f39f67Xavier Ducrohet    WriteModifiers(to, this->modifiers, SCOPE_MASK | STATIC | FINAL | OVERRIDE);
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->returnType != NULL) {
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        string dim;
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        for (i=0; i<this->returnTypeDimension; i++) {
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            dim += "[]";
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s%s ", this->returnType->QualifiedName().c_str(),
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                dim.c_str());
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s(", this->name.c_str());
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->parameters.size();
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->parameters[i]->WriteDeclaration(to);
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (i != N-1) {
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, ", ");
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, ")");
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->exceptions.size();
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (i == 0) {
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, " throws ");
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, ", ");
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s", this->exceptions[i]->QualifiedName().c_str());
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->statements == NULL) {
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, ";\n");
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    } else {
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "\n");
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->statements->Write(to);
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClass::Class()
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    :modifiers(0),
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     what(CLASS),
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     type(NULL),
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     extends(NULL)
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClass::~Class()
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClass::GatherTypes(set<Type*>* types) const
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    int N, i;
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    types->insert(this->type);
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->extends != NULL) {
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        types->insert(this->extends);
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->interfaces.size();
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        types->insert(this->interfaces[i]);
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->elements.size();
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->elements[i]->GatherTypes(types);
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectClass::Write(FILE* to)
75754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t N, i;
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->comment.length() != 0) {
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s\n", this->comment.c_str());
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    WriteModifiers(to, this->modifiers, ALL_MODIFIERS);
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->what == Class::CLASS) {
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "class ");
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    } else {
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "interface ");
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    string name = this->type->Name();
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t pos = name.rfind('.');
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (pos != string::npos) {
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        name = name.c_str() + pos + 1;
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "%s", name.c_str());
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->extends != NULL) {
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, " extends %s", this->extends->QualifiedName().c_str());
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->interfaces.size();
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (N != 0) {
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (this->what == Class::CLASS) {
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, " implements");
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, " extends");
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        for (i=0; i<N; i++) {
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            fprintf(to, " %s", this->interfaces[i]->QualifiedName().c_str());
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
79554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "\n");
79754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "{\n");
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->elements.size();
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        this->elements[i]->Write(to);
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "}\n");
80554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
80754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectDocument::Document()
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectDocument::~Document()
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
81554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectstatic string
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectescape_backslashes(const string& str)
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    string result;
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    const size_t I=str.length();
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (size_t i=0; i<I; i++) {
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        char c = str[i];
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c == '\\') {
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            result += "\\\\";
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
82654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            result += c;
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    return result;
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectvoid
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source ProjectDocument::Write(FILE* to)
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project{
83554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    size_t N, i;
83654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->comment.length() != 0) {
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "%s\n", this->comment.c_str());
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    fprintf(to, "/*\n"
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                " * This file is auto-generated.  DO NOT MODIFY.\n"
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                " * Original file: %s\n"
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                " */\n", escape_backslashes(this->originalSrc).c_str());
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    if (this->package.length() != 0) {
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        fprintf(to, "package %s;\n", this->package.c_str());
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    N = this->classes.size();
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    for (i=0; i<N; i++) {
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Class* c = this->classes[i];
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        c->Write(to);
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
855