VARIABLESSSS
This commit is contained in:
23
environment.py
Normal file
23
environment.py
Normal file
@@ -0,0 +1,23 @@
|
||||
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
|
||||
Reference in New Issue
Block a user