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 |