Browse Source

Merge branch 'ide_m25' of https://github.com/yann300/cpp-ethereum into mix

cl-refactor
arkpar 10 years ago
parent
commit
524eaa300e
  1. 23
      mix/QBasicNodeDefinition.cpp
  2. 48
      mix/QBasicNodeDefinition.h
  3. 55
      mix/QContractDefinition.cpp
  4. 51
      mix/QContractDefinition.h
  5. 41
      mix/QFunctionDefinition.cpp
  6. 53
      mix/QFunctionDefinition.h
  7. 23
      mix/QVariableDeclaration.cpp
  8. 46
      mix/QVariableDeclaration.h

23
mix/QBasicNodeDefinition.cpp

@ -0,0 +1,23 @@
/*
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/>.
*/
/** @file QBasicNodeDefinition.cpp
* @author Yann yann@ethdev.com
* @date 2014
*/
#include "QBasicNodeDefinition.h"

48
mix/QBasicNodeDefinition.h

@ -0,0 +1,48 @@
/*
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/>.
*/
/** @file QBasicNodeDefinition.h
* @author Yann yann@ethdev.com
* @date 2014
*/
#pragma once
#include <QObject>
#include "libsolidity/AST.h"
namespace dev
{
namespace mix
{
class QBasicNodeDefinition: public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name)
public:
QBasicNodeDefinition(): QObject() {}
~QBasicNodeDefinition() {}
QBasicNodeDefinition(std::shared_ptr<dev::solidity::Declaration> _d, QObject* _parent): QObject(_parent), m_dec(_d) {}
QString name() { return QString::fromStdString(m_dec.get()->getName()); }
protected:
std::shared_ptr<dev::solidity::Declaration> m_dec;
};
}
}

55
mix/QContractDefinition.cpp

@ -0,0 +1,55 @@
/*
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/>.
*/
/** @file QContractDefinition.cpp
* @author Yann yann@ethdev.com
* @date 2014
*/
#include <QObject>
#include "QContractDefinition.h"
#include "libsolidity/Scanner.h"
#include "libsolidity/Parser.h"
#include "libsolidity/Scanner.h"
#include "libsolidity/NameAndTypeResolver.h"
#include "QContractDefinition.h"
using namespace dev::solidity;
using namespace dev::mix;
QContractDefinition* QContractDefinition::Contract(QString _source, QObject* _parent)
{
Parser parser;
std::shared_ptr<ContractDefinition> contract = parser.parse(std::make_shared<Scanner>(CharStream(_source.toStdString())));
NameAndTypeResolver resolver({});
resolver.resolveNamesAndTypes(*contract);
return new QContractDefinition(contract, _parent);
}
QContractDefinition::QContractDefinition(std::shared_ptr<ContractDefinition> _contract, QObject* _parent): QBasicNodeDefinition(_contract, _parent), m_def(_contract)
{
initQFunctions();
}
void QContractDefinition::initQFunctions()
{
std::vector<FunctionDefinition const*> functions = m_def.get()->getInterfaceFunctions();
for (unsigned i = 0; i < functions.size(); i++)
{
FunctionDefinition* func = (FunctionDefinition*)functions.at(i);
std::shared_ptr<FunctionDefinition> sharedFunc(func);
m_functions.append(new QFunctionDefinition(sharedFunc, parent(), i));
}
}

51
mix/QContractDefinition.h

@ -0,0 +1,51 @@
/*
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/>.
*/
/** @file QContractDefinition.h
* @author Yann yann@ethdev.com
* @date 2014
*/
#pragma once
#include <QObject>
#include "libsolidity/AST.h"
#include "QFunctionDefinition.h"
#include "QBasicNodeDefinition.h"
namespace dev
{
namespace mix
{
class QContractDefinition: public QBasicNodeDefinition
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> functions READ functions)
public:
QContractDefinition(std::shared_ptr<dev::solidity::ContractDefinition> _contract, QObject* _parent);
QList<QObject*> functions() { return m_functions; }
static QContractDefinition* Contract(QString _code, QObject* _parent);
private:
std::shared_ptr<dev::solidity::ContractDefinition> m_def;
QList<QObject*> m_functions;
void initQFunctions();
};
}
}

41
mix/QFunctionDefinition.cpp

@ -0,0 +1,41 @@
/*
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/>.
*/
/** @file QFunctionDefinition.cpp
* @author Yann yann@ethdev.com
* @date 2014
*/
#include "QVariableDeclaration.h"
#include "QFunctionDefinition.h"
#include "libsolidity/AST.h"
using namespace dev::solidity;
using namespace dev::mix;
void QFunctionDefinition::initQParameters()
{
std::vector<std::shared_ptr<VariableDeclaration>> parameters = ((FunctionDefinition*)m_dec.get())->getParameterList().getParameters();
for (unsigned i = 0; i < parameters.size(); i++)
{
m_parameters.append(new QVariableDeclaration(parameters.at(i), parent()));
}
std::vector<std::shared_ptr<VariableDeclaration>> returnParameters = ((FunctionDefinition*)m_dec.get())->getReturnParameters();
for (unsigned i = 0; i < returnParameters.size(); i++)
{
m_returnParameters.append(new QVariableDeclaration(returnParameters.at(i), parent()));
}
}

53
mix/QFunctionDefinition.h

@ -0,0 +1,53 @@
/*
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/>.
*/
/** @file QFunctionDefinition.h
* @author Yann yann@ethdev.com
* @date 2014
*/
#pragma once
#include <QObject>
#include <libsolidity/AST.h>
#include "QBasicNodeDefinition.h"
namespace dev
{
namespace mix
{
class QFunctionDefinition: public QBasicNodeDefinition
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> parameters READ parameters)
Q_PROPERTY(int index READ index)
public:
QFunctionDefinition(std::shared_ptr<dev::solidity::FunctionDefinition> _f, QObject* _parent, int _index): QBasicNodeDefinition(_f, _parent), m_index(_index) { initQParameters(); }
QList<QObject*> parameters() { return m_parameters; }
QList<QObject*> returnParameters() { return m_returnParameters; }
int index() { return m_index; }
private:
QList<QObject*> m_parameters;
QList<QObject*> m_returnParameters;
int m_index;
void initQParameters();
};
}
}

23
mix/QVariableDeclaration.cpp

@ -0,0 +1,23 @@
/*
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/>.
*/
/** @file QVariableDeclaration.cpp
* @author Yann yann@ethdev.com
* @date 2014
*/
#include "QVariableDeclaration.h"
using namespace dev::mix;

46
mix/QVariableDeclaration.h

@ -0,0 +1,46 @@
/*
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/>.
*/
/** @file QVariableDeclaration.h
* @author Yann yann@ethdev.com
* @date 2014
*/
#include "libsolidity/AST.h"
#include "QBasicNodeDefinition.h"
#pragma once
namespace dev
{
namespace mix
{
class QVariableDeclaration: public QBasicNodeDefinition
{
Q_OBJECT
Q_PROPERTY(QString type READ type)
public:
QVariableDeclaration(std::shared_ptr<dev::solidity::VariableDeclaration> _v, QObject* _parent): QBasicNodeDefinition(_v, _parent), m_var(_v) {}
QString type() { return QString::fromStdString(m_var.get()->getType()->toString()); }
private:
std::shared_ptr<dev::solidity::VariableDeclaration> m_var;
};
}
}
Loading…
Cancel
Save