xref: /vim-8.2.3635/runtime/syntax/asm.vim (revision 53bfca22)
1" Vim syntax file
2" Language:	GNU Assembler
3" Maintainer:	Erik Wognsen <[email protected]>
4"		Previous maintainer:
5"		Kevin Dahlhausen <[email protected]>
6" Last Change:	2012 Apr 09
7
8" Thanks to Ori Avtalion for feedback on the comment markers!
9
10" For version 5.x: Clear all syntax items
11" For version 6.0 and later: Quit when a syntax file was already loaded
12if version < 600
13  syntax clear
14elseif exists("b:current_syntax")
15  finish
16endif
17
18let s:cpo_save = &cpo
19set cpo&vim
20
21syn case ignore
22
23" storage types
24syn match asmType "\.long"
25syn match asmType "\.ascii"
26syn match asmType "\.asciz"
27syn match asmType "\.byte"
28syn match asmType "\.double"
29syn match asmType "\.float"
30syn match asmType "\.hword"
31syn match asmType "\.int"
32syn match asmType "\.octa"
33syn match asmType "\.quad"
34syn match asmType "\.short"
35syn match asmType "\.single"
36syn match asmType "\.space"
37syn match asmType "\.string"
38syn match asmType "\.word"
39
40syn match asmLabel		"[a-z_][a-z0-9_]*:"he=e-1
41syn match asmIdentifier		"[a-z_][a-z0-9_]*"
42
43" Various #'s as defined by GAS ref manual sec 3.6.2.1
44" Technically, the first decNumber def is actually octal,
45" since the value of 0-7 octal is the same as 0-7 decimal,
46" I (Kevin) prefer to map it as decimal:
47syn match decNumber		"0\+[1-7]\=[\t\n$,; ]"
48syn match decNumber		"[1-9]\d*"
49syn match octNumber		"0[0-7][0-7]\+"
50syn match hexNumber		"0[xX][0-9a-fA-F]\+"
51syn match binNumber		"0[bB][0-1]*"
52
53syn keyword asmTodo		contained TODO
54
55
56" GAS supports one type of multi line comments:
57syn region asmComment		start="/\*" end="\*/" contains=asmTodo
58
59" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
60" a backslash ending a C++ style comment does not extend the comment to the
61" next line (hence the syntax region does not define 'skip="\\$"')
62syn region asmComment		start="//" end="$" keepend contains=asmTodo
63
64" Line comment characters depend on the target architecture and command line
65" options and some comments may double as logical line number directives or
66" preprocessor commands. This situation is described at
67" http://sourceware.org/binutils/docs-2.22/as/Comments.html
68" Some line comment characters have other meanings for other targets. For
69" example, .type directives may use the `@' character which is also an ARM
70" comment marker.
71" As a compromise to accommodate what I arbitrarily assume to be the most
72" frequently used features of the most popular architectures (and also the
73" non-GNU assembly languages that use this syntax file because their asm files
74" are also named *.asm), the following are used as line comment characters:
75syn match asmComment		"[#;!|].*" contains=asmTodo
76
77" Side effects of this include:
78" - When `;' is used to separate statements on the same line (many targets
79"   support this), all statements except the first get highlighted as
80"   comments. As a remedy, remove `;' from the above.
81" - ARM comments are not highlighted correctly. For ARM, uncomment the
82"   following two lines and comment the one above.
83"syn match asmComment		"@.*" contains=asmTodo
84"syn match asmComment		"^#.*" contains=asmTodo
85
86" Advanced users of specific architectures will probably want to change the
87" comment highlighting or use a specific, more comprehensive syntax file.
88
89syn match asmInclude		"\.include"
90syn match asmCond		"\.if"
91syn match asmCond		"\.else"
92syn match asmCond		"\.endif"
93syn match asmMacro		"\.macro"
94syn match asmMacro		"\.endm"
95
96syn match asmDirective		"\.[a-z][a-z]\+"
97
98
99syn case match
100
101" Define the default highlighting.
102" For version 5.7 and earlier: only when not done already
103" For version 5.8 and later: only when an item doesn't have highlighting yet
104if version >= 508 || !exists("did_asm_syntax_inits")
105  if version < 508
106    let did_asm_syntax_inits = 1
107    command -nargs=+ HiLink hi link <args>
108  else
109    command -nargs=+ HiLink hi def link <args>
110  endif
111
112  " The default methods for highlighting.  Can be overridden later
113  HiLink asmSection	Special
114  HiLink asmLabel	Label
115  HiLink asmComment	Comment
116  HiLink asmTodo	Todo
117  HiLink asmDirective	Statement
118
119  HiLink asmInclude	Include
120  HiLink asmCond	PreCondit
121  HiLink asmMacro	Macro
122
123  HiLink hexNumber	Number
124  HiLink decNumber	Number
125  HiLink octNumber	Number
126  HiLink binNumber	Number
127
128  HiLink asmIdentifier	Identifier
129  HiLink asmType	Type
130
131  delcommand HiLink
132endif
133
134let b:current_syntax = "asm"
135
136let &cpo = s:cpo_save
137unlet s:cpo_save
138
139" vim: ts=8
140