'Matches sequences of "#{", ... "}"
(which could nest).  Returns a list of all the tokens.'

def _finish_interpolating_string(self, prev_tok):

    tok1 = self.tokenizer.get_next_token()
    if ((not self.classifier.is_any_operator(tok1)) or (tok1['text'] != '#')):
        self.tokenizer.put_back(tok1)
        return [prev_tok]
    tok2 = self.tokenizer.get_next_token()
    if ((not self.classifier.is_any_operator(tok2)) or (tok2['text'] != '{')):
        self.tokenizer.put_back(tok1)
        self.tokenizer.put_back(tok2)
        return [prev_tok]
    nested_count = 1
    tok_list = [prev_tok, tok1, tok2]
    while True:
        bail_out = False
        new_tok = self.tokenizer.get_next_token()
        if (new_tok['style'] == shared_lexer.EOF_STYLE):
            bail_out = True
        elif self.classifier.is_any_operator(new_tok):
            if (new_tok['text'] == '#'):
                tok_list.append(new_tok)
                new_tok = self.tokenizer.get_next_token()
                if (self.classifier.is_any_operator(new_tok) and (new_tok['text'] == '{')):
                    nested_count += 1
                elif (nested_count == 0):
                    bail_out = True
            elif ((new_tok['text'] == '}') and (nested_count > 0)):
                nested_count -= 1
            elif (nested_count == 0):
                bail_out = True
        elif self.classifier.is_interpolating_string(new_tok, self._test_interpolate_string):
            pass
        elif (nested_count == 0):
            bail_out = True
        if bail_out:
            self.tokenizer.put_back(new_tok)
            return tok_list
        else:
            tok_list.append(new_tok)
