mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use "if" instead of "switch" in codegen for the deployment time address of a library
This commit is contained in:
parent
6b12726f51
commit
bd51589f1a
@ -177,6 +177,7 @@ size_t ContractCompiler::deployLibrary(ContractDefinition const& _contract)
|
|||||||
solAssert(m_context.runtimeSub() != size_t(-1), "Runtime sub not registered");
|
solAssert(m_context.runtimeSub() != size_t(-1), "Runtime sub not registered");
|
||||||
m_context.pushSubroutineSize(m_context.runtimeSub());
|
m_context.pushSubroutineSize(m_context.runtimeSub());
|
||||||
m_context.pushSubroutineOffset(m_context.runtimeSub());
|
m_context.pushSubroutineOffset(m_context.runtimeSub());
|
||||||
|
// This code replaces the address added by appendDeployTimeAddress().
|
||||||
m_context.appendInlineAssembly(R"(
|
m_context.appendInlineAssembly(R"(
|
||||||
{
|
{
|
||||||
// If code starts at 11, an mstore(0) writes to the full PUSH20 plus data
|
// If code starts at 11, an mstore(0) writes to the full PUSH20 plus data
|
||||||
@ -184,8 +185,7 @@ size_t ContractCompiler::deployLibrary(ContractDefinition const& _contract)
|
|||||||
let codepos := 11
|
let codepos := 11
|
||||||
codecopy(codepos, subOffset, subSize)
|
codecopy(codepos, subOffset, subSize)
|
||||||
// Check that the first opcode is a PUSH20
|
// Check that the first opcode is a PUSH20
|
||||||
switch eq(0x73, byte(0, mload(codepos)))
|
if iszero(eq(0x73, byte(0, mload(codepos)))) { invalid() }
|
||||||
case 0 { invalid() }
|
|
||||||
mstore(0, address())
|
mstore(0, address())
|
||||||
mstore8(codepos, 0x73)
|
mstore8(codepos, 0x73)
|
||||||
return(codepos, subSize)
|
return(codepos, subSize)
|
||||||
|
Loading…
Reference in New Issue
Block a user