Mercurial > octave
changeset 31777:e995783d78e7 stable
capture modified operands when rewriting binary expressions in parse tree
* pt-binop.h (tree_binary_expression::lhs,
tree_binary_expression::rhs): New functions.
* oct-parse.yy (base_parser::maybe_convert_to_braindead_shortcircuit):
Reset binary expression object operands after recursive call.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 25 Jan 2023 15:28:40 -0500 |
parents | c0df18c13a77 |
children | 9feb455dd514 713de911848f |
files | libinterp/parse-tree/oct-parse.yy libinterp/parse-tree/pt-binop.h |
diffstat | 2 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.yy Wed Jan 25 14:38:20 2023 +0100 +++ b/libinterp/parse-tree/oct-parse.yy Wed Jan 25 15:28:40 2023 -0500 @@ -3164,6 +3164,10 @@ maybe_convert_to_braindead_shortcircuit (lhs); maybe_convert_to_braindead_shortcircuit (rhs); + // Operands may have changed. + binexp->lhs (lhs); + binexp->rhs (rhs); + octave_value::binary_op op_type = binexp->op_type (); if (op_type == octave_value::op_el_and || op_type == octave_value::op_el_or)
--- a/libinterp/parse-tree/pt-binop.h Wed Jan 25 14:38:20 2023 +0100 +++ b/libinterp/parse-tree/pt-binop.h Wed Jan 25 15:28:40 2023 -0500 @@ -90,6 +90,9 @@ tree_expression * lhs (void) { return m_lhs; } tree_expression * rhs (void) { return m_rhs; } + void lhs (tree_expression *expr) { m_lhs = expr; } + void rhs (tree_expression *expr) { m_rhs = expr; } + tree_expression * dup (symbol_scope& scope) const; octave_value evaluate (tree_evaluator&, int nargout = 1);