       #     .g b
       #     .h a
       #
-      if (prevTag is 'OUTDENT' or prevToken.newLine) and inImplicitCall() and
-          tag in ['.', '?.', '::', '?::']
-        endImplicitCall()
-        return forward(1)
+      if inImplicitCall() and tag in CALL_CLOSERS
+        if prevTag is 'OUTDENT'
+          endImplicitCall()
+          return forward(1)
+        if prevToken.newLine
+          endAllImplicitCalls()
+          return forward(1)
 
       stackTop()[2].sameLine = no if inImplicitObject() and tag in LINEBREAKS
 


# Tokens that end a line.
LINEBREAKS       = ['TERMINATOR', 'INDENT', 'OUTDENT']

        tokens.splice i, 0, generate 'CALL_END', ')'
        i += 1

      endAllImplicitCalls = ->
        while inImplicitCall()
          endImplicitCall()

      startImplicitObject = (j, startsLine = yes) ->
        idx = j ? i
        stack.push ['{', idx, sameLine: yes, startsLine: startsLine, ours: yes]
