mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add runtimeOnly option to pushCombinedFunctionEntryLabel
This commit is contained in:
parent
0a58e57ceb
commit
fab527c414
@ -585,7 +585,7 @@ void CompilerUtils::combineExternalFunctionType(bool _leftAligned)
|
||||
leftShiftNumberOnStack(64);
|
||||
}
|
||||
|
||||
void CompilerUtils::pushCombinedFunctionEntryLabel(Declaration const& _function)
|
||||
void CompilerUtils::pushCombinedFunctionEntryLabel(Declaration const& _function, bool _runtimeOnly)
|
||||
{
|
||||
m_context << m_context.functionEntryLabel(_function).pushTag();
|
||||
// If there is a runtime context, we have to merge both labels into the same
|
||||
@ -593,9 +593,10 @@ void CompilerUtils::pushCombinedFunctionEntryLabel(Declaration const& _function)
|
||||
if (CompilerContext* rtc = m_context.runtimeContext())
|
||||
{
|
||||
leftShiftNumberOnStack(32);
|
||||
m_context <<
|
||||
rtc->functionEntryLabel(_function).toSubAssemblyTag(m_context.runtimeSub()) <<
|
||||
Instruction::OR;
|
||||
if (_runtimeOnly)
|
||||
m_context <<
|
||||
rtc->functionEntryLabel(_function).toSubAssemblyTag(m_context.runtimeSub()) <<
|
||||
Instruction::OR;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,8 @@ public:
|
||||
/// Appends code that combines the construction-time (if available) and runtime function
|
||||
/// entry label of the given function into a single stack slot.
|
||||
/// Note: This might cause the compilation queue of the runtime context to be extended.
|
||||
void pushCombinedFunctionEntryLabel(Declaration const& _function);
|
||||
/// If @a _runtimeOnly, the entry label will include the runtime assembly tag.
|
||||
void pushCombinedFunctionEntryLabel(Declaration const& _function, bool _runtimeOnly = true);
|
||||
|
||||
/// Appends code for an implicit or explicit type conversion. This includes erasing higher
|
||||
/// order bits (@see appendHighBitCleanup) when widening integer but also copy to memory
|
||||
|
@ -527,9 +527,7 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
|
||||
// Do not directly visit the identifier, because this way, we can avoid
|
||||
// the runtime entry label to be created at the creation time context.
|
||||
CompilerContext::LocationSetter locationSetter2(m_context, *identifier);
|
||||
m_context << m_context.functionEntryLabel(m_context.resolveVirtualFunction(*functionDef)).pushTag();
|
||||
if (m_context.runtimeContext())
|
||||
utils().leftShiftNumberOnStack(32);
|
||||
utils().pushCombinedFunctionEntryLabel(m_context.resolveVirtualFunction(*functionDef), false);
|
||||
shortcutTaken = true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user