# HG changeset patch # User jwe # Date 1071593272 0 # Node ID c0aa75a64635a0ea03cf9efad47f9fd4ff0185a6 # Parent f6d6335c08f61309d4fcb95630984a6ece088484 [project @ 2003-12-16 16:47:52 by jwe] diff -r f6d6335c08f6 -r c0aa75a64635 src/ChangeLog --- a/src/ChangeLog Tue Dec 16 05:11:27 2003 +0000 +++ b/src/ChangeLog Tue Dec 16 16:47:52 2003 +0000 @@ -1,3 +1,20 @@ +2003-12-16 John W. Eaton + + * pt-pr-code.cc (tree_print_code::visit_complex_for_command, + tree_print_code::visit_octave_user_function_header, + tree_print_code::visit_matrix, tree_print_code::visit_cell, + tree_print_code::visit_multi_assignment): Keep track of nearest + [, {, or ( nesting level. + (tree_print_code::visit_index_expression): Likewise. Check nesting + level to decide how to print index. + (tree_print_code::reset): Also reset nesting level stack. + + * pt-pr-code.h (tree_print_code::nesting): New data member. + (tree_print_code::tree_print_code): Initialize it. + + * ov-base-mat.h (octave_base_matrix::octave_base_matrix (const MT&)): + If arg has no dimensions, resize to be 0x0. + 2003-12-15 John W. Eaton * oct-map.cc (Octave_map::assign): Use Octave_map::contents member diff -r f6d6335c08f6 -r c0aa75a64635 src/ov-base-mat.h --- a/src/ov-base-mat.h Tue Dec 16 05:11:27 2003 +0000 +++ b/src/ov-base-mat.h Tue Dec 16 16:47:52 2003 +0000 @@ -56,7 +56,11 @@ : octave_base_value () { } octave_base_matrix (const MT& m) - : octave_base_value (), matrix (m) { } + : octave_base_value (), matrix (m) + { + if (matrix.ndims () == 0) + matrix.resize (dim_vector (0, 0)); + } octave_base_matrix (const octave_base_matrix& m) : octave_base_value (), matrix (m.matrix) { } diff -r f6d6335c08f6 -r c0aa75a64635 src/pt-pr-code.cc --- a/src/pt-pr-code.cc Tue Dec 16 05:11:27 2003 +0000 +++ b/src/pt-pr-code.cc Tue Dec 16 16:47:52 2003 +0000 @@ -227,12 +227,14 @@ indent (); os << "for ["; + nesting.push ('['); tree_argument_list *lhs = cmd.left_hand_side (); if (lhs) lhs->accept (*this); + nesting.pop (); os << "] = "; tree_expression *expr = cmd.control_expr (); @@ -305,7 +307,10 @@ int len = ret_list->length (); if (len > 1 || takes_var_return) - os << "["; + { + os << "["; + nesting.push ('['); + } ret_list->accept (*this); @@ -318,7 +323,10 @@ } if (len > 1 || takes_var_return) - os << "]"; + { + nesting.pop (); + os << "]"; + } os << " = "; } @@ -336,7 +344,10 @@ int len = param_list->length (); if (len > 0 || takes_varargs) - os << "("; + { + os << "("; + nesting.push ('('); + } param_list->accept (*this); @@ -350,6 +361,7 @@ if (len > 0 || takes_varargs) { + nesting.pop (); os << ")"; newline (); } @@ -494,20 +506,38 @@ { case '(': { - os << " ("; + char nc = nesting.top (); + if ((nc == '[' || nc == '{') && expr.paren_count () == 0) + os << "("; + else + os << " ("; + nesting.push ('('); + tree_argument_list *l = *p_arg_lists; if (l) l->accept (*this); + + nesting.pop (); os << ")"; } break; case '{': { - os << " {"; + char nc = nesting.top (); + if ((nc == '[' || nc == '{') && expr.paren_count () == 0) + os << "{"; + else + os << " {"; + // We only care about whitespace inside [] and {} when we + // are defining matrix and cell objects, not when indexing. + nesting.push ('('); + tree_argument_list *l = *p_arg_lists; if (l) l->accept (*this); + + nesting.pop (); os << "}"; } break; @@ -539,6 +569,7 @@ print_parens (lst, "("); os << "["; + nesting.push ('['); tree_matrix::iterator p = lst.begin (); @@ -555,6 +586,7 @@ } } + nesting.pop (); os << "]"; print_parens (lst, ")"); @@ -568,6 +600,7 @@ print_parens (lst, "("); os << "{"; + nesting.push ('{'); tree_cell::iterator p = lst.begin (); @@ -584,6 +617,7 @@ } } + nesting.pop (); os << "}"; print_parens (lst, ")"); @@ -603,12 +637,18 @@ int len = lhs->length (); if (len > 1) - os << "["; + { + os << "["; + nesting.push ('['); + } lhs->accept (*this); if (len > 1) - os << "]"; + { + nesting.pop (); + os << "]"; + } } os << " " << expr.oper () << " "; @@ -1272,6 +1312,8 @@ { beginning_of_line = true; curr_print_indent_level = 0; + while (nesting.top () != 'n') + nesting.pop (); } void diff -r f6d6335c08f6 -r c0aa75a64635 src/pt-pr-code.h --- a/src/pt-pr-code.h Tue Dec 16 05:11:27 2003 +0000 +++ b/src/pt-pr-code.h Tue Dec 16 16:47:52 2003 +0000 @@ -27,6 +27,7 @@ #pragma interface #endif +#include #include #include "comment-list.h" @@ -44,8 +45,13 @@ tree_print_code (std::ostream& os_arg, const std::string& pfx = std::string (), bool pr_orig_txt = true) - : os (os_arg), prefix (pfx), print_original_text (pr_orig_txt), - curr_print_indent_level (0), beginning_of_line (true) { } + : os (os_arg), prefix (pfx), nesting (), + print_original_text (pr_orig_txt), + curr_print_indent_level (0), beginning_of_line (true) + { + // For "none". + nesting.push ('n'); + } ~tree_print_code (void) { } @@ -149,6 +155,8 @@ std::string prefix; + std::stack nesting; + bool print_original_text; // Current indentation.