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. 62
      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)
include_directories(..)
if (APPLE)
# Add homebrew path for qt5
set(CMAKE_PREFIX_PATH /usr/local/opt/qt5)

14
mix/CodeEditorExtensionMan.cpp

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

6
mix/CodeEditorExtensionMan.h

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

62
mix/ConstantCompilation.cpp → mix/ConstantCompilationCtrl.cpp

@ -20,24 +20,24 @@
* Ethereum IDE client.
*/
#include "ConstantCompilation.h"
#include "ConstantCompilationCtrl.h"
#include "ConstantCompilationModel.h"
#include <QQuickItem>
#include <QtCore/QFileInfo>
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtCore/QtCore>
#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)
{
m_editor = _doc;
compilationModel = new ConstantCompilationModel();
}
ConstantCompilation::~ConstantCompilation()
{
delete compilationModel;
}
QString ConstantCompilation::tabUrl()
@ -57,52 +57,38 @@ void ConstantCompilation::start()
void ConstantCompilation::compile()
{
QString codeContent = m_editor->toPlainText();
QString codeContent = m_editor->toPlainText().replace("\n", "");
if (codeContent == ""){
this->writeOutPut(true, codeContent);
resetOutPut();
return;
}
dev::solidity::CompilerStack compiler;
dev::bytes m_data;
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);
}
compilerResult res = compilationModel->compile(m_editor->toPlainText());
writeOutPut(res);
}
void ConstantCompilation::writeOutPut(bool _success, QString _content){
void ConstantCompilation::resetOutPut()
{
QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively);
QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively);
if (_content == ""){
status->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("color", "green");
content->setProperty("text", _content);
qDebug() << QString("compile succeeded " + _content);
content->setProperty("text", res.hexCode);
qDebug() << QString("compile succeeded " + res.hexCode);
}
else {
status->setProperty("text", "failure");
status->setProperty("color", "red");
content->setProperty("text", _content);
qDebug() << QString("compile failed " + _content);
content->setProperty("text", res.comment);
qDebug() << QString("compile failed " + res.comment);
}
}

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

@ -24,6 +24,7 @@
#define CONSTANTCOMPILATION_H
#include <QTextDocument>
#include "ConstantCompilationModel.h"
#include "Feature.h"
class ConstantCompilation : public Feature
@ -32,13 +33,16 @@ class ConstantCompilation : public Feature
public:
ConstantCompilation(QTextDocument* doc);
~ConstantCompilation();
void start() override;
QString title() override;
QString tabUrl() override;
private:
QTextDocument* m_editor;
void writeOutPut(bool success, QString content);
ConstantCompilationModel* compilationModel;
void writeOutPut(compilerResult);
void resetOutPut();
public Q_SLOTS:
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);
QQmlApplicationEngine* engine = new QQmlApplicationEngine();
qmlRegisterType<CodeEditorExtensionManager>("CodeEditorExtensionManager", 1, 0, "CodeEditorExtensionManager");
qmlRegisterType<CodeEditorExtensionMan>("CodeEditorExtensionManager", 1, 0, "CodeEditorExtensionManager");
ApplicationCtx::SetApplicationContext(engine);
QObject::connect(&app, SIGNAL(lastWindowClosed()), ApplicationCtx::GetInstance(), SLOT(QuitApplication())); //use to kill ApplicationContext and other stuff

Loading…
Cancel
Save