• Jashank Jeremy's avatar
    Speed up by storing frame faces in hash tables instead of alists · e3b8ddd5
    Jashank Jeremy authored
    * src/frame.h (struct frame): Add face_hash_table, remove face_alist.
    (fset_face_hash_table): New function.
    (fset_face_alist): Remove.
    * src/frame.c (make_frame): Initialize f->face_hash_table.
    (Fmake_terminal_frame): Update to work with hash tables instead of
    alists.
    * src/xfaces.c (lface_from_face_name_no_resolve):
    (Finternal_make_lisp_face):
    (update_face_from_frame_parameter): Update to work with hash tables
    instead of alists.
    (Fframe_face_hash_table): New function.
    (Fframe_face_alist): Move to faces.el as frame-face-alist.
    (syms_of_xfaces): Add frame_face_hash_table.
    
    * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1):
    * lisp/frame.el (frame-set-background-mode): Update to work with hash
    tables instead of alists.
    * lisp/faces.el (face-new-frame-defaults): Mark obsolete.
    (face-list): Update to use face--new-frame-defaults.
    (frame-face-alist): Moved here from src/xfaces.c.
    (x-create-frame-with-faces): Update to handle subtle semantic change
    to how frame faces propagate, which otherwise breaks frame creation
    with reverse video enabled (bug#41200).
    
    Reworked from a patch by Clément Pit-Claudel <clement.pitclaudel@live.com>.
    e3b8ddd5
elisp-mode.el 77.1 KB