Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
marvel
GitHub Repository: marvel/qnf
Path: blob/master/elisp/gas-mode.elc
987 views
;ELC
;;; Compiled by [email protected] on Sat Jun 12 01:40:48 2010
;;; from file /home/boggles/.emacs.d/gas-mode.el
;;; in Emacs version 22.2.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`gas-mode.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(custom-declare-group 'gas nil "Mode for editing gas syntax assembler code." :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces) :group 'languages)
#@50 The comment start character assumed by gas mode.
(custom-declare-variable 'gas-comment-char '59 '(#$ . 747) :type 'character :group 'gas)
#@20 The opcode column.
(custom-declare-variable 'gas-opcode-column '14 '(#$ . 891) :type 'integer :group 'gas)
#@40 The column for the arguments (if any).
(custom-declare-variable 'gas-argument-column '20 '(#$ . 1004) :type 'integer :group 'gas)
#@50 The column where end of line asm comments go to.
(custom-declare-variable 'gas-comment-column '36 '(#$ . 1140) :type 'integer :group 'gas)
#@203 Always jump to comment column when a variable `gas-comment-char' is typed.

It t, starts/expands a comment if appropriate.  When
unset (nil), use `gas-comment-dwim' (usually bound to M-;) to get there.
(custom-declare-variable 'gas-comment-char-starts-comment 'nil '(#$ . 1286) :type 'boolean :group 'gas)
#@99 If nil, 'indent' indents all fileds on the current line.
Else only the current field is affected.
(custom-declare-variable 'gas-indent-current-field-only 'nil '(#$ . 1598) :type 'boolean :group 'gas)
(byte-code "\301\211\207" [gas-preserve-trailing-whitespace nil] 2)
#@381 Enable symbol recognition and highlighing.

When t and if point is on a symbol, some limited parsing data is
collected and all occurences of this symbol in the buffer get
highlighted according to the results (defined, global, etc.).  As
long as a symbol is highlighted, `forward-sexp' and `backward-sexp'
move to the next/previous occurence of the same symbol in the
same buffer.
(custom-declare-variable 'gas-enable-symbol-highlight 't '(#$ . 1874) :type 'boolean :group 'gas)
#@442 When true, C passthrough comments are recognized.

This kind of comment is introduced by the starting sequence
"/*C" and is meant to be processed later by an external
program (see the introducing comment in gas-mode.el for an
example) into C source code.  Within these passthrough-comments,
the combination /# ... #/ is available for nested comments which
will be later changed into real C comments (/* ... */) by the
same external program.
(custom-declare-variable 'gas-use-C-passthrough 't '(#$ . 2359) :type 'boolean :group 'gas)
#@338 Regexp used to recognize the beginning of a defun.

The default value describes a line which is either empty, a
full-line left-justified comment or a directive, followed by a
line starting with a label.  Note that the character ";" in the
regexp will be replaced by the actual comment character described
by variable `gas-comment-char'.
(custom-declare-variable 'gas-defun-regexp '"\n\\([;#].*\\|.*[*]/[ 	]*\\|\\|[ 	]*\\|[ 	]+\\..*\\)\n\\([^ 	\n;]+:\\)" '(#$ . 2899) :type 'regexp :group 'gas)
#@45 The subexp in `gas-defun-regexp to jump to.
(custom-declare-variable 'gas-defun-regexp-subexp '2 '(#$ . 3399) :type 'integer :group 'gas)
#@38 Indent to use with C style comments.
(custom-declare-variable 'gas-C-indent '3 '(#$ . 3543) :group 'gas :type 'integer)
#@61 Where to indent a C comment end ("*/") if it starts a line.
(custom-declare-variable 'gas-C-comment-end-column '0 '(#$ . 3669) :group 'gas :type 'integer)
#@134 After this many seconds symbols get highlighted.

Number of seconds of idle time (a float) to wait before a symbol
gets highlighted.
(custom-declare-variable 'gas-symbol-highlight-delay '0.5 '(#$ . 3831) :group 'gas :type 'float)
(byte-code "\301\302\303\304\305\306%\210\307\310\311\312\305\302%\210\307\313\314\315\305\302%\210\307\316\317\320\305\302%\210\307\321\322\323\305\302%\210\307\324\325\326\305\302%\210\307\327\330\331\305\302%\210\307\332\333\334\305\302%\210\307\335\336\337\305\302%\210\340B\341\340!\204W\342\340\310\"\210\343B\341\343!\204f\342\343\313\"\210\344B\341\344!\204u\342\344\316\"\210\345B\341\345!\204\204\342\345\321\"\210\346B\341\346!\204\223\342\346\324\"\210\347B\341\347!\204\242\342\347\327\"\210\350B\341\350!\204\261\342\350\332\"\210\351B\341\351!\204\300\342\351\335\"\210\303\207" [current-load-list custom-declare-group gas-faces nil "Faces used by gas-mode." :group gas custom-declare-face gas-builtin ((((class color) (background light)) (:foreground "maroon")) (t (:foreground "yellow"))) "Face to use for Gas buitins." gas-symbol-ok ((((class color) (background light)) (:background "#e0ffe0")) (((class color) (background dark)) (:background "#001f00")) (t (:foreground "yellow" :background "blue"))) "Face to use for symbols where exactly 1 definition was found." gas-symbol-error ((((class color) (background light)) (:background "#ffffe8" :foreground "red" :weight bold)) (((class color) (background dark)) (:background "#181800" :foreground "red" :weight bold)) (t (:foreground "yellow" :background "red"))) "Face to use when highlighting symbols with more than 1 definition." gas-symbol-global ((((class color) (background light)) (:background "#d0f8ff")) (((class color) (background dark)) (:background "#00383f")) (t (:foreground "yellow" :background "blue"))) "Face to use when highlighting global symbols." gas-symbol-undef ((((class color) (background light)) (:background "#ffffe8" :foreground "maroon")) (((class color) (background dark)) (:background "#181800")) (t (:foreground "yellow" :background "red"))) "Face to use for symbols defined as global when no definition\nwas found." gas-symbol-global-undef ((((class color) (background light)) (:background "#d0f8ff" :foreground "red")) (((class color) (background dark)) (:background "#002840" :foreground "red")) (t (:foreground "yellow" :background "red"))) "Face to use for symbols when no definition is found." gas-passthrough-code ((((class color) (background light)) (:foreground "magenta4")) (((class color) (background dark)) (:foreground "magenta2")) (t (:foreground "magenta1" :background "cyan"))) "Marks passthrough code." gas-passthrough-comment ((((class color) (background light)) (:foreground "turquoise4")) (((class color) (background dark)) (:foreground "turquoise2")) (t (:foreground "turquoise1"))) "Marks passthrough comments." gas-builtin-face default-boundp set-default gas-symbol-ok-face gas-symbol-error-face gas-symbol-global-face gas-symbol-undef-face gas-symbol-global-undef-face gas-passthrough-code-face gas-passthrough-comment-face] 6)
#@226 Maximum number of parsed lines in cache.  

I don't expect much impact from this on performance (the line
cache is emptied on any buffer change anyway).  Play around with
this value if you suspect memory may be your problem.
(defconst gas-max-lines-in-cache 500 (#$ . 6943))
#@113 Maximum number of symbols in highlight cache.  
Reduce this if memory footprint grows too high (very unlikely).
(defconst gas-max-labels-in-cache 300 (#$ . 7225))
#@52 Regexp defining a valid symbol as a subexpression.
(defconst gas-re-sym "\\([_$A-Za-z][_0-9$A-Za-z]*\\)" (#$ . 7394))
#@72 The valid characters for a symbol as used in `skip-chars-*' functions.
(defconst gas-skip-sym "_0-9$A-Za-z" (#$ . 7518))
#@60 Regexp defining the character set not allowed in a symbol.
(defconst gas-re-nosym "[^_0-9$A-Za-z]" (#$ . 7645))
#@38 Syntax table used while in gas mode.
(defvar gas-mode-syntax-table (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\312#\210)\207" [st make-syntax-table modify-syntax-entry 10 "> b" 46 "_" 47 ". 124b" 42 ". 23"] 4) (#$ . 7763))
#@38 Abbrev table used while in Gas mode.
(defvar gas-mode-abbrev-table nil (#$ . 8031))
(define-abbrev-table 'gas-mode-abbrev-table nil)
#@22 Keymap for Gas mode.
(defvar gas-mode-map (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\312#\210\302\313\314#\210\302\315\316#\210\302\317\320#\210\302\321\320#\210)\207" [map make-sparse-keymap define-key ":" gas-colon "\273" gas-comment ";" gas-comment-char "#" gas-hash [S-iso-lefttab] gas-indent-backward ";" comment-region "\n" newline-and-indent "
"] 4) (#$ . 8170))
#@53 Regex matching all operators which define a symbol.
(defconst gas-equ "\\.\\(?:eq\\(?:uiv\\|[uv]\\)\\|set\\)" (#$ . 8591))
#@152 Fields and their indents.
The cdr (the indent) may either be a number, a symbol bound to a
number, or a symbol bound to a function yielding the value.
(defconst gas-indents '((C-comment-end . gas-C-comment-end-column) (C-comment-start . 0) (C-comment . gas-get-C-relative-indent) (cpp-macro-def . 0) (cpp-argument . 0) (label . 0) (opcode . gas-opcode-column) (argument . gas-argument-column) (asm-comment . gas-get-asm-comment-column)) (#$ . 8721))
#@252 Mapping from the field type we're on to the field types to check next.
car - type of field we're on (IOW, the one just handled)
 cdr - ordered list of (first (most special) check first): 
    car - token to match 
    cdr - next field type iff match.
(defconst gas-parse-sequences '((starting-asm-line (cpp-macro-def . cpp-macro-def) (label . label) (empty-label . label) (asm-comment . asm-comment) (opcode . opcode)) (label (opcode . opcode) (asm-comment . asm-comment) (garbage . garbage)) (opcode (asm-comment . asm-comment) (argument . argument) (eol-ws . eol-ws) (garbage . garbage)) (argument (asm-comment . asm-comment) (eol-ws . eol-ws) (garbage . garbage)) (asm-comment (eol-ws . eol-ws)) (cpp-argument (eol-ws . eol-ws) (garbage . garbage)) (cpp-macro-def (cpp-argument . cpp-argument) (garbage . garbage)) (cpp-argument (eol-ws) (garbage . garbage)) (C-comment-start (C-comment . C-comment)) (starting-within-C-comment (C-comment-end . C-comment-end) (C-comment . C-comment)) (C-comment (C-comment-end . C-comment-end) (eol-ws . eol-ws) (garbage . garbage)) (garbage (eol-ws . eol-ws)) (eol-ws . fini)) (#$ . 9178))
#@656 An alist of parse patterns.

Each entry holds 4 elements (SYMBOL REGEXP SUBEXPS TERMINATE-RE):

  SYMBOL - designator (a symbol) under which it will be
    referenced.

  REGEXP - the regexp to match against,

  SUBEXPS - a list (BEG-COL TEXT-COL END-COL END-OF-FIELD) of at
    which subexpression of REGEXP to find beg-col, text-col,
    end-col (see `gas-parse-line-really') and the end of the
    field,

  TERMINATE-RE - a regexp, the start of which (if it matches and
    if outside a ".." string) unconditionally terminates the
    field.

Every occurence of the character ";" in both regexps is
replaced by variable `gas-comment-char' before use.
(defconst gas-patterns '((cpp-macro-def "[ 	]*\\(\\(#[^ 	\n]*\\)\\)" (0 1 1 1) "/[*]") (cpp-argument "[ 	]*\\(\\([ 	]*\\([^ 	\n]\\)+\\)+\\)" (0 1 1 1) "/[*]") (label "[ 	]*\\([^ :	\n]+:\\)" (0 1 1 1) "/[*]\\|;") (opcode "[ 	]*\\([^ 	\n]+\\)" (0 1 1 1) "/[*]\\|;") (argument "[ 	]*\\(\\([ 	]*\\([^ 	\n]\\)+\\)+\\)" (0 1 1 1) "/[*]\\|;") (garbage "[ 	]*\\(\\([ 	]*\\([^ 	\n]\\)+\\)+\\)" (0 1 1 1) "/[*]\\|;") (asm-comment "[ 	]*\\(\\(;+\\)\\([ 	]*[^ 	\n]+\\)*\\)" (0 1 1 1) nil) (C-inline-comment "[ 	]*\\(/[*].*?[*]/\\)" (0 1 1 1) nil) (C-comment-start "[ 	]*\\(/[*]C?\\)" (0 1 1 1) nil) (empty-label " [ 	]*" (0 0 0 nil) "/[*]\\|;") (C-comment-end "[ 	]*\\([*]/\\)" (0 1 1 1) nil) (C-comment "[ 	]*\\(\\([ 	]*[^ 	]+\\)*\\)" (0 1 1 1) "[*]/") (eol-ws "[ 	]+\\( ?\\)" (0 1 1 1) nil)) (#$ . 10313))
#@37 The elements of a gas syntax field.
(defconst gas-elmt-types '(type subtype beg-col text-col end-col text modified) (#$ . 11770))
(byte-code "\301B\302\303!\207" [current-load-list gas-builtin-keywords (lambda (#1=#:defconst-tmp-var) (defconst gas-builtin-keywords #1#)) "^\\(\\(\\sw\\|\\s_\\)+:?\\)?[ 	]+\\(\\.\\(?:A\\(?:BORT\\|bort\\|l\\(?:ign\\|tmacro\\)\\|sci[iz]\\)\\|B\\(?:align\\|yte\\)\\|Comm\\|D\\(?:ata\\|e\\(?:f\\|precated\\|sc\\)\\|im\\|ouble\\)\\|E\\(?:ject\\|lse\\(?:if\\)?\\|nd\\(?:ef\\|func\\|if\\)?\\|q\\(?:uiv\\|[uv]\\)\\|rr\\(?:or\\)?\\|x\\(?:itm\\|tern\\)\\)\\|F\\(?:ail\\|il[el]\\|loat\\|unc\\)\\|Global\\|Hidden\\|I\\(?:dent\\|f\\|n\\(?:c\\(?:bin\\|lude\\)\\|t\\(?:ernal\\)?\\)\\|rpc?\\)\\|L\\(?:comm\\|flags\\|i\\(?:n\\(?:\\(?:konc\\)?e\\)\\|st\\)\\|n\\|ong\\)\\|M\\(?:RI\\|acro\\)\\|No\\(?:altmacro\\|list\\)\\|O\\(?:cta\\|rg\\)\\|P\\(?:2align\\|opSection\\|r\\(?:evious\\|int\\|otected\\)\\|size\\|u\\(?:rgem\\|shSection\\)\\)\\|Quad\\|Rept\\|S\\(?:bttl\\|cl\\|e\\(?:ction\\|t\\)\\|hort\\|i\\(?:\\(?:ngl\\|z\\)e\\)\\|kip\\|leb128\\|pace\\|t\\(?:ab\\|r\\(?:ing\\|uct\\)\\)\\|ubSection\\|ymver\\)\\|T\\(?:ag\\|ext\\|\\(?:itl\\|yp\\)e\\)\\|Uleb128\\|V\\(?:Table\\(?:Entry\\|Inherit\\)\\|al\\|ersion\\)\\|W\\(?:arning\\|eak\\(?:ref\\)?\\|ord\\)\\|hword\\|if\\(?:def\\|eqs?\\|g[et]\\|l[et]\\|n\\(?:def\\|es\\|otdef\\|[bce]\\)\\|[bc]\\)\\)\\)[ 	\n]"] 2)
#@50 Additional expressions to highlight in gas mode.
(defvar gas-font-lock-keywords (byte-code "\302\303\304\305\306\307\310\311\312\313E\314\257		\"\207" [gas-builtin-keywords cpp-font-lock-keywords append (gas-return-passthrough-code-hi 0 gas-passthrough-code-face t) (gas-return-passthrough-comment-hi 0 gas-passthrough-comment-face t) (gas-return-gas-hi-ok 0 gas-symbol-ok-face t) (gas-return-gas-hi-global 0 gas-symbol-global-face t) (gas-return-gas-hi-error 0 gas-symbol-error-face t) (gas-return-gas-hi-undef 0 gas-symbol-undef-face t) (gas-return-gas-hi-global-undef 0 gas-symbol-global-undef-face t) 3 gas-builtin-face ("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?" 1 font-lock-function-name-face)] 11) (#$ . 13151))
(put 'gas-mode 'font-lock-defaults '(gas-font-lock-keywords))
#@2536 Major mode for editing assembler code.

Commands:

(Some of these commands may exhibit slightly different behaviour if point
is on a C syntax line.)

\[indent-for-tab-command]  indent the field(s) point is on.  If it already is in its position, 
  move on to the next field on the line.

\[gas-indent-backward]  Move to the previous field.

\[gas-comment]  When no region is active, starts a comment sequence:
  - If a comment is present and point is not at its start, jump there.
  - Else start a comment.  If there already is one, increase its comment level.
    What that is and what it does, is best explained when you try
    it out: Move to en empty line, then type \[gas-comment] and
    then repeatedly \[gas-comment] or \[gas-comment-char].
  Calls \[gas-comment-dwim] (see below) if the region is active.

\[forward-sexp]  If you're on a highlighted symbol, jump to its next 
  occurence.  Else do `forward-sexp' like in text mode.

\[backward-sexp]  If you're on a highlighted symbol, jump to its previous
  occurence.  Else do `backward-sexp' like in text mode.

\[gas-comment-dwim] If the region starts at the leading white space
  before a comment, all full-line comments in region will be
  removed.  If the region starts on a comment, comments will be
  removed, but comments with leading white space will be left
  untouched.  Else insert triple variable `gas-comment-char's before all
  lines in region.

\[fill-paragraph] beautifies the paragraph around
  point, i.e. it adjusts all assembly syntax fields to their
  standard positions.

\[indent-region]  beautifies the region, i.e., adjusts all fields in region.


The following characters have a special meaning in special cases:

\[gas-colon]  if it terminates a label:  outdent the label and
  move to opcode column.  Else, just insert \[gas-colon] as usual.

\[gas-comment-char]  The value which introduces an asm style comment.
  If typed in in a row after \[gas-comment], behaves as an alias to \[gas-comment].  else
  just insert \[gas-comment-char].
  Can be customized to always act as alias (`gas-comment-char-starts-comment').

  Alternatively, you may use a File Variable to make it buffer local
  (which allows you to use different syntaxes in the same session).
  Note:  Setting it to a value other than ?; has not yet been tested.

\[gas-hash]  If it starts a preprocessor directive:  Outdent it to first
  column.

Customization:  Entry on this mode runs `gas-mode-hook'.
The customization group is called 'gas'.

Special commands:
\{gas-mode-map}
(defalias 'gas-mode #[nil "\306 \210\307\310\n\311\f!\312
!1\313\314!\210\315\f\313\316!\210\317\313\320!\210\321\313\322!\210\323\313\324!\210\325\313\326!\210\f\313\327!\210\330\313\331!\210\332\313\333!\210\334\335\336 2\244!\210\337\340\f!\304\"\210\341\3423!!\210\343\f\344\"\210\345\3464\2115\203\2135@4\3134!\346L\2105A\2115\204v*\347\350\351\"\210\352\353\354\"\210\355 \210\356\357!\210\360 \207" [mode-name major-mode gas-mode-abbrev-table local-abbrev-table gas-comment-char gas-comment-string kill-all-local-variables "gas" gas-mode string regexp-quote make-local-variable indent-line-function gas-indent indent-region-function gas-indent-region forward-sexp-function gas-forward-sexp fill-paragraph-function gas-fill-paragraph font-lock-defaults (gas-font-lock-keywords) gas-local-comment-char beginning-of-defun-function gas-beginning-of-defun end-of-defun-function gas-end-of-defun font-lock-keywords-case-fold-search t use-local-map make-sparse-keymap local-set-key vector set-syntax-table make-syntax-table modify-syntax-entry "< b" (gas-line-cache gas-globals-cache gas-locals-cache gas-hi-valid gas-hi-sym-list gas-hi-global gas-hi-undef gas-hi-error gas-hi-ok gas-changed gas-highlights gas-hi gas-pass-code-hi gas-pass-comment-hi gas-symbol-timer gas-highlights-error gas-symbol-highlight-beg gas-symbol-highlight-end gas-doing-comment after-change-functions) nil add-to-list after-change-functions gas-after-change add-hook pre-command-hook gas-symbol-pre-command gas-start-symbol-timer run-mode-hooks gas-mode-hook gas-symbol-highlight gas-comment-re gas-mode-map gas-mode-syntax-table var --dolist-tail--] 4 (#$ . 13931) nil])
#@57 You won't need this unless you're debugging `gas-mode'.
(defalias 'gas-dbg #[nil "\302\303\304\305!\210\304\306!\210\307\310!\210\304\306!\210\311\312!\210\304\312!\210\304\313\314!!\210\311\315!\210\316\302!\210\304\315!\207" [debug-on-error debug-items t (indent) switch-to-buffer-other-frame "*Messages*" "*scratch*" info "Elisp" find-file-other-frame "x.S" get-buffer-create "*gas-dbg*" "gas-mode.el" column-number-mode] 3 (#$ . 18156) nil])
#@421 Helper function, outputs debug messages into a buffer of their own.

If DEBUG-ITEMS (a symbol or a list) has a non-empty
intersection with CONDITION (a symbol or a list)', apply `format'
to ARGS and insert the result at the end of the buffer
`gas-dbg' (which is created if non-existing).

Currently defined symbols are: 'wip (work in progress),
'hi (highlighting), 'parser, 'cursor, 'sym (symbol highlighting),
'cursor.
(defalias 'dmsg #[(condition &rest args) "\304\300!\205=\205=	<\204	C<\204C	\305=\204&\306\307\215\205=\310\311\n\"r\312\313!q\210db\210\314 \210c\210db*\207" [debug-items condition args contents boundp (all) found (byte-code "\304\211\205\n@\211\235\203\305\306\307\"\210\nA\211\204\304*\207" [condition c --dolist-tail-- debug-items nil throw found t] 4) apply format get-buffer-create "*gas-dbg*" newline] 3 (#$ . 18611)])
#@82 Return STR with all ";"s replaced by (regexp-quote variable `gas-comment-char').
(defalias 'gas-change-comment-regexp #[(str) "\205\302\303	\304\211\305&\302\306\307	!\304\211%\207" [str gas-comment-string replace-regexp-in-string ".*\\[[^]]*\\(;\\)" t 1 ";" regexp-quote] 7 (#$ . 19490)])
#@67 Return STR with all ";"s replaced by variable `gas-comment-char'.
(defalias 'gas-change-comment-string #[(str) "\205\302\303	\304\211%\207" [str gas-comment-string replace-regexp-in-string ";" t] 6 (#$ . 19793)])
#@120 Replace `gas-patterns' by a copy, replacing ?; by COMMENT-CHAR.
Also sets variable `gas-comment-char' to COMMENT-CHAR.
(defalias 'gas-set-patterns #[(comment-char) "\306\301!\210\306\302!\210\307	!\306\303!\210\310\n!\311\305!\210\312
\312\211\203L@\313\304@\314A@!\3158\314\3168!F\"\210A\211\204&*\306\305!\210\f\317\312\211\205\200@\311!\210\314\320!!\306!\fL\210)A\211\204]\312+\207" [comment-char gas-comment-char gas-comment-string gas-comment-re result gas-patterns make-local-variable string regexp-quote kill-local-variable nil add-to-list gas-change-comment-regexp 2 3 (gas-defun-regexp) eval pattern --dolist-tail-- sym] 9 (#$ . 20017)])
#@133 Invalidate saved parser state.
Argument BEG BEG, END, and LEN, athough saved in `gas-changed' for debugging purposes, are not used.
(defalias 'gas-after-change #[(beg end len) "\306\211\306\307p\f
F\"\211\207" [gas-globals-cache gas-hi-valid gas-locals-cache gas-changed beg end nil append len] 7 (#$ . 20721)])
(defalias 'gas-symbol-pre-command #[nil "\301\211\207" [gas-hi nil] 2])
#@126 Schedule a timer for symbol highlighting (if not already scheduled).
Optional STOP, if non-nil,  means remove from schedule.
(defalias 'gas-start-symbol-timer #[(&optional stop) "\203	\203\304	!\210\305\211\207	\205	\n>?\205\"\306\307\310#\211\207" [stop gas-symbol-timer timer-idle-list gas-symbol-highlight-delay cancel-timer nil run-with-idle-timer t gas-symbol-highlight-maybe] 4 (#$ . 21120)])
#@76 Return next passthrough match (if any).
See highlight.el for POS and WHAT.
(defalias 'gas-return-passthrough-hi #[(pos what) "`\301\302\215)\207" [curpoint found (byte-code "\305\211\205Q\n@	AW\203=\f	@V\203=	@W\203$	@b\210\306\307\f	A^\310#\203=\311\312\313	\314\315!$\210\316\317\310\"\210	@\fY\203I\316\317\305\"\210\nA\211\204\305*\207" [what match --dolist-tail-- curpoint pos nil re-search-forward ".+" t dmsg hi "match: %s, data: '%s'" match-string 0 throw found] 7)] 2 (#$ . 21536)])
#@89 Return next passthrough code match (if any).
See highlight.el for documentation on POS.
(defalias 'gas-return-passthrough-code-hi #[(pos) "\302	\"\207" [pos gas-pass-code-hi gas-return-passthrough-hi] 3 (#$ . 22050)])
#@92 Return next passthrough comment match (if any).
See highlight.el for documentaion on POS .
(defalias 'gas-return-passthrough-comment-hi #[(pos) "\302	\"\207" [pos gas-pass-comment-hi gas-return-passthrough-hi] 3 (#$ . 22275)])
#@53 Compute blocks of C passthroughs to be highlighted.
(defalias 'gas-passthrough-highlight #[nil "eb\210\305\211\305\211\211\306\307\305\310#\205v`\211\205v\212\306\311\305\310#\205'`\312Z)\211\205v\f\203g\306\313\n\310#\205:`\211\203g\314\300\f\312ZB\310#\210\312u\210\306\315\n\310#\205U`\211\203-\314\301\312Z\fB\310#\210\202-\f\203
\314\300\f\nB\310#\210\202
+\207" [gas-pass-code-hi gas-pass-comment-hi limit end beg nil re-search-forward "/[*]C" t "[*]/" 2 "/#" add-to-list "#/"] 6 (#$ . 22509)])
#@170 Called through the gas-return-gas-hi-* functions by highlight.el.
If there's a match of POS against one of the entries in HI-LIST,
return match data.  Else, return nil.
(defalias 'gas-return-highlight #[(pos hi-list) "\205\303\304\305	`\n%\210\306\307\215\207" [gas-hi-valid pos hi-list dmsg hi "gas-return-highlight, pos: %s, point: %s, list: %s" found (byte-code "\305\211\205H\n@\211@W\2036	@`Y\203@\306\307\310	#\210	@b\210\311\312\313\314	\211A@)^\315#\"\210\202@\306\307\316\"\210\311\312\305\"\210\nA\211\204\305*\207" [hi-list match --dolist-tail-- pos x nil dmsg hi "gas-return-highlight, match: %s" throw found re-search-forward ".+" t "gas-return-highlight: nope."] 7)] 6 (#$ . 23040)])
#@84 Check POS against the entries in the list `gas-hi-global'.
Called by highlight.el.
(defalias 'gas-return-gas-hi-global #[(pos) "\302	\"\207" [pos gas-hi-global gas-return-highlight] 3 (#$ . 23761)])
#@83 Check POS against the entries in the list `gas-hi-undef'.
Called by highlight.el.
(defalias 'gas-return-gas-hi-undef #[(pos) "\302	\"\207" [pos gas-hi-undef gas-return-highlight] 3 (#$ . 23967)])
#@83 Check POS against the entries in the list `gas-hi-error'.
Called by highlight.el.
(defalias 'gas-return-gas-hi-error #[(pos) "\302	\"\207" [pos gas-hi-error gas-return-highlight] 3 (#$ . 24170)])
#@80 Check POS against the entries in the list `gas-hi-ok'.
Called by highlight.el.
(defalias 'gas-return-gas-hi-ok #[(pos) "\302	\"\207" [pos gas-hi-ok gas-return-highlight] 3 (#$ . 24373)])
#@83 Check POS against the entries in the list `gas-hi-undef'.
Called by highlight.el.
(defalias 'gas-return-gas-hi-global-undef #[(pos) "\302	\"\207" [pos gas-hi-global-undef gas-return-highlight] 3 (#$ . 24567)])
#@394 The common part of `gas-scan-global-symbol and `gas-scan-local-symbol'.

Gets called with point on a line where a label match may be
found.  It expects SYM-RE to be a regexp describing the
label.  Adds on match the match it finds to SLIST (a symbol bound
to a list of matches) and the kind of match (as a symbol, like
'def for a definition or 'duplicate for a duplicate definition)
to LFLAGS.
(defalias 'gas-qualify-symbol #[(sym-re slist lflags) "\212\306 \307 \310\311 \203@\312u\210\313\314\315\f$	\316#\2035\317\224\317\225)\320 \203<\321*\322\316#\210\321+\322)
E\316#\210*\202\323 ,\324\325\326,#-\324\325\327,#.\330/\3310-\203\235\332\333\f\334Q-\"\203\2351T1\335\336*!\235\203\202\321*\337\316#\210\202\211\321*\335\316#\210\340\331!\210\341\342!\210\321+\335\331\224\331\225E\316#\210.\2034\340\324\343\327,#S!\210\330\324\344\327,#\\\345\\\324\325\346,#&2/\313\314\315\f$2\316#\2033\317\224\317\225)0\331U\203\3323&\"\203\335\211/\336*!\235\203\376\321*\337\316#\210\202\321*\335\316#\210\202\321*\330\316#\210\332\347&\"\203\321*\350\316#\210\321+/)
E\316#\2100T0*\202\303+-+\310\207" [bol eol case-fold-search gas-re-nosym sym-re end line-end-position line-beginning-position nil gas-C-comment-p -1 re-search-forward format "%s\\(%s\\)\\(%s\\|$\\)" t 1 gas-C-passthrough-code-p add-to-list C-ref gas-parsed gas-nth text label argument ref 0 string-match "^" ":?$" def eval duplicate move-to-column looking-at "[^:]+:" text-col end-col 2 opcode ".global" global beg lflags slist fields lbl arg type argno nlabels eo-arg gas-equ] 7 (#$ . 24785)])
#@98 Scan the buffer vor valid occurences of the global symbol SYM.
Called by `gas-symbol-highlight'.
(defalias 'gas-scan-global-symbol #[(sym) "eb\210\306\211\306\307\310\f!\311\312
$\313\306\314#\203?\315 \203,\316\317\306\"\210\320\224b\210\321\304\322#\210\323
\300\301#\210\202\321\304\324#\210\325\232?\205P\f	E.\207" [sym-list flags qualifiers nlabels sym sym-re nil 0 regexp-quote format "\\(^\\|%s\\)\\(%s\\)\\(%s\\|$\\)" re-search-forward t input-pending-p throw event-abort 2 dmsg "global: qualified1: %s" gas-qualify-symbol "global: sym-list: %s" (nil) gas-re-nosym re] 6 (#$ . 26425)])
#@152 Scan the buffer vor valid occurences of the local symbol SYM.
Called by `gas-symbol-highlight'.
Argument ORIG-SYM is the complete symbol (as written).
(defalias 'gas-scan-local-symbol #[(orig-sym) "\306\307\"\2052e\310d\311\312\"\311\313\"\314\f!!\315!\316\317R\"\320#\310\211\310\211$%\212
\321\232\203A\322\"\310\323#\210\322\"\310\323#\203M\312\225	b\210\324\"\310\323#\203\\\312\224\324\"\310\323#\203h\312\224)	\n\203\215!\325P	\nE!\316P\n\211\fG\\\313\\E!\321P\nEE\202\234!\325P	E!\321P	ED&'(&\310)\211*\203*@)\326 \203\274\327\330\310\"\210)@!+\331!\317+\260,\332)!-)\211.A@)Sb\210`-W\203\324,-\323#\203(\312\224^('\312\225]'\312\224b\210\333!\334\335#\210\202\336+*A\211*\204\255*\336\304\337#\210\340\232?\2050\f('\257.\207" [orig-sym search-lo search-mid search-hi sym sym-kind string-match "^\\(.*\\)\\([:bf]\\)" nil match-string 1 2 regexp-quote "^\\(" ":" "\\)" 0 "b" re-search-backward t re-search-forward "f" input-pending-p throw event-abort "\\(" caddr gas-qualify-symbol sym-list flags dmsg "local: sym-list: %s" (nil) sym-re lbl-re nlabels qualifiers searches search-params hi lo param --dolist-tail-- gas-re-nosym search-re limit x] 8 (#$ . 27049)])
#@37 Invalidate all symbol scan results.
(defalias 'gas-sym-invalidate #[nil "\306\211\306\211\306\211\211\207" [gas-hi-sym-list gas-hi-global gas-hi-global-undef gas-hi-undef gas-hi-error gas-hi-ok nil] 3 (#$ . 28317)])
#@87 Get symbol point is on, look for match and highlight it.
For use with the idle timer.
(defalias 'gas-symbol-highlight #[nil "\306 \307\216\212\310 \210)\212\311 `\312	!\313\314\315\215\210\f\211.\207" [save-match-data-internal fields curpoint case-fold-search case-fold-orig pointpos match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) gas-passthrough-highlight gas-parsed gas-get-pointpos nil event-abort (byte-code "\306\307\310	$\210\n\311x\210@\312\235\203\306\311\313\314\215\306\315\316\f#\210\317 \210\f\f@\311\"#\f\211$A@)\311
\211%\203\277%@
\320 \203I\321\322\311\"\210\323#\235\203T\324\202\235\325#\235\203f\326#\235\203f\327\202\235\325#\235\203q\330\202\235
@\331=\203}\311\202\235\326#\235\203\217\332#\235\203\217\333\202\235\f\211$A@)G\334V\205\235\335\"\306\315\336
\"$\210\"\203\266\337\"
A\340#\210%A\211%\204:,\340&\341 \210\311\207" [pointpos fields gas-skip-sym case-fold-search sym-list gas-hi-sym-list dmsg hi "pointpos=%s, fields=%s" nil (label argument C-comment) found (byte-code "@\306=\204\247\307\310	P!\203\247\311\312!\313\211\203x
@\314 \203(\315\316\313\"\210\f@\n\232\203q\fA@Y\203q\312\f8X\203q\317\f\233\313\211\203p
@\fA@Y\203i\312\f8X\203i\315\320\317\f\233\"\210
A\211\204L*
A\211\204*\321\311\322!!\211\205\245G V\203\232\323\324\325\"\210\326 \317_\327\245\"\210\330\303\f\"\210\315\320\317\f\233\"*\207\307\331\332!	#!\205\362\311\322!\333\n\"\211\203\306\315\320\fA\"\210\334\n!\211\205\361G V\203\347\323\324\335\"\210\326 \317_\327\245\"\210\330\336\f\"\210\315\320\fA\")\207" [pointpos gas-re-nosym lbl gas-locals-cache entry --dolist-tail-- C-comment looking-at "\\(\\([0-9]+\\)\\([bf:]\\)\\)" match-string 2 nil input-pending-p throw event-abort 3 found gas-scan-local-symbol 1 dmsg sym "gas-locals-cache truncated." nbutlast 4 add-to-list format "\\(%s+\\)%s" assoc gas-scan-global-symbol "gas-globals-cache truncated." gas-globals-cache curpoint gas-max-labels-in-cache gas-re-sym] 6) sym "gas-symbol-highlight: Matched: %s" gas-sym-invalidate input-pending-p throw event-abort duplicate gas-hi-error global def gas-hi-global gas-hi-global-undef C-ref ref gas-hi-ok 1 gas-hi-undef "target-list, sym: %s, list: %s" add-to-list t font-lock-fontify-buffer target-list flags x --dolist-tail-- gas-hi-valid] 6) sym-list] 2 (#$ . 28545)])
#@77 Check for a symbol at point to be highlighted.
For use with the idle timer.
(defalias 'gas-symbol-highlight-maybe #[nil "?\206\301 ?\205\302 \210\303 \210\302 \207" [gas-enable-symbol-highlight input-pending-p undo-boundary gas-symbol-highlight] 1 (#$ . 30995)])
#@71 True if we're editing a C syntax comment (the one enclosed in /* */).
(defalias 'gas-C-comment-p #[nil "\212`\301\302\303\304#\204\305\202\306\307\304#?*\207" [current re-search-backward "/\\*" 0 t nil re-search-forward "\\*/"] 4 (#$ . 31269)])
#@82 True if we're editing a C passthrough (a C style comment enclosed in /*C ...
*/)
(defalias 'gas-C-passthrough-p #[nil "\205\212`\302\303\304\305#\205\306\307	\305#?*\207" [gas-use-C-passthrough current re-search-backward "/\\*C" 0 t re-search-forward "\\*/"] 4 (#$ . 31526)])
#@87 True if we're editing a C passthrough comment (/# ...
#/ within a /*C ... */ comment)
(defalias 'gas-C-passthrough-comment-p #[nil "\205 \212`\302 \205\214\303 \210\304\305\306\307#\205\310\311	\307#?)*\207" [gas-use-C-passthrough current gas-C-passthrough-p gas-narrow-to-C-comment re-search-backward "/\\#" 0 t re-search-forward "[#*]/"] 4 (#$ . 31814)])
#@107 True if we're editing C passthrough code.
i.e. we're within a /*C ...*/ comment but not within /# ... #/.
(defalias 'gas-C-passthrough-code-p #[nil "\205\f\301 \205\f\302 ?\207" [gas-use-C-passthrough gas-C-passthrough-p gas-C-passthrough-comment-p] 1 (#$ . 32185)])
#@77 True if we're in a standard C commont or in a nested passthrough C comment.
(defalias 'gas-C-comment-really-p #[nil "\300 \205\301 ?\207" [gas-C-comment-p gas-C-passthrough-code-p] 1 (#$ . 32461)])
#@45 True if we're editing some kind of comment.
(defalias 'gas-comment-p #[nil "\301\302P!\206\n\303 \207" [gas-comment-string looking-back ".*" gas-C-comment-p] 3 (#$ . 32667)])
#@50 Narrow region to the C comment point resides in.
(defalias 'gas-narrow-to-C-comment #[nil "\302 \204	\303\304!\210\212\305\306!\307\310\311\312#\211\205	}+\207" [beg end gas-C-comment-p error "Not within C comment" re-search-backward ".*/[*]" re-search-forward "[*]/" nil t] 5 (#$ . 32850)])
#@151 Return a list how to parse for token `CUR-CHECK'.
The returned list holds three elements, see the documentation
of `gas-patterns' for an explanation.
(defalias 'gas-token-pattern #[(cur-check) "	\236A\211\204\303\304\305\"!\210\n)\207" [cur-check gas-patterns pattern t error "Gas internal: illegal pattern %s requested"] 5 (#$ . 33155)])
#@590 Parse for one of the tokens in list `CHECK-LIST'.
`CHECK-LIST' is a list of cons cells (TOKEN-SYMBOL . RESULTING-TYPE).

Look up each TOKEN-SYMBOL in `gas-patterns' in order, then match
the text at point against the two regexps found there.  On match,
eat the match (advance point past it) and return the resulting
field with its car set to RESULTING-TYPE (which is the same as
TOKEN-SYMBOL in nearly all cases except for the final parser
state, 'fini (and may be nil if same)).  If none matches,
return nil.

Valid TOKEN-SYMBOLS and RESULTING-TYPEs are the ones listed in
'gas-patterns'.
(defalias 'gas-next-token #[(check-list) "\301 \302\216\303\304\215*\207" [save-match-data-internal match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) got-token (byte-code "\306\211\205\356\n@\214\307	@!\211\211A@\211A@\211A@\306\211\310 \203A\311\312\313\"!\203A\314\224`Y\203\344`}\210\311\f!\203\344	A\315=\203d\316\225\316\224Z\202\224	A\317=\203\224`\320\225 !\321\212\322 \"\323\216\324\325 \326#\203\223\327\330`!Z\331Z\326#\210\202|-\320\225^b\210\332\333	A
\211A@\224^#Z
\211A@\224^#Z
\211A@\225^#Z
\211A@\211$\205\336\334$!\335\232?\205\336\334$!)\306\257\"\210.\nA\211\204\306*\207" [check-list cur-check --dolist-tail-- pattern-list regexp subexps nil gas-token-pattern line-end-position looking-at format "\\(\\(\"[^\n\"]*\"\\)\\|[^\n\"]\\)*?\\(%s\\)" 3 asm-comment 2 argument 0 (0) match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) re-search-forward "," t add-to-list subtype 1 throw got-token match-string "" limit-re limit arg-end arg-beg save-match-data-internal curbol subexp] 10)] 2 (#$ . 33506)])
#@1358 Parse the line point is on, element by element.
The returned list holds a list of syntactic elements (fields)
found, in the order of appearance.  Each syntactic element is
represented by a list holding 7 elements:

'(TYPE SUBTYPE BEG-COL TEXT-COL END-COL TEXT MODIFIED)
    0 - 'type: ('label, 'opcode ...)
    1 - 'subtype: (additional information required by some types)
    2 - 'beg-col: first slot (column #) (usually occupied by white 
                  space before text)
    3 - 'text-col: first text slot (column #)
    4 - 'end-col: first free slot after field (column #)
    5 - 'text: text contents (nil if empty)
    6 - 'modified: nil (will later reflect if rearrangement (indentation) 
        is required / was done).

Terminology: A single list of these 7 elements is called a
`field' throughout gas-mode.el.  `fields' as symbol name (or part
of a symbol name) means it stands for a variable bound to a list
of `field' lists which, in order of appearance, describe a
complete source line.

Note that text-col may lie outside (on the right side of) the
range beg-col ... end-col if there's no actual text (it is the
column where text would have to go to).

Don't assume a fixed element position except for 'type, which is
always the car of the list.  Instead, use `gas-nth' to extract
elements by their symbolic names ('type, 'subtype, ...).
(defalias 'gas-parse-line-really #[nil "\306\307\306\310\306\212\311 \312 \210`$\313 \203\314\315\202 \314\203\272\313 ?\205.\316\317!\211\204c%\236A\211&\204C\320\321\"\210&\322=\204O\316&!\f@\323=\203[\320\324\f\"\210\325\326\327\f$\210)\f@\330=\203s\f\330	D\240\210	T\f@\331=\203\206\332\236\203\206\333\334\f\335#\210\f\203\220\336\300\f\337#\210\f@\340=\203\231\f\203\243\f@<\204\246\f@\341=\203\256\n<\203!@\211\204%)\325\342\343#\210-\207" [fields C-inline-comment-level pushed-f-type f-type field cureol nil start 0 line-end-position beginning-of-line gas-C-comment-p starting-asm-line starting-within-C-comment gas-next-token ((C-inline-comment . C-inline-comment) (C-comment-start . C-comment-start)) error "Gas-mode internal: gas-parse-line: %s" fini garbage "Gas-mode internal: garbage: %s" dmsg parser "parsed a field: %s->%s" C-inline-comment asm-comment opcode gas-set-nth subtype 1 add-to-list t C-comment-start C-comment-end (parser cursor) "parsed all fields: %s" curbol gas-parse-sequences next-check] 6 (#$ . 35290)])
#@333 Return field of specified type.

Return field (a list) with first element (syntactic type) eq
to FIELD-TYPE from FIELD-LIST, nil if no such field.  

Optional OFFSET >= 0: return next field, OFFSET < 0: return
previous field.  If OFFSET is given.  both fields (FIELD-TYPE and
the one before/after) must exist, else nil is returned.
(defalias 'gas-get-field #[(field-type field-list &optional offset) "\203[\306\211\306\211\203!
@\307\302\f@\310#\210
A\211\204*\311V\2038\211A@\f=\203(\202T\nA@\211\203T	\203T	\f=\204T\n\211A@\210\2028\312\n@\"*\207\f\236\207" [offset f-type f-types field-list field --dolist-tail-- nil add-to-list t 0 gas-get-field ftypes field-type] 5 (#$ . 37742)])
#@320 Get one of the components of a field.

COMPONENT is the component to be returned.  FIELD-FROM is either
a list containing a field, or a symbol designating a field (see
`gas-parse-line-really' for both).  

In the latter case, optional FIELD-LIST must be supplied as a
list of fields where FIELD-FROM is extracted from.
(defalias 'gas-nth #[(component field-from &optional field-list) "\203\303	\"\202\f	\304\n!	8)\207" [field-list field-from component gas-get-field gas-elmt-n] 3 (#$ . 38466)])
#@51 Return the numeric index of field component ELMT.
(defalias 'gas-elmt-n #[(elmt) "9\205\f	G	>GZ\207" [elmt gas-elmt-types] 3 (#$ . 38973)])
#@330 Set a single field component.

ELMT is the content to set the field to.
If FIELD is a list containing a single field, set its ELMT (a
symbol) to VAL-OR-FIELDS.  If FIELD is a symbol designating a
field and VAL-OR-FIELDS is a list of such fields (as returned by
`gas-parsed'), set ELMT in the FIELD field of VAL-OR-FIELDS to
VAL.
(defalias 'gas-set-nth #[(elmt field val-or-fields &optional val) "\n\203
\236\202\305\f!	\233\n\240)\207" [field curfield val val-or-fields elmt gas-elmt-n] 2 (#$ . 39123)])
#@502 Rearrange FIELDS so they fit together without gaps or overlapping.

FIELDS is the field list describing the current line.

Optional ELMT designates a field component in the field specified
by (eq to) F-TYPE, which has to be changed before rearrangement
to VAL.  VAL may be a variable, a symbol which evaluates to the
taget value, or bound to a function returning the target type of
the component.

If the line did change, return the field type (the car) of the
first field that has changed, else nil.
(defalias 'gas-rearrange #[(fields &optional elmt f-type val) "\306\211\211\307\f\307\211\203\346@\310\311
\"\310\312
\"\n\313\314
#\210\203>\310\315
\"=\203>\313
#\210\310\311
\"\316=\204X\204`
@=\203`
@\236A\203~9\203~\317!\203x \202|\320!\204\206\n\n]\313\311
#\210\n\203\255=\204\255\204\247
@\313\321
\322#\210\n\203\273\310\311
\"\nG\\	\310\323
\"\206\304\306]\313\323
#\210\n]\306U\204\334\nT]+A\211\204*\313\323\324\f	$\210,\207" [did-change end-slot text-slot field-slot fields field 0 nil gas-nth text-col text gas-set-nth beg-col type all fboundp eval modified t end-col eol-ws --dolist-tail-- old-col val f-type elmt tcol gas-indents] 6 (#$ . 39644)])
#@53 Clears the `modified' flag on all fields in FIELDS.
(defalias 'gas-reset-modified #[(fields) "\303\211\205\n@\304\305	\303#\210\nA\211\204\303*\207" [fields field --dolist-tail-- nil gas-set-nth modified] 5 (#$ . 40913)])
#@162 Determine the field in FFIELDS point is on.
Returns a list (F-TYPE SUBTYPE OFFSET-TO-FIELD-TEXT-BEGIN ABS-COLUMN EOL).
EOL may bei either the symbol 'eol or nil
(defalias 'gas-get-pointpos #[(ffields) "i\305	!\211\211@@)D\306\307\215\210\310\fC\"\311\312\313\n#Y\203*\310\f\314\"\202+\f+\207" [curcol ffields fields x ppos copy-tree pos-found (byte-code "\305\211\203:\n@\306\307	\"\2033\306\310	\"Y\2033\306\311	\"X\2033	@\306\312	\"ZD\313\314\315\"\210\nA\211\204*\316\317\"\210\305\211\203q\n@\306\312	\"X\204[	@\320=\203j	@\306\312	\"ZD\313\314\315\"\210\nA\211\204H*\305\207" [fields field --dolist-tail-- curcol ppos nil gas-nth text beg-col end-col text-col throw pos-found t gas-rearrange all eol-ws] 6) append gas-nth end-col eol-ws (eol)] 6 (#$ . 41151)])
#@76 Return indent of the closest previous non-blank line in current C comment.
(defalias 'gas-get-C-relative-indent #[nil "\302 \204\207\214\303 \210\212\304\305\215)\306 \203\"\307\310!\203\"\311	Z]	*\207" [gas-C-indent col gas-C-comment-p gas-narrow-to-C-comment found (byte-code "\301\302!\203\303y\304U\203@\301\305!\203\306\307\310 \"\210\202\303y\304U\203@\301\311!\2031\306\307\310 \\\"\210\301\312!\203\306\307\310 \"\210\202\207" [gas-C-indent looking-at "[ 	]*#/" -1 0 "[ 	]*/#" throw found current-indentation "[ 	]*/[*#]" "[ 	]*[^ 	\n]"] 4) gas-C-passthrough-code-p looking-at "[ 	\n]*}[ 	\n]*;" 0] 3 (#$ . 41961)])
#@281 Complete parser result by adding in empty but allowed fields.

Determine line syntax from the parse result in PARSED-FIELDS,
then add in empty fields for syntactic components not used in the
source line but allowed by the syntax, so later code can safely
assume they are present.
(defalias 'gas-add-missing-fields #[(parsed-fields) "\306\211\211\211\211\211\204\307\202J\310\236\203 \311\202J\312\236\203+\313\202J\314\315\316#\211
\317=\203=\320\202I
\321=\203H\322\202I\323)\324\325\326\f#\210\306 \211!\203\256!@\211 @\211\f\235\203\236\f\211A@\211	=\204\215\324\327\330#\210\331\302\306\211\211\211\211\211\257\332#\210\202j\324\327\333 #\210\331\302 \332#\210\202\245\331\302 \332#\210!A\211!\204\\*\f\211A@\211\203\320\324\334\335#\210\331\302\306\211\211\211\211\211\257\332#\210\202\257\324\327\336\n#\210\n.\207" [cur-type f-type new-fields line-syntax mandatory existing-types nil (label opcode argument asm-comment eol-ws) C-comment (C-comment-start C-comment C-comment-end eol-ws) cpp-macro-def (cpp-macro-def cpp-argument eol-ws) gas-nth subtype asm-comment 3 (asm-comment eol-ws) 2 (label asm-comment eol-ws) (label opcode argument asm-comment eol-ws) dmsg (parser cursor) "mandatory: %s" parser "adding missing mandatory: %s" add-to-list t "adding existing mandatory: %s" rearranged "adding left-over: %s" "new-fields=%s" parsed-fields field --dolist-tail--] 10 (#$ . 42615)])
#@182 Return fields on line LINENO or, if nil, on current line.
Return cached data, if available.  Else, call
`gas-parse-line-really', store result into the gas-line-cache and
return it.
(defalias 'gas-parsed #[(&optional lineno) "\306\307\310	G$\210\n\311=\203\n=\204\n\312\n!\210\203\"\313\211	G\fV\2037\306\307\314\"\210\315	\f\316_\317\245\"\210
\206=\320 \211	\236\211\203S\211A@)\202\313\212\321!\210\322 \323!\324!\210\306\307\325#\210\326\301D\"\210))*\207" [gas-changed gas-line-cache gas-comment-char gas-local-comment-char gas-max-lines-in-cache lineno dmsg parser "gas-changed: %s, lenght gas-line-cache: %s" 59 gas-set-patterns nil "gas-line-cache truncated." nbutlast 3 4 line-number-at-pos goto-line gas-parse-line-really gas-add-missing-fields gas-rearrange "->gas-line-cache: %s" add-to-list curline cached x fields] 6 (#$ . 44073)])
#@97 Put FIELDS into gas-line-cache at LINENO.
Overwrites the previous entry for that line (if any).
(defalias 'gas-put-parsed #[(fields lineno) "\305!\210	\n\236\211\203C\241\202\306\302\fD\")\207" [fields lineno gas-line-cache current curline gas-reset-modified add-to-list] 5 (#$ . 44968)])
#@65 Replace the current scrren line by the one described by FIELDS.
(defalias 'gas-put-out #[(&optional fields) "\204\305 \306\307\310#\210\311\216\312\212\313 \210`\314 |\210\315\211\205K@\316\317\n\"\203C\f\2047\n@\320=\204C\316\321\n\"j\210\316\317\n\"c\210A\211\204\"\315-\207" [fields combine-after-change-calls field --dolist-tail-- gas-preserve-trailing-whitespace gas-parsed dmsg indent "put-out, fields: %s" ((combine-after-change-execute)) t beginning-of-line line-end-position nil gas-nth text eol-ws text-col] 5 (#$ . 45272)])
#@158 Get comment column according to asm comment subtype on current line.
The caller must provide the variable `fields' (bound to current
line's parsed content).
(defalias 'gas-get-asm-comment-column #[nil "\304\301\305#\211\204\n\202#	\306U\203\n\202#	\307U\203\"\202#\310)\207" [fields subtype gas-comment-column gas-opcode-column gas-nth asm-comment 1 2 0] 5 (#$ . 45832)])
#@111 Postition point to the start of the field of type F-TYPE.
FIELDS is a field list reflecting the current line.
(defalias 'gas-set-point-to-field #[(f-type fields) "\304\305	#\306\n!\210\nj\210\307=\205%\310\311\"\312w\210\313\314!?\205%\315\316\317\")\207" [f-type fields target-col gas-comment-char gas-nth text-col move-to-column asm-comment format " %c" nil looking-back " " insert-char 32 1] 4 (#$ . 46222)])
#@647 Set point to a field of the current line.

POINTPOS is the current field as returned by a call to
`gas-get-pointpos', FIELDS the parsed content of the current
line.  

If DIRECTION is nil or 'stay, set it to the beginning of
the current field.  If DIRECTION is 'end-of-field, set it to the
end of the current field.  If DIRECTION equals 'backward or
'forward, and ALWAYS is nil, set it to the beginning of the
next/previous field only if the field is unchanged, else to the
beginning of the current.  Finally, if DIRECTION equals 'backward
or'forward and ALWAYS is non-nil, move point unconditionally to
the beginning of the next/previous field.
(defalias 'gas-set-point #[(pointpos fields &optional direction always) "\306\307\310\311\312\n\f%\210
\3075\2116\203,6@5\313	5@C\"6A\2116\204*\314\301\315\316#\210\317=\203<	\237\n@\320=\203\207\321\n8\322=\203\207\323=\203[\324\n8\325U\204\207\326>\203\205\324\n87Y\203o\327\202\207\330\331\332
#\204\207\324\n88Y\203\207\333\202\207\327\317=\203\261\324\n8\325U\203\233\334	\324\"@\nA@\325V\203\261\335=\203\257\336\337!\204\261\340\341>\204\321\f\204\307\203\321\330\342
#\204\321	\235\2119A@)\310\311\343
$\210\344=\203\352o\203\345\345 \210\346 \202U\315=\203\377m\203\373\345 \210\347\350!\210\327\351\352 \210\330\353
#:\354=\203!\330\353
#\n\2119A@)\\:\2021\351=\2031:\330\355
#]:\356:\316\"\210:j\210)\335=\205U\357\360;\"\307w\210\336\361!?\205U\362\363\364\"*\207" [f-type existing pointpos direction always fields (line-begin) nil dmsg indent "(gas-set-point %s %s %s)" append add-to-list line-end t backward forward 3 eol C-comment-start 2 0 (label opcode argument) eol-ws gas-nth text opcode argument last asm-comment looking-back ";[ 	]" stay (pos stay end-of-field) modified "gas-set-point next:%s, fields: %s" line-begin beep beginning-of-line error "End of buffer" end-of-field gas-put-out text-col pos end-col move-to-column format " %c" " " insert-char 32 1 field --dolist-tail-- gas-comment-column gas-opcode-column x where gas-comment-char] 7 (#$ . 46647)])
#@321 Indent current line.

For lines carrying asm syntax, `gas-indent-current-field-only'
determines if only the current field or the entire line is
affected.

See `gas-set-point' for a description of DIRECTION and ALWAYS.
FFIELDS, if present, is a list describing the fields on the
current line as returned by `gas-parsed'.
(defalias 'gas-indent #[(&optional direction always ffields) "\206\306 \307\211\310	!\311\312\313	#\210\311\312\314#\210\f\204;\315 \204;
\316=\203;\317\320\215\2061\321\322'E\323\324(	\211)@@)\325=\203\220\212\326 \210\327\330!)\204a@\331=\203\220A@\322U\203\220\3328*\245+\f\333=\203y\322+S]+\202~+T+\334	\335\331*+_$\210\323)\331\202\250,\203\244\334	\335@@-\236A$\202\250\334	\336\"\311\312\337	#\210\340	\341 \"\210\342 \210(\203\310\343	\f($\210\202\n\203\324\344\n	\"\210\202@\331=\203\366\f\204\366\211)A@)\322V\203\366\343	\345($\210\202\f\204\211)A@)\322Y\203\343	\346($\210\202\343	\f($\210	+\207" [ffields fields rearranged-type pointpos direction this-command gas-parsed nil gas-get-pointpos dmsg indent "gas-indent, fields: %s" "gas-indent, pointpos: %s" gas-C-comment-p newline-and-indent field-found (byte-code "\303\211\205 \n@\304\305	\"\203\306\307	@\"\210\nA\211\204\303*\207" [fields field --dolist-tail-- nil gas-nth text throw field-found] 4) opcode 0 stay t C-comment-start beginning-of-line looking-at "[ 	]*$" C-comment 2 backward gas-rearrange text-col all "re-indented, fields: %s" gas-put-parsed line-number-at-pos gas-put-out gas-set-point gas-set-point-to-field pos forward gas-opcode-column always x gas-C-indent n_indents gas-indent-current-field-only gas-indents] 7 (#$ . 48765)])
#@135 Indent all fields in region.

If optional FROM and TO are given, they are used instead of point
and mark for the region's end points.
(defalias 'gas-indent-region #[(&optional from to) "\204	`\304 ^	\204`\304 ]\305\216\306\212b\210m?\205L`	W\205L\307\310\311\312 #\210\313 \2038\314\315!\210\202\316 \317\320\"\210\321!\210\314\315!\210)\202+\207" [from to combine-after-change-calls fields mark ((combine-after-change-execute)) t dmsg indent "indent-region, line:%s" line-number-at-pos gas-C-comment-p beginning-of-line 2 gas-parsed gas-rearrange all gas-put-out] 4 (#$ . 50491) nil])
#@91 Indent, then move to previous field.
While in C-comment, remove one level of indentation.
(defalias 'gas-indent-backward #[nil "\300\301\302\"\207" [gas-indent backward always] 3 (#$ . 51101) nil])
#@95 On a highlighted symbol, move to next (previous if N < 9).  
Else do `forward-sexp' as usual.
(defalias 'gas-forward-sexp #[(n) "\303 \210\304 \210\203\305\306\215?\205\307 \207\310\311\n!)\207" [gas-hi-sym-list forward-sexp-function n gas-sym-invalidate gas-symbol-highlight found-one (byte-code "\305W\2038	\211A@)\306\211\2056\f@\211\211A@)`V\203.\211A@)b\210\307\310\311\"\210\fA\211\204\306*\207\312	\211A@)!\306\211\205g\f@\3138`W\203_\211A@)b\210\307\310\311\"\210\fA\211\204G\306*\207" [n gas-hi-sym-list x match --dolist-tail-- 0 nil throw found-one t reverse 2] 4) beep nil forward-sexp] 2 (#$ . 51305) nil])
#@101 Skip to the beginning of the current block.
The block delimiter is described by `gas-defun-regexp'.
(defalias 'gas-beginning-of-defun #[nil "\212\303\304\305#)\211\205\n\224b)\207" [gas-defun-regexp beg gas-defun-regexp-subexp re-search-backward nil t] 5 (#$ . 51962) nil])
#@98 Skip to the beginning of the next block.
The block delimiter is described by `gas-defun-regexp'.
(defalias 'gas-end-of-defun #[nil "\212\303\304\305#)\211\205\n\224b)\207" [gas-defun-regexp beg gas-defun-regexp-subexp re-search-forward nil t] 5 (#$ . 52246) nil])
#@66 Insert a hash mark.  If it start a macro, delete the indentaion.
(defalias 'gas-hash #[nil "\300 \204\301\302!\203\303 \210\304 \210\305\306!\207" [gas-comment-p looking-back "^[ 	]*" beginning-of-line delete-horizontal-space call-interactively self-insert-command] 2 (#$ . 52520) nil])
#@72 Insert a colon; if it follows a label, delete the label's indentation.
(defalias 'gas-colon #[nil "\302\303!\210\304 \305!\306\307\310#\210\306\307\311	#\210	@\312=\205%\313 \210\314\315\316\"*\207" [fields pointpos call-interactively self-insert-command gas-parsed gas-get-pointpos dmsg indent "gas-colon, fields: %s" "gas-colon, pointpos: %s" label beginning-of-line gas-indent forward t] 4 (#$ . 52817) nil])
(defalias 'gas-newline 'newline-and-indent)
#@139 De-comment region if at start of comment, make comment out of region if not.
Optional argument FROM Optional FROM and TO mark the region.
(defalias 'gas-comment-region-dwim #[(&optional from to) "\204`\306 ^`\306 ]\212	b\210n)\203	S\212	b\210\307 b\210\307 \310 \203	\311\211\3116\312\313!\2117\206>\314 8\214\315 \2108\203\234\314 \203Q\316c\210\317\320\321#\203l\322\323!\210\317\324\321#\203Q\322\323!\210\202Q\212\317\325\311\321#)\326\327!6\212\317\330\311\321#)6\331\232\203\230\f\203\222\f
V\203\230b\210\332c\210+\202\333c\210\212\317\334\311\321#\211)\203\324\317\330\321#\211\203\324\322\335!\210\317\325\321#\2106\336\232\203\315\322\337!\210\202\237\322\340!\210\202\237\212\317\325\311\321#)\326\327!6\212\317\330\311\321#)6\336\232\203\f\203\372\f
V\203b\210\341u\210\342c\210+.\202\230\343\344\3459\"!\203\327\224b\210:\311x\210\214`	}\210\346\3479\"\350P\311\312\344\3519\211#!8;<8\203\223\327\225b\210:\311x\210\312\344\3529\"!\210\326\353!\354\326\355!!\326\347!=>\211?\203n\356\357?\"\203n\360\202o\361?=\203\202\356\357=\"\203\202\362\202\207\344\3639\"=?>=Q;+\364\365\215\210,\311\211\211+\207" [from to mmin mmax beg end mark point-marker gas-C-passthrough-p nil looking-at "[ 	\n]*/#" gas-C-passthrough-comment-p gas-narrow-to-C-comment " #/\n" re-search-forward "\\(\n[ 	]*\\)?/#\\(\n[ 	]*\\)?" t replace-match "" "\\(\n[ 	]*\\)?[#]/\\(\n[ 	]*\\)?" "[#*]/" match-string 0 "/#" "#/" "\n/#\n" " /#\n " "[*#]/" "#/ /# " "*/" "   #/\n*/" "#/ /#" -2 "\n   #/\n" looking-back format "%c+[ 	]*" make-string 3 " " "[ 	]*%c\\|.*\n[ 	\n]*%c" "\n?\\([ 	]\\)*\\(%c+\\)\\([ 	]?\\)" 1 regexp-quote 2 string-match "[ 	]" "\\([ 	]*" "\\(" "[ 	]?\\)" "\\)\\([^%c]\\|$\\)" fini (byte-code "\303 \204#\304\305!\204#\204	c\210\202#\304\n!\203#\306\307\310\311\310\312%\210\310y\313U\203.n\204\314\315\311\"\210\202" [de-comment triple-comment comment-pattern gas-C-comment-p looking-at "[ 	]/[*]" replace-match "" nil t 1 0 throw fini] 6) end-match pos de-comment gas-comment-char gas-comment-string comment-pattern triple-comment post-pattern mid-pattern pre-pattern] 8 (#$ . 53285)])
#@77 Skip to previous asm field.  Within C style comments, decrease indentation.
(defalias 'gas-backward-indent #[nil "\300\301\302\"\207" [gas-indent backward always] 3 (#$ . 55485) nil])
#@151 Start/expand a comment.
Suggested usage:  while writing your code, trigger `gas-comment'
repeatedly until you are satisfied with the kind of comment.
(defalias 'gas-comment #[nil "\306	\203	\307 \207\212\310 )i\311\n!\312\305\313\n#\314\315\316\f\n$\210\317 \203.\3205\321\"\202\322 \203P\323\324!\203<\325c\210\323\326!\203H\327c\210\202K\330c\210\331u\202\332 \203t6\203l\323\333!\203l\212\334\335\336\211\211\321%)\202\3205\321\"\202
\203\264
\337Y\203\264\340\312\341\313\n#!\210\342\343!\210\334\344!\210\345c\210\346u\210\347\350\351\"\210\352 7\353c\2107j\210\354c\210\346y\21078\\j)\202\323\355\356 \"\203\304\357c\210\331u\202\312\341\313\n#\2119\203\324\3409!\210)
\203\357iX\203\370\212\360\3615\"\336w\210iY)\203\370\3205\321\"\210\310 \362\n\341\313#\210\363\n!\210\364\313\n\",\207" [gas-doing-comment mark-active fields curcol pointpos subtype t gas-comment-region-dwim gas-parsed gas-get-pointpos gas-nth asm-comment dmsg indent "gas-comment, pointpos: %s, fields. %s" gas-C-passthrough-comment-p insert-char 1 gas-C-passthrough-code-p looking-back "/[*]C[ 	]*" "\n" "[ 	]" "/#   #/ " " /#   #/ " -5 gas-C-comment-p "\\(/[*] ?\\)[ 	\n]*" replace-match "/*C" nil 3 move-to-column text-col looking-at ";+ ?" "" "/*" -1 gas-indent forward always current-indentation "\n\n" "*/" "[ 	]*#.*" line-beginning-position "/*   */ " format "%c 	" gas-rearrange gas-put-out gas-set-point-to-field gas-comment-char gas-use-C-passthrough curindent gas-C-indent target-col] 7 (#$ . 55676) nil])
#@167 Beautify asm code block.  Within comments, fill current paragraph.
Calls `fill-paragraph' if within a C comment with ARG passed
through (which is ignored otherwise).
(defalias 'gas-fill-paragraph #[(arg) "i\306\307\310\211#\311\312 \2033\212\313\314!\210\315\225)\212\316\317!\210\315\224)\"\214
\"}\210\320#!\210+\202 \321 \203p\212\313\322!\210\315\225)\212\316\317!\210\315\224)\"
b\210`\"W\203l\323 $\324$\325\"\210\326$!\210\327\330!\210)\202N*\202 \212\327 \210\331\n!)\203\317\332\333!\334P%\307\335\332\330!$&\212\327 \210\212\327 \210\331&!)\203\242\315\210\202\220`)\212\306\210\212\327\330!\210\331&!)\203\274\330\210\202\251`)\"\214
\"}\210\320#!\210-\202 \212\327 \210\212\327\315!\210\331\n!\206\346\331	!\206\346\336 )\204\361\327\315!\210\202\323`)\212\306\210\212\327\330!\210\331\n!\206\n\331	!\206\n\336 )\204\330\210\202\367`)\"\337
\"\"\210*\340\f!\210,\341\207" [gas-comment-char empty-line-re asm-comment-re fill-paragraph-function curcol beg nil format "\\([ 	]*\\(%c+\\)\\)[ 	]*[^ 	%c\n]\n?" "\\([^ 	]+:\\)?[ 	]*$" gas-C-comment-really-p re-search-backward "/#\\|/[*][^C]\\([ 	]*\n\\)?" 0 re-search-forward "\\(\n[ 	]*\\)?[*#]/" fill-paragraph gas-C-passthrough-code-p "\\(#/\\|/[*]C\\)\\([ 	]*\n\\)?" gas-parsed gas-rearrange all gas-put-out beginning-of-line 2 looking-at match-string 1 " " "[^%c\n]*\\%s[ 	]*[^ 	%c\n]\n?" gas-comment-p gas-indent-region move-to-column t end arg fields fill-prefix re] 6 (#$ . 57225)])
#@421 Handle comment character.

If we're in a comment start sequence (either introduced by the
last command being `gas-comment' or by
`gas-comment-char-starts-comment' being customized to a non-nil
value and typing 'gas-comment-char'), increment the level of the
comment just started.

Else, if `gas-comment-char-starts-comment' is customized to a
non-nil value, start comment.

Else just insert variable `gas-comment-char'.
(defalias 'gas-comment-char #[nil "\203\f\304 \204\f\305 \207	\203\n\306\235\203\305 \207\307\310\311\"\207" [gas-comment-char-starts-comment gas-doing-comment last-command gas-comment-char gas-C-comment-p gas-comment (gas-comment-char gas-comment) nil insert-char 1] 3 (#$ . 58733) nil])
(provide 'gas-mode)