[bugfix] don't push symbols doubly to captured variable list
This commit is contained in:
		
							parent
							
								
									9a3ff987af
								
							
						
					
					
						commit
						189487b026
					
				|  | @ -196,6 +196,23 @@ lookup_scope(analyze_scope *scope, pic_sym sym) | |||
|   return false; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| capture_var(analyze_scope *scope, pic_sym sym) | ||||
| { | ||||
|   pic_sym *var; | ||||
|   size_t i; | ||||
| 
 | ||||
|   for (i = 0; i < scope->captures.size; ++i) { | ||||
|     var = xv_get(&scope->captures, i); | ||||
|     if (*var == sym) { | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|   if (i == scope->captures.size) { | ||||
|     xv_push(&scope->captures, &sym); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| find_var(analyze_state *state, pic_sym sym) | ||||
| { | ||||
|  | @ -205,7 +222,7 @@ find_var(analyze_state *state, pic_sym sym) | |||
|   while (scope) { | ||||
|     if (lookup_scope(scope, sym)) { | ||||
|       if (depth > 0) { | ||||
|         xv_push(&scope->captures, &sym); | ||||
|         capture_var(scope, sym); | ||||
|       } | ||||
|       return depth; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Yuichi Nishiwaki
						Yuichi Nishiwaki