Function: opascal-block-start

opascal-block-start is a byte-compiled function defined in opascal.el.gz.

Signature

(opascal-block-start FROM-TOKEN &optional STOP-ON-CLASS)

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/opascal.el.gz
(defun opascal-block-start (from-token &optional stop-on-class)
  ;; Returns the token that denotes the start of the block.
  (let ((token from-token)
        (last-token nil))
    (catch 'done
      (opascal--scan-non-whitespace-backward token last-token
        ;; Skip over nested blocks.
        ((opascal--in opascal-end-block-statements)
         (setq token (opascal-block-start token)))

        ;; Case block start found.
        ('case
         (throw 'done
                ;; As a special case, when a "case" block appears
                ;; within a record declaration (to denote a variant
                ;; part), the record declaration should be considered
                ;; the enclosing block.
                (let ((enclosing-token
                       (opascal-block-start token
                                            'stop-on-class)))
                  (if (eq 'record
                          (opascal-token-kind enclosing-token))
                      (if stop-on-class
                          enclosing-token
                        (opascal-previous-token enclosing-token))
                    token))))

        ;; Regular block start found.
        ((opascal--in opascal-block-statements)
         (throw 'done token))

        ;; A class/record start also begins a block.
        ((guard (opascal-composite-type-start token last-token))
         (throw 'done (if stop-on-class last-token token)))
        )
      ;; Start not found.
      nil)))