From f0cab3f1c60910c08be08dc308272295f0f5f544 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Thu, 6 Jun 2019 14:39:11 +0200 Subject: [PATCH] Use Caml macros for variables --- src/qt/oboy.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/qt/oboy.cpp b/src/qt/oboy.cpp index d66a3b2..09d8ded 100644 --- a/src/qt/oboy.cpp +++ b/src/qt/oboy.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -11,40 +12,57 @@ OBoy::OBoy(QObject *parent) : QObject(parent) } +// https://caml.inria.fr/pub/docs/manual-ocaml/intfc.html +// http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html + QString OBoy::name() const { + CAMLparam0(); + value * closure_f = caml_named_value("oboy_name"); if (closure_f == nullptr) { + CAMLdrop; return QString(""); } const char *str = String_val(caml_callback(*closure_f, Val_unit)); + CAMLdrop; return QString(str); } QString OBoy::version() const { + CAMLparam0(); + value * closure_f = caml_named_value("oboy_version"); if (closure_f == nullptr) { + CAMLdrop; return QString(""); } const char *str = String_val(caml_callback(*closure_f, Val_unit)); + CAMLdrop; return QString(str); } bool OBoy::load(const QString &path) { + CAMLparam0(); + CAMLlocal1(ocaml_path) ; + value * closure_f = caml_named_value("oboy_load"); if (closure_f == nullptr) { + CAMLdrop; return false; } QString truncated(path); truncated.remove(0, 7); // remove file:// QByteArray ba = truncated.toLocal8Bit(); - value ocaml_path = caml_copy_string_of_os(ba.data()); + + ocaml_path = caml_copy_string_of_os(ba.data()); const bool success = Bool_val(caml_callback(*closure_f, ocaml_path)); + CAMLdrop; return success; }