strongly connected components
[ccc.git] / genc.c
diff --git a/genc.c b/genc.c
index 617bcf6..5ebfa29 100644 (file)
--- a/genc.c
+++ b/genc.c
@@ -176,38 +176,43 @@ void stmt_genc(struct stmt *stmt, int indent, FILE *cout)
        }
 }
 
+void fundecl_genc(struct fundecl *decl, FILE *cout)
+{
+       type_genc(decl->rtype, cout);
+       safe_fprintf(cout, "%s (", decl->ident);
+       for (int i = 0; i<decl->nargs; i++) {
+               if (i < decl->natypes)
+                       die("function with unmatched type\n");
+               safe_fprintf(cout, "%s", decl->args[i]);
+               if (i < decl->nargs - 1)
+                       safe_fprintf(cout, ", ");
+       }
+       safe_fprintf(cout, ") /*");
+       if (decl->rtype != NULL) {
+               safe_fprintf(cout, " :: ");
+               for (int i = 0; i<decl->natypes; i++) {
+                       type_print(decl->atypes[i], cout);
+                       safe_fprintf(cout, " ");
+               }
+               safe_fprintf(cout, "-> ");
+               type_print(decl->rtype, cout);
+       }
+       safe_fprintf(cout, "*/ {\n");
+       for (int i = 0; i<decl->nbody; i++)
+               stmt_genc(decl->body[i], 1, cout);
+       safe_fprintf(cout, "}\n");
+}
+
 void decl_genc(struct decl *decl, FILE *cout)
 {
        switch (decl->type) {
-       case dcomponent:
+       case dcomp:
                //TODO generate prototypes?
-               for (int i = 0; i<decl->data.dcomponent.ndecls; i++)
-                       decl_genc(decl->data.dcomponent.decls[i], cout);
+               for (int i = 0; i<decl->data.dcomp.ndecls; i++)
+                       fundecl_genc(decl->data.dcomp.decls[i], cout);
                break;
        case dfundecl:
-               type_genc(decl->data.dfun.rtype, cout);
-               safe_fprintf(cout, "%s (", decl->data.dfun.ident);
-               for (int i = 0; i<decl->data.dfun.nargs; i++) {
-                       if (i < decl->data.dfun.natypes)
-                               die("function with unmatched type\n");
-                       safe_fprintf(cout, "%s", decl->data.dfun.args[i]);
-                       if (i < decl->data.dfun.nargs - 1)
-                               safe_fprintf(cout, ", ");
-               }
-               safe_fprintf(cout, ") /*");
-               if (decl->data.dfun.rtype != NULL) {
-                       safe_fprintf(cout, " :: ");
-                       for (int i = 0; i<decl->data.dfun.natypes; i++) {
-                               type_print(decl->data.dfun.atypes[i], cout);
-                               safe_fprintf(cout, " ");
-                       }
-                       safe_fprintf(cout, "-> ");
-                       type_print(decl->data.dfun.rtype, cout);
-               }
-               safe_fprintf(cout, "*/ {\n");
-               for (int i = 0; i<decl->data.dfun.nbody; i++)
-                       stmt_genc(decl->data.dfun.body[i], 1, cout);
-               safe_fprintf(cout, "}\n");
+               fundecl_genc(decl->data.dfun, cout);
                break;
        case dvardecl:
                vardecl_genc(decl->data.dvar, 0, cout);