diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2022-01-15 11:30:20 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2022-01-17 07:29:35 +0100 |
commit | 025a707d285832cec91c28811db02b74cd08a59a (patch) | |
tree | 97d48e2e8ade0141f3def38459173ac4afdc5525 /libgfortran/runtime/environ.c | |
parent | b3e77224edbcb06cfd6ef585c11fc2c7d9672a16 (diff) | |
download | gcc-025a707d285832cec91c28811db02b74cd08a59a.zip gcc-025a707d285832cec91c28811db02b74cd08a59a.tar.gz gcc-025a707d285832cec91c28811db02b74cd08a59a.tar.bz2 |
Allow for multiple defaults in endianness and r16 in GFORTRAN_CONVERT_UNIT.
With this patch, it is possible to specify multiple defaults inthe
GFORTRAN_CONVERT_UNIT environment variable so that, for example, R16_IEEE
and BIG_ENDIAN can be specified together.
libgfortran/ChangeLog:
* runtime/environ.c: Allow for multiple default values so that
separate default specifications for IBM long double format and
endianness are possible.
Diffstat (limited to 'libgfortran/runtime/environ.c')
-rw-r--r-- | libgfortran/runtime/environ.c | 111 |
1 files changed, 56 insertions, 55 deletions
diff --git a/libgfortran/runtime/environ.c b/libgfortran/runtime/environ.c index 3d60950..a53c649 100644 --- a/libgfortran/runtime/environ.c +++ b/libgfortran/runtime/environ.c @@ -499,78 +499,79 @@ do_parse (void) unit_count = 0; - start = p; - /* Parse the string. First, let's look for a default. */ - tok = next_token (); endian = 0; - - switch (tok) + while (1) { - case NATIVE: - endian = GFC_CONVERT_NATIVE; - break; + start = p; + tok = next_token (); + switch (tok) + { + case NATIVE: + endian = GFC_CONVERT_NATIVE; + break; - case SWAP: - endian = GFC_CONVERT_SWAP; - break; + case SWAP: + endian = GFC_CONVERT_SWAP; + break; - case BIG: - endian = GFC_CONVERT_BIG; - break; + case BIG: + endian = GFC_CONVERT_BIG; + break; - case LITTLE: - endian = GFC_CONVERT_LITTLE; - break; + case LITTLE: + endian = GFC_CONVERT_LITTLE; + break; #ifdef HAVE_GFC_REAL_17 - case R16_IEEE: - endian = GFC_CONVERT_R16_IEEE; - break; + case R16_IEEE: + endian = GFC_CONVERT_R16_IEEE; + break; - case R16_IBM: - endian = GFC_CONVERT_R16_IBM; - break; + case R16_IBM: + endian = GFC_CONVERT_R16_IBM; + break; #endif - case INTEGER: - /* A leading digit means that we are looking at an exception. - Reset the position to the beginning, and continue processing - at the exception list. */ - p = start; - goto exceptions; - break; + case INTEGER: + /* A leading digit means that we are looking at an exception. + Reset the position to the beginning, and continue processing + at the exception list. */ + p = start; + goto exceptions; + break; - case END: - goto end; - break; + case END: + goto end; + break; - default: - goto error; - break; + default: + goto error; + break; } - tok = next_token (); - switch (tok) - { - case ';': - def = endian; - break; + tok = next_token (); + switch (tok) + { + case ';': + def = def == GFC_CONVERT_NONE ? endian : def | endian; + break; - case ':': - /* This isn't a default after all. Reset the position to the - beginning, and continue processing at the exception list. */ - p = start; - goto exceptions; - break; + case ':': + /* This isn't a default after all. Reset the position to the + beginning, and continue processing at the exception list. */ + p = start; + goto exceptions; + break; - case END: - def = endian; - goto end; - break; + case END: + def = def == GFC_CONVERT_NONE ? endian : def | endian; + goto end; + break; - default: - goto error; - break; + default: + goto error; + break; + } } exceptions: |