       (pp prop))))
 
 (defun espresso--split-name (string)
-  "Splits a name into its dot-separated parts. Also removes any prototype parts from
-the split name."
-  (save-match-data
-    (split-string string "\\." t)))
+  "Splits a name into its dot-separated parts. Also removes any
+prototype parts from the split name (unless the name is just
+\"prototype\" to start with, that is)."
+  (let ((name (save-match-data
+                (split-string string "\\." t))))
+    (unless (and (= (length name) 1)
+                 (equal (car name) "prototype"))
+
+      (setq name (remove "prototype" name)))))
 
 (defun espresso--guess-function-name (position)
   "Guess the name of the function at POSITION, which should be

                           for class-style in filtered-class-styles
                           if (and (memq syntactic-context
                                         (plist-get class-style :contexts))
                                   (looking-at (plist-get class-style :class-decl)))
                           do (goto-char (match-end 0))
                           and return
                           (make-espresso--pitem


  ;; Important to fontify the whole buffer syntactically! If we don't,
  ;; then we might have regular expression literals that aren't marked
  ;; as strings, which will screw up parse-partial-sexp, scan-lists,
  ;; etc. and and produce maddening "unbalanced parenthesis" errors.
  ;; When we attempt to find the error and scroll to the portion of
  ;; the buffer containing the problem, JIT-lock will apply the
  ;; correct syntax to the regular expresion literal and the problem
  ;; will mysteriously disappear.
  (font-lock-set-defaults)

  (let (font-lock-keywords) ; leaves syntactic keywords intact
