def veval_ast_unary_op(astc: 'AstContext', local_field: 'values.Field', graph: 'graphs.Graph'): """ eval unary operation. Ex. -xx """ assert (isinstance(astc.nast, gast.gast.UnaryOp)) lineprop = utils.LineProperty(astc.lineno) unaryop = nodes.UnaryOpType.Unknown if isinstance(astc.nast.op, gast.UAdd): unaryop = nodes.UnaryOpType.UAdd if isinstance(astc.nast.op, gast.USub): unaryop = nodes.UnaryOpType.USub if isinstance(astc.nast.op, gast.Not): unaryop = nodes.UnaryOpType.Not operand = veval_ast(astc.c(astc.nast.operand), local_field, graph) operand_value = try_get_value(operand, 'unary', lineprop) node = nodes.NodeUnaryOp(operand_value, unaryop) ret_value = veval_unary.veval(unaryop, operand_value) node.set_outputs([ret_value]) graph.add_node(node) return values.ValueRef(ret_value)
def veval_ast_unary_op(astc : 'AstContext', local_field : 'values.Field', graph : 'graphs.Graph'): """ eval unary operation. Ex. -xx """ assert(isinstance(astc.nast, gast.gast.UnaryOp)) unaryop = nodes.UnaryOpType.Unknown if isinstance(astc.nast.op, gast.UAdd): unaryop = nodes.UnaryOpType.UAdd if isinstance(astc.nast.op, gast.USub): unaryop = nodes.UnaryOpType.USub if isinstance(astc.nast.op, gast.Not): unaryop = nodes.UnaryOpType.Not operand = veval_ast(astc.c(astc.nast.operand), local_field, graph) node = nodes.NodeUnaryOp(operand.get_value(), unaryop) ret_value = veval_unary.veval(unaryop, operand.get_value()) node.set_outputs([ret_value]) graph.add_node(node) return ret_value