From c7074a365e3ff503b20c2a2f8638f5d3b7a8616b Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Mon, 7 Jan 2019 11:33:14 +0100 Subject: [PATCH 1/2] Fixes SourceLocation extraction on multiline locations with a too long first line. --- liblangutil/SourceReferenceExtractor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/liblangutil/SourceReferenceExtractor.cpp b/liblangutil/SourceReferenceExtractor.cpp index 4502bb23c..1a6dbdb31 100644 --- a/liblangutil/SourceReferenceExtractor.cpp +++ b/liblangutil/SourceReferenceExtractor.cpp @@ -58,7 +58,9 @@ SourceReference SourceReferenceExtractor::extract(SourceLocation const* _locatio int locationLength = isMultiline ? line.length() - start.column : end.column - start.column; if (locationLength > 150) { - line = line.substr(0, start.column + 35) + " ... " + line.substr(end.column - 35); + int const lhs = start.column + 35; + int const rhs = (isMultiline ? line.length() : end.column) - 35; + line = line.substr(0, lhs) + " ... " + line.substr(rhs); end.column = start.column + 75; locationLength = 75; } From 9e61dbad07c690c8f43528d193e1576a59f8558c Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Mon, 7 Jan 2019 11:56:43 +0100 Subject: [PATCH 2/2] Adds new test for SourceReferenceExtractor to extract multiline location with a too long first line. --- test/cmdlineTests/too_long_line_multiline.sol | 13 +++++++++++++ test/cmdlineTests/too_long_line_multiline.sol.err | 6 ++++++ test/cmdlineTests/too_long_line_multiline.sol.exit | 1 + 3 files changed, 20 insertions(+) create mode 100644 test/cmdlineTests/too_long_line_multiline.sol create mode 100644 test/cmdlineTests/too_long_line_multiline.sol.err create mode 100644 test/cmdlineTests/too_long_line_multiline.sol.exit diff --git a/test/cmdlineTests/too_long_line_multiline.sol b/test/cmdlineTests/too_long_line_multiline.sol new file mode 100644 index 000000000..6609e1257 --- /dev/null +++ b/test/cmdlineTests/too_long_line_multiline.sol @@ -0,0 +1,13 @@ +contract C { + function f() returns (byte _b, bytes2 _b2, bytes3 _b3, bytes memory _blit, bytes5 _b5, bytes6 _b6, string memory _str, bytes7 _b7, bytes22 _b22, bytes32 _b32) { + _b = 0x12; + _b2 = 0x1223; + _b5 = hex"043245"; + _b6 = hex"2345532532"; + _b7 = hex"03252353253253"; + _b22 = hex"325235235325325325235325"; + _b32 = hex"032523532532523532523532523532"; + _blit = hex"123498"; + _str = "heidy"; + } +} diff --git a/test/cmdlineTests/too_long_line_multiline.sol.err b/test/cmdlineTests/too_long_line_multiline.sol.err new file mode 100644 index 000000000..d7412ffeb --- /dev/null +++ b/test/cmdlineTests/too_long_line_multiline.sol.err @@ -0,0 +1,6 @@ +too_long_line_multiline.sol:2:5: Error: No visibility specified. Did you intend to add "public"? + function f() returns (byte _b, byte ... _b7, bytes22 _b22, bytes32 _b32) { + ^ (Relevant source part starts here and spans across multiple lines). +too_long_line_multiline.sol:1:1: Warning: Source file does not specify required compiler version! +contract C { +^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/too_long_line_multiline.sol.exit b/test/cmdlineTests/too_long_line_multiline.sol.exit new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/test/cmdlineTests/too_long_line_multiline.sol.exit @@ -0,0 +1 @@ +1