'Inlined version of run_machine for speed.'

def run_machine_inlined(self):

    state = self.initial_state
    cur_pos = self.cur_pos
    cur_line = self.cur_line
    cur_line_start = self.cur_line_start
    cur_char = self.cur_char
    input_state = self.input_state
    next_pos = self.next_pos
    buffer = self.buffer
    buf_start_pos = self.buf_start_pos
    buf_len = len(buffer)
    (b_action, b_cur_pos, b_cur_line, b_cur_line_start, b_cur_char, b_input_state, b_next_pos) = (None, 0, 0, 0, u'', 0, 0)
    trace = self.trace
    while 1:
        if trace:
            print ('State    %d,    %d/%d:%s    -->' % (state['number'], input_state, cur_pos, repr(cur_char)))
        action = state['action']
        if (action is not None):
            (b_action, b_cur_pos, b_cur_line, b_cur_line_start, b_cur_char, b_input_state, b_next_pos) = (action, cur_pos, cur_line, cur_line_start, cur_char, input_state, next_pos)
        c = cur_char
        new_state = state.get(c, NOT_FOUND)
        if (new_state is NOT_FOUND):
            new_state = (c and state.get('else'))
        if new_state:
            if trace:
                print ('State    %d' % new_state['number'])
            state = new_state
            if (input_state == 1):
                cur_pos = next_pos
                buf_index = (next_pos - buf_start_pos)
                if (buf_index < buf_len):
                    c = buffer[buf_index]
                    next_pos += 1
                else:
                    discard = (self.start_pos - buf_start_pos)
                    data = self.stream.read(4096)
                    buffer = (self.buffer[discard:] + data)
                    self.buffer = buffer
                    buf_start_pos += discard
                    self.buf_start_pos = buf_start_pos
                    buf_len = len(buffer)
                    buf_index -= discard
                    if data:
                        c = buffer[buf_index]
                        next_pos += 1
                    else:
                        c = u''
                if (c == u'\n'):
                    cur_char = EOL
                    input_state = 2
                elif (not c):
                    cur_char = EOL
                    input_state = 4
                else:
                    cur_char = c
            elif (input_state == 2):
                cur_char = u'\n'
                input_state = 3
            elif (input_state == 3):
                cur_line += 1
                cur_line_start = cur_pos = next_pos
                cur_char = BOL
                input_state = 1
            elif (input_state == 4):
                cur_char = EOF
                input_state = 5
            else:
                cur_char = u''
        else:
            if trace:
                print 'blocked'
            if (b_action is not None):
                (action, cur_pos, cur_line, cur_line_start, cur_char, input_state, next_pos) = (b_action, b_cur_pos, b_cur_line, b_cur_line_start, b_cur_char, b_input_state, b_next_pos)
            else:
                action = None
            break
    self.cur_pos = cur_pos
    self.cur_line = cur_line
    self.cur_line_start = cur_line_start
    self.cur_char = cur_char
    self.input_state = input_state
    self.next_pos = next_pos
    if trace:
        if (action is not None):
            print ('Doing    %s' % action)
    return action
