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 ist noch experimentell.