예제 #1
0
        public virtual void GuardarVariable(string instancia, Objeto dato)
        {
            string keyInstancia     = null;
            bool   estabaAlmacenado = false;

            for (int n = nivel; n >= 0; n--)
            {
                keyInstancia     = instancia.ToLower() + SEPARADOR_NIVEL + n;
                estabaAlmacenado = tablaDeVariables.ContainsKey(keyInstancia);
                if (estabaAlmacenado)
                {
                    break;
                }
            }
            if (estabaAlmacenado && dato.GetType() != Nulo.NULO.GetType())
            {
                SimboloVariable simboloAlmacenado = tablaDeVariables[keyInstancia];
                Type            tipoAnterior      = simboloAlmacenado.objeto.GetType();
                Type            tipoNuevo         = dato.GetType();
                bool            sonDelMismoTipo   = tipoAnterior == Nulo.NULO.GetType() || tipoNuevo == tipoAnterior ||
                                                    tipoNuevo.IsSubclassOf(tipoAnterior.BaseType);
                if (!sonDelMismoTipo)
                {
                    throw new LanguageException("A la instacia " + instancia + " solo se le pueden asignar " + simboloAlmacenado.objeto.GetType().Name + " y se le está tratando de asignar: " + dato.GetType().Name);
                }
                simboloAlmacenado.objeto = dato;
            }
            else
            {
                string          nombreDeLainstancia = instancia.ToLower();
                SimboloVariable s = new SimboloVariable(this, nivel, instancia, dato);
                tablaDeVariables[nombreDeLainstancia + SEPARADOR_NIVEL + nivel] = s;
            }
        }
예제 #2
0
        private SimboloVariable BuscarVariable(string nombreInstancia)
        {
            string instancia = nombreInstancia.ToLower();

            for (int i = nivel; i >= 0; i--)
            {
                string keyInstancia = instancia + SEPARADOR_NIVEL + i;
                if (tablaDeVariables.ContainsKey(keyInstancia))
                {
                    SimboloVariable s = tablaDeVariables[keyInstancia];
                    return(s);
                }
            }
            return(null);
        }
예제 #3
0
        public virtual Objeto Valor(string nombreInstancia)
        {
            SimboloVariable variable = BuscarVariable(nombreInstancia);

            return(variable == null ? null : variable.objeto);
        }