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