def visit_Module(self, node): # print 'Module' for stmt in node.body: walker = walk_ast(stmt, self.current_scope) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) utils.combine_all_data(self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_Index(self, node): # print 'Index' walker = walk_ast_for_expr(node.value, self.current_scope) self.line = walker.line utils.add_string_to_data(self.lineno, walker.data, walker.line) utils.combine_data(self.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_Dict(self, node): # print '{0}: Dict'.format(node.lineno) for value in node.values: walker = walk_ast_for_expr(value, self.current_scope) utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_Tuple(self, node): # print '{0}: Tuple'.format(node.lineno) for elt in node.elts: walker = walk_ast_for_names(elt, self.current_scope) utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_Attribute(self, node): # print '{0}: Attribute attr: {1}'.format(node.lineno, node.attr) walker = walk_ast_for_expr(node.value, self.current_scope) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) self.line += walker.line + '.' + node.attr if self.line not in self.variable_scope[self.current_scope]: self.variable_scope[self.current_scope].append(self.line) utils.add_string_to_data(node.lineno, self.data, walker.line)
def visit_Return(self, node): # print '{0}: self.line +='.format(node.lineno) utils.set_type(self.data, node.lineno, 'return') if node.value is not None: walker = walk_ast_for_expr(node.value, self.current_scope) # print walker.data # print self.data # print walker.line utils.combine_data(node.lineno, self.data, walker.data) utils.add_string_to_data(node.lineno, self.data, walker.line) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_Print(self, node): # print '{0}: Print'.format(node.lineno) # print 'Has New Line: {0}'.format(node.nl) utils.set_type(self.data, node.lineno, 'print') for value in node.values: # walker = walk_ast_for_names(value) walker = walk_ast_for_expr(value, self.current_scope) utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) self.generic_visit(node)
def visit_BinOp(self, node): walker = WalkAST(self.current_scope) walker.is_bin_op = True walker.visit(node.left) walker.visit(node.op) walker.visit(node.right) walker.line = '(' + walker.line + ')' utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) self.line += walker.line utils.add_string_to_data(node.lineno, self.data, self.line)
def visit_UnaryOp(self, node): # print '{0}:'.format(node.lineno) op_walker = walk_ast(node.op, self.current_scope) utils.combine_variable_scopes(self.variable_scope, op_walker.variable_scope) expr_walker = walk_ast_for_expr(node.operand, self.current_scope) utils.combine_variable_scopes(self.variable_scope, expr_walker.variable_scope) # print '\t' + op_walker.line + ' ' + expr_walker.line utils.add_string_to_data(node.lineno, expr_walker.data, expr_walker.line) utils.combine_data(node.lineno, self.data, expr_walker.data) self.line += op_walker.line + ' ' + expr_walker.line utils.add_string_to_data(node.lineno, self.data, self.line)
def visit_arguments(self, node): # print '{0}: Arguments'.format(self.lineno) if len(node.args) == 0: utils.setup_expressions(self.data, self.lineno) else: for arg in node.args: arg_walker = walk_ast_for_names(arg, self.current_scope) if arg_walker.line == 'self': # TODO: Decide if this removal is right arg_walker.data[self.lineno]['expressions'].remove('self') else: utils.add_string_to_data(self.lineno, arg_walker.data, arg_walker.line) utils.combine_data(self.lineno, self.data, arg_walker.data) utils.combine_variable_scopes(self.variable_scope, arg_walker.variable_scope)
def visit_Subscript(self, node): # print '{0}: Subscript'.format(node.lineno) value_walker = walk_ast_for_names(node.value, self.current_scope) utils.add_string_to_data(node.lineno, value_walker.data, value_walker.line) utils.combine_data(node.lineno, self.data, value_walker.data) utils.combine_variable_scopes(self.variable_scope, value_walker.variable_scope) slice_walker = WalkAST(self.current_scope) slice_walker.lineno = node.lineno slice_walker.visit(node.slice) utils.add_string_to_data(node.lineno, slice_walker.data, slice_walker.line) utils.combine_data(node.lineno, self.data, slice_walker.data) utils.combine_variable_scopes(self.variable_scope, slice_walker.variable_scope) self.line = '{0}[{1}]'.format(value_walker.line, slice_walker.line) utils.add_string_to_data(node.lineno, self.data, self.line)
def visit_If(self, node): # print '{0}: Stmt If'.format(node.lineno) self.line = '' test_walker = walk_ast_for_expr(node.test, self.current_scope) utils.add_string_to_data(node.lineno, test_walker.data, test_walker.line) utils.combine_data(node.lineno, self.data, test_walker.data) utils.combine_variable_scopes(self.variable_scope, test_walker.variable_scope) for stmts in [node.body, node.orelse]: for stmt in stmts: walker = walk_ast(stmt, self.current_scope) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) utils.combine_data(stmt.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) utils.remove_empty_string(self.data, stmt.lineno) utils.set_type(self.data, node.lineno, 'conditional')
def visit_BoolOp(self, node): # print '{0} BOOL_OP:'.format(node.lineno) op_walker = walk_ast_for_expr(node.op, self.current_scope) utils.combine_variable_scopes(self.variable_scope, op_walker.variable_scope) first_node = True for n in node.values: walker = walk_ast_for_expr(n, self.current_scope) utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) if first_node: first_node = False self.line += walker.line else: self.line = '(' + self.line + ' ' + op_walker.line + ' ' + \ walker.line + ')' utils.add_string_to_data(node.lineno, self.data, self.line)
def visit_List(self, node): # print '{0}: List'.format(node.lineno) if len(node.elts) == 0: utils.setup_expressions(self.data, node.lineno) self.line += '[]' utils.add_string_to_data(node.lineno, self.data, '[]') else: for e in node.elts: # walker = walk_ast_for_names(e) walker = walk_ast_for_expr(e, self.current_scope) utils.add_string_to_data(node.lineno, walker.data, walker.line) utils.combine_data(node.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) # utils.add_string_to_data(node.lineno, self.data, self.line) self.generic_visit(node.ctx) # print self.data[node.lineno]['expressions'] self.data[node.lineno]['type'] = 'list_assign' utils.remove_empty_string(self.data, node.lineno)
def visit_Assign(self, node): # print '{0}: Assign'.format(node.lineno) self.line = '' utils.set_type(self.data, node.lineno, 'assign') for target in node.targets: target_walker = walk_ast_for_names(target, self.current_scope) utils.set_assign(self.data, node.lineno, target_walker.line) utils.set_assigned_expressions( self.data, node.lineno, target_walker.line, target_walker.data[node.lineno]['expressions']) utils.combine_variable_scopes(self.variable_scope, target_walker.variable_scope) # utils.combine_data(node.lineno, self.data, target_walker.data) value_walker = walk_ast_for_expr(node.value, self.current_scope) utils.add_string_to_data(node.lineno, value_walker.data, value_walker.line) utils.combine_data(node.lineno, self.data, value_walker.data) # TODO utils.combine_variable_scopes(self.variable_scope, value_walker.variable_scope)
def visit_ClassDef(self, node): # print '{0}: ClassDef Name: {1}'.format(node.lineno, node.name) utils.set_type(self.data, node.lineno, 'class') utils.set_name(self.data, node.lineno, node.name) utils.add_class(self.data, node.name) # Add class functions # Add class variables (only self.* variables) # self.generic_visit(node) for stmts in [node.bases, node.body, node.decorator_list]: for stmt in stmts: walker = walk_ast( stmt, self.current_scope) # possibly switch scope to Class utils.add_string_to_data(stmt.lineno, walker.data, walker.line) # utils.add_function_line(self.data, node.name, stmt.lineno) utils.combine_all_data(self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) utils.add_function_to_class(self.data, walker.data, node.name) utils.add_variables_to_class(self.data, walker.variable_scope, node.name)
def visit_While(self, node): # print '{0}: While'.format(node.lineno) utils.add_loop_def(self.data, node.lineno) test_walker = WalkAST(self.current_scope) test_walker.get_names = True test_walker.visit(node.test) utils.add_string_to_data(node.lineno, test_walker.data, test_walker.line) utils.combine_data(node.lineno, self.data, test_walker.data) utils.combine_variable_scopes(self.variable_scope, test_walker.variable_scope) for stmts in [node.body, node.orelse]: for stmt in stmts: utils.add_loop_line(self.data, node.lineno, stmt.lineno) walker = walk_ast(stmt, self.current_scope) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) # utils.combine_data(stmt.lineno, self.data, walker.data) utils.combine_all_data(self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) utils.set_type(self.data, node.lineno, 'loop')
def visit_FunctionDef(self, node): # print '{0}: FunctionDef - def {1}():'.format(node.lineno, node.name) utils.set_type(self.data, node.lineno, 'func') utils.set_name(self.data, node.lineno, node.name) utils.add_function_def(self.data, node.name, node.lineno) self.variable_scope[node.name] = [] arg_walker = WalkAST(node.name) arg_walker.lineno = node.lineno arg_walker.visit(node.args) utils.combine_data(node.lineno, self.data, arg_walker.data) utils.combine_variable_scopes(self.variable_scope, arg_walker.variable_scope) for stmts in [node.body, node.decorator_list]: for stmt in stmts: walker = walk_ast(stmt, node.name) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) utils.add_function_line(self.data, node.name, stmt.lineno) # utils.combine_data(stmt.lineno, self.data, walker.data) utils.combine_all_data(self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope)
def visit_For(self, node): # print '{0}: For'.format(node.lineno) utils.add_loop_def(self.data, node.lineno) target_walker = walk_ast_for_names(node.target, self.current_scope) utils.add_string_to_data(node.lineno, target_walker.data, target_walker.line) utils.add_targets_to_data(node.lineno, self.data, target_walker.data) utils.combine_variable_scopes(self.variable_scope, target_walker.variable_scope) expr_walker = walk_ast_for_names(node.iter, self.current_scope) utils.add_string_to_data(node.lineno, expr_walker.data, expr_walker.line) utils.combine_data(node.lineno, self.data, expr_walker.data) utils.combine_variable_scopes(self.variable_scope, expr_walker.variable_scope) for stmts in [node.body, node.orelse]: for stmt in stmts: utils.add_loop_line(self.data, node.lineno, stmt.lineno) walker = walk_ast(stmt, self.current_scope) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) # utils.combine_data(stmt.lineno, self.data, walker.data) utils.combine_all_data(self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) utils.set_type(self.data, node.lineno, 'loop')
def visit_Call(self, node): # print '{0}: Call'.format(node.lineno) func_walker = walk_ast_for_names(node.func, self.current_scope) if not isinstance(node.func, ast.Name): utils.combine_data(node.lineno, self.data, func_walker.data) utils.combine_variable_scopes(self.variable_scope, func_walker.variable_scope) self.line += func_walker.line + '(' first_arg = True for arg in node.args: arg_walker = walk_ast_for_expr(arg, self.current_scope) utils.add_string_to_data(node.lineno, arg_walker.data, arg_walker.line) utils.combine_data(node.lineno, self.data, arg_walker.data) utils.combine_variable_scopes(self.variable_scope, arg_walker.variable_scope) if not first_arg: self.line += ',' first_arg = False self.line += arg_walker.line self.line += ')' utils.add_additional_lines(self.data, node.lineno, func_walker.line) utils.add_string_to_data(node.lineno, self.data, self.line)
def visit_Compare(self, node): # print '{0}: Compare'.format(node.lineno) left_walker = walk_ast_for_names(node.left, self.current_scope) utils.add_string_to_data(node.lineno, left_walker.data, left_walker.line) utils.combine_data(node.lineno, self.data, left_walker.data) utils.combine_variable_scopes(self.variable_scope, left_walker.variable_scope) self.line = left_walker.line for op, comparator in zip(node.ops, node.comparators): op_walker = walk_ast_for_expr(op, self.current_scope) utils.combine_variable_scopes(self.variable_scope, op_walker.variable_scope) comparator_walker = walk_ast_for_expr(comparator, self.current_scope) utils.add_string_to_data(node.lineno, comparator_walker.data, comparator_walker.line) utils.combine_data(node.lineno, self.data, comparator_walker.data) utils.combine_variable_scopes(self.variable_scope, comparator_walker.variable_scope) self.line += op_walker.line + comparator_walker.line
def visit_AugAssign(self, node): # print '{0}: AugAssign'.format(node.lineno) target_walker = walk_ast_for_names(node.target, self.current_scope) utils.add_string_to_data(node.lineno, target_walker.data, target_walker.line) utils.combine_data(node.lineno, self.data, target_walker.data) utils.combine_variable_scopes(self.variable_scope, target_walker.variable_scope) op_walker = walk_ast_for_expr(node.op, self.current_scope) utils.combine_variable_scopes(self.variable_scope, op_walker.variable_scope) value_walker = walk_ast_for_expr(node.value, self.current_scope) utils.combine_variable_scopes(self.variable_scope, value_walker.variable_scope) utils.add_string_to_data(node.lineno, value_walker.data, value_walker.line) utils.combine_data(node.lineno, self.data, value_walker.data) self.line = '{0}{1}{2}'.format(target_walker.line, op_walker.line, value_walker.line) utils.add_string_to_data(node.lineno, self.data, self.line) utils.set_type(self.data, node.lineno, 'assign') utils.set_assign(self.data, node.lineno, target_walker.line)
def visit_With(self, node): # print '{0}: With'.format(node.lineno) context_expr = walk_ast_for_expr(node.context_expr, self.current_scope) utils.add_string_to_data(node.lineno, context_expr.data, context_expr.line) utils.combine_data(node.lineno, self.data, context_expr.data) utils.combine_variable_scopes(self.variable_scope, context_expr.variable_scope) if node.optional_vars is not None: optional_vars_walker = walk_ast_for_names(node.optional_vars, self.current_scope) utils.set_type(self.data, node.lineno, 'assign') utils.set_assign(self.data, node.lineno, optional_vars_walker.line) utils.combine_variable_scopes(self.variable_scope, optional_vars_walker.variable_scope) for stmt in node.body: walker = walk_ast(stmt, self.current_scope) utils.add_string_to_data(stmt.lineno, walker.data, walker.line) utils.combine_data(stmt.lineno, self.data, walker.data) utils.combine_variable_scopes(self.variable_scope, walker.variable_scope) utils.remove_empty_string(self.data, stmt.lineno)