예제 #1
0
파일: pyc_dbg_data.py 프로젝트: 0xcc/pyc
def bloc_table(blocs):
	d = {}
	
	for bloc in blocs:
		real_insns = []

		for ins in bloc.insns:
			if isinstance(ins, pyc_asm_nodes.PseudoInst):
				continue
 
			real_insns.append({
				'sir_lineno':		ins.origin.lineno,
				'src_lineno':		pyc_lineage.src_lineno(ins.origin),
				'live':				get_vars(ins.live),
				'dummy':			False
			})
		
		bloc_src_lineno = pyc_lineage.src_lineno(bloc.origin)
		
		dummy_prefix_insns = [{
			'src_lineno': bloc_src_lineno, 
			'sir_lineno': bloc.origin.lineno,
			'live':	set([]),
			'dummy': True
		}]*bloc.preamble_size()

		dummy_suffix_insns = [{
			'src_lineno': bloc_src_lineno, 
			'sir_lineno': bloc.origin.lineno,
			'live':	set([]),
			'dummy': True
		}]*bloc.postamble_size()

		d[bloc.name] = {
			'insns':		dummy_prefix_insns + real_insns + dummy_suffix_insns,
			'src_lineno':	bloc_src_lineno,
			'sir_lineno':	bloc.origin.lineno,
			'mem_map':		bloc.symtbl.mem_map
		}

	return d
예제 #2
0
파일: pyc_sir.py 프로젝트: 0xcc/pyc
	def visit_Assign(self, node):	
		self.log("Assign(%d): %s" % (pyc_lineage.src_lineno(node), ast.dump(node) ))
		(name, name_sir_list) = pyc_vis.visit(self, node.value)

		if isinstance(node.targets[0], ast.Name):
			target = node.targets[0]
			target_sir_list = []
		else:
			(target, target_sir_list) = pyc_vis.visit(self, node.targets[0])
		
		
		sir_list = name_sir_list + target_sir_list
		sir_list.append(self.make_assign(
			target,			
			name
		))
		
		return (None, sir_list)
예제 #3
0
파일: pyc_parser.py 프로젝트: 0xcc/pyc
	def default_ast(self, node, *args, **kwargs):
		
		val = "%s():%d" % (node.__class__.__name__, pyc_lineage.src_lineno(node) )

		print >>self.io, self.format(self.depth, kwargs.get("field", ""), val)
예제 #4
0
파일: pyc_sir_to_py.py 프로젝트: 0xcc/pyc
	def lineno(self, node):
		if not self.src_line_comments:
			return self.lineno_str(node.lineno)
		else:
			return self.src_lineno_str(node.lineno, pyc_lineage.src_lineno(node) )