Function: c-find-assignment-for-mode
c-find-assignment-for-mode is a byte-compiled function defined in
cc-defs.el.gz.
Signature
(c-find-assignment-for-mode SOURCE-POS MODE MATCH-ANY-LANG NAME)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cc-defs.el.gz
(defun c-find-assignment-for-mode (source-pos mode match-any-lang _name)
;; Find the first assignment entry that applies to MODE at or after
;; SOURCE-POS. If MATCH-ANY-LANG is non-nil, entries with t as
;; the language list are considered to match, otherwise they don't.
;; On return SOURCE-POS is updated to point to the next assignment
;; after the returned one. If no assignment is found,
;; `c-lang--novalue' is returned as a magic value.
;;
;; SOURCE-POS is a vector that points out a specific assignment in
;; the double alist that's used in the `source' property. The first
;; element is the position in the top alist which is indexed with
;; the source files, and the second element is the position in the
;; nested bindings alist.
;;
;; NAME is only used for error messages.
(catch 'found
(let ((file-entry (elt source-pos 0))
(assignment-entry (elt source-pos 1))
assignment)
(while (if assignment-entry
t
;; Handled the last assignment from one file, begin on the
;; next. Due to the check in `c-lang-defconst', we know
;; there's at least one.
(when file-entry
(unless (aset source-pos 1
(setq assignment-entry (cdar file-entry)))
;; The file containing the source definitions has not
;; been loaded.
(let ((file (symbol-name (caar file-entry)))
(c-lang-constants-under-evaluation nil))
;;(message (concat "Loading %s to get the source "
;; "value for language constant %s")
;; file name)
(load file nil t))
(unless (setq assignment-entry (cdar file-entry))
;; The load didn't fill in the source for the
;; constant as expected. The situation is
;; probably that a derived mode was written for
;; and compiled with another version of CC Mode,
;; and the requested constant isn't in the
;; currently loaded one. Put in a dummy
;; assignment that matches no language.
(setcdr (car file-entry)
(setq assignment-entry (list (list nil))))))
(aset source-pos 0 (setq file-entry (cdr file-entry)))
t))
(setq assignment (car assignment-entry))
(aset source-pos 1
(setq assignment-entry (cdr assignment-entry)))
(when (if (listp (car assignment))
(memq mode (car assignment))
match-any-lang)
(throw 'found (cdr assignment))))
c-lang--novalue)))