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; } }
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); }
public virtual Objeto Valor(string nombreInstancia) { SimboloVariable variable = BuscarVariable(nombreInstancia); return(variable == null ? null : variable.objeto); }