aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2017-04-26 23:30:30 +1000
committerdaurnimator <quae@daurnimator.com>2017-05-03 18:28:22 +1000
commit9a24308b0f8bb04d533d9abae39bd7546cf92377 (patch)
tree1afc612de03c8c8fc9b4080588713806f074f577
parent56b5adb7f3683cd9e88f8d2cabd885e49a3d2398 (diff)
downloadfengari-9a24308b0f8bb04d533d9abae39bd7546cf92377.tar.gz
fengari-9a24308b0f8bb04d533d9abae39bd7546cf92377.tar.bz2
fengari-9a24308b0f8bb04d533d9abae39bd7546cf92377.zip
src/iolib.js: Add file:__tostring()
-rw-r--r--README.md2
-rw-r--r--src/liolib.js14
2 files changed, 15 insertions, 1 deletions
diff --git a/README.md b/README.md
index 56f3496..02110dd 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@
- [ ] `file:setvbuf()`
- [ ] `file:write()`
- [ ] `file:__gc()`
- - [ ] `file:__tostring()`
+ - [x] `file:__tostring()`
- [ ] C API
- [x] ...
- [ ] lua_arith
diff --git a/src/liolib.js b/src/liolib.js
index 247baef..f753f91 100644
--- a/src/liolib.js
+++ b/src/liolib.js
@@ -12,6 +12,19 @@ const tolstream = function(L) {
return lauxlib.luaL_checkudata(L, 1, lauxlib.LUA_FILEHANDLE);
};
+const isclosed = function(p) {
+ return p.closef === null;
+};
+
+const f_tostring = function(L) {
+ let p = tolstream(L);
+ if (isclosed(p))
+ lua.lua_pushliteral(L, "file (closed)");
+ else
+ lua.lua_pushstring(L, lua.to_luastring(`file (${p.f.toString()})`));
+ return 1;
+};
+
const newprefile = function(L) {
let p = lua.lua_newuserdata(L);
p.f = null;
@@ -24,6 +37,7 @@ const iolib = {
};
const flib = {
+ "__tostring": f_tostring
};
const createmeta = function(L) {