From b52f0164b18f06db386d527be26e3a11deb1ab7d Mon Sep 17 00:00:00 2001 From: dos-reis Date: Thu, 27 Jun 2013 17:34:51 +0000 Subject: Add small Lisp evaluator for the benefit of new GUI. --- src/gui/main-window.cc | 12 ++++++++++-- src/gui/server.h | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/gui') 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 #include "open-axiom.h" +#include 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; -- cgit v1.2.3