Browse Source

[lua] be more permissive with lua bit library requirements

Justin Donaldson 8 years ago
parent
commit
1525806559
1 changed files with 8 additions and 7 deletions
  1. 8 7
      src/generators/genlua.ml

+ 8 - 7
src/generators/genlua.ml

@@ -1955,16 +1955,17 @@ let generate com =
 	    println ctx "    end";
 	    println ctx "    end";
 	    println ctx "  end";
 	    println ctx "  end";
 	    println ctx "  if v > 2251798999999999 then v = v*2 end;";
 	    println ctx "  if v > 2251798999999999 then v = v*2 end;";
-	    println ctx "  if (v ~= v or v == _G.math.huge or v == -_G.math.huge) then return nil end";
-	    println ctx "  return _hx_bit_raw.band(v, 2147483647 ) - math.abs(_hx_bit_raw.band(v, 2147483648))";
+	    println ctx "  if (v ~= v or math.abs(v) == _G.math.huge) then return nil end";
+	    println ctx "  return _hx_bit.band(v, 2147483647 ) - math.abs(_hx_bit.band(v, 2147483648))";
 	    println ctx "end";
 	    println ctx "end";
+	    println ctx "pcall(require, 'bit')";
 	    println ctx "if type(jit) == 'table' then";
 	    println ctx "if type(jit) == 'table' then";
-	    println ctx "  _hx_bit_raw = require('bit')";
-	    println ctx "  _hx_bit = setmetatable({},{__index = function(t,k) return function(...) return _hx_bit_clamp(rawget(_hx_bit_raw,k)(...)) end end})";
+	    println ctx "  _hx_bit = bit";
 	    println ctx "else";
 	    println ctx "else";
-	    println ctx "  _hx_bit_raw = require('bit32')";
-	    println ctx "  _hx_bit = setmetatable({}, { __index = _hx_bit_raw })";
-	    println ctx "  _hx_bit.bnot = function(...) return _hx_bit_clamp(_hx_bit_raw.bnot(...)) end";
+	    println ctx "  pcall(require, 'bit32')";  (* also try bit32 *)
+	    println ctx "  local _hx_bit_raw = bit or bit32";
+	    println ctx "  _hx_bit = setmetatable({}, { __index = _hx_bit_raw });";
+	    println ctx "  _hx_bit.bnot = function(...) return _hx_bit_clamp(_hx_bit_raw.bnot(...)) end;"; (* lua 5.2  weirdness *)
 	    println ctx "end";
 	    println ctx "end";
 	end;
 	end;