variable local

This commit is contained in:
sylvain099
2016-04-18 10:03:12 +02:00
parent 98749edae8
commit ee739393f1

View File

@@ -4,6 +4,7 @@
#include "util.h"
int nbArg = 0;
int nbvariableLocalFonc = 0;
int contexte = C_VARIABLE_GLOBALE;
int adresseGlobalCourante = 0;
int adresseLocaleCourante = 0;
@@ -295,6 +296,9 @@ void parcours_instr_retour(n_instr *n)
sprintf(exec,"sw %s %d($fp) #Adresse de retour",tmp , returnAdress);
printMips(exec);
sprintf(tmp,"addi $sp, $sp %d # desallocation variables locales",nbvariableLocalFonc * 4);
printMips(tmp);
finFuncreturn(1);
}
@@ -660,21 +664,23 @@ void parcours_foncDec(n_dec *n)
j++;
}
nbArg = j;
i = id;
int nbvariableLocale = 0;
dico.tab[id].complement = j;
contexte = C_VARIABLE_LOCALE;
parcours_l_dec(n->u.foncDec_.variables);
parcours_instr(n->u.foncDec_.corps);
i = id;
int nbvariableLocale = 0;
while (i+1 < dico.sommet && (dico.tab[i+1].classe == C_VARIABLE_LOCALE
|| dico.tab[i+1].classe == C_ARGUMENT)){
if(dico.tab[i+1].classe == C_VARIABLE_LOCALE)
++nbvariableLocale;
++i;
}
nbvariableLocalFonc = nbvariableLocale;
parcours_instr(n->u.foncDec_.corps);
sprintf(tmp,"addi $sp, $sp %d # desallocation variables locales",nbvariableLocale * 4);
printMips(tmp);