def visit_Assign(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node node.value = self.visit(node.value) if not node.value: return return node
def visit_ClassDef(self, node): if __debug__: state.log.debug("transform %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return node self.generic_visit(node) return node
def visit_If(self, node): if not bases.has_parent_node(node, bases.TastyCBase.protocol_name): return if isinstance(node.test, Attribute): symbol_record = self.symbol_table.identify(get_fqnn(node.test)) node.test.return_info = (symbol_record["kwargs"], ) else: self.visit(node.test) if not hasattr(node.test, "return_info"): raise NotImplementedError( "Inferency of test component of 'if' code not implemented" % type(node.test)) for i in node.body: self.visit(i) while True: else_ = node.orelse num_items = len(else_) if num_items == 1: if isinstance(else_[0], If): node = else_[0] for i in node.body: self.visit(i) else: for i in else_: self.visit(i) break else: break
def visit_If(self, node): if __debug__: state.log.debug("\npass dispatch %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return for i in node.body: self.visit(i)
def visit_Expr(self, node): if __debug__: state.log.debug("\npass dispatch %s", dump(node)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return self.visit(node.value) assert hasattr(node, "value")
def visit_AugAssign(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node assert not isinstance(node.op, LShift) if self.check_remove(node): return return node
def visit_Expr(self, node): if __debug__: state.log.debug("transform %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return node node.value = self.visit(node.value) if not node.value: return return node
def visit_Call(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node if __debug__: state.log.debug("\nprune %s", dump(node)) if node.methodname in ("output", "setup_output", "input"): return node if self.check_remove(node): return return node
def visit_For(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node new_body = list() for i in node.body: tmp = self.visit(i) if tmp: new_body.append(tmp) node.body = new_body if not node.body: return return node
def visit_If(self, node): if __debug__: state.log.debug("transform %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return node new_body = list() for i in node.body: tmp = self.visit(i) if tmp: new_body.append(tmp) node.body = new_body if not new_body: return return node
def visit_If(self, node): # state.log.debug("\ncosts %s", dump(node, True, True)) if not bases.has_parent_node(node, bases.TastyCBase.protocol_name): return if isinstance(node.test, Attribute) or isinstance(node.test, Subscript): return_rec = node.test.return_info[0] self.cost_obj( **return_rec["type"].calc_costs("__nonzero__", tuple(), (return_rec["bitlen"],), (return_rec["dim"],), node.role, node.passive, self.precompute)) else: self.visit(node.test) for i in node.body: self.visit(i)
def visit_Call(self, node): if __debug__: state.log.debug("transform %s", dump(node)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return node if node.call_type == CALL_TYPE_CTOR: return self.visit_Constructor(node) elif node.call_type == CALL_TYPE_TASTY_FUNC_CALL: return self.visit_tasty_func_call(node) elif node.call_type == CALL_TYPE_TASTY_FUNC_CTOR: return self.visit_tasty_func_ctor(node) elif node.call_type == CALL_TYPE_METHOD: return self.visit_Method(node) else: raise ValueError("found unsupported value %r for node.call_type" % node.call_type)
def visit_Assign(self, node): if __debug__: state.log.debug("\npass dispatch pre %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return self.visit(node.value) if isinstance(node.value, Attribute): symbol_record = self.symbol_table.identify(get_fqnn(node.value)) symbol_record[ "bitmask"] = node.bitmask = Value.S_ONLINE if node.role else Value.C_ONLINE elif isinstance(node.value, Num): node.bitmask = 15 else: node.bitmask = node.value.bitmask assert hasattr(node, "bitmask")
def visit_Call(self, node): """ """ if not bases.has_parent_node(node, bases.TastyCBase.protocol_name): return if node.call_type == CALL_TYPE_CTOR: self.visit_constructor(node) elif node.call_type == CALL_TYPE_TASTY_FUNC_CALL: self.visit_tasty_function_call(node) elif node.call_type == CALL_TYPE_TASTY_FUNC_CTOR: self.visit_tasty_function_ctor(node) elif node.call_type == CALL_TYPE_METHOD: self.visit_method(node) elif node.call_type == CALL_TYPE_CONVERSION: self.visit_conversion(node) else: raise ValueError("found unsupported value %r for node.call_type" % node.call_type)
def visit_Subscript(self, node): if not has_parent_node(node, self.protocol_name): return if __debug__: state.log.debug("\ninfer %d %s", id(node), dump(node, True, True)) fqnn = get_fqnn(node.value) symbol_record = self.symbol_table.identify(fqnn) kwargs = symbol_record["kwargs"] node_type = kwargs["type"] node.initial_info = kwargs node.input_types = tuple() node.bit_lengths = (kwargs["bitlen"], ) node.dims = (kwargs["dim"], ) node.signeds = (kwargs["signed"], ) node.methodname = "__getitem__" node.return_info = node_type.returns(node.methodname, node.input_types, node.bit_lengths, node.dims, node.signeds)
def visit_Assign(self, node): if not has_parent_node(node, self.protocol_name): return if __debug__: state.log.debug("\ninfer %s", dump(node, True, True)) value_node = node.value try: annotate_node(value_node) except (NotImplementedError, UnknownSymbolError): self.visit(value_node) if __debug__: state.log.debug("\nactual node %s", dump(node, True, True)) assert hasattr(value_node, "return_info") for target in node.targets: handle_target_node(self, target, value_node) self.symbol_table.dump()
def visit_Assign(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node if __debug__: state.log.debug("prune %s", dump(node, True, True)) node.value = self.visit(node.value) if not node.value or self.check_remove(node): for target in node.targets: if (isinstance(target, Attribute) or isinstance(target, Subscript)): self.symbol_table.remove_symbol(get_fqnn(target)) elif isinstance(target, Tuple): for item in target.elts: self.symbol_table.remove_symbol(get_fqnn(item)) elif isinstance(target, Name): self.symbol_table.remove_symbol(get_fqnn(target)) else: raise NotImplementedError("pruning of assign " \ "for node %r not yet implemented" % type(target)) return return node
def visit_Compare(self, node): if not has_parent_node(node, bases.TastyCBase.protocol_name): return node return node
def visit_Compare(self, node): if __debug__: state.log.debug("\npass dispatch %s", dump(node, True, True)) if not has_parent_node(node, bases.TastyCBase.protocol_name): return self.check_affects(node)