Vitalik Buterin
10 years ago
4 changed files with 169 additions and 0 deletions
@ -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