added flush
This commit is contained in:
parent
977d225f25
commit
322afd388c
2 changed files with 33 additions and 1 deletions
31
table.c
31
table.c
|
@ -2,6 +2,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define VERBOSITY 1 // 1 -> displays the table, 0 no display
|
||||||
|
|
||||||
int memorySizes[2] = {1,1};
|
int memorySizes[2] = {1,1};
|
||||||
|
|
||||||
/*At the start of the execution : the whole array is empty*/
|
/*At the start of the execution : the whole array is empty*/
|
||||||
|
@ -83,12 +85,22 @@ void clearOutOfScopeVariable(){
|
||||||
|
|
||||||
// and we free their memory (i.e. decrease esp)
|
// and we free their memory (i.e. decrease esp)
|
||||||
esp -= memoryFreed;
|
esp -= memoryFreed;
|
||||||
|
|
||||||
|
if (VERBOSITY) {
|
||||||
|
printf("\n\nclearOutOfScopeVariable::After");
|
||||||
|
displayTable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* sets the init state of the symbol to true */
|
/* sets the init state of the symbol to true */
|
||||||
void setInit(char *name){
|
void setInit(char *name){
|
||||||
symbolTable[getIndex(name)].init = true;
|
symbolTable[getIndex(name)].init = true;
|
||||||
|
|
||||||
|
if (VERBOSITY) {
|
||||||
|
printf("\n\nsetInit %s", name);
|
||||||
|
displayTable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*creates a new structure and updates variables*/
|
/*creates a new structure and updates variables*/
|
||||||
|
@ -115,14 +127,31 @@ void addElement(char* name, enumVarType type){
|
||||||
currentIndex ++;
|
currentIndex ++;
|
||||||
|
|
||||||
esp += memorySizes[type];
|
esp += memorySizes[type];
|
||||||
|
|
||||||
|
if (VERBOSITY) {
|
||||||
|
printf("\n\nAddElement %s", name);
|
||||||
|
displayTable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* removes all symbols */
|
||||||
|
void flushSymbolTable(){
|
||||||
|
currentIndex = 0;
|
||||||
|
checkArraySanity();
|
||||||
|
if (VERBOSITY) {
|
||||||
|
printf("\n\nflushSymbolTable::After");
|
||||||
|
displayTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*Checks for the length of the array and reallocates if necessary*/
|
/*Checks for the length of the array and reallocates if necessary*/
|
||||||
void checkArraySanity(){
|
void checkArraySanity(){
|
||||||
if (currentIndex == maxIndex){
|
if (currentIndex == maxIndex){
|
||||||
reallocateArray(maxIndex * 2);
|
reallocateArray(maxIndex * 2);
|
||||||
} else {
|
} else {
|
||||||
if (currentIndex < maxIndex / 2){
|
if (currentIndex < maxIndex / 2 && maxIndex / 2 > START_TABLE_SIZE){
|
||||||
reallocateArray(maxIndex / 2);
|
reallocateArray(maxIndex / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
table.h
3
table.h
|
@ -44,6 +44,9 @@ void initSymbolTable();
|
||||||
/* removes all symbols associated with the current Depth*/
|
/* removes all symbols associated with the current Depth*/
|
||||||
void clearOutOfScopeVariable();
|
void clearOutOfScopeVariable();
|
||||||
|
|
||||||
|
/* removes all symbols */
|
||||||
|
void flushSymbolTable();
|
||||||
|
|
||||||
|
|
||||||
/* Adds an element */
|
/* Adds an element */
|
||||||
void addElement(char* name, enumVarType type);
|
void addElement(char* name, enumVarType type);
|
||||||
|
|
Loading…
Reference in a new issue