コード例 #1
0
ファイル: ParamLista.cs プロジェクト: Erikhht/tuassembler
        public override void CompararValor(EscritorC escritor)
        {
            escritor.WriteLine("//" + Definicion.Nombre);
            switch (Definicion.Tipo)
            {
                case Tipo.UInt8:
                case Tipo.Int8:
                case Tipo.Char:
                    escritor.WriteLine("struct Listachar *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearchar(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarchar(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*escritor.If("TienePunterosInvalidoschar(" + Definicion.Nombre + ")");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    escritor.If("ListaCircularchar(" + Definicion.Nombre + ")");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    */
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularchar(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");

                    escritor.If("!igualdadchar(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                    escritor.WriteLine("   cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.Int16:
                case Tipo.UInt16:
                    escritor.WriteLine("struct Listashort *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearshort(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarshort(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*                    escritor.If("TienePunterosInvalidosshort(" + Definicion.Nombre + ")");
                                        escritor.PrintPunterosInvalidos();
                                        escritor.WriteLine("return 1;");
                                        escritor.FinIf();
                                        escritor.If("ListaCircularshort(" + Definicion.Nombre + ")");
                                        escritor.PrintListaCircular();
                                        escritor.WriteLine("return 1;");
                                        escritor.FinIf();*/
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularshort(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdadshort(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.UInt32:
                case Tipo.Int32:
                    escritor.WriteLine("struct Listaint *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearint(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarint(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*escritor.If("TienePunterosInvalidosint(" + Definicion.Nombre + ")");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    escritor.If("ListaCircularint(" + Definicion.Nombre + ")");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();*/
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularint(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdadint(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.Booleano:
                    escritor.WriteLine("struct Listabool *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearbool(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarbool(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*escritor.If("TienePunterosInvalidosbool(" + Definicion.Nombre + ")");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    escritor.If("ListaCircularbool(" + Definicion.Nombre + ")");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();*/
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularbool(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdadbool(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.UInt64:
                case Tipo.Int64:
                    escritor.WriteLine("struct Listalonglong *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearlonglong(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarlonglong(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularlonglong(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdadlonglong(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.Float32:
                    escritor.WriteLine("struct Listafloat *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("crearfloat(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertarfloat(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*escritor.If("TienePunterosInvalidosfloat(" + Definicion.Nombre + ")");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    escritor.If("ListaCircularfloat(" + Definicion.Nombre + ")");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();*/
                    escritor.WriteLine("switch(PunteroInvalidoOListaCircularfloat(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdadfloat(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux," + Definicion.Precision + ")");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                case Tipo.Float64:
                    escritor.WriteLine("struct Listadouble *" + Definicion.Nombre + "listaaux;");
                    escritor.WriteLine("creardouble(&" + Definicion.Nombre + "listaaux);");
                    foreach (Elem elemento in Elementos)
                        escritor.WriteLine("insertardouble(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                    /*escritor.If("TienePunterosInvalidosdouble(" + Definicion.Nombre + ")");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();
                    escritor.If("ListaCirculardouble(" + Definicion.Nombre + ")");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.FinIf();*/
                    escritor.WriteLine("switch(PunteroInvalidoOListaCirculardouble(" + Definicion.Nombre + ")){");
                    escritor.WriteLine("case listaCircular:");
                    escritor.PrintListaCircular();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("case punteroInvalido:");
                    escritor.PrintPunterosInvalidos();
                    escritor.WriteLine("return 1;");
                    escritor.WriteLine("}");
                    escritor.If("!igualdaddouble(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux, " + Definicion.Precision + ")");
                    escritor.WriteLine("    cantErrores++;");
                    escritor.FinIf();
                    break;
                default:
                    throw new Exception(Mensajes.TipoIncorrectoListas);
            }
        }