aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--src/liolib.js16
2 files changed, 17 insertions, 1 deletions
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
};