diff --git a/include/Dynamic.h b/include/Dynamic.h index dbf23c836..b586516aa 100644 --- a/include/Dynamic.h +++ b/include/Dynamic.h @@ -30,6 +30,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic : public hx::ObjectPtr Dynamic(float inVal); Dynamic(cpp::Int64 inVal); Dynamic(cpp::UInt64 inVal); + Dynamic(unsigned long inVal); Dynamic(hx::Object *inObj) : super(inObj) { } Dynamic(const String &inString); Dynamic(const null &inNull) : super(0) { } @@ -40,7 +41,6 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic : public hx::ObjectPtr Dynamic(const hx::Native &inInterface):super(inInterface.ptr ? inInterface->__GetRealObject() : (hx::Object *)0 ) { } #if !defined(__GNUC__) || defined(__MINGW32__) || (defined(__WORDSIZE) && (__WORDSIZE != 64)) Dynamic(long inVal); - Dynamic(unsigned long inVal); #endif #ifdef __OBJC__ #ifdef HXCPP_OBJC @@ -74,6 +74,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic : public hx::ObjectPtr inline operator bool() const { return mPtr && mPtr->__ToInt(); } inline operator cpp::Int64() const { return mPtr ? mPtr->__ToInt64() : 0; } inline operator cpp::UInt64() const { return mPtr ? mPtr->__ToInt64() : 0; } + inline operator unsigned long() const { return mPtr ? mPtr->__ToInt64() : 0; } // Conversion to generic pointer requires you to tag the class with a typedef template diff --git a/include/cpp/Variant.h b/include/cpp/Variant.h index 842b4338e..cf2352f38 100644 --- a/include/cpp/Variant.h +++ b/include/cpp/Variant.h @@ -70,6 +70,7 @@ namespace cpp inline Variant(cpp::Int64 inValue) : type(typeInt64), valInt64(inValue) { } inline Variant(cpp::UInt64 inValue) : type(typeInt64), valInt64(inValue) { } + inline Variant(unsigned long inValue) : type(typeInt64), valInt64(inValue) { } inline Variant(int inValue) : type(typeInt), valInt(inValue) { } inline Variant(cpp::UInt32 inValue) : type(typeInt), valInt(inValue) { } inline Variant(cpp::Int16 inValue) : type(typeInt), valInt(inValue) { } @@ -111,6 +112,7 @@ namespace cpp inline operator signed char () const { return asInt(); } inline operator cpp::Int64 () const { return asInt64(); } inline operator cpp::UInt64 () const { return asInt64(); } + inline operator unsigned long () const { return asInt64(); } inline bool operator !() const { return !asInt(); } inline int Compare(hx::Object *inRHS) const; diff --git a/include/hxString.h b/include/hxString.h index b53ddd4a3..e390ac352 100644 --- a/include/hxString.h +++ b/include/hxString.h @@ -95,6 +95,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES String String(const float &inRHS); String(const cpp::Int64 &inRHS); String(const cpp::UInt64 &inRHS); + String(const unsigned long &inRHS); explicit String(const bool &inRHS); inline String(const null &inRHS) : __s(0), length(0) { } String(hx::Null< ::String > inRHS) : __s(inRHS.value.__s), length(inRHS.value.length) { } diff --git a/include/null.h b/include/null.h index b3a977c36..396dc743b 100644 --- a/include/null.h +++ b/include/null.h @@ -92,6 +92,7 @@ class null operator signed char () { return 0; } operator short () { return 0; } operator unsigned short () { return 0; } + operator unsigned long () { return 0; } operator cpp::UInt64 () { return 0; } operator cpp::Int64 () { return 0; } template diff --git a/src/Dynamic.cpp b/src/Dynamic.cpp index 9d52c070e..144bc3f2e 100644 --- a/src/Dynamic.cpp +++ b/src/Dynamic.cpp @@ -367,10 +367,6 @@ Dynamic::Dynamic(short inVal) } #if !defined(__GNUC__) || defined(__MINGW32__) || (defined(__WORDSIZE) && (__WORDSIZE != 64)) -Dynamic::Dynamic(unsigned long inVal) -{ - mPtr = fromInt(inVal); -} Dynamic::Dynamic(long inVal) { mPtr = fromInt(inVal); @@ -440,6 +436,19 @@ Dynamic::Dynamic(cpp::UInt64 inVal) mPtr = (hx::Object *)new Int64Data(inVal); } +Dynamic::Dynamic(unsigned long inVal) +{ + if ( (int)inVal==inVal && inVal<256 ) + { + int idx = inVal+1; + mPtr = sConstDynamicInts[idx].mPtr; + if (!mPtr) + mPtr = sConstDynamicInts[idx].mPtr = new (hx::NewObjConst)IntData(inVal); + } + else + mPtr = (hx::Object *)new Int64Data(inVal); +} + diff --git a/src/String.cpp b/src/String.cpp index 4dc69a23b..815d9762e 100644 --- a/src/String.cpp +++ b/src/String.cpp @@ -862,6 +862,14 @@ String::String(const cpp::UInt64 &inRHS) __s = GCStringDup(buf,-1,&length); } +String::String(const unsigned long &inRHS) +{ + char buf[100]; + SPRINTF(buf,100,"%llu", (unsigned long long int)inRHS); + buf[99]='\0'; + __s = GCStringDup(buf,-1,&length); +} + String::String(const float &inRHS) { char buf[100];