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
This commit is contained in:
parent
8cad5b143e
commit
68dc87c360
|
@ -1,3 +1,13 @@
|
||||||
|
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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,
|
||||||
{
|
{
|
||||||
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)
|
||||||
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,11 +362,18 @@ 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:
|
||||||
is_string = 1;
|
if (is_string)
|
||||||
|
{
|
||||||
|
*buffer++ = '&';
|
||||||
|
*buffer++ = ' ';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
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)
|
||||||
*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)
|
||||||
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)
|
||||||
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';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
/* fallthrough */
|
||||||
buffer = dump_number (tmp, buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
buffer = dump_number (tmp, buffer);
|
buffer
|
||||||
|
= dump_number (tmp, buffer,
|
||||||
|
strchr ((const char *)tmp, '.'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue