THRIFT-3076 Compatibility with Haxe 3.2.0
Client: Haxe
Patch: Jens Geyer
This closes #435
diff --git a/compiler/cpp/src/generate/t_haxe_generator.cc b/compiler/cpp/src/generate/t_haxe_generator.cc
index 520377a..3c4dadf 100644
--- a/compiler/cpp/src/generate/t_haxe_generator.cc
+++ b/compiler/cpp/src/generate/t_haxe_generator.cc
@@ -200,7 +200,7 @@
t_base_type::t_base tbase = ((t_base_type*)ttype)->get_base();
switch (tbase) {
case t_base_type::TYPE_STRING:
- case t_base_type::TYPE_I64:
+ //case t_base_type::TYPE_I64: - Int64 is not really nullable, even though it behaved that way before Haxe 3.2.0
return true;
default:
return false;
diff --git a/lib/haxe/src/org/apache/thrift/TApplicationException.hx b/lib/haxe/src/org/apache/thrift/TApplicationException.hx
index 4fe571d..7fe844f 100644
--- a/lib/haxe/src/org/apache/thrift/TApplicationException.hx
+++ b/lib/haxe/src/org/apache/thrift/TApplicationException.hx
@@ -34,7 +34,7 @@
private static var MESSAGE_FIELD = { new TField("message", TType.STRING, 1); };
private static var TYPE_FIELD = { new TField("type", TType.I32, 2); };
- // WARNING: These are subject to be extended in the future, so we can't use enums
+ // WARNING: These are subject to be extended in the future, so we can't use enums
// with Haxe 3.1.3 because of https://github.com/HaxeFoundation/haxe/issues/3649
public static inline var UNKNOWN : Int = 0;
public static inline var UNKNOWN_METHOD : Int = 1;
diff --git a/lib/haxe/src/org/apache/thrift/helper/BitConverter.hx b/lib/haxe/src/org/apache/thrift/helper/BitConverter.hx
index 7f7c8f7..ee0aaa8 100644
--- a/lib/haxe/src/org/apache/thrift/helper/BitConverter.hx
+++ b/lib/haxe/src/org/apache/thrift/helper/BitConverter.hx
@@ -46,6 +46,7 @@
*/
public static function fixedLongToBytes( n : Int64) : Bytes {
var buf = Bytes.alloc(8);
+ #if( haxe_ver < 3.2)
buf.set( 0, Int64.getLow( Int64.and( n, Int64.make(0, 0xff))));
buf.set( 1, Int64.getLow( Int64.and( Int64.shr( n, 8), Int64.make(0, 0xff))));
buf.set( 2, Int64.getLow( Int64.and( Int64.shr( n, 16), Int64.make(0, 0xff))));
@@ -54,6 +55,16 @@
buf.set( 5, Int64.getLow( Int64.and( Int64.shr( n, 40), Int64.make(0, 0xff))));
buf.set( 6, Int64.getLow( Int64.and( Int64.shr( n, 48), Int64.make(0, 0xff))));
buf.set( 7, Int64.getLow( Int64.and( Int64.shr( n, 56), Int64.make(0, 0xff))));
+ #else
+ buf.set( 0, Int64.and( n, Int64.make(0, 0xff)).low);
+ buf.set( 1, Int64.and( Int64.shr( n, 8), Int64.make(0, 0xff)).low);
+ buf.set( 2, Int64.and( Int64.shr( n, 16), Int64.make(0, 0xff)).low);
+ buf.set( 3, Int64.and( Int64.shr( n, 24), Int64.make(0, 0xff)).low);
+ buf.set( 4, Int64.and( Int64.shr( n, 32), Int64.make(0, 0xff)).low);
+ buf.set( 5, Int64.and( Int64.shr( n, 40), Int64.make(0, 0xff)).low);
+ buf.set( 6, Int64.and( Int64.shr( n, 48), Int64.make(0, 0xff)).low);
+ buf.set( 7, Int64.and( Int64.shr( n, 56), Int64.make(0, 0xff)).low);
+ #end
return buf;
}
diff --git a/lib/haxe/src/org/apache/thrift/helper/Int64Map.hx b/lib/haxe/src/org/apache/thrift/helper/Int64Map.hx
index 6d6a6a1..e648b75 100644
--- a/lib/haxe/src/org/apache/thrift/helper/Int64Map.hx
+++ b/lib/haxe/src/org/apache/thrift/helper/Int64Map.hx
@@ -49,18 +49,47 @@
return lomap;
}
+
+ private function GetLowMap( key : haxe.Int64, canCreate : Bool) : IntMap< T> {
+ #if( haxe_ver < 3.2)
+ return GetSubMap( Int64.getHigh(key), false);
+ #else
+ return GetSubMap( key.high, false);
+ #end
+ }
+
+
+ private function GetLowIndex( key : haxe.Int64) : haxe.Int32 {
+ #if( haxe_ver < 3.2)
+ return Int64.getLow(key);
+ #else
+ return key.low;
+ #end
+ }
+
+
+ private function NullCheck( key : haxe.Int64) : Bool {
+ #if( haxe_ver < 3.2)
+ return (key != null);
+ #else
+ return false; // In64 is not nullable anymore (it never really was)
+ #end
+ };
+
+
+
/**
Maps `key` to `value`.
If `key` already has a mapping, the previous value disappears.
If `key` is null, the result is unspecified.
**/
public function set( key : Int64, value : T ) : Void {
- if( key == null) {
+ if( ! NullCheck(key)) {
return;
}
- var lomap = GetSubMap( Int64.getHigh(key), true);
- lomap.set( Int64.getLow(key), value);
+ var lomap = GetLowMap( key, true);
+ lomap.set( GetLowIndex(key), value);
}
@@ -79,16 +108,16 @@
**/
public function get( key : Int64) : Null<T> {
- if( key == null) {
+ if( ! NullCheck(key)) {
return null;
}
- var lomap = GetSubMap( Int64.getHigh(key), false);
+ var lomap = GetLowMap( key, true);
if( lomap == null) {
return null;
}
- return lomap.get( Int64.getLow(key));
+ return lomap.get( GetLowIndex(key));
}
/**
@@ -96,16 +125,16 @@
If `key` is null, the result is unspecified.
**/
public function exists( key : Int64) : Bool {
- if( key == null) {
+ if( ! NullCheck(key)) {
return false;
}
- var lomap = GetSubMap( Int64.getHigh(key), false);
+ var lomap = GetLowMap( key, true);
if( lomap == null) {
return false;
}
- return lomap.exists( Int64.getLow(key));
+ return lomap.exists( GetLowIndex(key));
}
/**
@@ -113,16 +142,16 @@
false otherwise. If `key` is null, the result is unspecified.
**/
public function remove( key : Int64) : Bool {
- if( key == null) {
+ if( ! NullCheck(key)) {
return false;
}
- var lomap = GetSubMap( Int64.getHigh(key), false);
+ var lomap = GetLowMap( key, true);
if( lomap == null) {
return false;
}
- return lomap.remove( Int64.getLow(key));
+ return lomap.remove( GetLowIndex(key));
}
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TBinaryProtocol.hx b/lib/haxe/src/org/apache/thrift/protocol/TBinaryProtocol.hx
index c37b74e..377e7ef 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TBinaryProtocol.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TBinaryProtocol.hx
@@ -136,10 +136,15 @@
public function writeI64(i64 : haxe.Int64) : Void {
var out = new BytesOutput();
out.bigEndian = true;
+ #if( haxe_ver < 3.2)
var hi = Int64.getHigh(i64);
var lo = Int64.getLow(i64);
out.writeInt32(hi);
out.writeInt32(lo);
+ #else
+ out.writeInt32(i64.high);
+ out.writeInt32(i64.low);
+ #end
trans_.write(out.getBytes(), 0, 8);
}
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TCompactProtocol.hx b/lib/haxe/src/org/apache/thrift/protocol/TCompactProtocol.hx
index 0781114..e945789 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TCompactProtocol.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TCompactProtocol.hx
@@ -389,12 +389,20 @@
{
if( Int64.isZero( Int64.and( n, Int64.neg(Int64.make(0,0x7F)))))
{
+ #if( haxe_ver < 3.2)
varint64out.addByte( Int64.getLow(n));
+ #else
+ varint64out.addByte( n.low);
+ #end
break;
}
else
{
+ #if ( haxe_ver < 3.2)
varint64out.addByte( (Int64.getLow(n) & 0x7F) | 0x80);
+ #else
+ varint64out.addByte( (n.low & 0x7F) | 0x80);
+ #end
n = Int64.shr( n, 7);
n = Int64.and( n, Int64.make(0x01FFFFFF,0xFFFFFFFF)); // clean out the shifted 7 bits
}
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TMultiplexedProcessor.hx b/lib/haxe/src/org/apache/thrift/protocol/TMultiplexedProcessor.hx
index 9e25fcf..50aa3cd 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TMultiplexedProcessor.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TMultiplexedProcessor.hx
@@ -51,9 +51,9 @@
private var serviceProcessorMap : StringMap<TProcessor> = new StringMap<TProcessor>();
private var defaultProcessor : TProcessor = null;
- public function new() {
+ public function new() {
}
-
+
/**
* 'Register' a service with this TMultiplexedProcessor. This allows us to broker
* requests to individual services by using the service name to select them at request time.
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TProtocolException.hx b/lib/haxe/src/org/apache/thrift/protocol/TProtocolException.hx
index 2e0f9f5..a3b37a5 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TProtocolException.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TProtocolException.hx
@@ -23,7 +23,7 @@
class TProtocolException extends TException {
- // WARNING: These are subject to be extended in the future, so we can't use enums
+ // WARNING: These are subject to be extended in the future, so we can't use enums
// with Haxe 3.1.3 because of https://github.com/HaxeFoundation/haxe/issues/3649
public static inline var UNKNOWN : Int = 0;
public static inline var INVALID_DATA : Int = 1;
diff --git a/lib/haxe/src/org/apache/thrift/transport/TFullDuplexHttpClient.hx b/lib/haxe/src/org/apache/thrift/transport/TFullDuplexHttpClient.hx
index a4dc671..1972853 100644
--- a/lib/haxe/src/org/apache/thrift/transport/TFullDuplexHttpClient.hx
+++ b/lib/haxe/src/org/apache/thrift/transport/TFullDuplexHttpClient.hx
@@ -192,13 +192,13 @@
{
this.output = this.socket;
this.input = this.socket;
- this.output.writeUTF( "CONNECT " + resource + " HTTP/1.1\n"
- + "Host : " + host + ":" + port + "\r\n"
- + "User-Agent : Thrift/Haxe\r\n"
- + "Transfer-Encoding : chunked\r\n"
- + "content-type : application/x-thrift\r\n"
- + "Accept : */*\r\n"
- + "\r\n");
+ this.output.writeUTF( "CONNECT " + resource + " HTTP/1.1\n"
+ + "Host : " + host + ":" + port + "\r\n"
+ + "User-Agent : Thrift/Haxe\r\n"
+ + "Transfer-Encoding : chunked\r\n"
+ + "content-type : application/x-thrift\r\n"
+ + "Accept : */*\r\n"
+ + "\r\n");
this.eventDispatcher.dispatchEvent(event);
}
diff --git a/lib/haxe/src/org/apache/thrift/transport/TTransportException.hx b/lib/haxe/src/org/apache/thrift/transport/TTransportException.hx
index 036b9f5..ad028dd 100644
--- a/lib/haxe/src/org/apache/thrift/transport/TTransportException.hx
+++ b/lib/haxe/src/org/apache/thrift/transport/TTransportException.hx
@@ -23,7 +23,7 @@
class TTransportException extends TException {
- // WARNING: These are subject to be extended in the future, so we can't use enums
+ // WARNING: These are subject to be extended in the future, so we can't use enums
// with Haxe 3.1.3 because of https://github.com/HaxeFoundation/haxe/issues/3649
public static inline var UNKNOWN : Int = 0;
public static inline var NOT_OPEN : Int = 1;