       tag: 'CALL_START'  if value is '('
       tag: 'INDEX_START' if value is '['
     @i += value.length
-    if space and prev_spaced and @prev()[0] is 'ASSIGN' and include HALF_ASSIGNMENTS, tag
-      last: @tokens.pop()
-      @tokens.push ["$tag=", "$tag=", last[2]]
-    else
-      @token tag, value
+    return @tag_half_assignment(tag) if space and prev_spaced and @prev()[0] is 'ASSIGN' and include HALF_ASSIGNMENTS, tag
+    @token tag, value
     true
 
   # Token Manipulators

    @identifier_error id      if include RESERVED, id
    tag: 'LEADING_WHEN'       if tag is 'WHEN' and include LINE_BREAK, @tag()
    @i += id.length
    tag: id: CONVERSIONS[id]  if not accessed and include(COFFEE_ALIASES, id)
    @token(tag, id)
    true


    doc.replace(new RegExp("^" +indent, 'gm'), '')
       .replace(MULTILINER, "\\n")
       .replace(new RegExp(quote, 'g'), '\\"')

  # Tag a half assignment.
  tag_half_assignment: (tag) ->
    last: @tokens.pop()
    @tokens.push ["$tag=", "$tag=", last[2]]
    true

  # A source of ambiguity in our grammar used to be parameter lists in function
  # definitions versus argument lists in function calls. Walk backwards, tagging
