summaryrefslogtreecommitdiffstats
path: root/syntax/wast.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2020-10-06 18:54:19 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2020-10-06 18:54:19 +0200
commitbc9757916ed09763d96283ee62dbed58bd713a11 (patch)
tree07fbb58e9a4f4cbf5206d89f61e4d570e64d2c1a /syntax/wast.vim
parentc6fa4d2bf5eb5301f4d3f123031cf34839a5508d (diff)
downloadvim-polyglot-bc9757916ed09763d96283ee62dbed58bd713a11.tar.gz
vim-polyglot-bc9757916ed09763d96283ee62dbed58bd713a11.zip
Add all vim filetypes
Diffstat (limited to '')
-rw-r--r--syntax/wast.vim88
1 files changed, 88 insertions, 0 deletions
diff --git a/syntax/wast.vim b/syntax/wast.vim
new file mode 100644
index 00000000..d0b81718
--- /dev/null
+++ b/syntax/wast.vim
@@ -0,0 +1,88 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'wast') == -1
+
+" Vim syntax file
+" Language: WebAssembly
+" Maintainer: rhysd <lin90162@yahoo.co.jp>
+" Last Change: Jul 29, 2018
+" For bugs, patches and license go to https://github.com/rhysd/vim-wasm
+
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn cluster wastCluster contains=wastModule,wastInstWithType,wastInstGeneral,wastParamInst,wastControlInst,wastString,wastNamedVar,wastUnnamedVar,wastFloat,wastNumber,wastComment,wastList,wastType
+
+" Instructions
+" https://webassembly.github.io/spec/core/text/instructions.html
+" Note: memarg (align=,offset=) can be added to memory instructions
+syn match wastInstWithType "\%((\s*\)\@<=\<\%(i32\|i64\|f32\|f64\|memory\)\.[[:alnum:]_]\+\%(/\%(i32\|i64\|f32\|f64\)\)\=\>\%(\s\+\%(align\|offset\)=\)\=" contained display
+syn match wastInstGeneral "\%((\s*\)\@<=\<[[:alnum:]_]\+\>" contained display
+" https://webassembly.github.io/spec/core/text/instructions.html#control-instructions
+syn match wastControlInst "\%((\s*\)\@<=\<\%(block\|end\|loop\|if\|else\|unreachable\|nop\|br\|br_if\|br_table\|return\|call\|call_indirect\)\>" contained display
+" https://webassembly.github.io/spec/core/text/instructions.html#parametric-instructions
+syn match wastParamInst "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display
+
+" Identifiers
+" https://webassembly.github.io/spec/core/text/values.html#text-id
+syn match wastNamedVar "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained display
+syn match wastUnnamedVar "$\+\d\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]\@!" contained display
+
+" String literals
+" https://webassembly.github.io/spec/core/text/values.html#strings
+syn region wastString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=wastStringSpecial
+syn match wastStringSpecial "\\\x\x\|\\[tnr'\\\"]\|\\u\x\+" contained containedin=wastString
+
+" Float literals
+" https://webassembly.github.io/spec/core/text/values.html#floating-point
+syn match wastFloat "\<-\=\d\%(_\=\d\)*\%(\.\d\%(_\=\d\)*\)\=\%([eE][-+]\=\d\%(_\=\d\)*\)\=" display contained
+syn match wastFloat "\<-\=0x\x\%(_\=\d\)*\%(\.\x\%(_\=\x\)*\)\=\%([pP][-+]\=\d\%(_\=\d\)*\)\=" display contained
+syn keyword wastFloat inf nan contained
+
+" Integer literals
+" https://webassembly.github.io/spec/core/text/values.html#integers
+syn match wastNumber "\<-\=\d\%(_\=\d\)*\>" display contained
+syn match wastNumber "\<-\=0x\x\%(_\=\x\)*\>" display contained
+
+" Comments
+" https://webassembly.github.io/spec/core/text/lexical.html#comments
+syn region wastComment start=";;" end="$" display
+syn region wastComment start="(;;\@!" end=";)"
+
+syn region wastList matchgroup=wastListDelimiter start="(;\@!" matchgroup=wastListDelimiter end=";\@<!)" contains=@wastCluster
+
+" Types
+" https://webassembly.github.io/spec/core/text/types.html
+syn keyword wastType i64 i32 f64 f32 param result anyfunc mut contained
+syn match wastType "\%((\_s*\)\@<=func\%(\_s*[()]\)\@=" display contained
+
+" Modules
+" https://webassembly.github.io/spec/core/text/modules.html
+syn keyword wastModule module type export import table memory global data elem contained
+syn match wastModule "\%((\_s*\)\@<=func\%(\_s\+\$\)\@=" display contained
+
+syn sync lines=100
+
+hi def link wastModule PreProc
+hi def link wastListDelimiter Delimiter
+hi def link wastInstWithType Operator
+hi def link wastInstGeneral Operator
+hi def link wastControlInst Statement
+hi def link wastParamInst Conditional
+hi def link wastString String
+hi def link wastStringSpecial Special
+hi def link wastNamedVar Identifier
+hi def link wastUnnamedVar PreProc
+hi def link wastFloat Float
+hi def link wastNumber Number
+hi def link wastComment Comment
+hi def link wastType Type
+
+let b:current_syntax = "wast"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+endif