Example #1
0
 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());
        }