diff options
| author | Philipp Janda <siffiejoe@gmx.net> | 2015-01-16 17:07:02 +0100 |
|---|---|---|
| committer | Philipp Janda <siffiejoe@gmx.net> | 2015-01-16 17:07:02 +0100 |
| commit | 6124b7b5e687eff120507dccfe98b72b7ddb702d (patch) | |
| tree | 8f84aecb8afcc4116bda5fff0c44cb3c7fa9daee /compat53.lua | |
| parent | 1fd73399caa9a1ea24bd626e607980ac94debd64 (diff) | |
| download | lua-compat-5.3-6124b7b5e687eff120507dccfe98b72b7ddb702d.tar.gz lua-compat-5.3-6124b7b5e687eff120507dccfe98b72b7ddb702d.tar.bz2 lua-compat-5.3-6124b7b5e687eff120507dccfe98b72b7ddb702d.zip | |
add new fields to math library
Diffstat (limited to 'compat53.lua')
| -rw-r--r-- | compat53.lua | 77 |
1 files changed, 73 insertions, 4 deletions
diff --git a/compat53.lua b/compat53.lua index 98e1a3d..0346cb7 100644 --- a/compat53.lua +++ b/compat53.lua | |||
| @@ -3,10 +3,13 @@ local lua_version = _VERSION:sub(-3) | |||
| 3 | if lua_version ~= "5.3" then | 3 | if lua_version ~= "5.3" then |
| 4 | 4 | ||
| 5 | -- load utf8 library | 5 | -- load utf8 library |
| 6 | utf8 = require("compat53.utf8") | 6 | local ok, utf8lib = pcall(require, "compat53.utf8") |
| 7 | package.loaded["utf8"] = utf8 | 7 | if ok then |
| 8 | if lua_version == "5.1" then | 8 | utf8 = utf8lib |
| 9 | utf8.charpattern = "[%z\1-\127\194-\244][\128-\191]*" | 9 | package.loaded["utf8"] = utf8lib |
| 10 | if lua_version == "5.1" then | ||
| 11 | utf8lib.charpattern = "[%z\1-\127\194-\244][\128-\191]*" | ||
| 12 | end | ||
| 10 | end | 13 | end |
| 11 | 14 | ||
| 12 | -- use Roberto's struct module for string packing/unpacking for now | 15 | -- use Roberto's struct module for string packing/unpacking for now |
| @@ -20,5 +23,71 @@ if lua_version ~= "5.3" then | |||
| 20 | string.unpack = struct.unpack | 23 | string.unpack = struct.unpack |
| 21 | end | 24 | end |
| 22 | 25 | ||
| 26 | |||
| 27 | -- update math library | ||
| 28 | do | ||
| 29 | local maxint, minint = 1, 0 | ||
| 30 | |||
| 31 | while maxint+1 > maxint and 2*maxint > maxint do | ||
| 32 | maxint = maxint * 2 | ||
| 33 | end | ||
| 34 | if 2*maxint <= maxint then | ||
| 35 | maxint = 2*maxint-1 | ||
| 36 | minint = -maxint-1 | ||
| 37 | else | ||
| 38 | maxint = maxint | ||
| 39 | minint = -maxint | ||
| 40 | end | ||
| 41 | math.maxinteger = maxint | ||
| 42 | math.mininteger = minint | ||
| 43 | |||
| 44 | local _type = type | ||
| 45 | function math.tointeger(n) | ||
| 46 | if _type(n) == "number" and n <= maxint and n >= minint and n % 1 == 0 then | ||
| 47 | return n | ||
| 48 | end | ||
| 49 | return nil | ||
| 50 | end | ||
| 51 | |||
| 52 | function math.type(n) | ||
| 53 | if _type(n) == "number" then | ||
| 54 | if n <= maxint and n >= minint and n % 1 == 0 then | ||
| 55 | return "integer" | ||
| 56 | else | ||
| 57 | return "float" | ||
| 58 | end | ||
| 59 | else | ||
| 60 | return nil | ||
| 61 | end | ||
| 62 | end | ||
| 63 | |||
| 64 | local _error = error | ||
| 65 | local function checkinteger(x, i, f) | ||
| 66 | local t = _type(x) | ||
| 67 | if t ~= "number" then | ||
| 68 | _error("bad argument #"..i.." to '"..f.. | ||
| 69 | "' (number expected, got "..t..")", 0) | ||
| 70 | elseif x > maxint or x < minint or x % 1 ~= 0 then | ||
| 71 | _error("bad argument #"..i.." to '"..f.. | ||
| 72 | "' (number has no integer representation)", 0) | ||
| 73 | else | ||
| 74 | return x | ||
| 75 | end | ||
| 76 | end | ||
| 77 | |||
| 78 | function math.ult(m, n) | ||
| 79 | m = checkinteger(m, "1", "math.ult") | ||
| 80 | n = checkinteger(n, "2", "math.ult") | ||
| 81 | if m >= 0 and n < 0 then | ||
| 82 | return true | ||
| 83 | elseif m < 0 and n >= 0 then | ||
| 84 | return false | ||
| 85 | else | ||
| 86 | return m < n | ||
| 87 | end | ||
| 88 | end | ||
| 89 | end | ||
| 90 | |||
| 23 | end | 91 | end |
| 24 | 92 | ||
| 93 | -- vi: set expandtab softtabstop=3 shiftwidth=3 : | ||
