diff options
author | Rhys Weatherley <[email protected]> | 2010-11-12 09:05:48 +1000 |
---|---|---|
committer | Rhys Weatherley <[email protected]> | 2010-11-12 09:29:50 +1000 |
commit | 73d570c83afb7e7fbcc8a87a2a63c9e3b39ae452 (patch) | |
tree | 30be36ca8402ec4495d706f6a35e7ccf33fad1ba /src/libs/glsl/glslast.cpp | |
parent | 217699c8ac6a0b326ab4f09238c8ca888bf11c29 (diff) |
Convert GLSL AST nodes into managed types
Diffstat (limited to 'src/libs/glsl/glslast.cpp')
-rw-r--r-- | src/libs/glsl/glslast.cpp | 225 |
1 files changed, 15 insertions, 210 deletions
diff --git a/src/libs/glsl/glslast.cpp b/src/libs/glsl/glslast.cpp index e9784010529..b6ab81930a6 100644 --- a/src/libs/glsl/glslast.cpp +++ b/src/libs/glsl/glslast.cpp @@ -32,10 +32,6 @@ using namespace GLSL; -AST::~AST() -{ -} - void AST::accept(Visitor *visitor) { if (visitor->preVisit(this)) @@ -49,23 +45,6 @@ void AST::accept(AST *ast, Visitor *visitor) ast->accept(visitor); } -Statement *AST::makeCompound(Statement *left, Statement *right) -{ - if (!left) - return right; - else if (!right) - return left; - CompoundStatement *compound = left->asCompoundStatement(); - if (compound) { - compound->statements.push_back(right); - } else { - compound = new CompoundStatement(); - compound->statements.push_back(left); - compound->statements.push_back(right); - } - return compound; -} - void TranslationUnit::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -74,32 +53,18 @@ void TranslationUnit::accept0(Visitor *visitor) visitor->endVisit(this); } -IdentifierExpression::~IdentifierExpression() -{ -} - void IdentifierExpression::accept0(Visitor *visitor) { visitor->visit(this); visitor->endVisit(this); } -LiteralExpression::~LiteralExpression() -{ -} - void LiteralExpression::accept0(Visitor *visitor) { visitor->visit(this); visitor->endVisit(this); } -BinaryExpression::~BinaryExpression() -{ - delete left; - delete right; -} - void BinaryExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -109,11 +74,6 @@ void BinaryExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -UnaryExpression::~UnaryExpression() -{ - delete expr; -} - void UnaryExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -121,13 +81,6 @@ void UnaryExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -TernaryExpression::~TernaryExpression() -{ - delete first; - delete second; - delete third; -} - void TernaryExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -138,12 +91,6 @@ void TernaryExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -AssignmentExpression::~AssignmentExpression() -{ - delete variable; - delete value; -} - void AssignmentExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -153,11 +100,6 @@ void AssignmentExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -MemberAccessExpression::~MemberAccessExpression() -{ - delete expr; -} - void MemberAccessExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -165,28 +107,15 @@ void MemberAccessExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -FunctionCallExpression::~FunctionCallExpression() -{ - delete expr; - for (std::vector<Expression *>::iterator it = arguments.begin(); it != arguments.end(); ++it) - delete *it; -} - void FunctionCallExpression::accept0(Visitor *visitor) { if (visitor->visit(this)) { accept(expr, visitor); - for (std::vector<Expression *>::iterator it = arguments.begin(); it != arguments.end(); ++it) - accept(*it, visitor); + accept(arguments, visitor); } visitor->endVisit(this); } -ExpressionStatement::~ExpressionStatement() -{ - delete expr; -} - void ExpressionStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -194,28 +123,13 @@ void ExpressionStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -CompoundStatement::~CompoundStatement() -{ - for (std::vector<Statement *>::iterator it = statements.begin(); it != statements.end(); ++it) - delete *it; -} - void CompoundStatement::accept0(Visitor *visitor) { - if (visitor->visit(this)) { - for (std::vector<Statement *>::iterator it = statements.begin(); it != statements.end(); ++it) - accept(*it, visitor); - } + if (visitor->visit(this)) + accept(statements, visitor); visitor->endVisit(this); } -IfStatement::~IfStatement() -{ - delete condition; - delete thenClause; - delete elseClause; -} - void IfStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -226,12 +140,6 @@ void IfStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -WhileStatement::~WhileStatement() -{ - delete condition; - delete body; -} - void WhileStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -241,12 +149,6 @@ void WhileStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -DoStatement::~DoStatement() -{ - delete body; - delete condition; -} - void DoStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -256,14 +158,6 @@ void DoStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -ForStatement::~ForStatement() -{ - delete init; - delete condition; - delete increment; - delete body; -} - void ForStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -275,21 +169,12 @@ void ForStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -JumpStatement::~JumpStatement() -{ -} - void JumpStatement::accept0(Visitor *visitor) { visitor->visit(this); visitor->endVisit(this); } -ReturnStatement::~ReturnStatement() -{ - delete expr; -} - void ReturnStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -297,12 +182,6 @@ void ReturnStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -SwitchStatement::~SwitchStatement() -{ - delete expr; - delete body; -} - void SwitchStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -312,11 +191,6 @@ void SwitchStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -CaseLabelStatement::~CaseLabelStatement() -{ - delete expr; -} - void CaseLabelStatement::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -324,15 +198,6 @@ void CaseLabelStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -Type *Type::clone(Type *type) -{ - if (!type) - return 0; - Type *c = type->clone(); - c->lineno = type->lineno; - return c; -} - BasicType::BasicType(int _token) : Type(Kind_BasicType), token(_token) { @@ -350,10 +215,6 @@ BasicType::BasicType(int _token) } } -BasicType::~BasicType() -{ -} - void BasicType::accept0(Visitor *visitor) { visitor->visit(this); @@ -373,15 +234,6 @@ bool BasicType::setPrecision(Precision precision) return true; } -Type *BasicType::clone() const -{ - return new BasicType(token, prec); -} - -NamedType::~NamedType() -{ -} - void NamedType::accept0(Visitor *visitor) { visitor->visit(this); @@ -399,17 +251,6 @@ bool NamedType::setPrecision(Precision) return false; } -Type *NamedType::clone() const -{ - return new NamedType(name); -} - -ArrayType::~ArrayType() -{ - delete elementType; - delete size; -} - void ArrayType::accept0(Visitor *visitor) { if (visitor->visit(this)) { @@ -432,26 +273,10 @@ bool ArrayType::setPrecision(Precision precision) return false; } -Type *ArrayType::clone() const -{ - if (kind == Kind_ArrayType) - return new ArrayType(Type::clone(elementType), size); - else - return new ArrayType(Type::clone(elementType)); -} - -StructType::~StructType() -{ - for (std::vector<Field *>::iterator it = fields.begin(); it != fields.end(); ++it) - delete *it; -} - void StructType::accept0(Visitor *visitor) { - if (visitor->visit(this)) { - for (std::vector<Field *>::iterator it = fields.begin(); it != fields.end(); ++it) - accept(*it, visitor); - } + if (visitor->visit(this)) + accept(fields, visitor); visitor->endVisit(this); } @@ -466,25 +291,6 @@ bool StructType::setPrecision(Precision) return false; } -Type *StructType::clone() const -{ - StructType *stype; - if (kind == Kind_AnonymousStructType) - stype = new StructType(); - else - stype = new StructType(name); - for (std::vector<Field *>::const_iterator it = fields.begin(); it != fields.end(); ++it) { - stype->fields.push_back - (new Field((*it)->name, Type::clone((*it)->type))); - } - return stype; -} - -StructType::Field::~Field() -{ - delete type; -} - void StructType::Field::accept0(Visitor *visitor) { if (visitor->visit(this)) @@ -505,18 +311,17 @@ void StructType::Field::setInnerType(Type *innerType) parent = &(array->elementType); inner = array->elementType; } - *parent = Type::clone(innerType); -} - -void StructType::fixInnerTypes(Type *innerType, std::vector<Field *> &fields) -{ - for (size_t index = 0; index < fields.size(); ++index) - fields[index]->setInnerType(innerType); - delete innerType; // No longer needed - cloned into all fields. + *parent = innerType; } -void StructType::addFields(const std::vector<Field *> &list) +void StructType::fixInnerTypes(Type *innerType, List<Field *> *fields) { - for (size_t index = 0; index < list.size(); ++index) - fields.push_back(list[index]); + if (!fields) + return; + List<Field *> *head = fields->next; + List<Field *> *current = head; + do { + current->value->setInnerType(innerType); + current = current->next; + } while (current && current != head); } |