'Handles the role compilation step, returning a flat list of tasks
with the lowest level dependencies first. For example, if a role R
has a dependency D1, which also has a dependency D2, the tasks from
D2 are merged first, followed by D1, and lastly by the tasks from
the parent role R last. This is done for all roles in the Play.'

def _compile_roles(self):

    block_list = []
    if (len(self.roles) > 0):
        for r in self.roles:
            block_list.extend(r.compile(play=self))
    return block_list
