Function: semantic-grammar--lex-block-specs

semantic-grammar--lex-block-specs is a byte-compiled function defined in grammar.el.gz.

Signature

(semantic-grammar--lex-block-specs)

Documentation

Compute lexical block specifications for the current buffer.

Block definitions are read from the current table of lexical types.

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/semantic/grammar.el.gz
(defun semantic-grammar--lex-block-specs ()
  "Compute lexical block specifications for the current buffer.
Block definitions are read from the current table of lexical types."
  (cond
   ;; Block specifications have been parsed and are invalid.
   ((eq semantic-grammar--lex-block-specs 'error)
    nil
    )
   ;; Parse block specifications.
   ((null semantic-grammar--lex-block-specs)
    (condition-case err
        (let* ((blocks       (cdr (semantic-lex-type-value "block" t)))
               (open-delims  (cdr (semantic-lex-type-value "open-paren" t)))
               (close-delims (cdr (semantic-lex-type-value "close-paren" t)))
               olist clist delim-spec open-spec close-spec)
          (dolist (block-spec blocks)
            (setq delim-spec (semantic-grammar--lex-delim-spec block-spec)
                  open-spec  (assq (car  delim-spec) open-delims)
                  close-spec (assq (cadr delim-spec) close-delims))
            (or open-spec
                (error "Missing open-paren token %s required by block %s"
                       (car delim-spec) (car block-spec)))
            (or close-spec
                (error "Missing close-paren token %s required by block %s"
                       (cdr delim-spec) (car block-spec)))
            ;; build alist ((OPEN-DELIM OPEN-SYM BLOCK-SYM) ...)
            (push (list (cdr open-spec) (car open-spec) (car block-spec))
                  olist)
            ;; build alist ((CLOSE-DELIM CLOSE-SYM) ...)
            (push (list (cdr close-spec) (car close-spec))
                  clist))
          (setq semantic-grammar--lex-block-specs (cons olist clist)))
      (error
       (setq semantic-grammar--lex-block-specs 'error)
       (message "%s" (error-message-string err))
       nil))
    )
   ;; Block specifications already parsed.
   (t
    semantic-grammar--lex-block-specs)))