Пример #1
0
def inline_reachable_unmatched(p,
                               inline_tag,
                               compare_tag,
                               force_inline=None,
                               skip_underspec=False):
    funs = [
        pair.funs[inline_tag] for n in p.nodes if p.nodes[n].kind == 'Call'
        if p.node_tags[n][0] == compare_tag
        for pair in pairings.get(p.nodes[n].fname, [])
        if inline_tag in pair.tags
    ]

    rep = mk_graph_slice(
        p, consider_inline(funs, inline_tag, force_inline, skip_underspec))
    opts = vc_double_range(3, 3)
    while True:
        try:
            heads = problem.loop_heads_including_inner(p)
            limits = [(n, opts) for n in heads]

            for n in p.nodes.keys():
                try:
                    r = rep.get_node_pc_env((n, limits))
                except rep.TooGeneral:
                    pass

            rep.get_node_pc_env(('Ret', limits), inline_tag)
            rep.get_node_pc_env(('Err', limits), inline_tag)
            break
        except rep_graph.InlineEvent:
            continue
Пример #2
0
def inline_reachable_unmatched (p, inline_tag, compare_tag,
		force_inline = None, skip_underspec = False):
	funs = [pair.funs['C']
		for n in p.nodes
		if p.nodes[n].kind == 'Call'
		if p.node_tags[n][0] == compare_tag
		for pair in pairings.get (p.nodes[n].fname, [])
		if 'C' in pair.tags]

	rep = mk_graph_slice (p,
		consider_inline_c (funs, inline_tag, force_inline,
			skip_underspec))
	opts = vc_double_range (3, 3)
	while True:
		try:
			limits = [(n, opts) for n in p.loop_heads ()]

			for n in p.nodes.keys ():
				try:
					r = rep.get_node_pc_env ((n, limits))
				except rep.TooGeneral:
					pass

			rep.get_node_pc_env (('Ret', limits), inline_tag)
			rep.get_node_pc_env (('Err', limits), inline_tag)
			break
		except rep_graph.InlineEvent:
			continue
Пример #3
0
def split_r_err_pc_hyp(p, split, restrs, tags=None):
    (_, r_details, _, n, loop_r_max) = split
    (r_split, (r_seq_start, r_step), r_eqs) = r_details

    nc = n * r_step
    vc = vc_double_range(r_seq_start + nc, loop_r_max + 2)

    restrs = restr_others(p, ((r_split, vc), ) + restrs, 2)

    if tags == None:
        tags = p.pairing.tags

    return non_r_err_pc_hyp(tags, restrs)
Пример #4
0
def split_r_err_pc_hyp (p, split, restrs, tags = None):
	(_, r_details, _, n, loop_r_max) = split
	(r_split, (r_seq_start, r_step), r_eqs) = r_details

	nc = n * r_step
	vc = vc_double_range (r_seq_start + nc, loop_r_max + 2)

	restrs = restr_others (p, ((r_split, vc), ) + restrs, 2)

	if tags == None:
		tags = p.pairing.tags

	return non_r_err_pc_hyp (tags, restrs)
Пример #5
0
def restr_others_both (p, restrs, n, m):
	extras = [(sp, vc_double_range (n, m))
		for sp in loops_to_split (p, restrs)]
	return restrs + tuple (extras)