def handle_start_expr(self, token_text):
    if self.start_of_statement():
        pass
    next_mode = MODE.Expression
    if (token_text == '['):
        if ((self.last_type == 'TK_WORD') or (self.flags.last_text == ')')):
            if ((self.last_type == 'TK_RESERVED') and (self.flags.last_text in self.line_starters)):
                self.output_space_before_token = True
            self.set_mode(next_mode)
            self.append_token(token_text)
            self.indent()
            if self.opts.space_in_paren:
                self.output_space_before_token = True
            return
        next_mode = MODE.ArrayLiteral
        if self.is_array(self.flags.mode):
            if ((self.flags.last_text == '[') or ((self.flags.last_text == ',') and ((self.last_last_text == ']') or (self.last_last_text == '}')))):
                if (not self.opts.keep_array_indentation):
                    self.append_newline()
    elif ((self.last_type == 'TK_RESERVED') and (self.flags.last_text == 'for')):
        next_mode = MODE.ForInitializer
    elif ((self.last_type == 'TK_RESERVED') and (self.flags.last_text in ['if', 'while'])):
        next_mode = MODE.Conditional
    else:
        next_mode = MODE.Expression
    if ((self.flags.last_text == ';') or (self.last_type == 'TK_START_BLOCK')):
        self.append_newline()
    elif ((self.last_type in ['TK_END_EXPR', 'TK_START_EXPR', 'TK_END_BLOCK']) or (self.flags.last_text == '.')):
        self.allow_wrap_or_preserved_newline(token_text, self.input_wanted_newline)
    elif ((not ((self.last_type == 'TK_RESERVED') and (token_text == '('))) and (self.last_type not in ['TK_WORD', 'TK_OPERATOR'])):
        self.output_space_before_token = True
    elif (((self.last_type == 'TK_RESERVED') and ((self.flags.last_word == 'function') or (self.flags.last_word == 'typeof'))) or ((self.flags.last_text == '*') and (self.last_last_text == 'function'))):
        if self.opts.jslint_happy:
            self.output_space_before_token = True
    elif ((self.last_type == 'TK_RESERVED') and ((self.flags.last_text in self.line_starters) or (self.flags.last_text == 'catch'))):
        self.output_space_before_token = True
    if (self.last_type in ['TK_EQUALS', 'TK_OPERATOR']):
        if (not self.start_of_object_property()):
            self.allow_wrap_or_preserved_newline(token_text)
    self.set_mode(next_mode)
    self.append_token(token_text)
    if self.opts.space_in_paren:
        self.output_space_before_token = True
    self.indent()
def handle_start_expr(self, token_text):
    if self.start_of_statement():
        pass
    next_mode = MODE.Expression
    if (token_text == '['):
        if ((self.last_type == 'TK_WORD') or (self.flags.last_text == ')')):
            if ((self.last_type == 'TK_RESERVED') and (self.flags.last_text in self.line_starters)):
                self.output_space_before_token = True
            self.set_mode(next_mode)
            self.append_token(token_text)
            self.indent()
            if self.opts.space_in_paren:
                self.output_space_before_token = True
            return
        next_mode = MODE.ArrayLiteral
        if self.is_array(self.flags.mode):
            if ((self.flags.last_text == '[') or ((self.flags.last_text == ',') and ((self.last_last_text == ']') or (self.last_last_text == '}')))):
                if (not self.opts.keep_array_indentation):
                    self.append_newline()
    elif ((self.last_type == 'TK_RESERVED') and (self.flags.last_text == 'for')):
        next_mode = MODE.ForInitializer
    elif ((self.last_type == 'TK_RESERVED') and (self.flags.last_text in ['if', 'while'])):
        next_mode = MODE.Conditional
    else:
        next_mode = MODE.Expression
    if ((self.flags.last_text == ';') or (self.last_type == 'TK_START_BLOCK')):
        self.append_newline()
    elif ((self.last_type in ['TK_END_EXPR', 'TK_START_EXPR', 'TK_END_BLOCK']) or (self.flags.last_text == '.')):
        self.allow_wrap_or_preserved_newline(token_text, self.input_wanted_newline)
    elif ((not ((self.last_type == 'TK_RESERVED') and (token_text == '('))) and (self.last_type not in ['TK_WORD', 'TK_OPERATOR'])):
        self.output_space_before_token = True
    elif (((self.last_type == 'TK_RESERVED') and ((self.flags.last_word == 'function') or (self.flags.last_word == 'typeof'))) or ((self.flags.last_text == '*') and (self.last_last_text == 'function'))):
        if self.opts.jslint_happy:
            self.output_space_before_token = True
    elif ((self.last_type == 'TK_RESERVED') and ((self.flags.last_text in self.line_starters) or (self.flags.last_text == 'catch'))):
        self.output_space_before_token = True
    if (self.last_type in ['TK_EQUALS', 'TK_OPERATOR']):
        if (not self.start_of_object_property()):
            self.allow_wrap_or_preserved_newline(token_text)
    self.set_mode(next_mode)
    self.append_token(token_text)
    if self.opts.space_in_paren:
        self.output_space_before_token = True
    self.indent()