By popular demand the symbol ^ is reinstated as the representation for
pow, along with **.

This reverts commit cb557adb00b69f75025485e991e07cb93008e029.

Signed-off-by: Jose E. Marchesi <[email protected]>
---
 gcc/algol68/a68-parser-prelude.cc            | 18 ++++++++++++++++++
 gcc/algol68/ga68.texi                        |  5 ++++-
 gcc/testsuite/algol68/execute/pow-real-1.a68 |  6 +++---
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/gcc/algol68/a68-parser-prelude.cc 
b/gcc/algol68/a68-parser-prelude.cc
index 84d1e1eb68b..b28df455aa2 100644
--- a/gcc/algol68/a68-parser-prelude.cc
+++ b/gcc/algol68/a68-parser-prelude.cc
@@ -518,6 +518,7 @@ stand_prelude (void)
   a68_prio ("SHR", 8);
   a68_prio ("UP", 8);
   a68_prio ("DOWN", 8);
+  a68_prio ("^", 8);
   a68_prio ("LWB", 8);
   a68_prio ("UPB", 8);
   a68_prio ("I", 9);
@@ -633,6 +634,7 @@ stand_prelude (void)
   a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
   m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
+  a68_op (A68_STD, "^", m, a68_lower_pow_int);
   /* SHORT INT operators.  */
   m = a68_proc (M_SHORT_INT, M_SHORT_INT, NO_MOID);
   a68_op (A68_STD, "+", m, a68_lower_confirm2);
@@ -679,6 +681,7 @@ stand_prelude (void)
   a68_op (A68_STD, "GE", m, a68_lower_int_ge3);
   m = a68_proc (M_SHORT_INT, M_SHORT_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
+  a68_op (A68_STD, "^", m, a68_lower_pow_int);
   /* INT operators. */
   m = a68_proc (M_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "+", m, a68_lower_confirm2);
@@ -713,6 +716,7 @@ stand_prelude (void)
   a68_op (A68_STD, "MOD", m, a68_lower_mod3);
   a68_op (A68_STD, "%*", m, a68_lower_mod3);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
+  a68_op (A68_STD, "^", m, a68_lower_pow_int);
   m = a68_proc (M_REAL, M_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "/", m, a68_lower_rdiv3);
   m = a68_proc (M_REF_INT, M_REF_INT, M_INT, NO_MOID);
@@ -774,6 +778,7 @@ stand_prelude (void)
   a68_op (A68_STD, "/", m, a68_lower_rdiv3);
   m = a68_proc (M_LONG_INT, M_LONG_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
+  a68_op (A68_STD, "^", m, a68_lower_pow_int);
   /* LONG LONG INT operators. */
   m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
   a68_op (A68_STD, "+", m, a68_lower_confirm2);
@@ -821,6 +826,7 @@ stand_prelude (void)
   a68_op (A68_STD, "/=", m, a68_lower_int_ne3);
   m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_int);
+  a68_op (A68_STD, "^", m, a68_lower_pow_int);
   /* SHORT SHORT BITS operators  */
   m = a68_proc (M_BOOL, M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID);
   a68_op (A68_STD, "=", m, a68_lower_bit_eq3);
@@ -1000,8 +1006,10 @@ stand_prelude (void)
   a68_op (A68_STD, "*", m, a68_lower_mult_real);
   a68_op (A68_STD, "/", m, a68_lower_div3);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   m = a68_proc (M_REAL, M_REAL, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   m = a68_proc (M_REF_REAL, M_REF_REAL, M_REAL, NO_MOID);
   a68_op (A68_STD, "+:=", m, a68_lower_plusab3);
   a68_op (A68_STD, "-:=", m, a68_lower_minusab3);
@@ -1033,6 +1041,7 @@ stand_prelude (void)
   a68_op (A68_STD, "*", m, a68_lower_mult_real);
   a68_op (A68_STD, "/", m, a68_lower_div3);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   m = a68_proc (M_REF_LONG_REAL, M_REF_LONG_REAL, M_LONG_REAL, NO_MOID);
   a68_op (A68_STD, "+:=", m, a68_lower_plusab3);
   a68_op (A68_STD, "-:=", m, a68_lower_minusab3);
@@ -1057,6 +1066,7 @@ stand_prelude (void)
   a68_op (A68_STD, "GE", m, a68_lower_real_ge3);
   m = a68_proc (M_LONG_REAL, M_LONG_REAL, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   /* LONG LONG REAL operators. */
   m = a68_proc (M_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
   a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenreal2);
@@ -1075,6 +1085,7 @@ stand_prelude (void)
   a68_op (A68_STD, "*", m, a68_lower_mult_real);
   a68_op (A68_STD, "/", m, a68_lower_div3);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   m = a68_proc (M_REF_LONG_LONG_REAL, M_REF_LONG_LONG_REAL, M_LONG_LONG_REAL, 
NO_MOID);
   a68_op (A68_STD, "+:=", m, a68_lower_plusab3);
   a68_op (A68_STD, "-:=", m, a68_lower_minusab3);
@@ -1099,6 +1110,7 @@ stand_prelude (void)
   a68_op (A68_STD, "GE", m, a68_lower_real_ge3);
   m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m, a68_lower_pow_real);
+  a68_op (A68_STD, "^", m, a68_lower_pow_real);
   /* ROWS operators.  */
   m = a68_proc (M_INT, M_ROWS, NO_MOID);
   a68_op (A68_STD, "LWB", m, a68_lower_lwb2);
@@ -1184,6 +1196,8 @@ stand_prelude (void)
   a68_op (A68_STD, "/", m);
   m = a68_proc (M_COMPLEX, M_COMPLEX, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m);
+  a68_op (A68_STD, "UP", m);
+  a68_op (A68_STD, "^", m);
   m = a68_proc (M_REF_COMPLEX, M_REF_COMPLEX, M_COMPLEX, NO_MOID);
   a68_op (A68_STD, "+:=", m);
   a68_op (A68_STD, "-:=", m);
@@ -1226,6 +1240,8 @@ stand_prelude (void)
   a68_op (A68_STD, "/", m);
   m = a68_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m);
+  a68_op (A68_STD, "UP", m);
+  a68_op (A68_STD, "^", m);
   m = a68_proc (M_BOOL, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
   a68_op (A68_STD, "=", m);
   a68_op (A68_STD, "EQ", m);
@@ -1263,6 +1279,8 @@ stand_prelude (void)
   a68_op (A68_STD, "/", m);
   m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, M_INT, NO_MOID);
   a68_op (A68_STD, "**", m);
+  a68_op (A68_STD, "UP", m);
+  a68_op (A68_STD, "^", m);
   m = a68_proc (M_BOOL, M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
   a68_op (A68_STD, "=", m);
   a68_op (A68_STD, "EQ", m);
diff --git a/gcc/algol68/ga68.texi b/gcc/algol68/ga68.texi
index c785b3920c1..7ee12ffb050 100644
--- a/gcc/algol68/ga68.texi
+++ b/gcc/algol68/ga68.texi
@@ -2101,6 +2101,7 @@ target.
 @item @code{@B{shl}}, @code{@B{up}}
 @item @code{@B{shr}}, @code{@B{down}}
 @item @code{@B{up}}, @code{@B{down}}
+@item @code{^}
 @item @code{@B{lwb}}
 @item @code{@B{upb}}
 @end itemize
@@ -2233,6 +2234,7 @@ Dyadic operator that yields the integer division with 
real result of
 @end deftypefn
 
 @deftypefn Operator {} {**} {= (@B{l} @B{int} a, b) @B{l} @B{int}}
+@deftypefnx Operator {} {^} {= (@B{l} @B{int} a, b) @B{l} @B{int}}
 Dyadic operator that yields @code{a} raised to the exponent @code{b}.
 @end deftypefn
 
@@ -2366,10 +2368,12 @@ Dyadic operator that yields the realeger division with 
real result of
 @end deftypefn
 
 @deftypefn Operator {} {**} {= (@B{l} @B{real} a, b) @B{l} @B{real}}
+@deftypefnx Operator {} {^} {= (@B{l} @B{real} a, b) @B{l} @B{real}}
 Dyadic operator that yields @code{a} raised to the real exponent @code{b}.
 @end deftypefn
 
 @deftypefn Operator {} {**} {= (@B{l} @B{real} a, @B{int} b) @B{l} @B{real}}
+@deftypefnx Operator {} {^} {= (@B{l} @B{real} a, @B{int} b) @B{l} @B{real}}
 Dyadic operator that yields @code{a} raised to the integral exponent
 @code{b}.
 @end deftypefn
@@ -3326,4 +3330,3 @@ sometimes be useful to look up both forms.
 @printindex cp
 
 @bye
-b
diff --git a/gcc/testsuite/algol68/execute/pow-real-1.a68 
b/gcc/testsuite/algol68/execute/pow-real-1.a68
index 69d84759080..81028706485 100644
--- a/gcc/testsuite/algol68/execute/pow-real-1.a68
+++ b/gcc/testsuite/algol68/execute/pow-real-1.a68
@@ -1,7 +1,7 @@
 # { dg-options "-fstropping=upper" }  #
 BEGIN REAL r0 = 2.0; LONG REAL rr0 = LONG 2.0; LONG LONG REAL rrr0 = LONG LONG 
2.0;
-      REAL r1 = r0 ** 2; REAL r2 = r0 ** 3.0;
-      LONG REAL rr1 = rr0 ** LONG 2; LONG REAL rr2 = rr0 ** LONG 3.0;
-      LONG LONG REAL rrr1 = rrr0 ** LONG LONG 2; LONG LONG REAL rrr2 = rrr0 ** 
LONG LONG 3.0;
+      REAL r1 = r0 ^ 2; REAL r2 = r0 ^ 3.0;
+      LONG REAL rr1 = rr0 ^ LONG 2; LONG REAL rr2 = rr0 ^ LONG 3.0;
+      LONG LONG REAL rrr1 = rrr0 ^ LONG LONG 2; LONG LONG REAL rrr2 = rrr0 ^ 
LONG LONG 3.0;
       SKIP
 END
-- 
2.39.5

Reply via email to