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: 2014 Feb 04 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 96" Assembler directives start with a '.' and may contain upper case (e.g., 97" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in 98" CFI directives (e.g., .cfi_startproc). This will also match labels starting 99" with '.', including the GCC auto-generated '.L' labels. 100syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*" 101 102 103syn case match 104 105" Define the default highlighting. 106" For version 5.7 and earlier: only when not done already 107" For version 5.8 and later: only when an item doesn't have highlighting yet 108if version >= 508 || !exists("did_asm_syntax_inits") 109 if version < 508 110 let did_asm_syntax_inits = 1 111 command -nargs=+ HiLink hi link <args> 112 else 113 command -nargs=+ HiLink hi def link <args> 114 endif 115 116 " The default methods for highlighting. Can be overridden later 117 HiLink asmSection Special 118 HiLink asmLabel Label 119 HiLink asmComment Comment 120 HiLink asmTodo Todo 121 HiLink asmDirective Statement 122 123 HiLink asmInclude Include 124 HiLink asmCond PreCondit 125 HiLink asmMacro Macro 126 127 HiLink hexNumber Number 128 HiLink decNumber Number 129 HiLink octNumber Number 130 HiLink binNumber Number 131 132 HiLink asmIdentifier Identifier 133 HiLink asmType Type 134 135 delcommand HiLink 136endif 137 138let b:current_syntax = "asm" 139 140let &cpo = s:cpo_save 141unlet s:cpo_save 142 143" vim: ts=8 144