[opengtl-commits] [327] do the conversion for binary operations in the AST tree, this ( at last) should solve the issue of pixels-that-need-to-autoconvert-to-vectors and has the extra benefits of generating a compilation error when trying to do a binary operations for value that can 't do it (instead of generating an assert when generating the code...) |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/opengtl-commits Archives
]
- To: opengtl-commits@xxxxxxxxxxxxxxxxxxx
- Subject: [opengtl-commits] [327] do the conversion for binary operations in the AST tree, this ( at last) should solve the issue of pixels-that-need-to-autoconvert-to-vectors and has the extra benefits of generating a compilation error when trying to do a binary operations for value that can 't do it (instead of generating an assert when generating the code...)
- From: subversion@xxxxxxxxxxxxx
- Date: Sun, 31 Aug 2008 00:57:56 +0200
Revision: 327
Author: cyrille
Date: 2008-08-31 00:57:55 +0200 (Sun, 31 Aug 2008)
Log Message:
-----------
do the conversion for binary operations in the AST tree, this (at last) should solve the issue of pixels-that-need-to-autoconvert-to-vectors and has the extra benefits of generating a compilation error when trying to do a binary operations for value that can't do it (instead of generating an assert when generating the code...)
Modified Paths:
--------------
trunk/OpenGTL/OpenCTL/OpenCTL/Program.cpp
trunk/OpenGTL/OpenCTL/tests/library/TestParserNG.h
trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.cpp
trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.h
trunk/OpenGTL/OpenGTL/GTLCore/CodeGenerator_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.h
trunk/OpenGTL/OpenGTL/GTLCore/ConvertCenter_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/Debug.cpp
trunk/OpenGTL/OpenGTL/GTLCore/Function_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/ParserBase_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/Type.cpp
trunk/OpenGTL/OpenGTL/GTLCore/Type.h
trunk/OpenGTL/OpenGTL/GTLCore/Type_p.cpp
trunk/OpenGTL/OpenGTL/GTLCore/Type_p.h
trunk/OpenGTL/TODO
Modified: trunk/OpenGTL/OpenCTL/OpenCTL/Program.cpp
===================================================================
--- trunk/OpenGTL/OpenCTL/OpenCTL/Program.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenCTL/OpenCTL/Program.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -297,7 +297,7 @@
}
}
// Some debug
-#ifndef _NDEBUG_
+#ifndef NDEBUG
for( unsigned int i = 0; i < arguments.size(); i++)
{
OCTL_DEBUG("arguments[" << i << "] == " << *arguments[i]);
Modified: trunk/OpenGTL/OpenCTL/tests/library/TestParserNG.h
===================================================================
--- trunk/OpenGTL/OpenCTL/tests/library/TestParserNG.h 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenCTL/tests/library/TestParserNG.h 2008-08-30 22:57:55 UTC (rev 327)
@@ -17,6 +17,7 @@
* Boston, MA 02110-1301, USA.
*/
+#include "OpenCTL/compiler/Compiler.h"
#include "OpenCTL/compiler/ParserNG.h"
#include "GTLCore/AST/Tree.h"
#include "GTLCore/AST/BinaryExpression.h"
@@ -28,7 +29,7 @@
{
std::istringstream iss(" const int v = 3 + 4 / 2; \n const int v2 = 3 / 4 + 2;");
OpenCTL::LexerNG lng(&iss);
- OpenCTL::ParserNG png( 0, &lng );
+ OpenCTL::ParserNG png( new OpenCTL::Compiler, &lng );
AST::Tree* tree = png.parse();
GTL_ASSERT( tree );
GTLTEST_CHECK_EQUAL( tree->globalConstantDeclarations().size() , 2);
Modified: trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -19,6 +19,9 @@
#include "ConvertExpression.h"
+#include "../CodeGenerator_p.h"
+#include "../ExpressionResult_p.h"
+
using namespace GTLCore;
using namespace GTLCore::AST;
@@ -26,6 +29,11 @@
{
}
+ConvertExpression::~ConvertExpression()
+{
+ delete m_value;
+}
+
void ConvertExpression::markAsReturnExpression()
{
m_value->markAsReturnExpression();
@@ -35,3 +43,32 @@
{
return m_value->isConstant();
}
+
+const AST::Expression* ConvertExpression::value() const
+{
+ return m_value;
+}
+
+DefaultConvertExpression::DefaultConvertExpression( AST::Expression* _value, const GTLCore::Type* _dstType ) : ConvertExpression(_value), m_dstType(_dstType)
+{
+}
+
+DefaultConvertExpression::~DefaultConvertExpression()
+{
+}
+
+const GTLCore::Type* DefaultConvertExpression::type() const
+{
+ return m_dstType;
+}
+
+GTLCore::ExpressionResult DefaultConvertExpression::generateValue( GenerationContext& _gc, llvm::BasicBlock* bb ) const
+{
+ GTLCore::ExpressionResult result = value()->generateValue( _gc, bb );
+ if( result.isConstant() )
+ {
+ return GTLCore::ExpressionResult( CodeGenerator::convertConstantTo( result.constant(), result.type(), m_dstType ), m_dstType);
+ } else {
+ return GTLCore::ExpressionResult( CodeGenerator::convertValueTo( bb, result.value(), result.type(), m_dstType ), m_dstType);
+ }
+}
Modified: trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.h
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.h 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/AST/ConvertExpression.h 2008-08-30 22:57:55 UTC (rev 327)
@@ -27,11 +27,23 @@
class ConvertExpression : public Expression {
public:
ConvertExpression( AST::Expression* _value );
+ ~ConvertExpression();
virtual void markAsReturnExpression();
virtual bool isConstant() const;
+ protected:
+ const AST::Expression* value() const;
private:
AST::Expression* m_value;
};
+ class DefaultConvertExpression : public ConvertExpression {
+ public:
+ DefaultConvertExpression( AST::Expression* _value, const GTLCore::Type* _dstType );
+ virtual ~DefaultConvertExpression();
+ virtual const GTLCore::Type* type() const;
+ virtual GTLCore::ExpressionResult generateValue( GenerationContext&, llvm::BasicBlock* bb ) const;
+ private:
+ const GTLCore::Type* m_dstType;
+ };
}
}
Modified: trunk/OpenGTL/OpenGTL/GTLCore/CodeGenerator_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/CodeGenerator_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/CodeGenerator_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -43,32 +43,24 @@
GTL_ASSERT( _v2_.value() ); \
const Type* highestPriorityType = Type::Private::selectType( lhsType, rhsType); \
GTL_ASSERT( highestPriorityType ); \
- GTLCore::ExpressionResult v1; \
- GTLCore::ExpressionResult v2; \
- if(_v1_.isConstant() and _v2_.isConstant()) \
- { \
- v1.setConstant(convertConstantTo( _v1_.constant(), lhsType, highestPriorityType)); \
- v2.setConstant(convertConstantTo( _v2_.constant(), rhsType, highestPriorityType)); \
- } else { \
- v1.setValue(convertValueTo( currentBlock, _v1_.value(), lhsType, highestPriorityType)); \
- v2.setValue(convertValueTo( currentBlock, _v2_.value(), rhsType, highestPriorityType)); \
- } \
+ GTLCore::ExpressionResult v1 = _v1_; \
+ GTLCore::ExpressionResult v2 = _v2_; \
GTL_ASSERT( v1.value() ); \
GTL_ASSERT( v2.value() );
#define UNIFORMIZE_VALUE_TYPES( _v1_, _v2_ ) \
const Type* highestPriorityType = Type::Private::selectType( lhsType, rhsType); \
GTL_ASSERT( highestPriorityType ); \
- llvm::Value* v1 = convertValueTo( currentBlock, _v1_, lhsType, highestPriorityType); \
- llvm::Value* v2 = convertValueTo( currentBlock, _v2_, rhsType, highestPriorityType); \
+ llvm::Value* v1 = _v1_; \
+ llvm::Value* v2 = _v2_; \
GTL_ASSERT( v1 ); \
GTL_ASSERT( v2 );
#define UNIFORMIZE_CONSTANT_TYPES( _v1_, _v2_ ) \
const Type* highestPriorityType = Type::Private::selectType( lhsType, rhsType); \
GTL_ASSERT( highestPriorityType ); \
- llvm::Constant* v1 = convertConstantTo( _v1_, lhsType, highestPriorityType); \
- llvm::Constant* v2 = convertConstantTo( _v2_, rhsType, highestPriorityType); \
+ llvm::Constant* v1 = _v1_; \
+ llvm::Constant* v2 = _v2_; \
GTL_ASSERT( v1 ); \
GTL_ASSERT( v2 );
@@ -643,7 +635,7 @@
}
-#ifndef _NDEBUG_
+#ifndef NDEBUG
{
const llvm::FunctionType *FTy =
llvm::cast<llvm::FunctionType>(llvm::cast<llvm::PointerType>(llvmFunction->getType())->getElementType());
Modified: trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -21,6 +21,7 @@
#include <map>
+#include "ConvertCenter_p.h"
#include "Debug.h"
#include "ErrorMessage.h"
#include "ScopedName.h"
@@ -32,14 +33,16 @@
GTLCore::String moduleName;
std::list<ErrorMessage> errorMessages;
std::map< GTLCore::ScopedName, GTLCore::Function* > functions;
+ ConvertCenter* convertCenter;
};
CompilerBase::CompilerBase() : d(new Private)
{
-
+ d->convertCenter = new ConvertCenter;
}
CompilerBase::~CompilerBase()
{
+ delete d->convertCenter;
delete d;
}
@@ -109,3 +112,8 @@
}
}
+ConvertCenter* CompilerBase::convertCenter()
+{
+ return d->convertCenter;
+}
+
Modified: trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.h
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.h 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/CompilerBase_p.h 2008-08-30 22:57:55 UTC (rev 327)
@@ -24,6 +24,7 @@
#include <GTLCore/String.h>
namespace GTLCore {
+ class ConvertCenter;
class ErrorMessage;
class Function;
class ScopedName;
@@ -49,6 +50,10 @@
* @return the type manager used for compilation
*/
virtual GTLCore::TypeManager* typeManager() = 0;
+ /**
+ * @return the \ref ConvertCenter used for compilation
+ */
+ ConvertCenter* convertCenter();
public:
virtual GTLCore::AST::Expression* standardConstant( const GTLCore::String& _name ) = 0;
protected:
Modified: trunk/OpenGTL/OpenGTL/GTLCore/ConvertCenter_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/ConvertCenter_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/ConvertCenter_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -23,6 +23,7 @@
#include <map>
#include "AST/ConvertExpression.h"
+#include "Debug.h"
#include "Type_p.h"
using namespace GTLCore;
@@ -48,9 +49,14 @@
public:
virtual AST::ConvertExpression* create( AST::Expression* value, const GTLCore::Type* _dstType ) const
{
- return 0;
+ return new AST::DefaultConvertExpression( value, _dstType );
}
- virtual bool canConvertBetween( const GTLCore::Type* srcType, const GTLCore::Type* dstType) const = 0;
+ virtual bool canConvertBetween( const GTLCore::Type* srcType, const GTLCore::Type* dstType) const
+ {
+ return ( srcType == dstType)
+ or ( dstType->dataType() == Type::VECTOR and canConvertBetween( srcType, dstType->embeddedType() ) )
+ or ( srcType->isNumber() and dstType->isNumber() );
+ }
};
//--------------------------------- ConvertCenter --------------------------------//
@@ -62,6 +68,7 @@
ConvertCenter::ConvertCenter() : d(new Private)
{
+ addConvertExpressionFactory( new DefaultConvertExpressionFactory );
}
ConvertCenter::~ConvertCenter()
@@ -87,6 +94,8 @@
std::pair<AST::Expression*, AST::Expression*> ConvertCenter::createConvertExpressions( AST::Expression* value1, AST::Expression* value2 ) const
{
+ GTL_ASSERT(value1);
+ GTL_ASSERT(value2);
// Auto conversion
value1 = createConvertExpression( value1, autoConvertType( value1->type() ) );
value2 = createConvertExpression( value2, autoConvertType( value2->type() ) );
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Debug.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Debug.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Debug.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -37,8 +37,6 @@
using namespace GTLCore;
-#ifndef _NDEBUG_
-
struct FunctionDebugInfo {
FunctionDebugInfo() : enabled( true ) {}
bool enabled;
@@ -221,8 +219,6 @@
if( s_instance == 0) s_instance = new Debug::Private;
return s_instance;
}
-
-#endif
namespace GTLCore {
std::ostream& operator<< (std::ostream& _ostr, const ExpressionResult& _expressionResult)
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Function_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Function_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Function_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -44,7 +44,7 @@
{
m_functions = _functions;
GTL_ASSERT(m_functions.size() == m_maximumParameters + 1);
-#ifndef _NDEBUG_
+#ifndef NDEBUG
for(unsigned int i = 0; i < m_minimumParameters; ++i)
{
GTL_ASSERT( m_functions[i] == 0);
Modified: trunk/OpenGTL/OpenGTL/GTLCore/ParserBase_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/ParserBase_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/ParserBase_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -40,6 +40,7 @@
#include "AST/Tree.h"
#include "AST/UnaryExpression.h"
#include "CompilerBase_p.h"
+#include "ConvertCenter_p.h"
#include "LexerBase_p.h"
#include "Debug.h"
#include "Token_p.h"
@@ -1219,63 +1220,91 @@
AST::Expression* ParserBase::createBinaryOperator( const Token& token, AST::Expression* lhs, AST::Expression* rhs )
{
- switch( token.type )
+ if( not lhs or not rhs )
{
- case Token::EQUAL:
+ delete lhs;
+ delete rhs;
+ return 0;
+ }
+ if( token.type == Token::EQUAL )
+ {
+ AST::AccessorExpression* ve = dynamic_cast<AST::AccessorExpression*>( lhs );
+ if( ve )
{
- AST::AccessorExpression* ve = dynamic_cast<AST::AccessorExpression*>( lhs );
- if( ve )
+ return new AST::AssignementBinaryExpression( ve, rhs );
+ }
+ reportError("Left hand side of an assignement expression must be a variable.", token);
+ return 0;
+
+ } else {
+ std::pair<AST::Expression*, AST::Expression*> ce = d->compiler->convertCenter()->createConvertExpressions( lhs, rhs );
+ if( not ce.first or not ce.second )
+ {
+ reportError( "Can do a binary operation only on two numbers", token );
+ if(ce.first)
{
- return new AST::AssignementBinaryExpression( ve, rhs );
+ delete ce.first;
+ } else {
+ delete lhs;
}
- reportError("Left hand side of an assignement expression must be a variable.", token);
+ if(ce.second)
+ {
+ delete ce.second;
+ } else {
+ delete rhs;
+ }
return 0;
}
- case Token::OR:
- return new AST::OrBinaryExpression( lhs, rhs );
- case Token::AND:
- return new AST::AndBinaryExpression( lhs, rhs );
- case Token::BITOR:
- return new AST::BitOrBinaryExpression( lhs, rhs );
- case Token::BITXOR:
- return new AST::BitXorBinaryExpression( lhs, rhs );
- case Token::BITAND:
- return new AST::BitAndBinaryExpression( lhs, rhs );
- case Token::EQUALEQUAL:
- return new AST::EqualEqualBinaryExpression( lhs, rhs );
- case Token::DIFFERENT:
- return new AST::DifferentBinaryExpression( lhs, rhs );
- case Token::INFERIOREQUAL:
- return new AST::InferiorEqualBinaryExpression( lhs, rhs );
- case Token::INFERIOR:
- return new AST::InferiorBinaryExpression( lhs, rhs );
- case Token::SUPPERIOREQUAL:
- return new AST::SupperiorEqualBinaryExpression( lhs, rhs );
- case Token::SUPPERIOR:
- return new AST::SupperiorBinaryExpression( lhs, rhs );
- case Token::RIGHTSHIFT:
- return new AST::RightShiftBinaryExpression( lhs, rhs );
- case Token::LEFTSHIFT:
- return new AST::LeftShiftBinaryExpression( lhs, rhs );
- case Token::PLUS:
- return new AST::AdditionBinaryExpression( lhs, rhs );
- case Token::MINUS:
- return new AST::SubstractionBinaryExpression( lhs, rhs );
- case Token::MULTIPLY:
- return new AST::MultiplicationBinaryExpression( lhs, rhs );
- case Token::DIVIDE:
- return new AST::DivisionBinaryExpression( lhs, rhs );
- case Token::MODULO:
+ lhs = ce.first;
+ rhs = ce.second;
+ switch( token.type )
{
- if( lhs->type() != rhs->type() and rhs->type() != Type::Integer32 )
+ case Token::OR:
+ return new AST::OrBinaryExpression( lhs, rhs );
+ case Token::AND:
+ return new AST::AndBinaryExpression( lhs, rhs );
+ case Token::BITOR:
+ return new AST::BitOrBinaryExpression( lhs, rhs );
+ case Token::BITXOR:
+ return new AST::BitXorBinaryExpression( lhs, rhs );
+ case Token::BITAND:
+ return new AST::BitAndBinaryExpression( lhs, rhs );
+ case Token::EQUALEQUAL:
+ return new AST::EqualEqualBinaryExpression( lhs, rhs );
+ case Token::DIFFERENT:
+ return new AST::DifferentBinaryExpression( lhs, rhs );
+ case Token::INFERIOREQUAL:
+ return new AST::InferiorEqualBinaryExpression( lhs, rhs );
+ case Token::INFERIOR:
+ return new AST::InferiorBinaryExpression( lhs, rhs );
+ case Token::SUPPERIOREQUAL:
+ return new AST::SupperiorEqualBinaryExpression( lhs, rhs );
+ case Token::SUPPERIOR:
+ return new AST::SupperiorBinaryExpression( lhs, rhs );
+ case Token::RIGHTSHIFT:
+ return new AST::RightShiftBinaryExpression( lhs, rhs );
+ case Token::LEFTSHIFT:
+ return new AST::LeftShiftBinaryExpression( lhs, rhs );
+ case Token::PLUS:
+ return new AST::AdditionBinaryExpression( lhs, rhs );
+ case Token::MINUS:
+ return new AST::SubstractionBinaryExpression( lhs, rhs );
+ case Token::MULTIPLY:
+ return new AST::MultiplicationBinaryExpression( lhs, rhs );
+ case Token::DIVIDE:
+ return new AST::DivisionBinaryExpression( lhs, rhs );
+ case Token::MODULO:
{
- reportError( "'~' operator only work with integer" , token );
+ if( lhs->type() != rhs->type() and rhs->type() != Type::Integer32 )
+ {
+ reportError( "'~' operator only work with integer" , token );
+ return 0;
+ }
+ return new AST::ModuloBinaryExpression( lhs, rhs );
+ }
+ default:
return 0;
- }
- return new AST::ModuloBinaryExpression( lhs, rhs );
}
- default:
- return 0;
}
}
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Type.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Type.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Type.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -252,3 +252,8 @@
GTL_ASSERT( dataType() == Type::VECTOR );
return d->vectorSize;
}
+
+bool Type::isNumber() const
+{
+ return d->dataType == BOOLEAN or d->dataType == INTEGER8 or d->dataType == UNSIGNED_INTEGER8 or d->dataType == INTEGER16 or d->dataType == UNSIGNED_INTEGER16 or d->dataType == INTEGER32 or d->dataType == UNSIGNED_INTEGER32 or d->dataType == DOUBLE or d->dataType == FLOAT or d->dataType == HALF;
+}
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Type.h
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Type.h 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Type.h 2008-08-30 22:57:55 UTC (rev 327)
@@ -193,7 +193,10 @@
* @return the size of a vector
*/
int vectorSize() const;
-
+ /**
+ * @return true if the type is a number (this return false if the type is a \ref VECTOR )
+ */
+ bool isNumber() const;
private:
struct Private;
Private* const d;
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Type_p.cpp
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Type_p.cpp 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Type_p.cpp 2008-08-30 22:57:55 UTC (rev 327)
@@ -279,3 +279,4 @@
GTL_DEBUG("Select type failed : "<< *type1 << " " << *type2 );
return 0;
}
+
Modified: trunk/OpenGTL/OpenGTL/GTLCore/Type_p.h
===================================================================
--- trunk/OpenGTL/OpenGTL/GTLCore/Type_p.h 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/OpenGTL/GTLCore/Type_p.h 2008-08-30 22:57:55 UTC (rev 327)
@@ -128,6 +128,7 @@
* @return true if this a "nested" array (ie int a[2][3]; is nested, while int a[2]; isn't)
*/
bool isNestedArray();
+
private:
void setType( const llvm::Type* _type);
const llvm::Type* m_type;
Modified: trunk/OpenGTL/TODO
===================================================================
--- trunk/OpenGTL/TODO 2008-08-30 21:21:36 UTC (rev 326)
+++ trunk/OpenGTL/TODO 2008-08-30 22:57:55 UTC (rev 327)
@@ -1,6 +1,7 @@
Blocker for 1.0:
* array overflow
* array/structure leak in return function (when assigne to a member or an index of an array) (<= might be fixed)
+ * remove all DEPRECATED functions
Important TODO
* access to vector using specific vector instructions