This patch adds descriptive names to various constants in line-map.c.
There were some differences between the constants used a various
places, but my understanding is that these differences are arbitrary
and it is easier to understand the code if they are harmonized.
Bootstrapped and regression tested on x86-linux-gnu.
OK?
libcpp/ChangeLog:
2015-05-23 Manuel López-Ibáñez
* line-map.c (LINE_MAP_MAX_COLUMN_NUMBER
LINE_MAP_MAX_LOCATION_WITH_COLS,LINE_MAP_MAX_SOURCE_LOCATION):
New constants.
(linemap_line_start): Use them.
(linemap_position_for_column): Use them.
Index: libcpp/line-map.c
===
--- libcpp/line-map.c (revision 223596)
+++ libcpp/line-map.c (working copy)
@@ -24,10 +24,22 @@ along with this program; see the file CO
#include "line-map.h"
#include "cpplib.h"
#include "internal.h"
#include "hashtab.h"
+/* Do not track column numbers higher than this one. As a result, the
+ range of column_bits is [7, 18] (or 0 if column numbers are
+ disabled). */
+const unsigned int LINE_MAP_MAX_COLUMN_NUMBER = (1U << 17);
+
+/* Do not track column numbers if locations get higher than this. */
+const source_location LINE_MAP_MAX_LOCATION_WITH_COLS = 0x6000;
+
+/* Highest possible source location encoded within an ordinary or
+ macro map. */
+const source_location LINE_MAP_MAX_SOURCE_LOCATION = 0x7000;
+
static void trace_include (const struct line_maps *, const line_map_ordinary
*);
static const line_map_ordinary * linemap_ordinary_map_lookup (struct line_maps
*,
source_location);
static const line_map_macro* linemap_macro_map_lookup (struct line_maps *,
source_location);
@@ -542,26 +554,27 @@ linemap_line_start (struct line_maps *se
|| (line_delta > 10
&& line_delta * ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map) > 1000)
|| (max_column_hint >= (1U << ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map)))
|| (max_column_hint <= 80
&& ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map) >= 10)
- || (highest > 0x6000
- && (set->max_column_hint || highest > 0x7000)))
+ || (highest > LINE_MAP_MAX_LOCATION_WITH_COLS
+ && (set->max_column_hint || highest >= LINE_MAP_MAX_SOURCE_LOCATION)))
add_map = true;
else
max_column_hint = set->max_column_hint;
if (add_map)
{
int column_bits;
- if (max_column_hint > 10 || highest > 0x6000)
+ if (max_column_hint > LINE_MAP_MAX_COLUMN_NUMBER
+ || highest > LINE_MAP_MAX_LOCATION_WITH_COLS)
{
/* If the column number is ridiculous or we've allocated a huge
number of source_locations, give up on column numbers. */
max_column_hint = 0;
- if (highest > 0x7000)
- return 0;
column_bits = 0;
+ if (highest > LINE_MAP_MAX_SOURCE_LOCATION)
+ return 0;
}
else
{
column_bits = 7;
while (max_column_hint >= (1U << column_bits))
@@ -613,11 +626,12 @@ linemap_position_for_column (struct line
linemap_assert
(!linemap_macro_expansion_map_p (LINEMAPS_LAST_ORDINARY_MAP (set)));
if (to_column >= set->max_column_hint)
{
- if (r >= 0xC00 || to_column > 10)
+ if (r > LINE_MAP_MAX_LOCATION_WITH_COLS
+ || to_column > LINE_MAP_MAX_COLUMN_NUMBER)
{
/* Running low on source_locations - disable column numbers. */
return r;
}
else