#include <stdlib.h> #include <stdio.h> #include <string.h> #include "mcc/utils.h" #include "mcc/tac_string_builder.h" char *mcc_tac_new_temporary_string(struct mcc_tac *tac) { // + 2 for character t and for \0 and + 1 in case temporay_count is 0 size_t num_digits = (size_t) mcc_get_number_of_digits(tac -> temporary_count) + 1 + 2; char *t = malloc(num_digits); if (t == NULL) { return NULL; } sprintf(t, "t%d", tac -> temporary_count); tac -> temporary_count += 1; tac -> last_temporary = t; return t; } char *mcc_tac_new_label_string(struct mcc_tac *tac) { // + 2 for character L and for \0 and + 1 in case temporay_count is 0 size_t num_digits = (size_t) mcc_get_number_of_digits(tac -> label_count) + 1 + 2; char *l = malloc(num_digits); if (l == NULL) { return NULL; } sprintf(l, "L%d", tac -> label_count); tac -> label_count += 1; tac -> last_label = l; return l; } char *concat_strs(char *prefix, char *infix, char *suffix) { size_t p_len = strlen(prefix); size_t i_len = strlen(infix); size_t s_len = strlen(suffix); char *str = malloc(sizeof(char) * (p_len + i_len + s_len + 1)); strcpy(str, prefix); strcpy(str + p_len, infix); strcpy(str + p_len + i_len, suffix); str[p_len + i_len + s_len] = '\0'; return str; } char *mcc_tac_new_return_function_name(char* function_name) { return concat_strs("$return_", function_name, ""); }