Merge pull request #4366 from ethereum/libsolc-cleanup

Implement new libsolc API
This commit is contained in:
Alex Beregszaszi 2018-07-09 12:30:11 +02:00 committed by GitHub
commit c42583d27e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 43 additions and 3 deletions

View File

@ -43,6 +43,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.
* Tests: Determine transaction status during IPC calls.

View File

@ -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()

View File

@ -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);
}
}

View File

@ -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

View File

@ -16,7 +16,7 @@
*/
/**
* @date 2017
* Unit tests for solc/jsonCompiler.cpp.
* Unit tests for libsolc/libsolc.cpp.
*/
#include <string>
@ -70,7 +70,7 @@ Json::Value compile(string const& _input)
} // end anonymous namespace
BOOST_AUTO_TEST_SUITE(JSONCompiler)
BOOST_AUTO_TEST_SUITE(LibSolc)
BOOST_AUTO_TEST_CASE(read_version)
{
@ -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()
}