Commit 68dc87c3 by Eric Botcazou Committed by Eric Botcazou

c-ada-spec.c (dump_number): Add FLOAT_P parameter.

	* c-ada-spec.c (dump_number): Add FLOAT_P parameter.
	Skip 'f' and 'F' characters if it is true.
	(store_ada_macro): Minor tweak.
	(dump_ada_macros) <CPP_COMMENT>: Likewise.
	<CPP_WSTRING>: Likewise.
	<CPP_STRING>: Output '&' in the buffer if not the first string.
	<CPP_NUMBER>: Adjust calls to dump_number.

From-SVN: r256463
parent 8cad5b14
2018-01-10 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_number): Add FLOAT_P parameter.
Skip 'f' and 'F' characters if it is true.
(store_ada_macro): Minor tweak.
(dump_ada_macros) <CPP_COMMENT>: Likewise.
<CPP_WSTRING>: Likewise.
<CPP_STRING>: Output '&' in the buffer if not the first string.
<CPP_NUMBER>: Adjust calls to dump_number.
2018-01-10 David Malcolm <dmalcolm@redhat.com> 2018-01-10 David Malcolm <dmalcolm@redhat.com>
PR c++/43486 PR c++/43486
......
...@@ -113,14 +113,15 @@ macro_length (const cpp_macro *macro, int *supported, int *buffer_len, ...@@ -113,14 +113,15 @@ macro_length (const cpp_macro *macro, int *supported, int *buffer_len,
} }
/* Dump all digits/hex chars from NUMBER to BUFFER and return a pointer /* Dump all digits/hex chars from NUMBER to BUFFER and return a pointer
to the character after the last character written. */ to the character after the last character written. If FLOAT_P is true,
this is a floating-point number. */
static unsigned char * static unsigned char *
dump_number (unsigned char *number, unsigned char *buffer) dump_number (unsigned char *number, unsigned char *buffer, bool float_p)
{ {
while (*number != '\0' while (*number != '\0'
&& *number != 'U' && *number != (float_p ? 'F' : 'U')
&& *number != 'u' && *number != (float_p ? 'f' : 'u')
&& *number != 'l' && *number != 'l'
&& *number != 'L') && *number != 'L')
*buffer++ = *number++; *buffer++ = *number++;
...@@ -192,7 +193,8 @@ store_ada_macro (cpp_reader *pfile ATTRIBUTE_UNUSED, ...@@ -192,7 +193,8 @@ store_ada_macro (cpp_reader *pfile ATTRIBUTE_UNUSED,
{ {
const cpp_macro *macro = node->value.macro; const cpp_macro *macro = node->value.macro;
if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN) if (node->type == NT_MACRO
&& !(node->flags & NODE_BUILTIN)
&& macro->count && macro->count
&& *NODE_NAME (node) != '_' && *NODE_NAME (node) != '_'
&& LOCATION_FILE (macro->line) == macro_source_file) && LOCATION_FILE (macro->line) == macro_source_file)
...@@ -345,7 +347,8 @@ dump_ada_macros (pretty_printer *pp, const char* file) ...@@ -345,7 +347,8 @@ dump_ada_macros (pretty_printer *pp, const char* file)
is_one = prev_is_one; is_one = prev_is_one;
break; break;
case CPP_COMMENT: break; case CPP_COMMENT:
break;
case CPP_WSTRING: case CPP_WSTRING:
case CPP_STRING16: case CPP_STRING16:
...@@ -359,10 +362,17 @@ dump_ada_macros (pretty_printer *pp, const char* file) ...@@ -359,10 +362,17 @@ dump_ada_macros (pretty_printer *pp, const char* file)
if (!macro->fun_like) if (!macro->fun_like)
supported = 0; supported = 0;
else else
buffer = cpp_spell_token (parse_in, token, buffer, false); buffer
= cpp_spell_token (parse_in, token, buffer, false);
break; break;
case CPP_STRING: case CPP_STRING:
if (is_string)
{
*buffer++ = '&';
*buffer++ = ' ';
}
else
is_string = 1; is_string = 1;
{ {
const unsigned char *s = token->val.str.text; const unsigned char *s = token->val.str.text;
...@@ -428,7 +438,7 @@ dump_ada_macros (pretty_printer *pp, const char* file) ...@@ -428,7 +438,7 @@ dump_ada_macros (pretty_printer *pp, const char* file)
*buffer++ = '1'; *buffer++ = '1';
*buffer++ = '6'; *buffer++ = '6';
*buffer++ = '#'; *buffer++ = '#';
buffer = dump_number (tmp + 2, buffer); buffer = dump_number (tmp + 2, buffer, false);
*buffer++ = '#'; *buffer++ = '#';
break; break;
...@@ -436,19 +446,20 @@ dump_ada_macros (pretty_printer *pp, const char* file) ...@@ -436,19 +446,20 @@ dump_ada_macros (pretty_printer *pp, const char* file)
case 'B': case 'B':
*buffer++ = '2'; *buffer++ = '2';
*buffer++ = '#'; *buffer++ = '#';
buffer = dump_number (tmp + 2, buffer); buffer = dump_number (tmp + 2, buffer, false);
*buffer++ = '#'; *buffer++ = '#';
break; break;
default: default:
/* Dump floating constants unmodified. */ /* Dump floating-point constant unmodified. */
if (strchr ((const char *)tmp, '.')) if (strchr ((const char *)tmp, '.'))
buffer = dump_number (tmp, buffer); buffer = dump_number (tmp, buffer, true);
else else
{ {
*buffer++ = '8'; *buffer++ = '8';
*buffer++ = '#'; *buffer++ = '#';
buffer = dump_number (tmp + 1, buffer); buffer
= dump_number (tmp + 1, buffer, false);
*buffer++ = '#'; *buffer++ = '#';
} }
break; break;
...@@ -456,19 +467,23 @@ dump_ada_macros (pretty_printer *pp, const char* file) ...@@ -456,19 +467,23 @@ dump_ada_macros (pretty_printer *pp, const char* file)
break; break;
case '1': case '1':
if (tmp[1] == '\0' || tmp[1] == 'l' || tmp[1] == 'u' if (tmp[1] == '\0'
|| tmp[1] == 'L' || tmp[1] == 'U') || tmp[1] == 'u'
|| tmp[1] == 'U'
|| tmp[1] == 'l'
|| tmp[1] == 'L')
{ {
is_one = 1; is_one = 1;
char_one = buffer; char_one = buffer;
*buffer++ = '1'; *buffer++ = '1';
}
else
buffer = dump_number (tmp, buffer);
break; break;
}
/* fallthrough */
default: default:
buffer = dump_number (tmp, buffer); buffer
= dump_number (tmp, buffer,
strchr ((const char *)tmp, '.'));
break; break;
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment