void mostrar_variables_no_referenciadas (TABLA_SIMBOLOS tabla, int nivel) /**********************************************************************/ { int i, n, j; SIMBOLO *simbolo; int hay = FALSE; /* Hay o no hay variables no referenciadas en este nivel */ for (i = 0; i < TAMANO_TABLA; ++i) { n = longitud_lista (tabla[i]); for (j = 1; j <= n; ++j) { simbolo = (SIMBOLO*) observar (tabla[i], j); if (((*simbolo).tipo == VARIABLE) && ((*simbolo).referenciada == FALSE) && ((*simbolo).nivel == nivel)) { if (hay == FALSE) { fprintf (stderr, "AVISO! (%d, %d): Variables no referenciadas en el bloque recien cerrado:\n", lineno, linepos); fprintf (stderr, "%s\n", (*simbolo).nombre); hay = TRUE; } else fprintf (stderr, "%s\n", (*simbolo).nombre); hay = TRUE; } } } }
void mostrar_parametros (LISTA lista) /**********************************************************************/ { int i, n = longitud_lista (lista); SIMBOLO *simbolo; fprintf (stderr, "[[ "); for (i = 1; i <= n; ++i) { simbolo = (SIMBOLO*) observar (lista, i); mostrar_simbolo (*simbolo); } fprintf (stderr, "]] "); }
void ocultar_parametros (TABLA_SIMBOLOS tabla, int nivel) /**********************************************************************/ { int i, j; for (i = 0; i < TAMANO_TABLA; ++i) for (j = 1; j <= longitud_lista (tabla[i]); ++j) { SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j); if (ES_PARAMETRO(*simbolo) && ((*simbolo).nivel == nivel)) (*simbolo).visible = FALSE; } }
// -------------------------------------- ContainerInspector::cambiarContainer() AlmacenObjetos * ContainerInspector::cambiarContainer(AlmacenObjetos *c) { if ( contActual != c ) { // Dejar de observar el container actual if ( contActual != NULL ) { dejarDeObservar( contActual ); } // Pasar al actual observar( c ); contActual = c; actualiza(); } return c; }
void mostrar_lista_colisiones (int i, LISTA lista) /**********************************************************************/ { int n = longitud_lista (lista); SIMBOLO *simbolo; fprintf (stderr, "%d: ", i); for (i = 1; i <= n; ++i) { simbolo = (SIMBOLO*) observar (lista, i); mostrar_simbolo (*simbolo); if ((*simbolo).tipo == ACCION) mostrar_parametros ((*simbolo).parametros); } fprintf (stderr, "\n"); }
void eliminar_parametros_ocultos (TABLA_SIMBOLOS tabla, int nivel) /**********************************************************************/ { int i, j; for (i = 0; i < TAMANO_TABLA; ++i) { j = 1; while (j <= longitud_lista (tabla[i])) { SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j); if (((*simbolo).tipo == PARAMETRO) && (!(*simbolo).visible) && ((*simbolo).nivel == nivel)) borrar (&tabla[i], j); else ++j; } } }
void eliminar_variables (TABLA_SIMBOLOS tabla, int nivel) /**********************************************************************/ { int i, j; for (i = 0; i < TAMANO_TABLA; ++i) { j = 1; while (j <= longitud_lista (tabla[i])) { SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j); if (((*simbolo).tipo == VARIABLE) && ((*simbolo).nivel == nivel)) borrar (&tabla[i], j); else ++j; } } }
void eliminar_programa (TABLA_SIMBOLOS tabla) /**********************************************************************/ { int i, j; for (i = 0; i < TAMANO_TABLA; ++i) { j = 1; while (j <= longitud_lista (tabla[i])) { SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j); if (((*simbolo).tipo == PROGRAMA) && ((*simbolo).nivel == 0)) borrar (&tabla[i], j); else ++j; } } }
SIMBOLO *buscar_simbolo (TABLA_SIMBOLOS tabla, char *nombre) /**********************************************************************/ { int sitio = hash (nombre); SIMBOLO *simbolo = NULL; int i = 1, encontrado = FALSE; while (!encontrado && (i <= longitud_lista (tabla[sitio]))) { simbolo = (SIMBOLO *) observar (tabla[sitio], i); if ((*simbolo).visible && !strcmp (nombre, (*simbolo).nombre)) encontrado = TRUE; else ++i; } return (encontrado ? simbolo : NULL); }
void eliminar_acciones (TABLA_SIMBOLOS tabla, int nivel) /**********************************************************************/ { int i, j; for (i = 0; i < TAMANO_TABLA; ++i) { j = 1; while (j <= longitud_lista (tabla[i])) { SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j); if (ES_ACCION(*simbolo) && ((*simbolo).nivel == nivel)) { liberar (&((*simbolo).parametros)); borrar (&tabla[i], j); } else ++j; } } }