aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax/asm.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/asm.vim')
-rw-r--r--runtime/syntax/asm.vim100
1 files changed, 67 insertions, 33 deletions
diff --git a/runtime/syntax/asm.vim b/runtime/syntax/asm.vim
index 492e3e8e92..73f283a4a7 100644
--- a/runtime/syntax/asm.vim
+++ b/runtime/syntax/asm.vim
@@ -1,11 +1,10 @@
" 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!
+" Language: GNU Assembler
+" Maintainer: Doug Kearns dougkearns@gmail.com
+" Previous Maintainers: Erik Wognsen <erik.wognsen@gmail.com>
+" Kevin Dahlhausen <kdahlhaus@yahoo.com>
+" Contributors: Ori Avtalion, Lakshay Garg
+" Last Change: 2020 Oct 31
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -34,29 +33,49 @@ 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_]*"
+syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1
" Various #'s as defined by GAS ref manual sec 3.6.2.1
-" Technically, the first decNumber def is actually octal,
+" Technically, the first asmDecimal 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 match asmDecimal "\<0\+[1-7]\=\>" display
+syn match asmDecimal "\<[1-9]\d*\>" display
+syn match asmOctal "\<0[0-7][0-7]\+\>" display
+syn match asmHexadecimal "\<0[xX][0-9a-fA-F]\+\>" display
+syn match asmBinary "\<0[bB][0-1]\+\>" display
+
+syn match asmFloat "\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display
+syn match asmFloat "\.\d\+\%(e[+-]\=\d\+\)\=\>" display
+syn match asmFloat "\<\d\%(e[+-]\=\d\+\)\>" display
+syn match asmFloat "[+-]\=Inf\>\|\<NaN\>" display
+
+syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display
+syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d\+\%(\.\d\+\)\=\%(e[+-]\=\d\+\)\=" display
+" Avoid fighting the hexadecimal match for unicorn-like '0x' prefixed floats
+syn match asmFloat "\%(0x\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display
-syn keyword asmTodo contained TODO
+" Allow all characters to be escaped (and in strings) as these vary across
+" architectures [See sec 3.6.1.1 Strings]
+syn match asmCharacterEscape "\\." contained
+syn match asmCharacter "'\\\=." contains=asmCharacterEscape
+syn match asmStringEscape "\\\_." contained
+syn match asmStringEscape "\\\%(\o\{3}\|00[89]\)" contained display
+syn match asmStringEscape "\\x\x\+" contained display
+
+syn region asmString start="\"" end="\"" skip="\\\\\|\\\"" contains=asmStringEscape
+
+syn keyword asmTodo contained TODO FIXME XXX NOTE
" GAS supports one type of multi line comments:
-syn region asmComment start="/\*" end="\*/" contains=asmTodo
+syn region asmComment start="/\*" end="\*/" contains=asmTodo,@Spell
" 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
+syn region asmComment start="//" end="$" keepend contains=asmTodo,@Spell
" Line comment characters depend on the target architecture and command line
" options and some comments may double as logical line number directives or
@@ -69,7 +88,7 @@ syn region asmComment start="//" end="$" keepend contains=asmTodo
" 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
+syn match asmComment "[#;!|].*" contains=asmTodo,@Spell
" Side effects of this include:
" - When `;' is used to separate statements on the same line (many targets
@@ -96,35 +115,50 @@ syn match asmMacro "\.endm"
" 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 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 asmInclude Include
+hi def link asmCond PreCondit
+hi def link asmMacro Macro
+
+if exists('g:asm_legacy_syntax_groups')
+ hi def link hexNumber Number
+ hi def link decNumber Number
+ hi def link octNumber Number
+ hi def link binNumber Number
+ hi def link asmHexadecimal hexNumber
+ hi def link asmDecimal decNumber
+ hi def link asmOctal octNumber
+ hi def link asmBinary binNumber
+else
+ hi def link asmHexadecimal Number
+ hi def link asmDecimal Number
+ hi def link asmOctal Number
+ hi def link asmBinary Number
+endif
+hi def link asmFloat Float
-hi def link hexNumber Number
-hi def link decNumber Number
-hi def link octNumber Number
-hi def link binNumber Number
+hi def link asmString String
+hi def link asmStringEscape Special
+hi def link asmCharacter Character
+hi def link asmCharacterEscape Special
hi def link asmIdentifier Identifier
-hi def link asmType Type
-
+hi def link asmType Type
let b:current_syntax = "asm"
let &cpo = s:cpo_save
unlet s:cpo_save
-" vim: ts=8
+" vim: nowrap sw=2 sts=2 ts=8 noet