Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
 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)
Пример #11
0
 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)
Пример #12
0
 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')
Пример #13
0
 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)
Пример #14
0
 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)
Пример #15
0
 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)
Пример #16
0
 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)
Пример #17
0
 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')
Пример #18
0
 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)
Пример #19
0
 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')
Пример #20
0
 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)
Пример #21
0
 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
Пример #22
0
 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)
Пример #23
0
 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)