@@ -108,7 +108,6 @@ uint64_t evaluate_expression(tokenized_expression_t *expression, list_t
108108 * symbols , int * error , char * * symbol ) {
109109 stack_type * stack = create_stack ();
110110 list_t * to_free = create_list ();
111- expression_token_t * token ;
112111 expression_token_t * resolved ;
113112 operator_t op ;
114113 uint64_t res = 0 ;
@@ -158,7 +157,7 @@ uint64_t evaluate_expression(tokenized_expression_t *expression, list_t
158157 if (stack -> length == 0 ) {
159158 * error = 1 ;
160159 } else {
161- token = stack_pop (stack );
160+ expression_token_t * token = stack_pop (stack );
162161 if (token -> type != NUMBER ) {
163162 * error = 1 ;
164163 } else {
@@ -279,10 +278,7 @@ void free_expression(tokenized_expression_t *expression) {
279278 free_expression_token ((expression_token_t * )expression -> tokens -> items [i ]);
280279 }
281280 list_free (expression -> tokens );
282- for (int i = 0 ; i < expression -> symbols -> length ; i += 1 ) {
283- free_expression_token ((expression_token_t * )expression -> symbols -> items [i ]);
284- }
285- list_free (expression -> symbols );
281+ free_flat_list (expression -> symbols );
286282 free (expression );
287283}
288284
@@ -313,7 +309,7 @@ tokenized_expression_t *parse_expression(const char *str) {
313309 break ;
314310 } else if (isdigit (* current ) || * current == '\'' ) {
315311 if (tokenizer_state == STATE_VALUE ) {
316- free (list );
312+ free_expression (list );
317313 list = NULL ;
318314 goto exit ;
319315 }
@@ -326,7 +322,7 @@ tokenized_expression_t *parse_expression(const char *str) {
326322 tokenizer_state = STATE_VALUE ;
327323 } else if (* current == '(' ) {
328324 if (tokenizer_state == STATE_VALUE ) {
329- free (list );
325+ free_expression (list );
330326 list = NULL ;
331327 goto exit ;
332328 }
@@ -338,7 +334,7 @@ tokenized_expression_t *parse_expression(const char *str) {
338334 continue ;
339335 } else if (* current == ')' ) {
340336 if (stack -> length == 0 || tokenizer_state == STATE_OPERATOR ) {
341- free (list );
337+ free_expression (list );
342338 list = NULL ;
343339 goto exit ;
344340 }
@@ -349,7 +345,7 @@ tokenized_expression_t *parse_expression(const char *str) {
349345
350346 if (stack -> length <= 0 ) {
351347 expr = 0 ;
352- free (list );
348+ free_expression (list );
353349 list = NULL ;
354350 goto exit ;
355351 }
@@ -365,14 +361,14 @@ tokenized_expression_t *parse_expression(const char *str) {
365361 } else if (strchr (operator_cache , * current )) {
366362 expr = parse_operator (& current , tokenizer_state == STATE_OPERATOR );
367363 if (expr == 0 ) {
368- free (list );
364+ free_expression (list );
369365 list = NULL ;
370366 goto exit ;
371367 }
372368 tokenizer_state = STATE_OPERATOR ;
373369 } else {
374370 if (tokenizer_state == STATE_VALUE ) {
375- free (list );
371+ free_expression (list );
376372 list = NULL ;
377373 goto exit ;
378374 }
@@ -382,7 +378,7 @@ tokenized_expression_t *parse_expression(const char *str) {
382378 }
383379
384380 if (!expr ) {
385- free (list );
381+ free_expression (list );
386382 list = NULL ;
387383 goto exit ;
388384 }
0 commit comments