diff options
Diffstat (limited to 'runtime/syntax/asm.vim')
-rw-r--r-- | runtime/syntax/asm.vim | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/runtime/syntax/asm.vim b/runtime/syntax/asm.vim new file mode 100644 index 0000000..492e3e8 --- /dev/null +++ b/runtime/syntax/asm.vim @@ -0,0 +1,130 @@ +" Vim syntax file +" Language: GNU Assembler +" Maintainer: Erik Wognsen <erik.wognsen@gmail.com> +" Previous maintainer: +" Kevin Dahlhausen <kdahlhaus@yahoo.com> +" Last Change: 2014 Feb 04 + +" Thanks to Ori Avtalion for feedback on the comment markers! + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +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, +" I (Kevin) prefer to map it as decimal: +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]*" + +syn keyword asmTodo contained TODO + + +" GAS supports one type of multi line comments: +syn region asmComment start="/\*" end="\*/" contains=asmTodo + +" 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 + +" 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: +syn match asmComment "[#;!|].*" contains=asmTodo + +" 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. + +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-_]*" + + +syn case match + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting. Can be overridden later +hi def link asmSection Special +hi def link asmLabel Label +hi def link asmComment Comment +hi def link asmTodo Todo +hi def link asmDirective Statement + +hi def link asmInclude Include +hi def link asmCond PreCondit +hi def link asmMacro Macro + +hi def link hexNumber Number +hi def link decNumber Number +hi def link octNumber Number +hi def link binNumber Number + +hi def link asmIdentifier Identifier +hi def link asmType Type + + +let b:current_syntax = "asm" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 |