diff options
author | Mike Pall <mike> | 2011-02-27 01:36:59 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-02-27 01:36:59 +0100 |
commit | cead25f928ac606fc1a13882b818913aab3635a9 (patch) | |
tree | 92121b401f76f4b2891ebac0f710b0a921ce13b1 /src/lib_io.c | |
parent | c031d4b6a06eab94e8d9b837ec6dc257899a4ae1 (diff) | |
download | luajit2-cead25f928ac606fc1a13882b818913aab3635a9.tar.gz |
DUALNUM: Handle integer type in x86/x64 interpreter and libraries.
Diffstat (limited to 'src/lib_io.c')
-rw-r--r-- | src/lib_io.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib_io.c b/src/lib_io.c index d3dac7a0..f4888c1c 100644 --- a/src/lib_io.c +++ b/src/lib_io.c @@ -137,6 +137,13 @@ static int io_file_readnum(lua_State *L, FILE *fp) { lua_Number d; if (fscanf(fp, LUA_NUMBER_SCAN, &d) == 1) { + if (LJ_DUALNUM) { + int32_t i = lj_num2int(d); + if (d == (lua_Number)i && !tvismzero((cTValue *)&d)) { + setintV(L->top++, i); + return 1; + } + } setnumV(L->top++, d); return 1; } else { @@ -217,7 +224,7 @@ static int io_file_read(lua_State *L, FILE *fp, int start) io_file_readchars(L, fp, ~((size_t)0)); else lj_err_arg(L, n+1, LJ_ERR_INVFMT); - } else if (tvisnum(L->base+n)) { + } else if (tvisnumber(L->base+n)) { size_t len = (size_t)lj_lib_checkint(L, n+1); ok = len ? io_file_readchars(L, fp, len) : io_file_testeof(L, fp); } else { |