stage4/generate_c/generate_c_vardecl.cc
changeset 235 ed66dc50f31a
parent 230 816846a8d66b
child 236 c55b02ca2342
--- a/stage4/generate_c/generate_c_vardecl.cc	Sun Dec 13 11:41:22 2009 +0100
+++ b/stage4/generate_c/generate_c_vardecl.cc	Tue Dec 15 08:51:44 2009 +0100
@@ -955,7 +955,7 @@
       /* now to produce the c equivalent... */
       if ((wanted_varformat == local_vf) ||
           (wanted_varformat == init_vf) ||
-          (wanted_varformat == localinit_vf)) {
+          (wanted_varformat == localinit_vf && (current_vartype & inoutput_vt) == 0)) {
         for(int i = 0; i < list->n; i++) {
           s4o.print(s4o.indent_spaces);
           if (wanted_varformat == local_vf) {
@@ -995,8 +995,10 @@
           s4o.print(nv->get());
           s4o.print("\n" + s4o.indent_spaces);
           this->current_var_type_symbol->accept(*this);
-          if ((current_vartype & (output_vt | inoutput_vt)) != 0)
+          if ((current_vartype & output_vt) != 0)
             s4o.print(" *__");
+          else if ((current_vartype & inoutput_vt) != 0)
+            s4o.print(" *");
           else
             s4o.print(" ");
           list->elements[i]->accept(*this);
@@ -1012,7 +1014,7 @@
 
       if (wanted_varformat == foutputassign_vf) {
         for(int i = 0; i < list->n; i++) {
-          if ((current_vartype & (output_vt | inoutput_vt)) != 0) {
+          if ((current_vartype & output_vt) != 0) {
             s4o.print(s4o.indent_spaces + "if (__");
             list->elements[i]->accept(*this);
             s4o.print(" != NULL) {\n");