public object getValor(Ambito ambito) { try { if (retornaVacio) { this.ValorAux = new Vacio(); NodoReturn n = new NodoReturn(this.ValorAux, "vacio"); return(n); } else { this.ValorAux = this.expresion.getValor(ambito); NodoReturn n = new NodoReturn(this.ValorAux, getTipo(ambito).ToLower()); return(n); } } catch (Exception e) { TError error = new TError("Ejecucion", "No se ejecuto de buena forma el retorno: Clase: " + this.clase + " | Archivo: " + ambito.archivo + " | " + e.Message, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } return(new Vacio()); }
public object getValor(Ambito ambito) { try { List <Object> valores = getValoresParam(ambito); /// GENERO MI CLAVE PARA PODER OBTENER LA FUNCION QUE DESEO Clave clave = new Clave(this.id.ToLower(), getNodoParametros(ambito), ""); /// LLAMO A LA FUNCION QUE DESEO EJECUTAR Ambito aux = AmbitoDeClase(ambito); Funcion f = aux.GetFuncion(clave); if (f != null) { this.vibililidad = f.Vibililidad; ///CREO EL AMBITO DE LA FUNCION Ambito auxliar = new Ambito(aux, this.clase.ToLower(), ambito.archivo); this.vibililidad = f.Vibililidad; if (this.vibililidad == Estatico.Vibililidad.PROTEGIDO && !(ambito.idAmbito.ToLower().Contains(Estatico.temporal.idAmbito.ToLower()))) { return(new Nulo()); } ///SETEO LOS PARAMETROS QUE RECIBE auxliar = f.seteaParametrosLocales(auxliar, valores); ///OBTENGO EL VALOR QUE DEFINE Object valor = f.Ejecutar(auxliar); if (valor is NodoReturn) { Object valorReal = ((NodoReturn)valor).valor; String tipoEsperado = f.Tipo.ToLower(); if (tipoEsperado.Equals(((NodoReturn)valor).tipo.ToLower()) || ((NodoReturn)valor).tipo.ToLower().Equals("nulo")) { this.ValorAux = valorReal; return(valorReal); } else { TError error = new TError("Semantico", "El tipo de retorno no coincide: Tipo de Funcion: \"" + tipoEsperado + "\", encontrado: \"" + ((NodoReturn)valor).tipo.ToLower() + "\" | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); return(new Nulo()); } } } else if (this.id.ToLower().Equals("buscar")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz");/// :) if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; if (valores.Count == 2) { if (valores.ElementAt(1) is int) { Object index1 = valores.ElementAt(0); int index2 = (int)valores.ElementAt(1); Object val = listado.obtenerDeLista(index1, index2); NodoReturn n = creaNodoReturn(val); this.ValorAux = n.valor; return(n.valor); } } } } else if (this.id.ToLower().Equals("obtener")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz"); if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; if (valores.ElementAt(0) is int && valores.ElementAt(1) is int) { int index1 = (int)valores.ElementAt(0); int index2 = (int)valores.ElementAt(1); Object val = listado.obtenerDeLista(index1, index2); NodoReturn n = creaNodoReturn(val); this.ValorAux = n.valor; return(n.valor); } } } else if (this.id.ToLower().Equals("insertar")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz"); if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; listado.agregarElementos(valores);/// INSERTA ELEMENTOS VACIOS return(new Vacio()); } } else { TError error = new TError("Semantico", "No existe funcion: " + this.id + " que reciba parametro: " + getMensajeError(ambito) + " | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error al Buscar la funcion, en ejecucion | Erro: " + e.Message, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } return(new Nulo()); }