'Adds the information from the last run to the current path.'

def _manage_callstack(self, state):

    if (state.scratch.bbl_addr_list is not None):
        block_addr_to_jumpkind = {}
        for (i, bbl_addr) in enumerate(state.scratch.bbl_addr_list):
            try:
                (block_size, jumpkind) = block_addr_to_jumpkind[bbl_addr]
            except KeyError:
                if self._project.is_hooked(bbl_addr):
                    if issubclass(self._project.hooked_by(bbl_addr), SimProcedure):
                        block_size = None
                        jumpkind = 'Ijk_Ret'
                    else:
                        block_size = None
                        jumpkind = 'Ijk_Boring'
                elif self._project._simos.is_syscall_addr(bbl_addr):
                    block_size = None
                    jumpkind = 'Ijk_Ret'
                else:
                    block = self._project.factory.block(bbl_addr, backup_state=state)
                    block_size = block.size
                    jumpkind = block.vex.jumpkind
                block_addr_to_jumpkind[bbl_addr] = (block_size, jumpkind)
            if (jumpkind == 'Ijk_Call'):
                if (i == (len(state.scratch.bbl_addr_list) - 1)):
                    call_site_addr = (state.scratch.bbl_addr_list[(i - 1)] if (i > 0) else None)
                    self._manage_callstack_call(state=state, call_site_addr=call_site_addr)
                    if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                        self._add_stack_region_mapping(state)
                else:
                    call_site_addr = state.scratch.bbl_addr_list[i]
                    func_addr = state.scratch.bbl_addr_list[(i + 1)]
                    stack_ptr = state.scratch.stack_pointer_list[(i + 1)]
                    ret_addr = (bbl_addr + block_size)
                    self._manage_callstack_call(call_site_addr=call_site_addr, func_addr=func_addr, stack_ptr=stack_ptr, ret_addr=ret_addr)
                    if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                        self._add_stack_region_mapping(state, sp=stack_ptr, ip=func_addr)
            elif jumpkind.startswith('Ijk_Sys'):
                if (i == (len(state.scratch.bbl_addr_list) - 1)):
                    call_site_addr = (state.scratch.bbl_addr_list[(i - 1)] if (i > 0) else None)
                    self._manage_callstack_sys(state=state, call_site_addr=call_site_addr)
                    if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                        self._add_stack_region_mapping(state)
                else:
                    call_site_addr = state.scratch.bbl_addr_list[i]
                    func_addr = state.scratch.bbl_addr_list[(i + 1)]
                    stack_ptr = state.scratch.stack_pointer_list[(i + 1)]
                    ret_addr = (bbl_addr + block_size)
                    self._manage_callstack_sys(call_site_addr=call_site_addr, func_addr=func_addr, stack_ptr=stack_ptr, ret_addr=ret_addr, jumpkind=jumpkind)
                    if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                        self._add_stack_region_mapping(state, sp=stack_ptr, ip=func_addr)
            elif (jumpkind == 'Ijk_Ret'):
                if (i == (len(state.scratch.bbl_addr_list) - 1)):
                    ret_site_addr = (state.scratch.bbl_addr_list[(i - 1)] if (i > 0) else None)
                else:
                    ret_site_addr = state.scratch.bbl_addr_list[i]
                self._manage_callstack_ret(ret_site_addr)
    else:
        call_site_addr = (self.previous_run.addr if self.previous_run else None)
        if (state.history.last_jumpkind == 'Ijk_Call'):
            self._manage_callstack_call(state=state, call_site_addr=call_site_addr)
            if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                self._add_stack_region_mapping(state)
        elif state.history.last_jumpkind.startswith('Ijk_Sys'):
            self._manage_callstack_sys(state=state, call_site_addr=call_site_addr)
            if ((o.REGION_MAPPING in self.state.options) and (o.ABSTRACT_MEMORY not in self.state.options)):
                self._add_stack_region_mapping(state)
        elif (state.history.last_jumpkind == 'Ijk_Ret'):
            ret_site_addr = call_site_addr
            self._manage_callstack_ret(ret_site_addr)
        self.callstack.top.block_counter[state.scratch.bbl_addr] += 1
