]> git.llucax.com Git - z.facultad/75.42/calculadora.git/commitdiff
- Se usa el memdug en ParseError y Equation.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 15 Sep 2003 06:44:27 +0000 (06:44 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 15 Sep 2003 06:44:27 +0000 (06:44 +0000)
- Se agrega una función para borrar una lista de ecuaciones.
- Se hace que la prueba de parser pueda obtener varios parámetros.

Makefile
documentacion.h
equation.c
parseerror.c
parser_equation.c
parser_equation.h
parser_equation_test.c

index 98e04837af99fe72a2ec6996cada46361de83e49..831f9a7922b0e269356a85370d9d97934b0c174e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ dllist_test: dllist.o
 
 memdebug_test: dllist.o meminfo.o memdebug.o
 
-parser_equation_test: dllist.o parseerror.o equation.o parser_equation.o
+parser_equation_test: dllist.o parseerror.o equation.o parser_equation.o meminfo.o memdebug.o
 
 tp1: $(TARGETS)
 
index 9b9e20fcc67c16574073672acc360e04653bcf95..3c1a170c3391cc6525d0e855ee1eb795656e816d 100644 (file)
@@ -158,5 +158,6 @@ b = b * 2
         - La búsqueda en la lista al liberar la memoria se realiza de atrás hacia
           adelante para que sea más eficiente, ya que generalmente se borra primero
           la memoria que se pidió úitima. 
+        - DLList no usa el memdebug, está bastante testeada y no pierde memoria.
 
 */
index 0565244f7d0e31bcad7dbea73167da3b8227bf3b..5268bff26987d3dab9559e50d1f1d8b58fcb99ad 100644 (file)
@@ -18,6 +18,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "memdebug_debugger.h"
+
 /**
  * Copia un fragmento de una cadena devolviendo el puntero a la copia.
  */
index 71f00f413b0c1eea0b5eb644785023398f38704a..2b7147990a3a8af14fa87614cd7c99833e5a3412 100644 (file)
@@ -19,6 +19,8 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "memdebug_debugger.h"
+
 ParseError* ParseError_new(void) {
     ParseError* pe = malloc(sizeof(ParseError));
     if (pe) {
index a84925ee90b7eacd53b9419a48439423e35c4803..d76bd1dff577d8f3049541b4b72fb86b65578311 100644 (file)
@@ -47,6 +47,15 @@ size_t DLList_equation_print(DLList* l, FILE* fp) {
     return cant;
 }
 
+void DLList_equation_delete(DLList* l) {
+    if (l) {
+        while (!DLList_empty(l)) {
+            Equation_delete((Equation*)DLList_pop(l));
+        }
+    }
+    DLList_delete(l);
+}
+
 #define PARSE_ERROR(str) ParseError_set_pos_message(error, str, i + 1, c)
 
 bool parser_equation(const char* line, size_t len, DLList* equation_list,
index 9fa2f3dcc3ce85fd80b9c9c8c957d877e84dea15..1b0a18cabc9e4c4cd222f2b3e64c98474c841b9d 100644 (file)
@@ -42,4 +42,6 @@ size_t DLList_equation_print(DLList* l, FILE* fp);
 bool parser_equation(const char* line, size_t len, DLList* equation_list,
         ParseError* error);
 
+void DLList_equation_delete(DLList* l);
+
 #endif /* PARSER_EQUATION_H */
index 0f6cae2214ea7ff812667bbe1c682c7d15f7fac1..2d9be3eb684a691205c6eef60f420babb2f5e63f 100644 (file)
  */
 int main(int argc, char* argv[]) {
     /* Declaración de variables. */
+    int i;
     DLList* lista;
     ParseError* error;
 
-    if (argc != 2) {
-        fprintf(stderr, "Debe pasar la ecuación a evaluar como parámetro.\n");
-        fprintf(stderr, "Ejemplo: %s 'b = 50 + h*2'\n", argv[0]);
+    if (argc < 2) {
+        fprintf(stderr, "Debe pasar ecuaciones a evaluar como parámetros.\n");
+        fprintf(stderr, "Ejemplo: %s 'b = 50 + h*2' 'a   = b+1\n", argv[0]);
         return EXIT_FAILURE;
     }
 
@@ -55,14 +56,21 @@ int main(int argc, char* argv[]) {
         return EXIT_FAILURE;
     }
 
-    if (!parser_equation(argv[1], strlen(argv[1]), lista, error)) {
-        ParseError_print(error, stderr);
-        return EXIT_FAILURE;
+    for (i = 1; i < argc; i++) {
+        if (!parser_equation(argv[i], strlen(argv[i]), lista, error)) {
+            error->line = i;
+            ParseError_print(error, stderr);
+        }
     }
 
     DLList_equation_print(lista, stdout);
 
-    DLList_delete(lista);
+    DLList_equation_delete(lista);
+
+    ParseError_delete(error);
+
+    /* Veo si pierdo memoria. */
+    memdebug_end();
 
     return EXIT_SUCCESS;
 }