From 5eb31c2281c93a3512d1a93ed0f762360f377b17 Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 10 Jun 2015 17:51:24 +0200 Subject: [PATCH] Added missing source locations for new memory management code. --- libsolidity/Compiler.cpp | 22 +++++++++++++--------- test/libsolidity/Assembly.cpp | 4 ++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libsolidity/Compiler.cpp b/libsolidity/Compiler.cpp index 0d7fbbfed..950b1e756 100644 --- a/libsolidity/Compiler.cpp +++ b/libsolidity/Compiler.cpp @@ -52,22 +52,26 @@ void Compiler::compileContract(ContractDefinition const& _contract, map const& _contracts) { m_context = CompilerContext(); // clear it just in case - CompilerUtils(m_context).initialiseFreeMemoryPointer(); - initializeContext(_contract, _contracts); - appendFunctionSelector(_contract); - set functions = m_context.getFunctionsWithoutCode(); - while (!functions.empty()) { - for (Declaration const* function: functions) + CompilerContext::LocationSetter locationSetterRunTime(m_context, _contract); + CompilerUtils(m_context).initialiseFreeMemoryPointer(); + initializeContext(_contract, _contracts); + appendFunctionSelector(_contract); + set functions = m_context.getFunctionsWithoutCode(); + while (!functions.empty()) { - m_context.setStackOffset(0); - function->accept(*this); + for (Declaration const* function: functions) + { + m_context.setStackOffset(0); + function->accept(*this); + } + functions = m_context.getFunctionsWithoutCode(); } - functions = m_context.getFunctionsWithoutCode(); } // Swap the runtime context with the creation-time context swap(m_context, m_runtimeContext); + CompilerContext::LocationSetter locationSetterCreationTime(m_context, _contract); CompilerUtils(m_context).initialiseFreeMemoryPointer(); initializeContext(_contract, _contracts); packIntoContractCreator(_contract, m_runtimeContext); diff --git a/test/libsolidity/Assembly.cpp b/test/libsolidity/Assembly.cpp index ccc4bf811..fd4bbcf6d 100644 --- a/test/libsolidity/Assembly.cpp +++ b/test/libsolidity/Assembly.cpp @@ -105,8 +105,8 @@ BOOST_AUTO_TEST_CASE(location_test) shared_ptr n = make_shared("source"); AssemblyItems items = compileContract(sourceCode); vector locations = - vector(11, SourceLocation(2, 75, n)) + - vector(12, SourceLocation(20, 72, n)) + + vector(17, SourceLocation(2, 75, n)) + + vector(14, SourceLocation(20, 72, n)) + vector{SourceLocation(42, 51, n), SourceLocation(65, 67, n)} + vector(4, SourceLocation(58, 67, n)) + vector(3, SourceLocation(20, 72, n));