void type_print( struct type *t ){ if(!t) return; switch(t->kind){ case TYPE_BOOLEAN: printf("boolean"); break; case TYPE_CHARACTER: printf("char"); break; case TYPE_INTEGER: printf("integer"); break; case TYPE_STRING: printf("string"); break; case TYPE_ARRAY: printf("array ["); expr_print(t->opt_expr); printf("] "); type_print(t->subtype); break; case TYPE_FUNCTION: printf("function "); type_print(t->subtype); printf("( "); param_list_print(t->params); printf(" )"); break; case TYPE_VOID: printf("void"); break; } }
void param_list_print(struct param_list *a) { if (!a) return; printf("%s: ", a->name); type_print(a->type); if (a->next) { printf(", "); param_list_print(a->next); } }
//recursively prints out a parameter list void param_list_print(struct param_list *p){ if(!p) return; printf("%s: ", p->name); type_print(p->type); if(p->next){ printf(", "); param_list_print(p->next); } }
void param_list_print( struct param_list *a ){ if (a != NULL){ printf("%s: ",a->name); type_print(a->type); if (a->next != 0){ printf(", "); param_list_print(a->next); } } }
void type_print( struct type *t ) { if (t != NULL) { switch (t->kind){ case (TYPE_BOOLEAN): printf("boolean"); break; case (TYPE_CHARACTER): printf("char"); break; case (TYPE_INTEGER): printf("integer"); break; case (TYPE_STRING): printf("string"); break; case (TYPE_ARRAY): printf("array "); struct expr *tmp = malloc(sizeof(struct expr)); tmp = t->expr; while (tmp != NULL){ printf("["); expr_print(tmp); printf("]"); tmp = tmp->next_array_dimension; } printf(" "); if (t->subtype != 0){ type_print(t->subtype); } break; case (TYPE_FUNCTION): printf("function "); type_print(t->subtype); printf(" ("); if (t->params){ param_list_print(t->params); } printf(")"); //indent += 1; break; case (TYPE_VOID): printf("void"); break; } } }