Fix segmentation fault causing bugs.
This commit is contained in:
		
							parent
							
								
									e5c2570bac
								
							
						
					
					
						commit
						919cfb495c
					
				
							
								
								
									
										10
									
								
								src/parser.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/parser.c
									
									
									
									
									
								
							| @ -373,6 +373,7 @@ libab_result _parse_expression(struct parser_state* state, libab_tree** store_in | ||||
| 
 | ||||
|     ll_init(&out_stack); | ||||
|     ll_init(&op_stack); | ||||
|     *store_into = NULL; | ||||
| 
 | ||||
|     while(result == LIBAB_SUCCESS && !_parser_eof(state)) { | ||||
|         enum parser_expression_type new_type = EXPR_NONE; | ||||
| @ -450,6 +451,10 @@ libab_result _parse_expression(struct parser_state* state, libab_tree** store_in | ||||
|         result = LIBAB_UNEXPECTED; | ||||
|     } | ||||
| 
 | ||||
|     if(result == LIBAB_SUCCESS && *store_into == NULL) { | ||||
|     		result = LIBAB_UNEXPECTED; | ||||
|     } | ||||
| 
 | ||||
|     ll_free(&op_stack); | ||||
|     ll_foreach(&out_stack, NULL, compare_always, _parser_foreach_free_tree); | ||||
|     ll_free(&out_stack); | ||||
| @ -460,7 +465,7 @@ libab_result _parse_expression(struct parser_state* state, libab_tree** store_in | ||||
| libab_result _parse_block(struct parser_state* state, | ||||
|         libab_tree** store_into, int expect_braces) { | ||||
|     libab_result result = LIBAB_SUCCESS; | ||||
|     libab_tree* temp; | ||||
|     libab_tree* temp = NULL; | ||||
|     result = _parser_construct_node_vec(state, state->current_match, store_into); | ||||
|     if(result == LIBAB_SUCCESS) { | ||||
|         (*store_into)->variant = BLOCK; | ||||
| @ -500,6 +505,7 @@ libab_result _parse_block(struct parser_state* state, | ||||
| 
 | ||||
|     if(result != LIBAB_SUCCESS && *store_into) { | ||||
|         libab_tree_free_recursive(*store_into); | ||||
|         *store_into = NULL; | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
| @ -517,7 +523,7 @@ libab_result libab_parser_parse(libab_parser* parser, ll* tokens, | ||||
|     result = _parse_block(&state, store_into, 0); | ||||
|     if(result == LIBAB_SUCCESS) { | ||||
|         (*store_into)->variant = BASE; | ||||
|     }  | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user