dis: Fix label matching
[vimconf.git] / syntax / dis.vim
1 " Vim syntax file
2 " Language: x86/x64 GNU Disassembler (objdump -d -Mintel)
3 " Maintainer: @shiracamus <shiracamus@gmail.com>
4 " Last Change: 2013 Dec 30
5
6 " For version 5.x: Clear all syntax items
7 " For version 6.0 and later: Quit when a syntax file was already loaded
8 if version < 600
9 syntax clear
10 elseif exists("b:current_syntax")
11 finish
12 endif
13
14 let s:cpo_save = &cpo
15 set cpo&vim
16
17 syn case ignore
18
19 syn match disOffset "[+-]"
20 syn match disNumber "[+-]\?\<0x[0-9a-f]\+\>" contains=disOffset
21 syn match disNumber "[+-]\?\<[0-9a-f]\+\>" contains=disOffset
22
23 syn match disRegister "\<[re]\?[abcd][xhl]\>"
24 syn match disRegister "\<[re]\?[sd]il\?\>"
25 syn match disRegister "\<[re]\?[sbi]pl\?\>"
26 syn match disRegister "\<r[0-9]\+[dwb]\?\>"
27 syn match disRegister "[^\t]\<[cdefgs]s\>"hs=s+1
28
29 syn match disAt "@"
30 syn match disSection " \.[a-z][a-z_\.-]*:"he=e-1
31 syn match disSection "@[a-z0-9_][a-z0-9_-]\+"hs=s+1 contains=disAt,disNumber
32
33 " SH: Having a function name like "f" leads to labels like "<f>", which shall
34 " not be matched as disNumber.
35 "syn match disLabel "<[a-z0-9_.][a-z0-9_.@+-]*>"hs=s+1,he=e-1 contains=disNumber,disSection
36 syn match disLabel "<[a-z0-9_.][a-z0-9_.@+-]*>"hs=s+1,he=e-1 contains=disSection
37 syn match disHexDump ":\t\([0-9a-f][0-9a-f][ \t]\)\+"hs=s+1
38
39 syn match disError "<internal disassembler error>"
40 syn match disError "(bad)"
41
42 syn keyword disTodo contained TODO
43
44 syn region disComment start="/\*" end="\*/" contains=disTodo
45 syn match disComment "[#;!|].*" contains=disLabel,disTodo
46 syn match disStatement "//.*" contains=cStatement
47
48 syn match disSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
49 syn region disString start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=disSpecial
50 syn region disString start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=disSpecial
51
52 syn match disFormat ": \+file format "
53 syn match disTitle "^[^ ]\+: \+file format .*$" contains=disFormat
54
55 syn match disMacro "FWORD"
56 syn match disMacro "QWORD"
57 syn match disMacro "DWORD"
58 syn match disMacro "BYTE"
59 syn match disMacro "PTR"
60
61 syn match disData ".word"
62 syn match disData ".short"
63 syn match disData ".byte"
64
65 " Opecode matched disNumber
66 syn match disOpecode "\<add "
67 syn match disOpecode "\<adc "
68 syn match disOpecode "\<dec "
69 syn match disOpecode "\<fadd "
70
71 syn case match
72
73 " Define the default highlighting.
74 " For version 5.7 and earlier: only when not done already
75 " For version 5.8 and later: only when an item doesn't have highlighting yet
76 if version >= 508 || !exists("did_dis_syntax_inits")
77 if version < 508
78 let did_dis_syntax_inits = 1
79 command -nargs=+ HiLink hi link <args>
80 else
81 command -nargs=+ HiLink hi def link <args>
82 endif
83
84 " The default methods for highlighting. Can be overridden later
85 " Comment
86 HiLink disComment Comment
87 " Constant: String, Character, Number, Boolean, Float
88 HiLink disNumber Number
89 HiLink disString String
90 " Identifier: Function
91 HiLink disHexDump Identifier
92 " Statement: Conditional, Repeat, Label, Operator, Keyword, Exception
93 HiLink disStatement Statement
94 HiLink disLabel Label
95 " PreProc: Include, Define, Macro, PreCondit
96 HiLink disData Define
97 HiLink disMacro Macro
98 " Type: StorageClass, Structure, Typedef
99 HiLink disRegister StorageClass
100 HiLink disTitle Typedef
101 " Special: SpecialChar, Tag, Delimiter, SpecialComment, Debug
102 HiLink disSpecial SpecialChar
103 HiLink disSection Special
104 " Underlined
105 " Ignore
106 " Error
107 HiLink disError Error
108 " Todo
109 HiLink disTodo Todo
110
111 delcommand HiLink
112 endif
113
114 let b:current_syntax = "dis"
115
116 let &cpo = s:cpo_save
117 unlet s:cpo_save
118
119 " vim: ts=8 sts=4 sw=2