Mercurial > hg > octave-lyh
diff src/pt-pr-code.cc @ 3933:f9ea3dcf58ee
[project @ 2002-05-15 03:21:00 by jwe]
author | jwe |
---|---|
date | Wed, 15 May 2002 03:21:01 +0000 |
parents | 61d4427c016e |
children | 6e86256e9c54 |
line wrap: on
line diff
--- a/src/pt-pr-code.cc +++ b/src/pt-pr-code.cc @@ -484,21 +484,53 @@ expr_has_parens = e->is_postfix_indexed (); } - tree_argument_list *list = expr.arg_list (); + SLList<tree_argument_list *> arg_lists = expr.arg_lists (); + std::string type_tags = expr.type_tags (); + SLList<string_vector> arg_names = expr.arg_names (); - if (expr.expr_type () == tree_index_expression::dot) - { - os << "." << expr.struct_elt_name (); - } - else if (list) + int n = type_tags.length (); + + Pix arg_lists_p = arg_lists.first (); + Pix arg_names_p = arg_names.first (); + + for (int i = 0; i < n; i++) { - os << " ("; - list->accept (*this); - os << ")"; - } - else if (expr_has_parens) - { - os << " ()"; + switch (type_tags[i]) + { + case '(': + { + os << " ("; + tree_argument_list *l = arg_lists (arg_lists_p); + if (l) + l->accept (*this); + os << ")"; + } + break; + + case '{': + { + os << " {"; + tree_argument_list *l = arg_lists (arg_lists_p); + if (l) + l->accept (*this); + os << "}"; + } + break; + + case '.': + { + string_vector nm = arg_names (arg_names_p); + assert (nm.length () == 1); + os << "." << nm(0); + } + break; + + default: + panic_impossible (); + } + + arg_lists.next (arg_lists_p); + arg_names.next (arg_names_p); } print_parens (expr, ")");