Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QDebug>
- //#include <chaiscript/chaiscript_stdlib.hpp>
- #include <string>
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <chaiscript/chaiscript.hpp>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_actionE_xit_Application_triggered()
- {
- // Cleanup your shit
- this->close();
- }
- void MainWindow::on_action_Execute_the_ChaiScript_triggered()
- {
- qDebug() << "Evaluating ChaiScript now...";
- using namespace chaiscript;
- // Evaluate the ChaiScript...
- //chaiscript::ChaiScript chai;
- if (ui->plainTextEditSource->toPlainText().isEmpty())
- {
- qDebug() << "No ChaiScript source, nothing to execute. Aborting execution.";
- return;
- }
- //chaiscript::ChaiScript chai;
- //chai.add(&function, "function");
- int i = 5;
- chai.add(var(i), "i");
- //chai.add(var("asdfvsdfv"), "firstName");
- chai.add(var(ui->lineEditFirstName->text().toStdString()), "firstName");
- chai.add(var(ui->lineEditFamilyName->text().toStdString()), "familyName");
- chai.add(var(ui->lineEditSomeText->text().toStdString()), "someText");
- chai.add(var(ui->spinBoxSomeNumber->value()), "someNumber");
- chai.add(var(ui->dateEditBirthdate->date()), "birthDate");
- qDebug() << "Added C++ variables to ChaiScript.";
- qDebug() << "ChaiScript source entered:" << ui->plainTextEditSource->toPlainText();
- chaiscript::Boxed_Value val;
- QString strRes = "";
- std::string stdRes = "";
- try {
- //chai("throw(1)");
- // qDebug() << "Before 1st eval....!";
- // int ir = chai.eval<int>("puts(\"Test Message\");var ic = 3;");
- // qDebug() << "int ir received from ChaiScript:" << ir;
- // int inum = chai.eval<int>("someNumber = 99;");
- // qDebug() << "someNumber set in ChaiScript:" << inum;
- //chaiscript::Boxed_Value val = chai.eval("print(\"Test Message\")");
- val = chai.eval<std::string>(ui->plainTextEditSource->toPlainText().toStdString());
- qDebug() << "Result from ChaiScript Execution1:" << QString::fromStdString(stdRes);
- //strRes = QString::fromStdString(chai.eval<std::string>(ui->plainTextEditSource->toPlainText().toStdString()));
- //if (!val.get_type_info().bare_equal(chaiscript::user_type<void>()))
- {
- strRes = QString::fromStdString(val);
- }
- qDebug() << "Result from ChaiScript Execution:" << strRes;
- if (strRes.isEmpty())
- {
- ui->plainTextEditResult->setPlainText("No Result received ...");
- }
- else
- {
- ui->plainTextEditResult->setPlainText(strRes);
- }
- ui->plainTextEditErrors->setPlainText("Script executed successfully, no errors.");
- }
- catch(chaiscript::exception::eval_error ev)
- {
- qDebug() << "Try-Catch 'eval_error' fired!";
- std::string strCatched = ev.pretty_print();
- qDebug() << "Catched String from chaiscript::eval_error:" << QString::fromStdString(strCatched);
- strCatched += ev.what();
- if (ev.call_stack.size() > 0)
- {
- strCatched += "during evaluation at (";
- strCatched += ev.call_stack[0]->start().line;
- strCatched += ", ";
- strCatched += ev.call_stack[0]->start().column;
- strCatched += ")";
- }
- ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
- return;
- }
- catch (chaiscript::Boxed_Value bv)
- {
- qDebug() << "Try-Catch 'Boxed_Value' fired!";
- std::string strCatched = chaiscript::boxed_cast<std::string>(bv);
- qDebug() << "Catched String from chaiscript::Boxed_Value:" << QString::fromStdString(strCatched);
- ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
- return;
- }
- catch (exception::bad_boxed_cast bc)
- {
- qDebug() << "Try-Catch 'bad_boxed_cast' fired!";
- std::string strCatched = bc.what();
- qDebug() << "Catched String from exception::bad_boxed_cast:" << QString::fromStdString(strCatched);
- ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
- return;
- }
- catch (const std::exception &ex)
- {
- std::string strCatched = ex.what();
- qDebug() << "Catched String from std::exception:" << QString::fromStdString(strCatched);
- ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement