Mercurial > hg > octave-nkf
comparison src/pt-exp.cc @ 2665:02f298ddf9f6
[project @ 1997-02-08 23:47:34 by jwe]
author | jwe |
---|---|
date | Sat, 08 Feb 1997 23:47:34 +0000 |
parents | d21eb2d6e135 |
children | 9aeba8e006a4 |
comparison
equal
deleted
inserted
replaced
2664:9ccca1037db3 | 2665:02f298ddf9f6 |
---|---|
689 tree_simple_assignment_expression::left_hand_side_id (void) | 689 tree_simple_assignment_expression::left_hand_side_id (void) |
690 { | 690 { |
691 return lhs->ident (); | 691 return lhs->ident (); |
692 } | 692 } |
693 | 693 |
694 // ??? FIXME ??? -- should this return the value of the RHS instead? | |
695 | |
696 // ??? FIXME ??? -- should octave_variable_reference::assign return | 694 // ??? FIXME ??? -- should octave_variable_reference::assign return |
697 // the right thing for us to return? | 695 // the right thing for us to return? |
698 | 696 |
699 octave_value | 697 octave_value |
700 tree_simple_assignment_expression::eval (bool print) | 698 tree_simple_assignment_expression::eval (bool print) |
701 { | 699 { |
702 assert (etype == tree_expression::assignment); | 700 assert (etype == tree_expression::assignment); |
703 | 701 |
704 octave_value retval; | 702 octave_value retval; |
705 | 703 |
704 octave_value lhs_val; | |
705 | |
706 if (error_state) | 706 if (error_state) |
707 return retval; | 707 return retval; |
708 | 708 |
709 if (rhs) | 709 if (rhs) |
710 { | 710 { |
711 octave_value rhs_val = rhs->eval (false); | 711 octave_value rhs_val = rhs->eval (false); |
712 | |
712 if (error_state) | 713 if (error_state) |
713 { | 714 { |
714 eval_error (); | 715 eval_error (); |
715 } | 716 } |
716 else if (rhs_val.is_undefined ()) | 717 else if (rhs_val.is_undefined ()) |
743 ult.assign (args, rhs_val); | 744 ult.assign (args, rhs_val); |
744 | 745 |
745 if (error_state) | 746 if (error_state) |
746 eval_error (); | 747 eval_error (); |
747 else | 748 else |
748 retval = ult.value (); | 749 { |
750 lhs_val = ult.value (); | |
751 | |
752 retval = rhs_val; | |
753 } | |
749 } | 754 } |
750 else | 755 else |
751 error ("??? invalid index list ???"); | 756 error ("??? invalid index list ???"); |
752 } | 757 } |
753 } | 758 } |
754 else | 759 else |
755 { | 760 { |
756 ult.assign (rhs_val); | 761 ult.assign (rhs_val); |
757 retval = ult.value (); | 762 |
763 lhs_val = ult.value (); | |
764 | |
765 retval = rhs_val; | |
758 } | 766 } |
759 } | 767 } |
760 } | 768 } |
761 } | 769 } |
762 | 770 |
763 if (! error_state && print && retval.is_defined ()) | 771 // Return value is RHS value, but the value we print is the complete |
764 retval.print_with_name (lhs->name ()); | 772 // LHS value so that expressions like x(2) = 2 (for x previously |
773 // undefined) print b = [ 0; 2 ], which is more Matlab-like. | |
774 | |
775 if (! error_state && print && lhs_val.is_defined ()) | |
776 lhs_val.print_with_name (lhs->name ()); | |
765 | 777 |
766 return retval; | 778 return retval; |
767 } | 779 } |
768 | 780 |
769 void | 781 void |