Marek Kotewicz
10 years ago
42 changed files with 744 additions and 249 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@ |
|||
include pysol/*.cpp |
|||
include *.py |
|||
include libdevcore/*cpp |
|||
include libdevcore/*h |
|||
include libdevcrypto/*cpp |
|||
include libdevcrypto/*h |
|||
include libethcore/*cpp |
|||
include libethcore/*h |
|||
include libsolidity/*cpp |
|||
include libsolidity/*h |
|||
include libevmcore/*cpp |
|||
include libevmcore/*h |
|||
include pysol/README.md |
@ -0,0 +1,115 @@ |
|||
#include <Python.h> |
|||
#include "structmember.h" |
|||
#include <stdlib.h> |
|||
#include <stdio.h> |
|||
#include <iostream> |
|||
#include <vector> |
|||
|
|||
#include "../libdevcore/CommonData.h" |
|||
|
|||
|
|||
#include <libsolidity/Compiler.h> |
|||
#include <libsolidity/CompilerStack.h> |
|||
#include <libsolidity/CompilerUtils.h> |
|||
#include <libsolidity/SourceReferenceFormatter.h> |
|||
|
|||
|
|||
std::string compile(std::string src) { |
|||
dev::solidity::CompilerStack compiler; |
|||
try |
|||
{ |
|||
std::vector<uint8_t> m_data = compiler.compile(src, false); |
|||
return std::string(m_data.begin(), m_data.end()); |
|||
} |
|||
catch (dev::Exception const& exception) |
|||
{ |
|||
std::ostringstream error; |
|||
dev::solidity::SourceReferenceFormatter::printExceptionInformation(error, exception, "Error", compiler); |
|||
std::string e = error.str(); |
|||
throw(e); |
|||
} |
|||
} |
|||
|
|||
|
|||
std::string mk_full_signature(std::string src) { |
|||
dev::solidity::CompilerStack compiler; |
|||
try |
|||
{ |
|||
compiler.compile(src); |
|||
return compiler.getInterface(""); |
|||
} |
|||
catch (dev::Exception const& exception) |
|||
{ |
|||
std::ostringstream error; |
|||
dev::solidity::SourceReferenceFormatter::printExceptionInformation(error, exception, "Error", compiler); |
|||
std::string e = error.str(); |
|||
throw(e); |
|||
} |
|||
} |
|||
|
|||
std::string bob(std::string src) { return src + src; } |
|||
|
|||
#define PYMETHOD(name, FROM, method, TO) \ |
|||
static PyObject * name(PyObject *, PyObject *args) { \ |
|||
try { \ |
|||
FROM(med) \ |
|||
return TO(method(med)); \ |
|||
} \ |
|||
catch (std::string e) { \ |
|||
PyErr_SetString(PyExc_Exception, e.c_str()); \ |
|||
return NULL; \ |
|||
} \ |
|||
} |
|||
|
|||
#define FROMSTR(v) \ |
|||
const char *command; \ |
|||
int len; \ |
|||
if (!PyArg_ParseTuple(args, "s#", &command, &len)) \ |
|||
return NULL; \ |
|||
std::string v = std::string(command, len); \ |
|||
|
|||
// Convert string into python wrapper form
|
|||
PyObject* pyifyString(std::string s) { |
|||
return Py_BuildValue("s#", s.c_str(), s.length()); |
|||
} |
|||
|
|||
// Convert integer into python wrapper form
|
|||
PyObject* pyifyInteger(unsigned int i) { |
|||
return Py_BuildValue("i", i); |
|||
} |
|||
|
|||
// Convert pyobject int into normal form
|
|||
int cppifyInt(PyObject* o) { |
|||
int out; |
|||
if (!PyArg_Parse(o, "i", &out)) |
|||
throw("Argument should be integer"); |
|||
return out; |
|||
} |
|||
|
|||
// Convert pyobject string into normal form
|
|||
std::string cppifyString(PyObject* o) { |
|||
const char *command; |
|||
if (!PyArg_Parse(o, "s", &command)) |
|||
throw("Argument should be string"); |
|||
return std::string(command); |
|||
} |
|||
|
|||
int fh(std::string i) { |
|||
return dev::fromHex(i[0]); |
|||
} |
|||
|
|||
PYMETHOD(ps_compile, FROMSTR, compile, pyifyString) |
|||
PYMETHOD(ps_mk_full_signature, FROMSTR, mk_full_signature, pyifyString) |
|||
|
|||
static PyMethodDef PyextMethods[] = { |
|||
{"compile", ps_compile, METH_VARARGS, |
|||
"Compile code."}, |
|||
{"mk_full_signature", ps_mk_full_signature, METH_VARARGS, |
|||
"Get the signature of a piece of code."}, |
|||
{NULL, NULL, 0, NULL} /* Sentinel */ |
|||
}; |
|||
|
|||
PyMODINIT_FUNC initsolidity(void) |
|||
{ |
|||
Py_InitModule( "solidity", PyextMethods ); |
|||
} |
@ -0,0 +1,41 @@ |
|||
import os |
|||
os.chdir('..') |
|||
|
|||
from setuptools import setup, Extension |
|||
|
|||
from distutils.sysconfig import get_config_vars |
|||
|
|||
(opt,) = get_config_vars('OPT') |
|||
os.environ['OPT'] = " ".join( |
|||
flag for flag in opt.split() if flag != '-Wstrict-prototypes' |
|||
) |
|||
|
|||
setup( |
|||
# Name of this package |
|||
name="ethereum-solidity", |
|||
|
|||
# Package version |
|||
version='1.8.0', |
|||
|
|||
description='Solidity compiler python wrapper', |
|||
maintainer='Vitalik Buterin', |
|||
maintainer_email='v@buterin.com', |
|||
license='WTFPL', |
|||
url='http://www.ethereum.org/', |
|||
|
|||
# Describes how to build the actual extension module from C source files. |
|||
ext_modules=[ |
|||
Extension( |
|||
'solidity', # Python name of the module |
|||
sources= ['libdevcore/Common.cpp', 'libdevcore/CommonData.cpp', 'libdevcore/CommonIO.cpp', 'libdevcore/FixedHash.cpp', 'libdevcore/Guards.cpp', 'libdevcore/Log.cpp', 'libdevcore/RangeMask.cpp', 'libdevcore/RLP.cpp', 'libdevcore/Worker.cpp', 'libdevcrypto/AES.cpp', 'libdevcrypto/Common.cpp', 'libdevcrypto/CryptoPP.cpp', 'libdevcrypto/ECDHE.cpp', 'libdevcrypto/FileSystem.cpp', 'libdevcrypto/MemoryDB.cpp', 'libdevcrypto/OverlayDB.cpp', 'libdevcrypto/SHA3.cpp', 'libdevcrypto/TrieCommon.cpp', 'libdevcrypto/TrieDB.cpp', 'libethcore/CommonEth.cpp', 'libethcore/CommonJS.cpp', 'libethcore/Exceptions.cpp', 'libsolidity/AST.cpp', 'libsolidity/ASTJsonConverter.cpp', 'libsolidity/ASTPrinter.cpp', 'libsolidity/CompilerContext.cpp', 'libsolidity/Compiler.cpp', 'libsolidity/CompilerStack.cpp', 'libsolidity/CompilerUtils.cpp', 'libsolidity/DeclarationContainer.cpp', 'libsolidity/ExpressionCompiler.cpp', 'libsolidity/GlobalContext.cpp', 'libsolidity/InterfaceHandler.cpp', 'libsolidity/NameAndTypeResolver.cpp', 'libsolidity/Parser.cpp', 'libsolidity/Scanner.cpp', 'libsolidity/SourceReferenceFormatter.cpp', 'libsolidity/Token.cpp', 'libsolidity/Types.cpp', 'libevmcore/Assembly.cpp', 'libevmcore/Instruction.cpp', 'pysol/pysolidity.cpp'], |
|||
libraries=['boost_python', 'boost_filesystem', 'boost_chrono', 'boost_thread', 'cryptopp', 'leveldb', 'jsoncpp'], |
|||
include_dirs=['/usr/include/boost', '..', '../..', '.'], |
|||
extra_compile_args=['--std=c++11', '-Wno-unknown-pragmas'] |
|||
)], |
|||
py_modules=[ |
|||
], |
|||
scripts=[ |
|||
], |
|||
entry_points={ |
|||
} |
|||
), |
Loading…
Reference in new issue