瀏覽代碼

[lua] fix signed bitwise ops (#8850)

Aleksandr Kuzmenko 6 年之前
父節點
當前提交
f1cd031aee
共有 3 個文件被更改,包括 18 次插入3 次删除
  1. 7 2
      std/lua/_lua/_hx_bit.lua
  2. 1 1
      std/lua/_lua/_hx_bit_clamp.lua
  3. 10 0
      tests/unit/src/unit/issues/Issue8849.hx

+ 7 - 2
std/lua/_lua/_hx_bit.lua

@@ -1,11 +1,16 @@
 -- require this for lua 5.1
 pcall(require, 'bit')
 if bit then
-  _hx_bit = bit
+  _hx_bit_raw = bit
+  _hx_bit = setmetatable({}, { __index = _hx_bit_raw });
 else
-  local _hx_bit_raw = _G.require('bit32')
+  _hx_bit_raw = _G.require('bit32')
   _hx_bit = setmetatable({}, { __index = _hx_bit_raw });
   -- lua 5.2 weirdness
   _hx_bit.bnot = function(...) return _hx_bit_clamp(_hx_bit_raw.bnot(...)) end;
   _hx_bit.bxor = function(...) return _hx_bit_clamp(_hx_bit_raw.bxor(...)) end;
 end
+-- see https://github.com/HaxeFoundation/haxe/issues/8849
+_hx_bit.bor = function(...) return _hx_bit_clamp(_hx_bit_raw.bor(...)) end;
+_hx_bit.band = function(...) return _hx_bit_clamp(_hx_bit_raw.band(...)) end;
+_hx_bit.arshift = function(...) return _hx_bit_clamp(_hx_bit_raw.arshift(...)) end;

+ 1 - 1
std/lua/_lua/_hx_bit_clamp.lua

@@ -6,5 +6,5 @@ _hx_bit_clamp = function(v)
   end
   if v > 2251798999999999 then v = v*2 end;
   if (v ~= v or math.abs(v) == _G.math.huge) then return nil end
-  return _hx_bit.band(v, 2147483647 ) - math.abs(_hx_bit.band(v, 2147483648))
+  return _hx_bit_raw.band(v, 2147483647 ) - math.abs(_hx_bit_raw.band(v, 2147483648))
 end

+ 10 - 0
tests/unit/src/unit/issues/Issue8849.hx

@@ -0,0 +1,10 @@
+package unit.issues;
+
+class Issue8849 extends unit.Test {
+	static var a:Int = -1;
+
+	function test() {
+		eq(-1, a | -1);
+		eq(-1, a & -1);
+	}
+}