     throw new Error('SyntaxError: Reserved word "' + @value() + '" on line ' + @line + ' can\'t be assigned') if JS_FORBIDDEN.indexOf(@value()) >= 0
   tag: 'TERMINATOR' if value == ';'
 
-  prev: @tokens[@tokens.length - 1]
-  if CALLABLE.indexOf(@tag()) >= 0 and (not prev or not prev.spaced)
+  if CALLABLE.indexOf(@tag()) >= 0 and (not @prev() or not @prev().spaced)
     tag: 'CALL_START'  if value is '('
     tag: 'INDEX_START' if value is '['
   @token tag, value

  @line += indent.match(MULTILINER).length
  @i    += indent.length
  next_character: @chunk.match(MULTI_DENT)[4]
  prev: @tokens[@tokens.length - 2]
  no_newlines: next_character is '.' or (@value() and @value().match(NO_NEWLINE) and prev and (prev[0] isnt '.') and not @value().match(CODE))
  return @suppress_newlines(indent) if no_newlines
  size: indent.match(LAST_DENTS).reverse()[0].match(LAST_DENT)[1].length


# Look at a tag in the current token stream.
lex::tag: (index, tag) ->
  return unless tok: @prev(index)
  return tok[0]: tag if tag?
  tok[0]

# Look at a value in the current token stream.
lex::value: (index, val) ->
  return unless tok: @prev(index)
  return tok[1]: val if val?
  tok[1]

# Look at a previous token.
lex::prev: (index) ->
  @tokens[@tokens.length - (index or 1)]

# Count the occurences of a character in a string.
lex::count: (string, letter) ->
