LazyLibrary should not contain Trees
				
					
				
			altering itself during iteration is not a good idea
This commit is contained in:
		
							parent
							
								
									59a986546c
								
							
						
					
					
						commit
						680da46f5c
					
				@ -867,7 +867,7 @@ class LazyLibrary(MutableLibrary):
 | 
				
			|||||||
    This class is usually used to create a library of Patterns by mapping names to
 | 
					    This class is usually used to create a library of Patterns by mapping names to
 | 
				
			||||||
     functions which generate or load the relevant `Pattern` object as-needed.
 | 
					     functions which generate or load the relevant `Pattern` object as-needed.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    dict: Dict[str, Union[Callable[[], 'Pattern'], Callable[[], 'Tree']]]
 | 
					    dict: Dict[str, Callable[[], 'Pattern']]
 | 
				
			||||||
    cache: Dict[str, 'Pattern']
 | 
					    cache: Dict[str, 'Pattern']
 | 
				
			||||||
    _lookups_in_progress: Set[str]
 | 
					    _lookups_in_progress: Set[str]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -879,7 +879,7 @@ class LazyLibrary(MutableLibrary):
 | 
				
			|||||||
    def __setitem__(
 | 
					    def __setitem__(
 | 
				
			||||||
            self,
 | 
					            self,
 | 
				
			||||||
            key: str,
 | 
					            key: str,
 | 
				
			||||||
            value: Union['Pattern', Callable[[], 'Pattern'], Callable[[], 'Tree']],
 | 
					            value: Union['Pattern', Callable[[], 'Pattern']],
 | 
				
			||||||
            ) -> None:
 | 
					            ) -> None:
 | 
				
			||||||
        if key in self.dict:
 | 
					        if key in self.dict:
 | 
				
			||||||
            raise LibraryError(f'"{key}" already exists in the library. Overwriting is not allowed!')
 | 
					            raise LibraryError(f'"{key}" already exists in the library. Overwriting is not allowed!')
 | 
				
			||||||
@ -913,16 +913,8 @@ class LazyLibrary(MutableLibrary):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self._lookups_in_progress.add(key)
 | 
					        self._lookups_in_progress.add(key)
 | 
				
			||||||
        func = self.dict[key]
 | 
					        func = self.dict[key]
 | 
				
			||||||
        pat_or_tree = func()
 | 
					        pat = func()
 | 
				
			||||||
        self._lookups_in_progress.remove(key)
 | 
					        self._lookups_in_progress.remove(key)
 | 
				
			||||||
        if isinstance(pat_or_tree, Tree):
 | 
					 | 
				
			||||||
            tree = pat_or_tree
 | 
					 | 
				
			||||||
            pat = tree[tree.top]
 | 
					 | 
				
			||||||
            del tree[tree.top]
 | 
					 | 
				
			||||||
            self.add(tree)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            pat = pat_or_tree
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.cache[key] = pat
 | 
					        self.cache[key] = pat
 | 
				
			||||||
        return pat
 | 
					        return pat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user