summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/f/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/f/expr.c')
-rw-r--r--contrib/gcc/f/expr.c996
1 files changed, 59 insertions, 937 deletions
diff --git a/contrib/gcc/f/expr.c b/contrib/gcc/f/expr.c
index 4824be7..ef7661d 100644
--- a/contrib/gcc/f/expr.c
+++ b/contrib/gcc/f/expr.c
@@ -1,5 +1,5 @@
/* expr.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002
+ Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by James Craig Burley.
@@ -309,7 +309,8 @@ static ffebld ffeexpr_reduced_ugly1log_ (ffebld reduced, ffeexprExpr_ op,
static ffebld ffeexpr_reduced_ugly2_ (ffebld reduced, ffeexprExpr_ l,
ffeexprExpr_ op, ffeexprExpr_ r);
static ffebld ffeexpr_reduced_ugly2log_ (ffebld reduced, ffeexprExpr_ l,
- ffeexprExpr_ op, ffeexprExpr_ r);
+ ffeexprExpr_ op, ffeexprExpr_ r,
+ bool *);
static ffelexHandler ffeexpr_find_close_paren_ (ffelexToken t,
ffelexHandler after);
static ffelexHandler ffeexpr_nil_finished_ (ffelexToken t);
@@ -516,14 +517,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer1_real4
- (ffebld_cu_ptr_integer1 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER1/REAL bad source kind type" == NULL);
break;
@@ -557,14 +550,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer1_complex4
- (ffebld_cu_ptr_integer1 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER1/COMPLEX bad source kind type" == NULL);
break;
@@ -709,14 +694,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer2_real4
- (ffebld_cu_ptr_integer2 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER2/REAL bad source kind type" == NULL);
break;
@@ -750,14 +727,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer2_complex4
- (ffebld_cu_ptr_integer2 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER2/COMPLEX bad source kind type" == NULL);
break;
@@ -902,14 +871,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer3_real4
- (ffebld_cu_ptr_integer3 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER3/REAL bad source kind type" == NULL);
break;
@@ -943,14 +904,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer3_complex4
- (ffebld_cu_ptr_integer3 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER3/COMPLEX bad source kind type" == NULL);
break;
@@ -1095,14 +1048,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer4_real4
- (ffebld_cu_ptr_integer4 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER4/REAL bad source kind type" == NULL);
break;
@@ -1136,14 +1081,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_integer4_complex4
- (ffebld_cu_ptr_integer4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("INTEGER3/COMPLEX bad source kind type" == NULL);
break;
@@ -1752,14 +1689,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real1_real4
- (ffebld_cu_ptr_real1 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL1/REAL bad source kind type" == NULL);
break;
@@ -1793,14 +1722,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real1_complex4
- (ffebld_cu_ptr_real1 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL1/COMPLEX bad source kind type" == NULL);
break;
@@ -1904,14 +1825,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real2_real4
- (ffebld_cu_ptr_real2 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL2/REAL bad source kind type" == NULL);
break;
@@ -1945,14 +1858,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real2_complex4
- (ffebld_cu_ptr_real2 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL2/COMPLEX bad source kind type" == NULL);
break;
@@ -2056,14 +1961,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real3_real4
- (ffebld_cu_ptr_real3 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL3/REAL bad source kind type" == NULL);
break;
@@ -2097,14 +1994,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real3_complex4
- (ffebld_cu_ptr_real3 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("REAL3/COMPLEX bad source kind type" == NULL);
break;
@@ -2144,158 +2033,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- switch (ffeinfo_basictype (ffebld_info (l)))
- {
- case FFEINFO_basictypeINTEGER:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okINTEGER1
- case FFEINFO_kindtypeINTEGER1:
- error = ffetarget_convert_real4_integer1
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_integer1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEINFO_kindtypeINTEGER2:
- error = ffetarget_convert_real4_integer2
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_integer2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEINFO_kindtypeINTEGER3:
- error = ffetarget_convert_real4_integer3
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_integer3 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER4
- case FFEINFO_kindtypeINTEGER4:
- error = ffetarget_convert_real4_integer4
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_integer4 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("REAL4/INTEGER bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeREAL:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okREAL1
- case FFEINFO_kindtypeREAL1:
- error = ffetarget_convert_real4_real1
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okREAL2
- case FFEINFO_kindtypeREAL2:
- error = ffetarget_convert_real4_real2
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okREAL3
- case FFEINFO_kindtypeREAL3:
- error = ffetarget_convert_real4_real3
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real3 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("REAL4/REAL bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCOMPLEX:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okCOMPLEX1
- case FFEINFO_kindtypeREAL1:
- error = ffetarget_convert_real4_complex1
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_complex1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX2
- case FFEINFO_kindtypeREAL2:
- error = ffetarget_convert_real4_complex2
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_complex2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX3
- case FFEINFO_kindtypeREAL3:
- error = ffetarget_convert_real4_complex3
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_complex3 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_real4_complex4
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("REAL4/COMPLEX bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCHARACTER:
- error = ffetarget_convert_real4_character1
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_character1 (ffebld_conter (l)));
- break;
-
- case FFEINFO_basictypeHOLLERITH:
- error = ffetarget_convert_real4_hollerith
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_hollerith (ffebld_conter (l)));
- break;
-
- case FFEINFO_basictypeTYPELESS:
- error = ffetarget_convert_real4_typeless
- (ffebld_cu_ptr_real4 (u),
- ffebld_constant_typeless (ffebld_conter (l)));
- break;
-
- default:
- assert ("REAL4 bad type" == NULL);
- break;
- }
-
- /* If conversion operation is not implemented, return original expr. */
- if (error == FFEBAD_NOCANDO)
- return expr;
-
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -2378,14 +2115,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex1_real4
- (ffebld_cu_ptr_complex1 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX1/REAL bad source kind type" == NULL);
break;
@@ -2411,14 +2140,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex1_complex4
- (ffebld_cu_ptr_complex1 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX1/COMPLEX bad source kind type" == NULL);
break;
@@ -2530,14 +2251,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex2_real4
- (ffebld_cu_ptr_complex2 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX2/REAL bad source kind type" == NULL);
break;
@@ -2563,14 +2276,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex2_complex4
- (ffebld_cu_ptr_complex2 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX2/COMPLEX bad source kind type" == NULL);
break;
@@ -2682,14 +2387,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex3_real4
- (ffebld_cu_ptr_complex3 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX3/REAL bad source kind type" == NULL);
break;
@@ -2715,14 +2412,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex3_complex4
- (ffebld_cu_ptr_complex3 (u),
- ffebld_constant_complex4 (ffebld_conter (l)));
- break;
-#endif
-
default:
assert ("COMPLEX3/COMPLEX bad source kind type" == NULL);
break;
@@ -2762,158 +2451,6 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- switch (ffeinfo_basictype (ffebld_info (l)))
- {
- case FFEINFO_basictypeINTEGER:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okINTEGER1
- case FFEINFO_kindtypeINTEGER1:
- error = ffetarget_convert_complex4_integer1
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_integer1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEINFO_kindtypeINTEGER2:
- error = ffetarget_convert_complex4_integer2
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_integer2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEINFO_kindtypeINTEGER3:
- error = ffetarget_convert_complex4_integer3
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_integer3 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okINTEGER4
- case FFEINFO_kindtypeINTEGER4:
- error = ffetarget_convert_complex4_integer4
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_integer4 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("COMPLEX4/INTEGER bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeREAL:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okREAL1
- case FFEINFO_kindtypeREAL1:
- error = ffetarget_convert_complex4_real1
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_real1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okREAL2
- case FFEINFO_kindtypeREAL2:
- error = ffetarget_convert_complex4_real2
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_real2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okREAL3
- case FFEINFO_kindtypeREAL3:
- error = ffetarget_convert_complex4_real3
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_real3 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_convert_complex4_real4
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_real4 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("COMPLEX4/REAL bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCOMPLEX:
- switch (ffeinfo_kindtype (ffebld_info (l)))
- {
-#if FFETARGET_okCOMPLEX1
- case FFEINFO_kindtypeREAL1:
- error = ffetarget_convert_complex4_complex1
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex1 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX2
- case FFEINFO_kindtypeREAL2:
- error = ffetarget_convert_complex4_complex2
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex2 (ffebld_conter (l)));
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX3
- case FFEINFO_kindtypeREAL3:
- error = ffetarget_convert_complex4_complex3
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex3 (ffebld_conter (l)));
- break;
-#endif
-
- default:
- assert ("COMPLEX4/COMPLEX bad source kind type" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCHARACTER:
- error = ffetarget_convert_complex4_character1
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_character1 (ffebld_conter (l)));
- break;
-
- case FFEINFO_basictypeHOLLERITH:
- error = ffetarget_convert_complex4_hollerith
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_hollerith (ffebld_conter (l)));
- break;
-
- case FFEINFO_basictypeTYPELESS:
- error = ffetarget_convert_complex4_typeless
- (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_typeless (ffebld_conter (l)));
- break;
-
- default:
- assert ("COMPLEX4 bad type" == NULL);
- break;
- }
-
- /* If conversion operation is not implemented, return original expr. */
- if (error == FFEBAD_NOCANDO)
- return expr;
-
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -3302,15 +2839,6 @@ ffeexpr_collapse_uminus (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_uminus_real4 (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -3347,15 +2875,6 @@ ffeexpr_collapse_uminus (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_uminus_complex4 (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -3646,16 +3165,6 @@ ffeexpr_collapse_add (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_add_real4 (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -3695,16 +3204,6 @@ ffeexpr_collapse_add (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_add_complex4 (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -3851,16 +3350,6 @@ ffeexpr_collapse_subtract (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_subtract_real4 (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -3900,16 +3389,6 @@ ffeexpr_collapse_subtract (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_subtract_complex4 (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -4056,16 +3535,6 @@ ffeexpr_collapse_multiply (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_multiply_real4 (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -4105,16 +3574,6 @@ ffeexpr_collapse_multiply (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_multiply_complex4 (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -4261,16 +3720,6 @@ ffeexpr_collapse_divide (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_divide_real4 (ffebld_cu_ptr_real4 (u),
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_real4_val
- (ffebld_cu_val_real4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -4310,16 +3759,6 @@ ffeexpr_collapse_divide (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_divide_complex4 (ffebld_cu_ptr_complex4 (u),
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_complex4_val
- (ffebld_cu_val_complex4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -4563,39 +4002,6 @@ ffeexpr_collapse_concatenate (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_concatenate_character2 (ffebld_cu_ptr_character2 (u),
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)),
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character2_val
- (ffebld_cu_val_character2 (u)), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_concatenate_character3 (ffebld_cu_ptr_character3 (u),
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)),
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character3_val
- (ffebld_cu_val_character3 (u)), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_concatenate_character4 (ffebld_cu_ptr_character4 (u),
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)),
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character4_val
- (ffebld_cu_val_character4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -4740,16 +4146,6 @@ ffeexpr_collapse_eq (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_eq_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -4789,16 +4185,6 @@ ffeexpr_collapse_eq (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_eq_complex4 (&val,
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -4818,36 +4204,6 @@ ffeexpr_collapse_eq (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_eq_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_eq_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_eq_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -4992,16 +4348,6 @@ ffeexpr_collapse_ne (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_ne_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -5041,16 +4387,6 @@ ffeexpr_collapse_ne (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_ne_complex4 (&val,
- ffebld_constant_complex4 (ffebld_conter (l)),
- ffebld_constant_complex4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad complex kind type" == NULL);
break;
@@ -5070,36 +4406,6 @@ ffeexpr_collapse_ne (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_ne_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_ne_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_ne_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -5244,16 +4550,6 @@ ffeexpr_collapse_ge (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_ge_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -5273,36 +4569,6 @@ ffeexpr_collapse_ge (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_ge_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_ge_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_ge_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -5447,16 +4713,6 @@ ffeexpr_collapse_gt (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_gt_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -5476,36 +4732,6 @@ ffeexpr_collapse_gt (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_gt_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_gt_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_gt_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -5650,16 +4876,6 @@ ffeexpr_collapse_le (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_le_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -5679,36 +4895,6 @@ ffeexpr_collapse_le (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_le_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_le_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_le_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -5853,16 +5039,6 @@ ffeexpr_collapse_lt (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- error = ffetarget_lt_real4 (&val,
- ffebld_constant_real4 (ffebld_conter (l)),
- ffebld_constant_real4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad real kind type" == NULL);
break;
@@ -5882,36 +5058,6 @@ ffeexpr_collapse_lt (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_lt_character2 (&val,
- ffebld_constant_character2 (ffebld_conter (l)),
- ffebld_constant_character2 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_lt_character3 (&val,
- ffebld_constant_character3 (ffebld_conter (l)),
- ffebld_constant_character3 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_lt_character4 (&val,
- ffebld_constant_character4 (ffebld_conter (l)),
- ffebld_constant_character4 (ffebld_conter (r)));
- expr = ffebld_new_conter_with_orig
- (ffebld_constant_new_logicaldefault (val), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -6906,36 +6052,6 @@ ffeexpr_collapse_substr (ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- error = ffetarget_substr_character2 (ffebld_cu_ptr_character2 (u),
- ffebld_constant_character2 (ffebld_conter (l)), first, last,
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character2_val
- (ffebld_cu_val_character2 (u)), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- error = ffetarget_substr_character3 (ffebld_cu_ptr_character3 (u),
- ffebld_constant_character3 (ffebld_conter (l)), first, last,
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character3_val
- (ffebld_cu_val_character3 (u)), expr);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- error = ffetarget_substr_character4 (ffebld_cu_ptr_character4 (u),
- ffebld_constant_character4 (ffebld_conter (l)), first, last,
- ffebld_constant_pool (), &len);
- expr = ffebld_new_conter_with_orig (ffebld_constant_new_character4_val
- (ffebld_cu_val_character4 (u)), expr);
- break;
-#endif
-
default:
assert ("bad character kind type" == NULL);
break;
@@ -7204,7 +6320,7 @@ ffeexpr_convert_to_sym (ffebld source, ffelexToken source_token,
/* Initializes the module. */
void
-ffeexpr_init_2 ()
+ffeexpr_init_2 (void)
{
ffeexpr_stack_ = NULL;
ffeexpr_level_ = 0;
@@ -7666,17 +6782,6 @@ ffeexpr_cb_comma_c_ (ffelexToken ft, ffebld expr, ffelexToken t)
break;
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- e->u.operand = ffebld_new_conter (ffebld_constant_new_complex4
- (ffebld_conter (ffeexpr_stack_->expr), ffebld_conter (expr)));
- ffebld_set_info (e->u.operand,
- ffeinfo_new (FFEINFO_basictypeCOMPLEX, nkt, 0,
- FFEINFO_kindENTITY, FFEINFO_whereCONSTANT,
- FFETARGET_charactersizeNONE));
- break;
-#endif
-
default:
if (ffebad_start ((nkt == FFEINFO_kindtypeREALDOUBLE)
? FFEBAD_BAD_DBLCMPLX : FFEBAD_BAD_COMPLEX))
@@ -8663,9 +7768,6 @@ ffeexpr_type_combine (ffeinfoBasictype *xnbt, ffeinfoKindtype *xnkt,
#if FFETARGET_okCOMPLEX3
case FFEINFO_kindtypeREAL3:
#endif
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
-#endif
break; /* Fine and dandy. */
default:
@@ -9383,12 +8485,11 @@ ffeexpr_expr_kill_ (ffeexprExpr_ e)
Allocates and initializes a new expression object, returns it. */
static ffeexprExpr_
-ffeexpr_expr_new_ ()
+ffeexpr_expr_new_ (void)
{
ffeexprExpr_ e;
- e = (ffeexprExpr_) malloc_new_ks (ffe_pool_program_unit (), "FFEEXPR expr",
- sizeof (*e));
+ e = malloc_new_ks (ffe_pool_program_unit (), "FFEEXPR expr", sizeof (*e));
e->previous = NULL;
e->type = FFEEXPR_exprtypeUNKNOWN_;
e->token = NULL;
@@ -9577,15 +8678,6 @@ static void
ffeexpr_exprstack_push_operand_ (ffeexprExpr_ e)
{
ffeexpr_exprstack_push_ (e);
-#ifdef WEIRD_NONFORTRAN_RULES
- if ((ffeexpr_stack_->exprstack != NULL)
- && (ffeexpr_stack_->exprstack->expr->type == FFEEXPR_exprtypeBINARY_)
- && (ffeexpr_stack_->exprstack->expr->u.operator.prec
- == FFEEXPR_operatorprecedenceHIGHEST_)
- && (ffeexpr_stack_->exprstack->expr->u.operator.as
- == FFEEXPR_operatorassociativityL2R_))
- ffeexpr_reduce_ ();
-#endif
}
/* ffeexpr_exprstack_push_unary_ -- Push a unary operator onto the stack
@@ -9700,7 +8792,7 @@ again:
requisite type-assignment. */
static void
-ffeexpr_reduce_ ()
+ffeexpr_reduce_ (void)
{
ffeexprExpr_ operand; /* This is B in -B or A+B. */
ffeexprExpr_ left_operand; /* When operator is binary, this is A in A+B. */
@@ -9711,6 +8803,7 @@ ffeexpr_reduce_ ()
ffebld expr;
ffebld left_expr;
bool submag = FALSE;
+ bool bothlogical;
operand = ffeexpr_stack_->exprstack;
assert (operand != NULL);
@@ -9902,37 +8995,58 @@ ffeexpr_reduce_ ()
reduced = ffebld_new_and (left_expr, expr);
if (ffe_is_ugly_logint ())
reduced = ffeexpr_reduced_ugly2log_ (reduced, left_operand, operator,
- operand);
+ operand, &bothlogical);
reduced = ffeexpr_reduced_bool2_ (reduced, left_operand, operator,
operand);
reduced = ffeexpr_collapse_and (reduced, operator->token);
+ if (ffe_is_ugly_logint() && bothlogical)
+ reduced = ffeexpr_convert (reduced, left_operand->token,
+ operator->token,
+ FFEINFO_basictypeLOGICAL,
+ FFEINFO_kindtypeLOGICALDEFAULT, 0,
+ FFETARGET_charactersizeNONE,
+ FFEEXPR_contextLET);
break;
case FFEEXPR_operatorOR_:
reduced = ffebld_new_or (left_expr, expr);
if (ffe_is_ugly_logint ())
reduced = ffeexpr_reduced_ugly2log_ (reduced, left_operand, operator,
- operand);
+ operand, &bothlogical);
reduced = ffeexpr_reduced_bool2_ (reduced, left_operand, operator,
operand);
reduced = ffeexpr_collapse_or (reduced, operator->token);
+ if (ffe_is_ugly_logint() && bothlogical)
+ reduced = ffeexpr_convert (reduced, left_operand->token,
+ operator->token,
+ FFEINFO_basictypeLOGICAL,
+ FFEINFO_kindtypeLOGICALDEFAULT, 0,
+ FFETARGET_charactersizeNONE,
+ FFEEXPR_contextLET);
break;
case FFEEXPR_operatorXOR_:
reduced = ffebld_new_xor (left_expr, expr);
if (ffe_is_ugly_logint ())
reduced = ffeexpr_reduced_ugly2log_ (reduced, left_operand, operator,
- operand);
+ operand, &bothlogical);
reduced = ffeexpr_reduced_bool2_ (reduced, left_operand, operator,
operand);
reduced = ffeexpr_collapse_xor (reduced, operator->token);
+ if (ffe_is_ugly_logint() && bothlogical)
+ reduced = ffeexpr_convert (reduced, left_operand->token,
+ operator->token,
+ FFEINFO_basictypeLOGICAL,
+ FFEINFO_kindtypeLOGICALDEFAULT, 0,
+ FFETARGET_charactersizeNONE,
+ FFEEXPR_contextLET);
break;
case FFEEXPR_operatorEQV_:
reduced = ffebld_new_eqv (left_expr, expr);
if (ffe_is_ugly_logint ())
reduced = ffeexpr_reduced_ugly2log_ (reduced, left_operand, operator,
- operand);
+ operand, NULL);
reduced = ffeexpr_reduced_bool2_ (reduced, left_operand, operator,
operand);
reduced = ffeexpr_collapse_eqv (reduced, operator->token);
@@ -9942,7 +9056,7 @@ ffeexpr_reduce_ ()
reduced = ffebld_new_neqv (left_expr, expr);
if (ffe_is_ugly_logint ())
reduced = ffeexpr_reduced_ugly2log_ (reduced, left_operand, operator,
- operand);
+ operand, NULL);
reduced = ffeexpr_reduced_bool2_ (reduced, left_operand, operator,
operand);
reduced = ffeexpr_collapse_neqv (reduced, operator->token);
@@ -11423,7 +10537,7 @@ ffeexpr_reduced_ugly2_ (ffebld reduced, ffeexprExpr_ l, ffeexprExpr_ op,
static ffebld
ffeexpr_reduced_ugly2log_ (ffebld reduced, ffeexprExpr_ l, ffeexprExpr_ op,
- ffeexprExpr_ r)
+ ffeexprExpr_ r, bool *bothlogical)
{
ffeinfo linfo, rinfo;
ffeinfoBasictype lbt, rbt;
@@ -11503,23 +10617,31 @@ ffeexpr_reduced_ugly2log_ (ffebld reduced, ffeexprExpr_ l, ffeexprExpr_ op,
}
if (lbt == FFEINFO_basictypeLOGICAL)
- {
- ffebld_set_left (reduced, ffeexpr_convert (ffebld_left (reduced),
- l->token, op->token, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGERDEFAULT, 0,
- FFETARGET_charactersizeNONE,
- FFEEXPR_contextLET));
- }
+ {
+ ffebld_set_left (reduced,
+ ffeexpr_convert (ffebld_left (reduced),
+ l->token, op->token,
+ FFEINFO_basictypeINTEGER,
+ FFEINFO_kindtypeINTEGERDEFAULT, 0,
+ FFETARGET_charactersizeNONE,
+ FFEEXPR_contextLET));
+ }
if (rbt == FFEINFO_basictypeLOGICAL)
- {
- ffebld_set_right (reduced, ffeexpr_convert (ffebld_right (reduced),
- r->token, op->token, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGERDEFAULT, 0,
- FFETARGET_charactersizeNONE,
- FFEEXPR_contextLET));
- }
-
+ {
+ ffebld_set_right (reduced,
+ ffeexpr_convert (ffebld_right (reduced),
+ r->token, op->token,
+ FFEINFO_basictypeINTEGER,
+ FFEINFO_kindtypeINTEGERDEFAULT, 0,
+ FFETARGET_charactersizeNONE,
+ FFEEXPR_contextLET));
+ }
+
+ if (bothlogical != NULL)
+ *bothlogical = (lbt == FFEINFO_basictypeLOGICAL
+ && rbt == FFEINFO_basictypeLOGICAL);
+
return reduced;
}
@@ -19442,7 +18564,7 @@ ffeexpr_token_anything_ (ffelexToken ft UNUSED, ffebld expr UNUSED,
/* Terminate module. */
void
-ffeexpr_terminate_2 ()
+ffeexpr_terminate_2 (void)
{
assert (ffeexpr_stack_ == NULL);
assert (ffeexpr_level_ == 0);
OpenPOWER on IntegriCloud