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, ")");