Mercurial > octave
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 \