Fixed compilation warnings. Added -Wall to linux-gcc compilation. JSON_ASSERT_MESSAGE now throws exception (but JSON_ASSERT does not).
diff --git a/SConstruct b/SConstruct
index e820659..b4cba59 100644
--- a/SConstruct
+++ b/SConstruct
@@ -76,7 +76,7 @@
env.Append( CPPDEFINES=[ "WIN32", "NDEBUG", "_MT" ] )
elif platform == 'linux-gcc':
env.Tool( 'default' )
- env.Append( LIBS = ['pthread'] )
+ env.Append( LIBS = ['pthread'], CCFLAGS = "-Wall" )
else:
print "UNSUPPORTED PLATFORM."
env.Exit(1)
diff --git a/include/json/value.h b/include/json/value.h
index de09d5f..480f433 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -518,7 +518,7 @@
class ValueAllocator
{
public:
- enum { unknown = -1 };
+ enum { unknown = (unsigned)-1 };
virtual ~ValueAllocator();
diff --git a/src/jsontestrunner/main.cpp b/src/jsontestrunner/main.cpp
index 98cd8fd..1d8b303 100644
--- a/src/jsontestrunner/main.cpp
+++ b/src/jsontestrunner/main.cpp
@@ -13,12 +13,12 @@
if ( !file )
return std::string("");
fseek( file, 0, SEEK_END );
- int size = ftell( file );
+ long size = ftell( file );
fseek( file, 0, SEEK_SET );
std::string text;
char *buffer = new char[size+1];
buffer[size] = 0;
- if ( fread( buffer, 1, size, file ) == size )
+ if ( fread( buffer, 1, size, file ) == (unsigned long)size )
text = buffer;
fclose( file );
delete[] buffer;
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 329b634..bc4ba3d 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -2,6 +2,7 @@
#include <json/value.h>
#include <json/writer.h>
#include <utility>
+#include <stdexcept>
#include "assert.h"
#ifdef JSON_USE_CPPTL
# include <cpptl/conststring.h>
@@ -13,7 +14,7 @@
#define JSON_ASSERT_UNREACHABLE assert( false )
#define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw
-#define JSON_ASSERT_MESSAGE( condition, message ) assert( condition && message ); // @todo <= change this into an exception throw
+#define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) throw std::runtime_error( message );
namespace Json {
@@ -265,8 +266,8 @@
*/
Value::Value( ValueType type )
: type_( type )
- , comments_( 0 )
, allocated_( 0 )
+ , comments_( 0 )
# ifdef JSON_VALUE_USE_INTERNAL_MAP
, itemIsUsed_( 0 )
#endif
@@ -680,7 +681,7 @@
case realValue:
case arrayValue:
case objectValue:
- JSON_ASSERT( "Type is not convertible to double" && false );
+ JSON_ASSERT_MESSAGE( false, "Type is not convertible to string" );
default:
JSON_ASSERT_UNREACHABLE;
}
@@ -705,17 +706,17 @@
case intValue:
return value_.int_;
case uintValue:
- JSON_ASSERT( value_.uint_ < maxInt && "integer out of signed integer range" );
+ JSON_ASSERT_MESSAGE( value_.uint_ < (unsigned)maxInt, "integer out of signed integer range" );
return value_.uint_;
case realValue:
- JSON_ASSERT( value_.real_ >= minInt && value_.real_ <= maxInt && "Real out of signed integer range" );
+ JSON_ASSERT_MESSAGE( value_.real_ >= minInt && value_.real_ <= maxInt, "Real out of signed integer range" );
return Int( value_.real_ );
case booleanValue:
return value_.bool_ ? 1 : 0;
case stringValue:
case arrayValue:
case objectValue:
- JSON_ASSERT( "Type is not convertible to double" && false );
+ JSON_ASSERT_MESSAGE( false, "Type is not convertible to int" );
default:
JSON_ASSERT_UNREACHABLE;
}
@@ -730,19 +731,19 @@
case nullValue:
return 0;
case intValue:
- JSON_ASSERT( value_.int_ >= 0 && "Negative integer can not be converted to unsigned integer" );
+ JSON_ASSERT_MESSAGE( value_.int_ >= 0, "Negative integer can not be converted to unsigned integer" );
return value_.int_;
case uintValue:
return value_.uint_;
case realValue:
- JSON_ASSERT( value_.real_ >= 0 && value_.real_ <= maxUInt && "Real out of unsigned integer range" );
+ JSON_ASSERT_MESSAGE( value_.real_ >= 0 && value_.real_ <= maxUInt, "Real out of unsigned integer range" );
return UInt( value_.real_ );
case booleanValue:
return value_.bool_ ? 1 : 0;
case stringValue:
case arrayValue:
case objectValue:
- JSON_ASSERT( "Type is not convertible to double" && false );
+ JSON_ASSERT_MESSAGE( false, "Type is not convertible to uint" );
default:
JSON_ASSERT_UNREACHABLE;
}
@@ -767,7 +768,7 @@
case stringValue:
case arrayValue:
case objectValue:
- JSON_ASSERT( "Type is not convertible to double" && false );
+ JSON_ASSERT_MESSAGE( false, "Type is not convertible to double" );
default:
JSON_ASSERT_UNREACHABLE;
}
@@ -816,7 +817,7 @@
|| other == booleanValue;
case uintValue:
return ( other == nullValue && value_.uint_ == 0 )
- || ( other == intValue && value_.uint_ <= maxInt )
+ || ( other == intValue && value_.uint_ <= (unsigned)maxInt )
|| other == uintValue
|| other == realValue
|| other == stringValue
@@ -1499,22 +1500,22 @@
PathArgument::PathArgument( Value::UInt index )
- : kind_( kindIndex )
- , index_( index )
+ : index_( index )
+ , kind_( kindIndex )
{
}
PathArgument::PathArgument( const char *key )
- : kind_( kindKey )
- , key_( key )
+ : key_( key )
+ , kind_( kindKey )
{
}
PathArgument::PathArgument( const std::string &key )
- : kind_( kindKey )
- , key_( key.c_str() )
+ : key_( key.c_str() )
+ , kind_( kindKey )
{
}
diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
index 8af01f3..7485e5a 100644
--- a/src/lib_json/json_writer.cpp
+++ b/src/lib_json/json_writer.cpp
@@ -290,7 +290,7 @@
void
StyledWriter::writeArrayValue( const Value &value )
{
- int size = value.size();
+ unsigned size = value.size();
if ( size == 0 )
pushValue( "[]" );
else
@@ -301,7 +301,7 @@
writeWithIndent( "[" );
indent();
bool hasChildValue = !childValues_.empty();
- int index =0;
+ unsigned index =0;
while ( true )
{
const Value &childValue = value[index];
@@ -328,7 +328,7 @@
{
assert( childValues_.size() == size );
document_ += "[ ";
- for ( int index =0; index < size; ++index )
+ for ( unsigned index =0; index < size; ++index )
{
if ( index > 0 )
document_ += ", ";