diff libinterp/octave-value/ov.h @ 24565:dbec1e04f499

accept type_info obj as arg to binary_op, unary_op, and cat_op functions * ov.h, ov.cc (do_binary_op, do_unary_op, do_cat_op): New verloads that accept reference to type_info object as argument. (decompose_binary_op): New aregument, reference to type_info object. * pt-eval.cc (tree_evaluator::visit_binary_expression): Pass type_info object to do_binary_op. (tree_evaluator::visit_postfix_expression, tree_evaluator::visit_prefix_expression): Pass type_info object to do_unary_op. (tree_evaluator::visit_matrix): Pass type_info object to do_cat_op.
author John W. Eaton <jwe@octave.org>
date Mon, 08 Jan 2018 16:45:26 -0500
parents 46440078d73b
children f5ad5d6f16fd
line wrap: on
line diff
--- a/libinterp/octave-value/ov.h	Mon Jan 08 15:51:52 2018 -0500
+++ b/libinterp/octave-value/ov.h	Mon Jan 08 16:45:26 2018 -0500
@@ -1283,25 +1283,25 @@
 
   // Unary and binary operations.
 
-  friend OCTINTERP_API octave_value do_unary_op (unary_op op,
-                                                 const octave_value& a);
+  friend OCTINTERP_API octave_value
+  do_unary_op (octave::type_info& ti, unary_op op, const octave_value& a);
 
   octave_value& do_non_const_unary_op (unary_op op);
 
   octave_value& do_non_const_unary_op (unary_op op, const std::string& type,
                                        const std::list<octave_value_list>& idx);
 
-  friend OCTINTERP_API octave_value do_binary_op (binary_op op,
-                                                  const octave_value& a,
-                                                  const octave_value& b);
+  friend OCTINTERP_API octave_value
+  do_binary_op (octave::type_info& ti, binary_op op,
+                const octave_value& a, const octave_value& b);
 
-  friend OCTINTERP_API octave_value do_binary_op (compound_binary_op op,
-                                                  const octave_value& a,
-                                                  const octave_value& b);
+  friend OCTINTERP_API octave_value
+  do_binary_op (octave::type_info& ti, compound_binary_op op,
+                const octave_value& a, const octave_value& b);
 
-  friend OCTINTERP_API octave_value do_cat_op (const octave_value& a,
-                                               const octave_value& b,
-                                               const Array<octave_idx_type>& ra_idx);
+  friend OCTINTERP_API octave_value
+  do_cat_op (octave::type_info& ti, const octave_value& a,
+             const octave_value& b, const Array<octave_idx_type>& ra_idx);
 
   friend OCTINTERP_API octave_value do_colon_op (const octave_value& base,
                                                  const octave_value& limit,
@@ -1512,18 +1512,39 @@
 
 };
 
-// Publish externally used friend functions.
+// Publish externally used friend functions.  Which compiler requires
+// these extra declarations?
+
+extern OCTINTERP_API octave_value
+do_unary_op (octave::type_info& ti, octave_value::unary_op op,
+             const octave_value& a);
 
 extern OCTINTERP_API octave_value
 do_unary_op (octave_value::unary_op op, const octave_value& a);
 
 extern OCTINTERP_API octave_value
-do_binary_op (octave_value::binary_op op,
+do_binary_op (octave::type_info& ti, octave_value::binary_op op,
+              const octave_value& a, const octave_value& b);
+
+extern OCTINTERP_API octave_value
+do_binary_op (octave::type_info& ti, octave_value::compound_binary_op op,
               const octave_value& a, const octave_value& b);
 
 extern OCTINTERP_API octave_value
-do_binary_op (octave_value::compound_binary_op op,
-              const octave_value& a, const octave_value& b);
+do_binary_op (octave_value::binary_op op, const octave_value& a,
+              const octave_value& b);
+
+extern OCTINTERP_API octave_value
+do_binary_op (octave_value::compound_binary_op op, const octave_value& a,
+              const octave_value& b);
+
+extern OCTINTERP_API octave_value
+do_cat_op (octave::type_info& ti, const octave_value& a,
+           const octave_value& b, const Array<octave_idx_type>& ra_idx);
+
+extern OCTINTERP_API octave_value
+do_cat_op (const octave_value& a, const octave_value& b,
+           const Array<octave_idx_type>& ra_idx);
 
 #define OV_UNOP_FN(name)                        \
   inline octave_value                           \