Browse Source

add ConstantCompilationModel

cl-refactor
yann300 10 years ago
parent
commit
f6dfd4ac96
  1. 1
      mix/CMakeLists.txt
  2. 14
      mix/CodeEditorExtensionMan.cpp
  3. 6
      mix/CodeEditorExtensionMan.h
  4. 68
      mix/ConstantCompilationCtrl.cpp
  5. 6
      mix/ConstantCompilationCtrl.h
  6. 44
      mix/ConstantCompilationModel.cpp
  7. 19
      mix/ConstantCompilationModel.h
  8. 2
      mix/main.cpp

1
mix/CMakeLists.txt

@ -2,6 +2,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
aux_source_directory(. SRC_LIST) aux_source_directory(. SRC_LIST)
include_directories(..) include_directories(..)
if (APPLE) if (APPLE)
# Add homebrew path for qt5 # Add homebrew path for qt5
set(CMAKE_PREFIX_PATH /usr/local/opt/qt5) set(CMAKE_PREFIX_PATH /usr/local/opt/qt5)

14
mix/CodeEditorExtensionMan.cpp

@ -28,24 +28,24 @@
#include <QQmlComponent> #include <QQmlComponent>
#include <QQuickTextDocument> #include <QQuickTextDocument>
#include "CodeEditorExtensionMan.h" #include "CodeEditorExtensionMan.h"
#include "ConstantCompilation.h" #include "ConstantCompilationCtrl.h"
#include "features.h" #include "features.h"
#include "ApplicationCtx.h" #include "ApplicationCtx.h"
#include <libevm/VM.h> #include <libevm/VM.h>
using namespace dev; using namespace dev;
CodeEditorExtensionManager::CodeEditorExtensionManager() CodeEditorExtensionMan::CodeEditorExtensionMan()
{ {
} }
CodeEditorExtensionManager::~CodeEditorExtensionManager() CodeEditorExtensionMan::~CodeEditorExtensionMan()
{ {
for (int k = 0; k < m_features.length(); k++){ for (int k = 0; k < m_features.length(); k++){
delete m_features.at(k); delete m_features.at(k);
} }
} }
void CodeEditorExtensionManager::loadEditor(QQuickItem* _editor) void CodeEditorExtensionMan::loadEditor(QQuickItem* _editor)
{ {
if (!_editor) if (!_editor)
return; return;
@ -64,7 +64,7 @@ void CodeEditorExtensionManager::loadEditor(QQuickItem* _editor)
} }
} }
void CodeEditorExtensionManager::initExtensions() void CodeEditorExtensionMan::initExtensions()
{ {
try{ try{
//only one for now //only one for now
@ -80,11 +80,11 @@ void CodeEditorExtensionManager::initExtensions()
} }
} }
void CodeEditorExtensionManager::setEditor(QQuickItem* _editor){ void CodeEditorExtensionMan::setEditor(QQuickItem* _editor){
this->loadEditor(_editor); this->loadEditor(_editor);
this->initExtensions(); this->initExtensions();
} }
void CodeEditorExtensionManager::setTabView(QQuickItem* _tabView){ void CodeEditorExtensionMan::setTabView(QQuickItem* _tabView){
m_tabView = _tabView; m_tabView = _tabView;
} }

6
mix/CodeEditorExtensionMan.h

@ -28,7 +28,7 @@
#include <QVector> #include <QVector>
#include "Feature.h" #include "Feature.h"
class CodeEditorExtensionManager : public QObject class CodeEditorExtensionMan : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -36,8 +36,8 @@ class CodeEditorExtensionManager : public QObject
Q_PROPERTY(QQuickItem* tabView MEMBER m_tabView WRITE setTabView) Q_PROPERTY(QQuickItem* tabView MEMBER m_tabView WRITE setTabView)
public: public:
CodeEditorExtensionManager(); CodeEditorExtensionMan();
~CodeEditorExtensionManager(); ~CodeEditorExtensionMan();
void initExtensions(); void initExtensions();
void setEditor(QQuickItem*); void setEditor(QQuickItem*);
void setTabView(QQuickItem*); void setTabView(QQuickItem*);

68
mix/ConstantCompilation.cpp → mix/ConstantCompilationCtrl.cpp

@ -20,24 +20,24 @@
* Ethereum IDE client. * Ethereum IDE client.
*/ */
#include "ConstantCompilation.h" #include "ConstantCompilationCtrl.h"
#include "ConstantCompilationModel.h"
#include <QQuickItem> #include <QQuickItem>
#include <QtCore/QFileInfo> #include <QtCore/QFileInfo>
#include <QApplication> #include <QApplication>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QtCore/QtCore> #include <QtCore/QtCore>
#include <QDebug> #include <QDebug>
#include <libevm/VM.h>
#include <libsolidity/Scanner.h>
#include <libsolidity/CompilerStack.h>
#include <libsolidity/SourceReferenceFormatter.h>
using namespace std;
using namespace dev;
using namespace dev::eth;
ConstantCompilation::ConstantCompilation(QTextDocument* _doc) ConstantCompilation::ConstantCompilation(QTextDocument* _doc)
{ {
m_editor = _doc; m_editor = _doc;
compilationModel = new ConstantCompilationModel();
}
ConstantCompilation::~ConstantCompilation()
{
delete compilationModel;
} }
QString ConstantCompilation::tabUrl() QString ConstantCompilation::tabUrl()
@ -57,52 +57,38 @@ void ConstantCompilation::start()
void ConstantCompilation::compile() void ConstantCompilation::compile()
{ {
QString codeContent = m_editor->toPlainText(); QString codeContent = m_editor->toPlainText().replace("\n", "");
if (codeContent == ""){ if (codeContent == ""){
this->writeOutPut(true, codeContent); resetOutPut();
return; return;
} }
dev::solidity::CompilerStack compiler; compilerResult res = compilationModel->compile(m_editor->toPlainText());
dev::bytes m_data; writeOutPut(res);
QString content;
try
{
m_data = compiler.compile(codeContent.toStdString(), true);
content = QString::fromStdString(dev::eth::disassemble(m_data));
this->writeOutPut(true, content);
}
catch (dev::Exception const& exception)
{
ostringstream error;
solidity::SourceReferenceFormatter::printExceptionInformation(error, exception, "Error", compiler.getScanner());
content = QString::fromStdString(error.str()).toHtmlEscaped();
this->writeOutPut(false, content);
}
catch (...)
{
content = "Uncaught exception.";
this->writeOutPut(false, content);
}
} }
void ConstantCompilation::writeOutPut(bool _success, QString _content){ void ConstantCompilation::resetOutPut()
{
QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively); QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively);
QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively); QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively);
if (_content == ""){ status->setProperty("text", "");
status->setProperty("text", ""); content->setProperty("text", "");
content->setProperty("text", ""); }
}
else if (_success){ void ConstantCompilation::writeOutPut(compilerResult res)
{
QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively);
QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively);
if (res.success){
status->setProperty("text", "succeeded"); status->setProperty("text", "succeeded");
status->setProperty("color", "green"); status->setProperty("color", "green");
content->setProperty("text", _content); content->setProperty("text", res.hexCode);
qDebug() << QString("compile succeeded " + _content); qDebug() << QString("compile succeeded " + res.hexCode);
} }
else { else {
status->setProperty("text", "failure"); status->setProperty("text", "failure");
status->setProperty("color", "red"); status->setProperty("color", "red");
content->setProperty("text", _content); content->setProperty("text", res.comment);
qDebug() << QString("compile failed " + _content); qDebug() << QString("compile failed " + res.comment);
} }
} }

6
mix/ConstantCompilation.h → mix/ConstantCompilationCtrl.h

@ -24,6 +24,7 @@
#define CONSTANTCOMPILATION_H #define CONSTANTCOMPILATION_H
#include <QTextDocument> #include <QTextDocument>
#include "ConstantCompilationModel.h"
#include "Feature.h" #include "Feature.h"
class ConstantCompilation : public Feature class ConstantCompilation : public Feature
@ -32,13 +33,16 @@ class ConstantCompilation : public Feature
public: public:
ConstantCompilation(QTextDocument* doc); ConstantCompilation(QTextDocument* doc);
~ConstantCompilation();
void start() override; void start() override;
QString title() override; QString title() override;
QString tabUrl() override; QString tabUrl() override;
private: private:
QTextDocument* m_editor; QTextDocument* m_editor;
void writeOutPut(bool success, QString content); ConstantCompilationModel* compilationModel;
void writeOutPut(compilerResult);
void resetOutPut();
public Q_SLOTS: public Q_SLOTS:
void compile(); void compile();

44
mix/ConstantCompilationModel.cpp

@ -0,0 +1,44 @@
#include "ConstantCompilationModel.h"
#include <QObject>
#include <libevm/VM.h>
#include <libsolidity/Scanner.h>
#include <libsolidity/CompilerStack.h>
#include <libsolidity/SourceReferenceFormatter.h>
using namespace std;
using namespace dev;
using namespace dev::eth;
ConstantCompilationModel::ConstantCompilationModel()
{
}
compilerResult ConstantCompilationModel::compile(QString code)
{
dev::solidity::CompilerStack compiler;
dev::bytes m_data;
compilerResult res;
try
{
m_data = compiler.compile(code.toStdString(), true);
res.success = true;
res.comment = "ok";
res.hexCode = QString::fromStdString(dev::eth::disassemble(m_data));
}
catch (dev::Exception const& exception)
{
ostringstream error;
solidity::SourceReferenceFormatter::printExceptionInformation(error, exception, "Error", compiler.getScanner());
res.success = false;
res.comment = QString::fromStdString(error.str()).toHtmlEscaped();
res.hexCode = "";
}
catch (...)
{
res.success = false;
res.comment = "Uncaught exception.";
res.hexCode = "";
}
return res;
}

19
mix/ConstantCompilationModel.h

@ -0,0 +1,19 @@
#ifndef CONSTANTCOMPILATIONMODEL_H
#define CONSTANTCOMPILATIONMODEL_H
#include <QObject>
struct compilerResult{
QString hexCode;
QString comment;
bool success;
};
class ConstantCompilationModel
{
public:
ConstantCompilationModel();
compilerResult compile(QString code);
};
#endif // CONSTANTCOMPILATIONMODEL_H

2
mix/main.cpp

@ -30,7 +30,7 @@ int main(int argc, char *argv[])
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
QQmlApplicationEngine* engine = new QQmlApplicationEngine(); QQmlApplicationEngine* engine = new QQmlApplicationEngine();
qmlRegisterType<CodeEditorExtensionManager>("CodeEditorExtensionManager", 1, 0, "CodeEditorExtensionManager"); qmlRegisterType<CodeEditorExtensionMan>("CodeEditorExtensionManager", 1, 0, "CodeEditorExtensionManager");
ApplicationCtx::SetApplicationContext(engine); ApplicationCtx::SetApplicationContext(engine);
QObject::connect(&app, SIGNAL(lastWindowClosed()), ApplicationCtx::GetInstance(), SLOT(QuitApplication())); //use to kill ApplicationContext and other stuff QObject::connect(&app, SIGNAL(lastWindowClosed()), ApplicationCtx::GetInstance(), SLOT(QuitApplication())); //use to kill ApplicationContext and other stuff

Loading…
Cancel
Save