0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00
vim/runtime/syntax/asm.vim

144 lines
4.6 KiB
VimL
Raw Normal View History

2004-06-13 20:20:40 +00:00
" Vim syntax file
" Language: GNU Assembler
2010-01-12 21:31:21 +01:00
" Maintainer: Erik Wognsen <erik.wognsen@gmail.com>
" Previous maintainer:
" Kevin Dahlhausen <kdahlhaus@yahoo.com>
" Last Change: 2014 Feb 04
2010-05-14 23:24:24 +02:00
" Thanks to Ori Avtalion for feedback on the comment markers!
2004-06-13 20:20:40 +00:00
" For version 5.x: Clear all syntax items
2010-01-12 21:31:21 +01:00
" For version 6.0 and later: Quit when a syntax file was already loaded
2004-06-13 20:20:40 +00:00
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
2012-01-10 14:55:01 +01:00
let s:cpo_save = &cpo
set cpo&vim
2004-06-13 20:20:40 +00:00
syn case ignore
" storage types
syn match asmType "\.long"
syn match asmType "\.ascii"
syn match asmType "\.asciz"
syn match asmType "\.byte"
syn match asmType "\.double"
syn match asmType "\.float"
syn match asmType "\.hword"
syn match asmType "\.int"
syn match asmType "\.octa"
syn match asmType "\.quad"
syn match asmType "\.short"
syn match asmType "\.single"
syn match asmType "\.space"
syn match asmType "\.string"
syn match asmType "\.word"
syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1
syn match asmIdentifier "[a-z_][a-z0-9_]*"
" Various #'s as defined by GAS ref manual sec 3.6.2.1
" Technically, the first decNumber def is actually octal,
" since the value of 0-7 octal is the same as 0-7 decimal,
2012-01-10 14:55:01 +01:00
" I (Kevin) prefer to map it as decimal:
2004-06-13 20:20:40 +00:00
syn match decNumber "0\+[1-7]\=[\t\n$,; ]"
syn match decNumber "[1-9]\d*"
syn match octNumber "0[0-7][0-7]\+"
syn match hexNumber "0[xX][0-9a-fA-F]\+"
syn match binNumber "0[bB][0-1]*"
2010-05-14 23:24:24 +02:00
syn keyword asmTodo contained TODO
2012-01-10 14:55:01 +01:00
" GAS supports one type of multi line comments:
2010-05-14 23:24:24 +02:00
syn region asmComment start="/\*" end="\*/" contains=asmTodo
2012-01-10 14:55:01 +01:00
2012-04-13 23:04:47 +02:00
" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
" a backslash ending a C++ style comment does not extend the comment to the
" next line (hence the syntax region does not define 'skip="\\$"')
syn region asmComment start="//" end="$" keepend contains=asmTodo
2012-01-10 14:55:01 +01:00
" Line comment characters depend on the target architecture and command line
" options and some comments may double as logical line number directives or
" preprocessor commands. This situation is described at
" http://sourceware.org/binutils/docs-2.22/as/Comments.html
" Some line comment characters have other meanings for other targets. For
" example, .type directives may use the `@' character which is also an ARM
" comment marker.
" As a compromise to accommodate what I arbitrarily assume to be the most
" frequently used features of the most popular architectures (and also the
" non-GNU assembly languages that use this syntax file because their asm files
" are also named *.asm), the following are used as line comment characters:
2010-05-14 23:24:24 +02:00
syn match asmComment "[#;!|].*" contains=asmTodo
2012-01-10 14:55:01 +01:00
" Side effects of this include:
" - When `;' is used to separate statements on the same line (many targets
" support this), all statements except the first get highlighted as
" comments. As a remedy, remove `;' from the above.
" - ARM comments are not highlighted correctly. For ARM, uncomment the
" following two lines and comment the one above.
"syn match asmComment "@.*" contains=asmTodo
"syn match asmComment "^#.*" contains=asmTodo
" Advanced users of specific architectures will probably want to change the
" comment highlighting or use a specific, more comprehensive syntax file.
2004-06-13 20:20:40 +00:00
syn match asmInclude "\.include"
syn match asmCond "\.if"
syn match asmCond "\.else"
syn match asmCond "\.endif"
syn match asmMacro "\.macro"
syn match asmMacro "\.endm"
" Assembler directives start with a '.' and may contain upper case (e.g.,
" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in
" CFI directives (e.g., .cfi_startproc). This will also match labels starting
" with '.', including the GCC auto-generated '.L' labels.
syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*"
2004-06-13 20:20:40 +00:00
syn case match
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_asm_syntax_inits")
if version < 508
let did_asm_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" The default methods for highlighting. Can be overridden later
HiLink asmSection Special
HiLink asmLabel Label
HiLink asmComment Comment
2010-05-14 23:24:24 +02:00
HiLink asmTodo Todo
2004-06-13 20:20:40 +00:00
HiLink asmDirective Statement
HiLink asmInclude Include
HiLink asmCond PreCondit
HiLink asmMacro Macro
HiLink hexNumber Number
HiLink decNumber Number
HiLink octNumber Number
HiLink binNumber Number
2012-01-10 14:55:01 +01:00
HiLink asmIdentifier Identifier
2004-06-13 20:20:40 +00:00
HiLink asmType Type
delcommand HiLink
endif
let b:current_syntax = "asm"
2012-01-10 14:55:01 +01:00
let &cpo = s:cpo_save
unlet s:cpo_save
2004-06-13 20:20:40 +00:00
" vim: ts=8