def values(self, tree): """ Parses a values subtree """ subtree = tree.child(0) if hasattr(subtree, 'data'): if subtree.data == 'string': return self.string(subtree) elif subtree.data == 'boolean': return self.boolean(subtree) elif subtree.data == 'list': return self.list(subtree) elif subtree.data == 'number': return self.number(subtree) elif subtree.data == 'time': return self.time(subtree) elif subtree.data == 'map': return self.map(subtree) elif subtree.data == 'regular_expression': return self.regular_expression(subtree) elif subtree.data == 'types': return self.types(subtree) elif subtree.data == 'void': return None internal_assert(subtree.type == 'NAME') return self.path(tree)
def values(self, tree): """ Parses a values subtree """ subtree = tree.child(0) if hasattr(subtree, "data"): if subtree.data == "string": return self.string(subtree) elif subtree.data == "boolean": return self.boolean(subtree) elif subtree.data == "list": return self.list(subtree) elif subtree.data == "number": return self.number(subtree) elif subtree.data == "time": return self.time(subtree) elif subtree.data == "map": return self.map(subtree) elif subtree.data == "regular_expression": return self.regular_expression(subtree) elif subtree.data == "types": return self.types(subtree) elif subtree.data == "null": return None internal_assert(subtree.type == "NAME") return self.path(tree)
def fake_base_expression(self, tree, parent): """ Process a fake base expression which can only be an expression or path as mutations and service calls have been replaced with fake paths. """ if tree.expression: return self.objects.expression(tree.expression) else: internal_assert(tree.child(0).data == "path") return self.objects.entity(tree)
def map(self, tree): items = [] for item in tree.children: child = item.child(0) if child.data == 'string': key = self.string(child) elif child.data == 'number': key = self.number(child) elif child.data == 'boolean': key = self.boolean(child) else: internal_assert(child.data == 'path') key = self.path(child) value = self.base_expression(item.child(1)) items.append([key, value]) return {'$OBJECT': 'dict', 'items': items}
def map(self, tree): items = [] for item in tree.children: child = item.child(0) if child.data == "string": key = self.string(child) elif child.data == "number": key = self.number(child) else: internal_assert(child.data == "path") key = self.path(child) value = self.base_expression(item.child(1)) items.append(f"{key}: {value}") sep = ", " return f"{{{sep.join(items)}}}"
def map(self, tree): items = [] for item in tree.children: child = item.child(0) if child.data == 'string': key = self.string(child) elif child.data == 'number': key = self.number(child) else: internal_assert(child.data == 'path') key = self.path(child) value = self.base_expression(item.child(1)) items.append(f'{key}: {value}') sep = ', ' return f'{{{sep.join(items)}}}'
def map(self, tree): items = [] for item in tree.children: child = item.child(0) if child.data == "string": key = self.string(child) elif child.data == "number": key = self.number(child) elif child.data == "boolean": key = self.boolean(child) else: internal_assert(child.data == "path") key = self.path(child) value = self.base_expression(item.child(1)) items.append([key, value]) return {"$OBJECT": "dict", "items": items}
def base_expression_assignment(self, tree, parent, position): """ Compiles a base expression into an expression, service or mutation """ service = tree.service if service: path = self.objects.names(service.path) internal_assert(not self.lines.is_variable_defined(path)) self.service(service, None, parent) elif tree.mutation: if tree.mutation.path: self.mutation_block(tree.mutation, parent) else: self.mutation_block(tree, parent) return elif tree.expression: args = [self.objects.expression(tree.expression)] self.lines.append("expression", position, args=args, parent=parent) return else: internal_assert(tree.call_expression) exp = tree.call_expression self.call_expression(exp, parent) return
def test_internal_assert_0(): with raises(InternalCompilerError) as e: internal_assert(0) assert e.value.message == "Internal Error"
def test_internal_assert_equal(): with raises(InternalCompilerError) as e: internal_assert(1, 2) assert e.value.message == "1 != 2"