changeset 28630:35f974bab4c8

fix constness of cat op args Declare the first argument of the cat_op concatenation operators const. * ov-typeinfo.h (cat_op_fcn): Make first argument of concatenation operator typedef const. * op-b-sbm.cc, op-bm-sbm.cc, op-chm.cc, op-cm-scm.cc, op-cm-sm.cc, op-cs-scm.cc, op-cs-sm.cc, op-m-scm.cc, op-m-sm.cc, op-s-scm.cc, op-s-sm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-scm-cm.cc, op-scm-cs.cc, op-scm-m.cc, op-scm-s.cc, op-sm-cm.cc, op-sm-cs.cc, op-sm-m.cc, op-sm-s.cc, op-struct.cc: Fix concatentation operator declarations and casts as needed. * ops.h (DEFCATOPX, DEFCATOP, DEFCATOP_FN, DEFNDCATOP_FN, DEFNDCHARCATOP_FN, DEFNDCATOP_FN2): Likewise.
author John W. Eaton <jwe@octave.org>
date Thu, 30 Jul 2020 16:15:03 -0400
parents af361aea02e0
children 70cdf8de553d
files libinterp/octave-value/ov-typeinfo.h libinterp/operators/op-b-sbm.cc libinterp/operators/op-bm-sbm.cc libinterp/operators/op-chm.cc libinterp/operators/op-cm-scm.cc libinterp/operators/op-cm-sm.cc libinterp/operators/op-cs-scm.cc libinterp/operators/op-cs-sm.cc libinterp/operators/op-m-scm.cc libinterp/operators/op-m-sm.cc libinterp/operators/op-s-scm.cc libinterp/operators/op-s-sm.cc libinterp/operators/op-sbm-b.cc libinterp/operators/op-sbm-bm.cc libinterp/operators/op-scm-cm.cc libinterp/operators/op-scm-cs.cc libinterp/operators/op-scm-m.cc libinterp/operators/op-scm-s.cc libinterp/operators/op-sm-cm.cc libinterp/operators/op-sm-cs.cc libinterp/operators/op-sm-m.cc libinterp/operators/op-sm-s.cc libinterp/operators/op-struct.cc libinterp/operators/ops.h
diffstat 24 files changed, 56 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-typeinfo.h	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/octave-value/ov-typeinfo.h	Thu Jul 30 16:15:03 2020 -0400
@@ -56,7 +56,7 @@
       (const octave_base_value&, const octave_base_value&);
 
     typedef octave_value (*cat_op_fcn)
-      (octave_base_value&, const octave_base_value&,
+      (const octave_base_value&, const octave_base_value&,
      const Array<octave_idx_type>& ra_idx);
 
     typedef octave_value (*assign_op_fcn)
--- a/libinterp/operators/op-b-sbm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-b-sbm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -49,7 +49,7 @@
 
 DEFCATOP (b_sbm, bool, sparse_bool_matrix)
 {
-  octave_bool& v1 = dynamic_cast<octave_bool&> (a1);
+  const octave_bool& v1 = dynamic_cast<const octave_bool&> (a1);
   const octave_sparse_bool_matrix& v2
     = dynamic_cast<const octave_sparse_bool_matrix&> (a2);
   SparseBoolMatrix tmp (1, 1, v1.bool_value ());
@@ -59,7 +59,7 @@
 
 DEFCATOP (b_sm, bool, sparse_matrix)
 {
-  octave_bool& v1 = dynamic_cast<octave_bool&> (a1);
+  const octave_bool& v1 = dynamic_cast<const octave_bool&> (a1);
   const octave_sparse_matrix& v2 = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseMatrix tmp (1, 1, v1.scalar_value ());
   return octave_value (tmp. concat (v2.sparse_matrix_value (), ra_idx));
@@ -67,7 +67,7 @@
 
 DEFCATOP (s_sbm, scalar, sparse_bool_matrix)
 {
-  octave_scalar& v1 = dynamic_cast<octave_scalar&> (a1);
+  const octave_scalar& v1 = dynamic_cast<const octave_scalar&> (a1);
   const octave_sparse_bool_matrix& v2
     = dynamic_cast<const octave_sparse_bool_matrix&> (a2);
   SparseMatrix tmp (1, 1, v1.scalar_value ());
--- a/libinterp/operators/op-bm-sbm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-bm-sbm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -51,7 +51,7 @@
 
 DEFCATOP (bm_sbm, bool_matrix, sparse_bool_matrix)
 {
-  octave_bool_matrix& v1 = dynamic_cast<octave_bool_matrix&> (a1);
+  const octave_bool_matrix& v1 = dynamic_cast<const octave_bool_matrix&> (a1);
   const octave_sparse_bool_matrix& v2
     = dynamic_cast<const octave_sparse_bool_matrix&> (a2);
   SparseBoolMatrix tmp (v1.bool_matrix_value ());
@@ -61,7 +61,7 @@
 
 DEFCATOP (m_sbm, matrix, sparse_bool_matrix)
 {
-  octave_matrix& v1 = dynamic_cast<octave_matrix&> (a1);
+  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
   const octave_sparse_bool_matrix& v2
     = dynamic_cast<const octave_sparse_bool_matrix&> (a2);
   SparseMatrix tmp (v1.matrix_value ());
@@ -70,7 +70,7 @@
 
 DEFCATOP (bm_sm, bool_matrix, sparse_matrix)
 {
-  octave_bool_matrix& v1 = dynamic_cast<octave_bool_matrix&> (a1);
+  const octave_bool_matrix& v1 = dynamic_cast<const octave_bool_matrix&> (a1);
   const octave_sparse_matrix& v2 = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseMatrix tmp (v1.matrix_value ());
   return octave_value (tmp. concat (v2.sparse_matrix_value (), ra_idx));
--- a/libinterp/operators/op-chm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-chm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -52,7 +52,7 @@
 
 DEFCATOP (chm_s, char_matrix, scalar)
 {
-  octave_char_matrix& v1 = dynamic_cast<octave_char_matrix&> (a1);
+  const octave_char_matrix& v1 = dynamic_cast<const octave_char_matrix&> (a1);
   const octave_scalar& v2 = dynamic_cast<const octave_scalar&> (a2);
 
   warn_implicit_conversion ("Octave:num-to-str",
@@ -64,7 +64,7 @@
 
 DEFCATOP (chm_m, char_matrix, matrix)
 {
-  octave_char_matrix& v1 = dynamic_cast<octave_char_matrix&> (a1);
+  const octave_char_matrix& v1 = dynamic_cast<const octave_char_matrix&> (a1);
   const octave_matrix& v2 = dynamic_cast<const octave_matrix&> (a2);
 
   warn_implicit_conversion ("Octave:num-to-str",
@@ -76,7 +76,7 @@
 
 DEFCATOP (s_chm, scalar, char_matrix)
 {
-  octave_scalar& v1 = dynamic_cast<octave_scalar&> (a1);
+  const octave_scalar& v1 = dynamic_cast<const octave_scalar&> (a1);
   const octave_char_matrix& v2 = dynamic_cast<const octave_char_matrix&> (a2);
 
   warn_implicit_conversion ("Octave:num-to-str",
@@ -88,7 +88,7 @@
 
 DEFCATOP (m_chm, matrix, char_matrix)
 {
-  octave_matrix& v1 = dynamic_cast<octave_matrix&> (a1);
+  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
   const octave_char_matrix& v2 = dynamic_cast<const octave_char_matrix&> (a2);
 
   warn_implicit_conversion ("Octave:num-to-str",
--- a/libinterp/operators/op-cm-scm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-cm-scm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -129,7 +129,8 @@
 
 DEFCATOP (cm_scm, complex_matrix, sparse_complex_matrix)
 {
-  octave_complex_matrix& v1 = dynamic_cast<octave_complex_matrix&> (a1);
+  const octave_complex_matrix& v1
+    = dynamic_cast<const octave_complex_matrix&> (a1);
   const octave_sparse_complex_matrix& v2
     = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
   SparseComplexMatrix tmp (v1.complex_matrix_value ());
--- a/libinterp/operators/op-cm-sm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-cm-sm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -125,7 +125,8 @@
 
 DEFCATOP (cm_sm, complex_matrix, sparse_matrix)
 {
-  octave_complex_matrix& v1 = dynamic_cast<octave_complex_matrix&> (a1);
+  const octave_complex_matrix& v1
+    = dynamic_cast<const octave_complex_matrix&> (a1);
   const octave_sparse_matrix& v2
     = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseComplexMatrix tmp (v1.complex_matrix_value ());
--- a/libinterp/operators/op-cs-scm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-cs-scm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -108,7 +108,7 @@
 
 DEFCATOP (cs_scm, complex, sparse_complex_matrix)
 {
-  octave_complex& v1 = dynamic_cast<octave_complex&> (a1);
+  const octave_complex& v1 = dynamic_cast<const octave_complex&> (a1);
   const octave_sparse_complex_matrix& v2
     = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
   SparseComplexMatrix tmp (1, 1, v1.complex_value ());
--- a/libinterp/operators/op-cs-sm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-cs-sm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -104,8 +104,9 @@
 
 DEFCATOP (cs_sm, sparse_matrix, complex)
 {
-  octave_complex& v1 = dynamic_cast<octave_complex&> (a1);
-  const octave_sparse_matrix& v2 = dynamic_cast<const octave_sparse_matrix&> (a2);
+  const octave_complex& v1 = dynamic_cast<const octave_complex&> (a1);
+  const octave_sparse_matrix& v2
+    = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseComplexMatrix tmp (1, 1, v1.complex_value ());
   return octave_value (tmp. concat (v2.sparse_matrix_value (), ra_idx));
 }
--- a/libinterp/operators/op-m-scm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-m-scm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -122,7 +122,7 @@
 
 DEFCATOP (m_scm, matrix, sparse_complex_matrix)
 {
-  octave_matrix& v1 = dynamic_cast<octave_matrix&> (a1);
+  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
   const octave_sparse_complex_matrix& v2
     = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
   SparseMatrix tmp (v1.matrix_value ());
--- a/libinterp/operators/op-m-sm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-m-sm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -117,7 +117,7 @@
 
 DEFCATOP (m_sm, matrix, sparse_matrix)
 {
-  octave_matrix& v1 = dynamic_cast<octave_matrix&> (a1);
+  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
   const octave_sparse_matrix& v2 = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseMatrix tmp (v1.matrix_value ());
   return octave_value (tmp. concat (v2.sparse_matrix_value (), ra_idx));
--- a/libinterp/operators/op-s-scm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-s-scm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -110,7 +110,7 @@
 
 DEFCATOP (s_scm, scalar, sparse_compelx_matrix)
 {
-  octave_scalar& v1 = dynamic_cast<octave_scalar&> (a1);
+  const octave_scalar& v1 = dynamic_cast<const octave_scalar&> (a1);
   const octave_sparse_complex_matrix& v2
     = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
   SparseMatrix tmp (1, 1, v1.scalar_value ());
--- a/libinterp/operators/op-s-sm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-s-sm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -101,7 +101,7 @@
 
 DEFCATOP (s_sm, scalar, sparse_matrix)
 {
-  octave_scalar& v1 = dynamic_cast<octave_scalar&> (a1);
+  const octave_scalar& v1 = dynamic_cast<const octave_scalar&> (a1);
   const octave_sparse_matrix& v2 = dynamic_cast<const octave_sparse_matrix&> (a2);
   SparseMatrix tmp (1, 1, v1.scalar_value ());
   return octave_value (tmp.concat (v2.sparse_matrix_value (), ra_idx));
--- a/libinterp/operators/op-sbm-b.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sbm-b.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -56,7 +56,7 @@
 
 DEFCATOP (sbm_b, sparse_bool_matrix, bool)
 {
-  octave_sparse_bool_matrix& v1 = dynamic_cast<octave_sparse_bool_matrix&> (a1);
+  const octave_sparse_bool_matrix& v1 = dynamic_cast<const octave_sparse_bool_matrix&> (a1);
   const octave_bool& v2 = dynamic_cast<const octave_bool&> (a2);
 
   SparseBoolMatrix tmp (1, 1, v2.bool_value ());
@@ -65,7 +65,7 @@
 
 DEFCATOP (sm_b, sparse_matrix, bool)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_bool& v2 = dynamic_cast<const octave_bool&> (a2);
 
   SparseMatrix tmp (1, 1, v2.scalar_value ());
@@ -74,7 +74,7 @@
 
 DEFCATOP (sbm_s, sparse_bool_matrix, scalar)
 {
-  octave_sparse_bool_matrix& v1 = dynamic_cast<octave_sparse_bool_matrix&> (a1);
+  const octave_sparse_bool_matrix& v1 = dynamic_cast<const octave_sparse_bool_matrix&> (a1);
   const octave_scalar& v2 = dynamic_cast<const octave_scalar&> (a2);
 
   SparseMatrix tmp (1, 1, v2.scalar_value ());
--- a/libinterp/operators/op-sbm-bm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sbm-bm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -61,7 +61,7 @@
 
 DEFCATOP (sbm_bm, sparse_bool_matrix, bool_matrix)
 {
-  octave_sparse_bool_matrix& v1 = dynamic_cast<octave_sparse_bool_matrix&> (a1);
+  const octave_sparse_bool_matrix& v1 = dynamic_cast<const octave_sparse_bool_matrix&> (a1);
   const octave_bool_matrix& v2 = dynamic_cast<const octave_bool_matrix&> (a2);
 
   SparseBoolMatrix tmp (v2.bool_matrix_value ());
@@ -70,7 +70,7 @@
 
 DEFCATOP (sbm_m, sparse_bool_matrix, matrix)
 {
-  octave_sparse_bool_matrix& v1 = dynamic_cast<octave_sparse_bool_matrix&> (a1);
+  const octave_sparse_bool_matrix& v1 = dynamic_cast<const octave_sparse_bool_matrix&> (a1);
   const octave_matrix& v2 = dynamic_cast<const octave_matrix&> (a2);
 
   SparseMatrix tmp (v2.matrix_value ());
@@ -79,7 +79,7 @@
 
 DEFCATOP (sm_bm, sparse_matrix, bool_matrix)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_bool_matrix& v2 = dynamic_cast<const octave_bool_matrix&> (a2);
 
   SparseMatrix tmp (v2.matrix_value ());
--- a/libinterp/operators/op-scm-cm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-scm-cm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -129,8 +129,8 @@
 
 DEFCATOP (scm_cm, sparse_complex_matrix, complex_matrix)
 {
-  octave_sparse_complex_matrix& v1
-    = dynamic_cast<octave_sparse_complex_matrix&> (a1);
+  const octave_sparse_complex_matrix& v1
+    = dynamic_cast<const octave_sparse_complex_matrix&> (a1);
   const octave_complex_matrix& v2
     = dynamic_cast<const octave_complex_matrix&> (a2);
   SparseComplexMatrix tmp (v2.complex_matrix_value ());
--- a/libinterp/operators/op-scm-cs.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-scm-cs.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -117,8 +117,8 @@
 
 DEFCATOP (scm_cs, sparse_complex_matrix, complex)
 {
-  octave_sparse_complex_matrix& v1
-    = dynamic_cast<octave_sparse_complex_matrix&> (a1);
+  const octave_sparse_complex_matrix& v1
+    = dynamic_cast<const octave_sparse_complex_matrix&> (a1);
   const octave_complex& v2 = dynamic_cast<const octave_complex&> (a2);
   SparseComplexMatrix tmp (1, 1, v2.complex_value ());
   return octave_value
--- a/libinterp/operators/op-scm-m.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-scm-m.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -123,8 +123,8 @@
 
 DEFCATOP (scm_m, sparse_complex_matrix, matrix)
 {
-  octave_sparse_complex_matrix& v1
-    = dynamic_cast<octave_sparse_complex_matrix&> (a1);
+  const octave_sparse_complex_matrix& v1
+    = dynamic_cast<const octave_sparse_complex_matrix&> (a1);
   const octave_matrix& v2 = dynamic_cast<const octave_matrix&> (a2);
   SparseMatrix tmp (v2.matrix_value ());
   return octave_value
--- a/libinterp/operators/op-scm-s.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-scm-s.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -125,8 +125,8 @@
 
 DEFCATOP (scm_s, sparse_complex_matrix, scalar)
 {
-  octave_sparse_complex_matrix& v1
-    = dynamic_cast<octave_sparse_complex_matrix&> (a1);
+  const octave_sparse_complex_matrix& v1
+    = dynamic_cast<const octave_sparse_complex_matrix&> (a1);
   const octave_scalar& v2 = dynamic_cast<const octave_scalar&> (a2);
   SparseComplexMatrix tmp (1, 1, v2.complex_value ());
   return octave_value
--- a/libinterp/operators/op-sm-cm.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sm-cm.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -126,7 +126,7 @@
 
 DEFCATOP (sm_cm, sparse_matrix, complex_matrix)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_complex_matrix& v2
     = dynamic_cast<const octave_complex_matrix&> (a2);
   SparseComplexMatrix tmp (v2.complex_matrix_value ());
--- a/libinterp/operators/op-sm-cs.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sm-cs.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -114,7 +114,7 @@
 
 DEFCATOP (sm_cs, sparse_matrix, complex)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_complex& v2 = dynamic_cast<const octave_complex&> (a2);
   SparseComplexMatrix tmp (1, 1, v2.complex_value ());
   return octave_value (v1.sparse_matrix_value (). concat (tmp, ra_idx));
--- a/libinterp/operators/op-sm-m.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sm-m.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -118,7 +118,7 @@
 
 DEFCATOP (sm_m, sparse_matrix, matrix)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_matrix& v2 = dynamic_cast<const octave_matrix&> (a2);
   SparseMatrix tmp (v2.matrix_value ());
   return octave_value (v1.sparse_matrix_value (). concat (tmp, ra_idx));
--- a/libinterp/operators/op-sm-s.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-sm-s.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -115,7 +115,7 @@
 
 DEFCATOP (sm_s, sparse_matrix, scalar)
 {
-  octave_sparse_matrix& v1 = dynamic_cast<octave_sparse_matrix&> (a1);
+  const octave_sparse_matrix& v1 = dynamic_cast<const octave_sparse_matrix&> (a1);
   const octave_scalar& v2 = dynamic_cast<const octave_scalar&> (a2);
   SparseMatrix tmp (1, 1, v2.scalar_value ());
   return octave_value (v1.sparse_matrix_value (). concat (tmp, ra_idx));
--- a/libinterp/operators/op-struct.cc	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/op-struct.cc	Thu Jul 30 16:15:03 2020 -0400
@@ -60,7 +60,8 @@
 DEFNDCATOP_FN (ss_ss_concat, scalar_struct, scalar_struct, map, map, concat)
 
 static octave_value
-oct_catop_struct_matrix (octave_base_value& a1, const octave_base_value& a2,
+oct_catop_struct_matrix (const octave_base_value& a1,
+                         const octave_base_value& a2,
                          const Array<octave_idx_type>&)
 {
   const octave_struct& v1 = dynamic_cast<const octave_struct&> (a1);
@@ -76,7 +77,8 @@
 }
 
 static octave_value
-oct_catop_matrix_struct (octave_base_value& a1, const octave_base_value& a2,
+oct_catop_matrix_struct (const octave_base_value& a1,
+                         const octave_base_value& a2,
                          const Array<octave_idx_type>&)
 {
   const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
--- a/libinterp/operators/ops.h	Mon Aug 03 17:07:38 2020 -0400
+++ b/libinterp/operators/ops.h	Thu Jul 30 16:15:03 2020 -0400
@@ -322,12 +322,13 @@
 
 #define DEFCATOPX(name, t1, t2)                                         \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value&, const octave_base_value&, \
+  CONCAT2 (oct_catop_, name) (const octave_base_value&,                 \
+                              const octave_base_value&,                 \
                               const Array<octave_idx_type>& ra_idx)
 
 #define DEFCATOP(name, t1, t2)                                          \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value& a1,                    \
+  CONCAT2 (oct_catop_, name) (const octave_base_value& a1,              \
                               const octave_base_value& a2,              \
                               const Array<octave_idx_type>& ra_idx)
 
@@ -335,11 +336,11 @@
 
 #define DEFCATOP_FN(name, t1, t2, f)                                    \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value& a1,                    \
+  CONCAT2 (oct_catop_, name) (const octave_base_value& a1,              \
                               const octave_base_value& a2,              \
                               const Array<octave_idx_type>& ra_idx)     \
   {                                                                     \
-    CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \
+    const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
     const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
                                                                         \
     return octave_value (v1.CONCAT2 (t1, _value) () . f (v2.CONCAT2 (t2, _value) (), ra_idx)); \
@@ -347,11 +348,11 @@
 
 #define DEFNDCATOP_FN(name, t1, t2, e1, e2, f)                          \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value& a1,                    \
+  CONCAT2 (oct_catop_, name) (const octave_base_value& a1,              \
                               const octave_base_value& a2,              \
                               const Array<octave_idx_type>& ra_idx)     \
   {                                                                     \
-    CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \
+    const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
     const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
                                                                         \
     return octave_value (v1.CONCAT2 (e1, _value) () . f (v2.CONCAT2 (e2, _value) (), ra_idx)); \
@@ -359,11 +360,11 @@
 
 #define DEFNDCHARCATOP_FN(name, t1, t2, f)                              \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value& a1,                    \
+  CONCAT2 (oct_catop_, name) (const octave_base_value& a1,              \
                               const octave_base_value& a2,              \
                               const Array<octave_idx_type>& ra_idx)     \
   {                                                                     \
-    CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \
+    const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
     const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
                                                                         \
     return octave_value (v1.char_array_value () . f (v2.char_array_value (), ra_idx), \
@@ -376,11 +377,11 @@
 
 #define DEFNDCATOP_FN2(name, t1, t2, tc1, tc2, e1, e2, f)               \
   static octave_value                                                   \
-  CONCAT2 (oct_catop_, name) (octave_base_value& a1,                    \
+  CONCAT2 (oct_catop_, name) (const octave_base_value& a1,              \
                               const octave_base_value& a2,              \
                               const Array<octave_idx_type>& ra_idx)     \
   {                                                                     \
-    CONCAT2 (octave_, t1)& v1 = dynamic_cast<CONCAT2 (octave_, t1)&> (a1); \
+    const CONCAT2 (octave_, t1)& v1 = dynamic_cast<const CONCAT2 (octave_, t1)&> (a1); \
     const CONCAT2 (octave_, t2)& v2 = dynamic_cast<const CONCAT2 (octave_, t2)&> (a2); \
                                                                         \
     return octave_value (tc1 (v1.CONCAT2 (e1, _value) ()) . f (tc2 (v2.CONCAT2 (e2, _value) ()), ra_idx)); \