diff options
author | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
commit | a926878ddbd5a98b272c22171ce58663fc04c3e0 (patch) | |
tree | 86af256e5d9a9c06263c00adc90e5fe348008c43 /gcc/input.c | |
parent | 542730f087133690b47e036dfd43eb0db8a650ce (diff) | |
parent | 07cbaed8ba7d1b6e4ab3a9f44175502a4e1ecdb1 (diff) | |
download | gcc-devel/autopar_devel.zip gcc-devel/autopar_devel.tar.gz gcc-devel/autopar_devel.tar.bz2 |
Merge branch 'autopar_rebase2' into autopar_develdevel/autopar_devel
Quickly commit changes in the rebase branch.
Diffstat (limited to 'gcc/input.c')
-rw-r--r-- | gcc/input.c | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/gcc/input.c b/gcc/input.c index dd1d23d..d573b90 100644 --- a/gcc/input.c +++ b/gcc/input.c @@ -913,7 +913,7 @@ make_location (location_t caret, source_range src_range) source line in order to calculate the display width. If that cannot be done for any reason, then returns the byte column as a fallback. */ int -location_compute_display_column (expanded_location exploc) +location_compute_display_column (expanded_location exploc, int tabstop) { if (!(exploc.file && *exploc.file && exploc.line && exploc.column)) return exploc.column; @@ -921,7 +921,7 @@ location_compute_display_column (expanded_location exploc) /* If line is NULL, this function returns exploc.column which is the desired fallback. */ return cpp_byte_column_to_display_column (line.get_buffer (), line.length (), - exploc.column); + exploc.column, tabstop); } /* Dump statistics to stderr about the memory usage of the line_table @@ -3608,33 +3608,46 @@ test_line_offset_overflow () void test_cpp_utf8 () { + const int def_tabstop = 8; /* Verify that wcwidth of invalid UTF-8 or control bytes is 1. */ { - int w_bad = cpp_display_width ("\xf0!\x9f!\x98!\x82!", 8); + int w_bad = cpp_display_width ("\xf0!\x9f!\x98!\x82!", 8, def_tabstop); ASSERT_EQ (8, w_bad); - int w_ctrl = cpp_display_width ("\r\t\n\v\0\1", 6); - ASSERT_EQ (6, w_ctrl); + int w_ctrl = cpp_display_width ("\r\n\v\0\1", 5, def_tabstop); + ASSERT_EQ (5, w_ctrl); } /* Verify that wcwidth of valid UTF-8 is as expected. */ { - const int w_pi = cpp_display_width ("\xcf\x80", 2); + const int w_pi = cpp_display_width ("\xcf\x80", 2, def_tabstop); ASSERT_EQ (1, w_pi); - const int w_emoji = cpp_display_width ("\xf0\x9f\x98\x82", 4); + const int w_emoji = cpp_display_width ("\xf0\x9f\x98\x82", 4, def_tabstop); ASSERT_EQ (2, w_emoji); - const int w_umlaut_precomposed = cpp_display_width ("\xc3\xbf", 2); + const int w_umlaut_precomposed = cpp_display_width ("\xc3\xbf", 2, + def_tabstop); ASSERT_EQ (1, w_umlaut_precomposed); - const int w_umlaut_combining = cpp_display_width ("y\xcc\x88", 3); + const int w_umlaut_combining = cpp_display_width ("y\xcc\x88", 3, + def_tabstop); ASSERT_EQ (1, w_umlaut_combining); - const int w_han = cpp_display_width ("\xe4\xb8\xba", 3); + const int w_han = cpp_display_width ("\xe4\xb8\xba", 3, def_tabstop); ASSERT_EQ (2, w_han); - const int w_ascii = cpp_display_width ("GCC", 3); + const int w_ascii = cpp_display_width ("GCC", 3, def_tabstop); ASSERT_EQ (3, w_ascii); const int w_mixed = cpp_display_width ("\xcf\x80 = 3.14 \xf0\x9f\x98\x82" - "\x9f! \xe4\xb8\xba y\xcc\x88", 24); + "\x9f! \xe4\xb8\xba y\xcc\x88", + 24, def_tabstop); ASSERT_EQ (18, w_mixed); } + /* Verify that display width properly expands tabs. */ + { + const char *tstr = "\tabc\td"; + ASSERT_EQ (6, cpp_display_width (tstr, 6, 1)); + ASSERT_EQ (10, cpp_display_width (tstr, 6, 3)); + ASSERT_EQ (17, cpp_display_width (tstr, 6, 8)); + ASSERT_EQ (1, cpp_display_column_to_byte_column (tstr, 6, 7, 8)); + } + /* Verify that cpp_byte_column_to_display_column can go past the end, and similar edge cases. */ { @@ -3645,10 +3658,13 @@ void test_cpp_utf8 () /* 111122223456 Byte columns. */ - ASSERT_EQ (5, cpp_display_width (str, 6)); - ASSERT_EQ (105, cpp_byte_column_to_display_column (str, 6, 106)); - ASSERT_EQ (10000, cpp_byte_column_to_display_column (NULL, 0, 10000)); - ASSERT_EQ (0, cpp_byte_column_to_display_column (NULL, 10000, 0)); + ASSERT_EQ (5, cpp_display_width (str, 6, def_tabstop)); + ASSERT_EQ (105, + cpp_byte_column_to_display_column (str, 6, 106, def_tabstop)); + ASSERT_EQ (10000, + cpp_byte_column_to_display_column (NULL, 0, 10000, def_tabstop)); + ASSERT_EQ (0, + cpp_byte_column_to_display_column (NULL, 10000, 0, def_tabstop)); } /* Verify that cpp_display_column_to_byte_column can go past the end, @@ -3662,21 +3678,25 @@ void test_cpp_utf8 () /* 000000000000000000000000000000000111111 111122223333444456666777788889999012345 Byte columns. */ - ASSERT_EQ (4, cpp_display_column_to_byte_column (str, 15, 2)); - ASSERT_EQ (15, cpp_display_column_to_byte_column (str, 15, 11)); - ASSERT_EQ (115, cpp_display_column_to_byte_column (str, 15, 111)); - ASSERT_EQ (10000, cpp_display_column_to_byte_column (NULL, 0, 10000)); - ASSERT_EQ (0, cpp_display_column_to_byte_column (NULL, 10000, 0)); + ASSERT_EQ (4, cpp_display_column_to_byte_column (str, 15, 2, def_tabstop)); + ASSERT_EQ (15, + cpp_display_column_to_byte_column (str, 15, 11, def_tabstop)); + ASSERT_EQ (115, + cpp_display_column_to_byte_column (str, 15, 111, def_tabstop)); + ASSERT_EQ (10000, + cpp_display_column_to_byte_column (NULL, 0, 10000, def_tabstop)); + ASSERT_EQ (0, + cpp_display_column_to_byte_column (NULL, 10000, 0, def_tabstop)); /* Verify that we do not interrupt a UTF-8 sequence. */ - ASSERT_EQ (4, cpp_display_column_to_byte_column (str, 15, 1)); + ASSERT_EQ (4, cpp_display_column_to_byte_column (str, 15, 1, def_tabstop)); for (int byte_col = 1; byte_col <= 15; ++byte_col) { - const int disp_col = cpp_byte_column_to_display_column (str, 15, - byte_col); - const int byte_col2 = cpp_display_column_to_byte_column (str, 15, - disp_col); + const int disp_col + = cpp_byte_column_to_display_column (str, 15, byte_col, def_tabstop); + const int byte_col2 + = cpp_display_column_to_byte_column (str, 15, disp_col, def_tabstop); /* If we ask for the display column in the middle of a UTF-8 sequence, it will return the length of the partial sequence, |