mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Properly support library file names containing a colon (such as URLs).
This commit is contained in:
parent
35095e9fcc
commit
9e7e312fdf
@ -9,7 +9,7 @@ Features:
|
|||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Parser: Disallow event declarations with no parameter list.
|
* Parser: Disallow event declarations with no parameter list.
|
||||||
* Standard JSON: Populate the ``sourceLocation`` field in the error list.
|
* Standard JSON: Populate the ``sourceLocation`` field in the error list.
|
||||||
* Standard JSON: Properly support file names containing a colon (such as URLs).
|
* Standard JSON: Properly support contract and library file names containing a colon (such as URLs).
|
||||||
* Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters
|
* Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters
|
||||||
(instead of an internal compiler error).
|
(instead of an internal compiler error).
|
||||||
* Type Checker: Improve error message for wrong struct initialization.
|
* Type Checker: Improve error message for wrong struct initialization.
|
||||||
|
@ -193,7 +193,7 @@ Json::Value formatLinkReferences(std::map<size_t, std::string> const& linkRefere
|
|||||||
for (auto const& ref: linkReferences)
|
for (auto const& ref: linkReferences)
|
||||||
{
|
{
|
||||||
string const& fullname = ref.second;
|
string const& fullname = ref.second;
|
||||||
size_t colon = fullname.find(':');
|
size_t colon = fullname.rfind(':');
|
||||||
solAssert(colon != string::npos, "");
|
solAssert(colon != string::npos, "");
|
||||||
string file = fullname.substr(0, colon);
|
string file = fullname.substr(0, colon);
|
||||||
string name = fullname.substr(colon + 1);
|
string name = fullname.substr(colon + 1);
|
||||||
|
@ -480,6 +480,41 @@ BOOST_AUTO_TEST_CASE(filename_with_colon)
|
|||||||
BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
|
BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(library_filename_with_colon)
|
||||||
|
{
|
||||||
|
char const* input = R"(
|
||||||
|
{
|
||||||
|
"language": "Solidity",
|
||||||
|
"settings": {
|
||||||
|
"outputSelection": {
|
||||||
|
"fileA": {
|
||||||
|
"A": [
|
||||||
|
"evm.bytecode"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"fileA": {
|
||||||
|
"content": "import \"git:library.sol\"; contract A { function f() returns (uint) { return L.g(); } }"
|
||||||
|
},
|
||||||
|
"git:library.sol": {
|
||||||
|
"content": "library L { function g() returns (uint) { return 1; } }"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
Json::Value result = compile(input);
|
||||||
|
BOOST_CHECK(containsAtMostWarnings(result));
|
||||||
|
Json::Value contract = getContractResult(result, "fileA", "A");
|
||||||
|
BOOST_CHECK(contract.isObject());
|
||||||
|
BOOST_CHECK(contract["evm"]["bytecode"].isObject());
|
||||||
|
BOOST_CHECK(contract["evm"]["bytecode"]["linkReferences"].isObject());
|
||||||
|
BOOST_CHECK(contract["evm"]["bytecode"]["linkReferences"]["git:library.sol"].isObject());
|
||||||
|
BOOST_CHECK(contract["evm"]["bytecode"]["linkReferences"]["git:library.sol"]["L"].isArray());
|
||||||
|
BOOST_CHECK(contract["evm"]["bytecode"]["linkReferences"]["git:library.sol"]["L"][0].isObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user