summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/luadgn.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/luadgn.cc')
-rw-r--r--crawl-ref/source/luadgn.cc32
1 files changed, 27 insertions, 5 deletions
diff --git a/crawl-ref/source/luadgn.cc b/crawl-ref/source/luadgn.cc
index bdc5494275..bce024b312 100644
--- a/crawl-ref/source/luadgn.cc
+++ b/crawl-ref/source/luadgn.cc
@@ -7,6 +7,7 @@
#include "AppHdr.h"
#include "clua.h"
+#include "files.h"
#include "luadgn.h"
#include "mapdef.h"
@@ -44,6 +45,26 @@ dlua_chunk::dlua_chunk(const std::string &_context)
clear();
}
+void dlua_chunk::write(FILE *outf) const
+{
+ writeString(outf, chunk, LUA_CHUNK_MAX_SIZE);
+ if (!chunk.empty())
+ {
+ writeString(outf, file);
+ writeLong(outf, first);
+ }
+}
+
+void dlua_chunk::read(FILE *inf)
+{
+ chunk = readString(inf, LUA_CHUNK_MAX_SIZE);
+ if (!chunk.empty())
+ {
+ file = readString(inf);
+ first = readLong(inf);
+ }
+}
+
void dlua_chunk::clear()
{
file.clear();
@@ -82,15 +103,15 @@ int dlua_chunk::check_op(CLua *interp, int err)
return (err);
}
-int dlua_chunk::load(CLua *interp)
+int dlua_chunk::load(CLua &interp)
{
if (trimmed_string(chunk).empty())
return (-1000);
- return check_op(interp,
- interp->loadstring(chunk.c_str(), context.c_str()));
+ return check_op(&interp,
+ interp.loadstring(chunk.c_str(), context.c_str()));
}
-int dlua_chunk::load_call(CLua *interp, const char *fn)
+int dlua_chunk::load_call(CLua &interp, const char *fn)
{
int err = load(interp);
if (err == -1000)
@@ -98,11 +119,12 @@ int dlua_chunk::load_call(CLua *interp, const char *fn)
if (err)
return (err);
- return check_op(interp, interp->callfn(fn, 1, 0));
+ return check_op(&interp, !interp.callfn(fn, fn? 1 : 0, 0));
}
std::string dlua_chunk::orig_error() const
{
+ rewrite_chunk_errors(error);
return (error);
}