23 lines
		
	
	
		
			710 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
		
			710 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from llvmlite import ir
 | |
| 
 | |
| 
 | |
| class Environment:
 | |
| 	def __init__(self, records: dict[str, tuple[ir.Value, ir.Type]] = None, parent = None, name: str = "global") -> None:
 | |
| 		self.records: dict[str, tuple[ir.Value, ir.Type]] = records if records else {}
 | |
| 		self.parent = parent
 | |
| 		self.name: str = name
 | |
| 
 | |
| 	def define(self, name: str, value: ir.Value, _type: ir.Type) -> ir.Value:
 | |
| 		self.records[name] = (value, _type)
 | |
| 		return value
 | |
| 	
 | |
| 	def lookup(self, name: str) -> tuple[ir.Value, ir.Type]:
 | |
| 		return self.__resolve(name)
 | |
| 	
 | |
| 	def __resolve(self, name: str) -> tuple[ir.Value, ir.Type]:
 | |
| 		if name in self.records:
 | |
| 			return self.records[name]
 | |
| 		elif self.parent:
 | |
| 			return self.parent.__resolve(name)
 | |
| 		else:
 | |
| 			return None | 
