Gav Wood
10 years ago
40 changed files with 752 additions and 125 deletions
@ -0,0 +1,96 @@ |
|||||
|
import QtQuick 2.0 |
||||
|
import QtQuick.Controls 1.3 |
||||
|
import QtQuick.Controls.Styles 1.3 |
||||
|
|
||||
|
Item |
||||
|
{ |
||||
|
property alias value: textinput.text |
||||
|
property alias contractCreationTr: ctrModel |
||||
|
id: editRoot |
||||
|
height: 20 |
||||
|
width: 200 |
||||
|
|
||||
|
SourceSansProBold |
||||
|
{ |
||||
|
id: boldFont |
||||
|
} |
||||
|
|
||||
|
function init() |
||||
|
{ |
||||
|
trCombobox.visible = ctrModel.count > 1; //index 0 is a blank value. |
||||
|
if (value.indexOf("<") === 0) |
||||
|
{ |
||||
|
for (var k = 0; k < ctrModel.count; k++) |
||||
|
{ |
||||
|
if ("<" + ctrModel.get(k).functionId + ">" === value) |
||||
|
{ |
||||
|
trCombobox.currentIndex = k; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
trCombobox.currentIndex = 0; |
||||
|
value = ""; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Rectangle { |
||||
|
anchors.fill: parent |
||||
|
radius: 4 |
||||
|
anchors.verticalCenter: parent.verticalCenter |
||||
|
height: 20 |
||||
|
TextInput { |
||||
|
id: textinput |
||||
|
text: value |
||||
|
width: parent.width |
||||
|
height: parent.width |
||||
|
wrapMode: Text.WrapAnywhere |
||||
|
clip: true |
||||
|
font.family: boldFont.name |
||||
|
MouseArea { |
||||
|
id: mouseArea |
||||
|
anchors.fill: parent |
||||
|
hoverEnabled: true |
||||
|
onClicked: textinput.forceActiveFocus() |
||||
|
} |
||||
|
onTextChanged: |
||||
|
{ |
||||
|
if (trCombobox.selected) |
||||
|
{ |
||||
|
trCombobox.currentIndex = 0; |
||||
|
trCombobox.selected = false; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
ListModel |
||||
|
{ |
||||
|
id: ctrModel |
||||
|
} |
||||
|
|
||||
|
ComboBox |
||||
|
{ |
||||
|
property bool selected: false |
||||
|
id: trCombobox |
||||
|
model: ctrModel |
||||
|
textRole: "functionId" |
||||
|
height: 20 |
||||
|
anchors.verticalCenter: parent.verticalCenter |
||||
|
anchors.left: textinput.parent.right |
||||
|
anchors.leftMargin: 3 |
||||
|
onCurrentIndexChanged: { |
||||
|
trCombobox.selected = false; |
||||
|
if (currentText === "") |
||||
|
return; |
||||
|
else if (currentText !== " - ") |
||||
|
{ |
||||
|
textinput.text = "<" + currentText + ">"; |
||||
|
trCombobox.selected = true; |
||||
|
} |
||||
|
else if (textinput.text.indexOf("<") === 0) |
||||
|
{ |
||||
|
textinput.text = ""; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,124 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/**
|
||||
|
* @author Christian <c@ethdev.com> |
||||
|
* @date 2014 |
||||
|
* JSON interface for the solidity compiler to be used from Javascript. |
||||
|
*/ |
||||
|
|
||||
|
#include <string> |
||||
|
#include <iostream> |
||||
|
#include <json/json.h> |
||||
|
#include <libdevcore/Common.h> |
||||
|
#include <libdevcore/CommonData.h> |
||||
|
#include <libdevcore/CommonIO.h> |
||||
|
#include <libevmcore/Instruction.h> |
||||
|
#include <libsolidity/Scanner.h> |
||||
|
#include <libsolidity/Parser.h> |
||||
|
#include <libsolidity/ASTPrinter.h> |
||||
|
#include <libsolidity/NameAndTypeResolver.h> |
||||
|
#include <libsolidity/Exceptions.h> |
||||
|
#include <libsolidity/CompilerStack.h> |
||||
|
#include <libsolidity/SourceReferenceFormatter.h> |
||||
|
#include <libsolidity/ASTJsonConverter.h> |
||||
|
|
||||
|
using namespace std; |
||||
|
using namespace dev; |
||||
|
using namespace solidity; |
||||
|
|
||||
|
string formatError(Exception const& _exception, string const& _name, CompilerStack const& _compiler) |
||||
|
{ |
||||
|
ostringstream errorOutput; |
||||
|
SourceReferenceFormatter::printExceptionInformation(errorOutput, _exception, _name, _compiler); |
||||
|
|
||||
|
Json::Value output(Json::objectValue); |
||||
|
output["error"] = errorOutput.str(); |
||||
|
return Json::FastWriter().write(output); |
||||
|
} |
||||
|
|
||||
|
string compile(string _input, bool _optimize) |
||||
|
{ |
||||
|
StringMap sources; |
||||
|
sources[""] = _input; |
||||
|
|
||||
|
Json::Value output(Json::objectValue); |
||||
|
CompilerStack compiler; |
||||
|
try |
||||
|
{ |
||||
|
compiler.compile(_input, _optimize); |
||||
|
} |
||||
|
catch (ParserError const& exception) |
||||
|
{ |
||||
|
return formatError(exception, "Parser error", compiler); |
||||
|
} |
||||
|
catch (DeclarationError const& exception) |
||||
|
{ |
||||
|
return formatError(exception, "Declaration error", compiler); |
||||
|
} |
||||
|
catch (TypeError const& exception) |
||||
|
{ |
||||
|
return formatError(exception, "Type error", compiler); |
||||
|
} |
||||
|
catch (CompilerError const& exception) |
||||
|
{ |
||||
|
return formatError(exception, "Compiler error", compiler); |
||||
|
} |
||||
|
catch (InternalCompilerError const& exception) |
||||
|
{ |
||||
|
return formatError(exception, "Internal compiler error", compiler); |
||||
|
} |
||||
|
catch (Exception const& exception) |
||||
|
{ |
||||
|
output["error"] = "Exception during compilation: " + boost::diagnostic_information(exception); |
||||
|
return Json::FastWriter().write(output); |
||||
|
} |
||||
|
catch (...) |
||||
|
{ |
||||
|
output["error"] = "Unknown exception during compilation."; |
||||
|
return Json::FastWriter().write(output); |
||||
|
} |
||||
|
|
||||
|
output["contracts"] = Json::Value(Json::objectValue); |
||||
|
for (string const& contractName: compiler.getContractNames()) |
||||
|
{ |
||||
|
Json::Value contractData(Json::objectValue); |
||||
|
contractData["solidity_interface"] = compiler.getSolidityInterface(contractName); |
||||
|
contractData["interface"] = compiler.getInterface(contractName); |
||||
|
contractData["bytecode"] = toHex(compiler.getBytecode(contractName)); |
||||
|
contractData["opcodes"] = eth::disassemble(compiler.getBytecode(contractName)); |
||||
|
ostringstream unused; |
||||
|
contractData["assembly"] = compiler.streamAssembly(unused, contractName, sources, true); |
||||
|
output["contracts"][contractName] = contractData; |
||||
|
} |
||||
|
|
||||
|
output["sources"] = Json::Value(Json::objectValue); |
||||
|
output["sources"][""] = Json::Value(Json::objectValue); |
||||
|
output["sources"][""]["AST"] = ASTJsonConverter(compiler.getAST("")).json(); |
||||
|
|
||||
|
return Json::FastWriter().write(output); |
||||
|
} |
||||
|
|
||||
|
static string outputBuffer; |
||||
|
|
||||
|
extern "C" |
||||
|
{ |
||||
|
extern char const* compileJSON(char const* _input, bool _optimize) |
||||
|
{ |
||||
|
outputBuffer = compile(_input, _optimize); |
||||
|
return outputBuffer.c_str(); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue