mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Move the function for creating code snippets used next to source locations in assembly to liblangutil
This commit is contained in:
parent
11a8505990
commit
a7612ce873
@ -31,6 +31,7 @@
|
||||
#include <libevmasm/ConstantOptimiser.h>
|
||||
#include <libevmasm/GasMeter.h>
|
||||
|
||||
#include <liblangutil/CharStream.h>
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
||||
#include <json/json.h>
|
||||
@ -82,16 +83,7 @@ string locationFromSources(StringMap const& _sourceCodes, SourceLocation const&
|
||||
if (it == _sourceCodes.end())
|
||||
return {};
|
||||
|
||||
string const& source = it->second;
|
||||
if (static_cast<size_t>(_location.start) >= source.size())
|
||||
return {};
|
||||
|
||||
string cut = source.substr(static_cast<size_t>(_location.start), static_cast<size_t>(_location.end - _location.start));
|
||||
auto newLinePos = cut.find_first_of("\n");
|
||||
if (newLinePos != string::npos)
|
||||
cut = cut.substr(0, newLinePos) + "...";
|
||||
|
||||
return cut;
|
||||
return CharStream::singleLineSnippet(it->second, _location);
|
||||
}
|
||||
|
||||
class Functionalizer
|
||||
|
@ -128,3 +128,19 @@ string_view CharStream::text(SourceLocation const& _location) const
|
||||
static_cast<size_t>(_location.end - _location.start)
|
||||
);
|
||||
}
|
||||
|
||||
string CharStream::singleLineSnippet(string const& _sourceCode, SourceLocation const& _location)
|
||||
{
|
||||
if (!_location.hasText())
|
||||
return {};
|
||||
|
||||
if (static_cast<size_t>(_location.start) >= _sourceCode.size())
|
||||
return {};
|
||||
|
||||
string cut = _sourceCode.substr(static_cast<size_t>(_location.start), static_cast<size_t>(_location.end - _location.start));
|
||||
auto newLinePos = cut.find_first_of("\n");
|
||||
if (newLinePos != string::npos)
|
||||
cut = cut.substr(0, newLinePos) + "...";
|
||||
|
||||
return cut;
|
||||
}
|
||||
|
@ -118,6 +118,15 @@ public:
|
||||
/// Returns an empty string view if the source location does not `hasText()`.
|
||||
std::string_view text(SourceLocation const& _location) const;
|
||||
|
||||
/// @returns the first line of the referenced source fragment. If the fragment is longer than
|
||||
/// one line, appends an ellipsis to indicate that.
|
||||
std::string singleLineSnippet(SourceLocation const& _location) const
|
||||
{
|
||||
return singleLineSnippet(m_source, _location);
|
||||
}
|
||||
|
||||
static std::string singleLineSnippet(std::string const& _sourceCode, SourceLocation const& _location);
|
||||
|
||||
private:
|
||||
std::string m_source;
|
||||
std::string m_name;
|
||||
|
Loading…
Reference in New Issue
Block a user