if node.list[0] isnotNone: for item in node.list:
list.append(self.visit(item))
return list
def visit_ValueAccess(self, node):
value = self.visit(node.arr)
left = 0
right = None
if node.left:
left = self.visit(node.left) if node.right:
right = self.visit(node.right)
if isinstance(value, (list, string)): if node.isInterval: if right isNone:
right = len(value) try: return value[left:right] except TypeError: raise InterpreterError( "cannot perform interval access with non-integers"
) else: try: return value[left] except IndexError: raise InterpreterError("index out of bounds") except TypeError: raise InterpreterError( "should only use integers to access arrays or strings"
)
ifnot isinstance(value, dict): raise InterpreterError( "infix: {} expects {}".format('"[..]"', "object, array, or string")
) ifnot isinstance(left, string): raise InterpreterError("object keys must be strings")
def visit_FunctionCall(self, node):
args = []
func_name = self.visit(node.name) if callable(func_name): if node.args isnotNone: for item in node.args:
args.append(self.visit(item)) if hasattr(func_name, "_jsone_builtin"): return func_name(self.context, *args) else: return func_name(*args) else: raise InterpreterError("{} is not callable".format(func_name))
def visit_Object(self, node):
obj = {} for key in node.obj:
obj[key] = self.visit(node.obj[key]) return obj
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.