Advertisement
patlecat

ChaiScript usage in Qt5

May 26th, 2015
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.48 KB | None | 0 0
  1. #include <QDebug>
  2. //#include <chaiscript/chaiscript_stdlib.hpp>
  3.  
  4. #include <string>
  5. #include "mainwindow.h"
  6. #include "ui_mainwindow.h"
  7. #include <chaiscript/chaiscript.hpp>
  8.  
  9. MainWindow::MainWindow(QWidget *parent) :
  10.     QMainWindow(parent),
  11.     ui(new Ui::MainWindow)
  12. {
  13.     ui->setupUi(this);
  14. }
  15.  
  16. MainWindow::~MainWindow()
  17. {
  18.     delete ui;
  19. }
  20.  
  21. void MainWindow::on_actionE_xit_Application_triggered()
  22. {
  23.     // Cleanup your shit
  24.     this->close();
  25. }
  26.  
  27. void MainWindow::on_action_Execute_the_ChaiScript_triggered()
  28. {
  29.     qDebug() << "Evaluating ChaiScript now...";
  30.     using namespace chaiscript;
  31.     // Evaluate the ChaiScript...
  32.     //chaiscript::ChaiScript chai;
  33.  
  34.     if (ui->plainTextEditSource->toPlainText().isEmpty())
  35.     {
  36.         qDebug() << "No ChaiScript source, nothing to execute. Aborting execution.";
  37.         return;
  38.     }
  39.  
  40.     //chaiscript::ChaiScript chai;
  41.     //chai.add(&function, "function");
  42.     int i = 5;
  43.     chai.add(var(i), "i");
  44.     //chai.add(var("asdfvsdfv"), "firstName");
  45.  
  46.     chai.add(var(ui->lineEditFirstName->text().toStdString()), "firstName");
  47.     chai.add(var(ui->lineEditFamilyName->text().toStdString()), "familyName");
  48.     chai.add(var(ui->lineEditSomeText->text().toStdString()), "someText");
  49.     chai.add(var(ui->spinBoxSomeNumber->value()), "someNumber");
  50.     chai.add(var(ui->dateEditBirthdate->date()), "birthDate");
  51.     qDebug() << "Added C++ variables to ChaiScript.";
  52.     qDebug() << "ChaiScript source entered:" << ui->plainTextEditSource->toPlainText();
  53.     chaiscript::Boxed_Value val;
  54.  
  55.     QString strRes = "";
  56.     std::string stdRes = "";
  57.     try {
  58.         //chai("throw(1)");
  59. //        qDebug() << "Before 1st eval....!";
  60. //        int ir = chai.eval<int>("puts(\"Test Message\");var ic = 3;");
  61. //        qDebug() << "int ir received from ChaiScript:" << ir;
  62. //        int inum = chai.eval<int>("someNumber = 99;");
  63. //        qDebug() << "someNumber set in ChaiScript:" << inum;
  64.         //chaiscript::Boxed_Value val = chai.eval("print(\"Test Message\")");
  65.         val = chai.eval<std::string>(ui->plainTextEditSource->toPlainText().toStdString());
  66.  
  67.         qDebug() << "Result from ChaiScript Execution1:" << QString::fromStdString(stdRes);
  68.         //strRes = QString::fromStdString(chai.eval<std::string>(ui->plainTextEditSource->toPlainText().toStdString()));
  69.         //if (!val.get_type_info().bare_equal(chaiscript::user_type<void>()))
  70.         {
  71.             strRes = QString::fromStdString(val);
  72.         }
  73.         qDebug() << "Result from ChaiScript Execution:" << strRes;
  74.         if (strRes.isEmpty())
  75.         {
  76.             ui->plainTextEditResult->setPlainText("No Result received ...");
  77.         }
  78.         else
  79.         {
  80.             ui->plainTextEditResult->setPlainText(strRes);
  81.         }
  82.         ui->plainTextEditErrors->setPlainText("Script executed successfully, no errors.");
  83.  
  84.     }
  85.     catch(chaiscript::exception::eval_error ev)
  86.     {
  87.         qDebug() << "Try-Catch 'eval_error' fired!";
  88.         std::string strCatched = ev.pretty_print();
  89.         qDebug() << "Catched String from chaiscript::eval_error:" << QString::fromStdString(strCatched);
  90.  
  91.         strCatched += ev.what();
  92.         if (ev.call_stack.size() > 0)
  93.         {
  94.             strCatched += "during evaluation at (";
  95.             strCatched += ev.call_stack[0]->start().line;
  96.             strCatched += ", ";
  97.             strCatched += ev.call_stack[0]->start().column;
  98.             strCatched += ")";
  99.         }
  100.         ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
  101.  
  102.         return;
  103.     }
  104.     catch (chaiscript::Boxed_Value bv)
  105.     {
  106.         qDebug() << "Try-Catch 'Boxed_Value' fired!";
  107.         std::string strCatched = chaiscript::boxed_cast<std::string>(bv);
  108.         qDebug() << "Catched String from chaiscript::Boxed_Value:" << QString::fromStdString(strCatched);
  109.         ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
  110.         return;
  111.     }
  112.     catch (exception::bad_boxed_cast bc)
  113.     {
  114.         qDebug() << "Try-Catch 'bad_boxed_cast' fired!";
  115.         std::string strCatched = bc.what();
  116.         qDebug() << "Catched String from exception::bad_boxed_cast:" << QString::fromStdString(strCatched);
  117.         ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
  118.         return;
  119.     }
  120.     catch (const std::exception &ex)
  121.     {
  122.         std::string strCatched = ex.what();
  123.         qDebug() << "Catched String from std::exception:" << QString::fromStdString(strCatched);
  124.         ui->plainTextEditErrors->setPlainText(QString::fromStdString(strCatched));
  125.         return;
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement