From 134f6bd221ad8880cb1b8514bb84e3b41d2b0d61 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Wed, 3 May 2017 17:52:42 +1000 Subject: src/liolib.js: add io.close() --- README.md | 2 +- src/liolib.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d62d8d4..2c6cbba 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ - [ ] `io.tmpfile()` - [ ] `io.type()` - [x] `io.write()` - - [ ] `io.close()` + - [x] `io.close()` - [ ] `file:flush()` - [ ] `file:lines()` - [ ] `file:read()` diff --git a/src/liolib.js b/src/liolib.js index 9940583..2136755 100644 --- a/src/liolib.js +++ b/src/liolib.js @@ -44,6 +44,20 @@ const newprefile = function(L) { return p; }; +const aux_close = function(L) { + let p = tolstream(L); + let cf = p.closef; + p.closef = null; + return cf(L); +}; + +const io_close = function(L) { + if (lua.lua_isnone(L, 1)) /* no argument? */ + lua.lua_getfield(L, lua.LUA_REGISTRYINDEX, IO_OUTPUT); /* use standard output */ + tofile(L); /* make sure argument is an open stream */ + return aux_close(L); +}; + const getiofile = function(L, findex) { lua.lua_getfield(L, lua.LUA_REGISTRYINDEX, findex); let p = lua.lua_touserdata(L, -1); @@ -80,10 +94,12 @@ const f_write = function(L) { }; const iolib = { + "close": io_close, "write": io_write }; const flib = { + "close": io_close, "write": f_write, "__tostring": f_tostring }; -- cgit v1.2.3-70-g09d2