| //===-- AST Constant Expression Operators -----------------------*- C++ -*-===// |
| // |
| // High Level Virtual Machine (HLVM) |
| // |
| // Copyright (C) 2006 Reid Spencer. All Rights Reserved. |
| // |
| // This software is free software; you can redistribute it and/or modify it |
| // under the terms of the GNU Lesser General Public License as published by |
| // the Free Software Foundation; either version 2.1 of the License, or (at |
| // your option) any later version. |
| // |
| // This software is distributed in the hope that it will be useful, but WITHOUT |
| // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for |
| // more details. |
| // |
| // You should have received a copy of the GNU Lesser General Public License |
| // along with this library in the file named LICENSE.txt; if not, write to the |
| // Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
| // MA 02110-1301 USA |
| // |
| //===----------------------------------------------------------------------===// |
| /// @file hlvm/AST/Constants.cpp |
| /// @author Reid Spencer <rspencer@reidspencer.org> (original author) |
| /// @date 2006/05/24 |
| /// @since 0.1.0 |
| /// @brief Implements the classes that provide constant expressions |
| //===----------------------------------------------------------------------===// |
| |
| #include <hlvm/AST/Constants.h> |
| #include <hlvm/AST/Type.h> |
| #include <hlvm/AST/ContainerType.h> |
| #include <hlvm/Base/Assert.h> |
| #include <llvm/Support/Casting.h> |
| |
| namespace hlvm { |
| |
| Constant::~Constant() { } |
| ConstantValue::~ConstantValue() { } |
| ConstantAny::~ConstantAny() { } |
| ConstantBoolean::~ConstantBoolean() { } |
| ConstantCharacter::~ConstantCharacter() { } |
| ConstantEnumerator::~ConstantEnumerator() { } |
| ConstantInteger::~ConstantInteger() { } |
| ConstantReal::~ConstantReal() { } |
| ConstantString::~ConstantString() { } |
| ConstantPointer::~ConstantPointer() { } |
| ConstantAggregate::~ConstantAggregate() { } |
| |
| void |
| ConstantAggregate::insertChild(Node* n) |
| { |
| hlvmAssert(llvm::isa<ConstantValue>(n)); |
| ConstantValue* CV = llvm::cast<ConstantValue>(n); |
| elems.push_back(CV); |
| } |
| |
| void |
| ConstantAggregate::removeChild(Node* n) |
| { |
| hlvmAssert(llvm::isa<ConstantValue>(n)); |
| ConstantValue* CV = llvm::cast<ConstantValue>(n); |
| for (ElementsList::iterator I = elems.begin(), E = elems.end(); I != E; ++I) |
| if (*I == CV) { |
| elems.erase(I); |
| break; |
| } |
| } |
| |
| ConstantArray::~ConstantArray() { } |
| |
| const Type* |
| ConstantArray::getElementType() const |
| { |
| const ArrayType* AT = llvm::cast<ArrayType>(this->getType()); |
| return AT->getElementType(); |
| } |
| |
| ConstantVector::~ConstantVector() { } |
| ConstantStructure::~ConstantStructure() { } |
| ConstantContinuation::~ConstantContinuation() { } |
| |
| } |