Files
jarvis-models/src/dotchain/runtime/runtime.py
2024-08-01 11:33:09 +08:00

41 lines
1.4 KiB
Python

class Runtime():
def __init__(self, context=None, parent=None, exteral_fun=None, name=None) -> None:
self.name = name
self.parent = parent
self.context = context if context is not None else dict()
self.exteral_fun = exteral_fun if exteral_fun is not None else dict()
def has_value(self, identifier: str) -> bool:
return identifier in self.context
def get_value(self, identifier: str):
return self.context.get(identifier)
def deep_get_value(self, id: str):
if self.has_value(id):
return self.get_value(id)
if self.parent is not None:
return self.parent.deep_get_value(id)
return None
def set_value(self, identifier: str, value):
self.context[identifier] = value
def declare(self, identifier: str, value):
if self.has_value(identifier):
raise Exception(f"Variable {identifier} is already declared")
self.set_value(identifier, value)
def assign(self, identifier: str, value):
if self.has_value(identifier):
self.set_value(identifier, value)
elif self.parent is not None:
self.parent.assign(identifier, value)
else:
raise Exception(f"Variable {identifier} is not declared")
def show_values(self):
print(self.context)