mirror of
https://github.com/BoardWare-Genius/jarvis-models.git
synced 2025-12-13 16:53:24 +00:00
feat: runtime block value
This commit is contained in:
@ -32,9 +32,8 @@ class Runtime:
|
||||
def assignment_expression(self, ast):
|
||||
id = ast.get("identifier").get("name")
|
||||
v = ast.get("value")
|
||||
l = self.literal(v)
|
||||
self.records[id] = self.unquote(v)
|
||||
|
||||
self.set_identifier_value(id, self.unquote(v))
|
||||
|
||||
def _is_call_function(self, ast):
|
||||
return ast["type"] == "CallExpression"
|
||||
|
||||
@ -44,14 +43,32 @@ class Runtime:
|
||||
unquoted_args = []
|
||||
for arg in args:
|
||||
unquoted_args.append(self.unquote(arg))
|
||||
fu = self.records.get(id)
|
||||
fu = self.get_identifier_value(id)
|
||||
if fu == None:
|
||||
raise Exception("Function not found: " + id)
|
||||
return fu(*unquoted_args)
|
||||
|
||||
def get_identifier_value(self, key):
|
||||
v = self.records.get(key)
|
||||
if v != None:
|
||||
return v
|
||||
if self.parent != None:
|
||||
return self.parent.get_identifier_value(key)
|
||||
return None
|
||||
|
||||
def set_identifier_value(self, key, value):
|
||||
v = self.records.get(key)
|
||||
if v != None:
|
||||
self.records[key] = value
|
||||
return
|
||||
if self.parent != None:
|
||||
self.parent.set_identifier_value(key, value)
|
||||
return
|
||||
raise Exception("Identifier not found: " + key)
|
||||
|
||||
def unquote(self, ast):
|
||||
if self._is_identifier(ast):
|
||||
return self.records.get(ast.get("name"))
|
||||
return self.get_identifier_value(ast.get("name"))
|
||||
if self._is_literal(ast):
|
||||
return self.literal(ast)
|
||||
if self._is_call_function(ast):
|
||||
|
||||
Reference in New Issue
Block a user