'Fetch tokens until specified token appeared.
.. note:: This also handles parenthesis well.'

def fetch_until(self, condition):

    tokens = []
    while self.fetch_token():
        tokens.append(self.current)
        if (self.current == condition):
            break
        elif (self.current == [OP, '(']):
            tokens += self.fetch_until([OP, ')'])
        elif (self.current == [OP, '{']):
            tokens += self.fetch_until([OP, '}'])
        elif (self.current == [OP, '[']):
            tokens += self.fetch_until([OP, ']'])
    return tokens
