aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2013-06-27 17:34:51 +0000
committerdos-reis <gdr@axiomatics.org>2013-06-27 17:34:51 +0000
commitb52f0164b18f06db386d527be26e3a11deb1ab7d (patch)
treee68cb4ebe4afc5ad828e1fc5743a59c91b5dd0ea /src/gui
parent8c11594887faf3a796729c4185143e1630b69d65 (diff)
downloadopen-axiom-b52f0164b18f06db386d527be26e3a11deb1ab7d.tar.gz
Add small Lisp evaluator for the benefit of new GUI.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/main-window.cc12
-rw-r--r--src/gui/server.h3
2 files changed, 13 insertions, 2 deletions
diff --git a/src/gui/main-window.cc b/src/gui/main-window.cc
index 1ef6ec56..9c4969b0 100644
--- a/src/gui/main-window.cc
+++ b/src/gui/main-window.cc
@@ -54,8 +54,16 @@ namespace OpenAxiom {
const auto& fs = server()->system_root();
Memory::FileMapping db { fs.dbdir() + "/interp.daase" };
Sexpr::Reader rd { db.begin(), db.end() };
- while (rd.read())
- ;
+ auto header = server()->lisp()->make_value(rd.read());
+ if (auto p = Lisp::to_pair_if_can(header)) {
+ auto offset = Lisp::retract_to_fixnum(p->head);
+ rd.position(offset);
+ auto table = server()->lisp()->toplevel_form(rd.read());
+ }
+ else {
+ QMessageBox::critical(this, tr("Malformed Database Header"),
+ QString(Lisp::show(header).c_str()));
+ }
}
catch(const Diagnostics::BasicError& e) {
display_error(e.message());
diff --git a/src/gui/server.h b/src/gui/server.h
index acb691d7..b6a63dc5 100644
--- a/src/gui/server.h
+++ b/src/gui/server.h
@@ -35,6 +35,7 @@
#include <QProcess>
#include "open-axiom.h"
+#include <open-axiom/Lisp>
namespace OpenAxiom {
struct Server : QProcess {
@@ -42,6 +43,7 @@ namespace OpenAxiom {
~Server();
const Filesystem& system_root() const { return fs; }
+ Lisp::Evaluator* lisp() { return &lsp; }
void launch();
void input(const QString&);
@@ -49,6 +51,7 @@ namespace OpenAxiom {
private:
Command cmd;
Filesystem fs;
+ Lisp::Evaluator lsp;
Server(const Server&) = delete;
Server& operator=(const Server&) = delete;