def insert_loop_token(old_loop_tokens, loop_token): # Find where in old_loop_tokens we should insert this new loop_token. # The following algo means "as late as possible, but before another # loop token that would be more general and so completely mask off # the new loop_token". for i in range(len(old_loop_tokens)): if more_general_specnodes(old_loop_tokens[i].specnodes, loop_token.specnodes): old_loop_tokens.insert(i, loop_token) break else: old_loop_tokens.append(loop_token)
def test_more_general_specnodes(): assert more_general_specnodes([prebuiltNotSpecNode, prebuiltNotSpecNode], [prebuiltNotSpecNode, prebuiltNotSpecNode]) vspecnode1 = _get_vspecnode(1) vspecnode2 = _get_vspecnode(2) assert more_general_specnodes([vspecnode1], [vspecnode1]) assert not more_general_specnodes([vspecnode1], [vspecnode2]) assert not more_general_specnodes([vspecnode1], [prebuiltNotSpecNode]) assert more_general_specnodes([prebuiltNotSpecNode], [vspecnode2]) aspecnode1 = _get_aspecnode(1) aspecnode2 = _get_aspecnode(2) assert more_general_specnodes([aspecnode2], [aspecnode2]) assert not more_general_specnodes([aspecnode1], [aspecnode2]) assert not more_general_specnodes([aspecnode1], [prebuiltNotSpecNode]) assert more_general_specnodes([prebuiltNotSpecNode], [aspecnode2]) sspecnode1 = _get_sspecnode() assert more_general_specnodes([sspecnode1], [sspecnode1]) assert not more_general_specnodes([sspecnode1], [prebuiltNotSpecNode]) assert more_general_specnodes([prebuiltNotSpecNode], [sspecnode1]) # foonode = _get_cspecnode('foo') barnode = _get_cspecnode('bar') assert more_general_specnodes([foonode], [foonode]) assert not more_general_specnodes([foonode], [barnode]) assert not more_general_specnodes([foonode], [prebuiltNotSpecNode]) assert more_general_specnodes([prebuiltNotSpecNode], [foonode])