                      (and depth
                           (not (eq (char-after (caar depth)) ?\{)))))
                   (t
-                   ;; Anything else is always a continuation line
-                   t))
+                   ;; Except when the current line closes the previous line's 
+                   ;; scope, anything else is a continuation line.
+                   (not current-line-closes-scope)))
             (incf indent tab-width))
           (max indent 0)))))))
 

       (t
        ;; Neither top-level nor in a multi-line string or comment
        (let ((indent 0)
              (inside-indenting-paren nil))
          ;; Count every enclosing brace, plus parens that follow
          ;; import, const, var, or type and indent according to
          ;; depth.  This simple rule does quite well, but also has a

                       (setq inside-indenting-paren t)))))
                (setq first nil))))

          (setq current-line-closes-scope
                (case (char-after)
                  ((?\} ?\)) t)
                  (t nil)))

          ;; case, default, and labels are outdented 1 level
          (when (looking-at "\\<case\\>\\|\\<default\\>\\|\\w+\\s *:\\(\\S.\\|$\\)")
            (decf indent tab-width)
            ;; Lines with case, default, etc. also "close" the previous line's 
            ;; scope, even when there is no semicolon. Don't treat them as
            ;; continuation lines.
            (setq current-line-closes-scope t))

          ;; Continuation lines are indented 1 level
          (forward-comment (- (buffer-size)))
