fix error managment
[calc.git] / parser.c
index d6cb7728a720810699c1a42bada851f18d947903..a6992c83c10dbaebcb074d155f0e10eaead341e4 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -122,7 +122,7 @@ element_t *subparser (element_t **proot, char **pstr, func_t func, int nbops, in
     }
     new->ops[0] = *proot;
     new->ops[1] = parser (*pstr, pstr, new->prio);
-    if ((new->ops[1] != NULL) && (new->ops[1] != ERROR_OP) && (new->ops[1]->prio == 9)) {
+    if ((new->ops[1] == NULL) || ((new->ops[1] != ERROR_OP) && (new->ops[1]->prio == 9))) {
         delelement (new->ops[1]);
         new->ops[1] = ERROR_OP;
     }
@@ -171,11 +171,11 @@ element_t *parser (char *str, char **next, int prio)
                 do {
                     found = 0;
                     new = parser (str + 1, &str, 0);
-                    if ((new != NULL) && (new != ERROR_OP) && (new->prio == 9)) {
+                    if ((new == NULL) || ((new != ERROR_OP) && (new->prio == 9))) {
                         delelement (new);
                         new = ERROR_OP;
                     }
-                    if (new == ERROR_OP) {
+                    if ((new == NULL) || (new == ERROR_OP)) {
                         delelement (root);
                         return ERROR_OP;
                     }
@@ -198,11 +198,11 @@ element_t *parser (char *str, char **next, int prio)
                     return ERROR_OP;
                 }
                 new = parser (str + 1, &str, 0);
-                if ((new != NULL) && (new != ERROR_OP) && (new->prio == 9)) {
+                if ((new == NULL) || ((new != ERROR_OP) && (new->prio == 9))) {
                     delelement (new);
                     new = ERROR_OP;
                 }
-                if ((new == ERROR_OP) || (*str == ',')) {
+                if ((new == NULL) || (new == ERROR_OP) || (*str == ',')) {
                     delelement (new);
                     delelement (root);
                     return ERROR_OP;