def _checkpoint(self):
<EOL>if self._checkpoint_data is None:<EOL><INDENT>if not self._published_pre_instruction_events:<EOL><INDENT>self._published_pre_instruction_events = True<EOL>self._publish('<STR_LIT>', self.pc)<EOL>self._publish('<STR_LIT>', self.pc, self.instruction)<EOL>self._publish('<STR_LIT>', self.instruction, self._top_arguments())<EOL><DEDENT>pc = self.pc<EOL>instruction = self.instruction<EOL>old_gas = self.gas<EOL>allocated = self._allocated<EOL>arguments = self._pop_arguments()<EOL>fee = self._calculate_gas(*arguments)<EOL>self._checkpoint_data = (pc, old_gas, instruction, arguments, fee, allocated)<EOL><DEDENT>return self._checkpoint_data<EOL>
Save and/or get a state checkpoint previous to current instruction