From 328554a4f91bbd77fc9a901e0bde66eb16d988ea Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 20 Jun 2018 01:34:54 +0200 Subject: Add new libsolc entry points (solidity_license/version/compile) --- Changelog.md | 1 + libsolc/CMakeLists.txt | 2 +- libsolc/libsolc.cpp | 15 +++++++++++++++ libsolc/libsolc.h | 4 ++++ test/libsolidity/LibSolc.cpp | 20 ++++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index b1f742bf..97020ae6 100644 --- a/Changelog.md +++ b/Changelog.md @@ -37,6 +37,7 @@ Language Features: * General: Scoping rules now follow the C99-style. Compiler Features: + * C API (``libsolc``): Export the ``solidity_license``, ``solidity_version`` and ``solidity_compile`` methods. * Type Checker: Show named argument in case of error. Bugfixes: diff --git a/libsolc/CMakeLists.txt b/libsolc/CMakeLists.txt index e67583dd..63fc1a83 100644 --- a/libsolc/CMakeLists.txt +++ b/libsolc/CMakeLists.txt @@ -1,5 +1,5 @@ if (EMSCRIPTEN) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s EXPORTED_FUNCTIONS='[\"_compileJSON\",\"_license\",\"_version\",\"_compileJSONMulti\",\"_compileJSONCallback\",\"_compileStandard\"]' -s RESERVED_FUNCTION_POINTERS=20") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s EXPORTED_FUNCTIONS='[\"_solidity_license\",\"_solidity_version\",\"_solidity_compile\",\"_license\",\"_version\",\"_compileJSON\",\"_compileJSONMulti\",\"_compileJSONCallback\",\"_compileStandard\"]' -s RESERVED_FUNCTION_POINTERS=20") add_executable(soljson libsolc.cpp) target_link_libraries(soljson PRIVATE solidity) else() diff --git a/libsolc/libsolc.cpp b/libsolc/libsolc.cpp index 6c587e23..26ce98ce 100644 --- a/libsolc/libsolc.cpp +++ b/libsolc/libsolc.cpp @@ -299,4 +299,19 @@ extern char const* compileStandard(char const* _input, CStyleReadFileCallback _r s_outputBuffer = compileStandardInternal(_input, _readCallback); return s_outputBuffer.c_str(); } +extern char const* solidity_license() +{ + /// todo: make this the default or an alias + return license(); +} +extern char const* solidity_version() +{ + /// todo: make this the default or an alias + return version(); +} +extern char const* solidity_compile(char const* _input, CStyleReadFileCallback _readCallback) +{ + /// todo: make this the default or an alias + return compileStandard(_input, _readCallback); +} } diff --git a/libsolc/libsolc.h b/libsolc/libsolc.h index c392ce93..2cc004d4 100644 --- a/libsolc/libsolc.h +++ b/libsolc/libsolc.h @@ -37,6 +37,10 @@ char const* compileJSONMulti(char const* _input, bool _optimize); char const* compileJSONCallback(char const* _input, bool _optimize, CStyleReadFileCallback _readCallback); char const* compileStandard(char const* _input, CStyleReadFileCallback _readCallback); +char const* solidity_license(); +char const* solidity_version(); +char const* solidity_compile(char const* _input, CStyleReadFileCallback _readCallback); + #ifdef __cplusplus } #endif diff --git a/test/libsolidity/LibSolc.cpp b/test/libsolidity/LibSolc.cpp index f42d374f..9d5ffa27 100644 --- a/test/libsolidity/LibSolc.cpp +++ b/test/libsolidity/LibSolc.cpp @@ -201,6 +201,26 @@ BOOST_AUTO_TEST_CASE(standard_compilation) BOOST_CHECK(result.isMember("contracts")); } +BOOST_AUTO_TEST_CASE(new_api) +{ + char const* input = R"( + { + "language": "Solidity", + "sources": { + "fileA": { + "content": "contract A { }" + } + } + } + )"; + BOOST_CHECK_EQUAL(string(version()), string(solidity_version())); + BOOST_CHECK_EQUAL(string(license()), string(solidity_license())); + BOOST_CHECK_EQUAL( + string(compileStandard(input, nullptr)), + string(solidity_compile(input, nullptr)) + ); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit