diff options
Diffstat (limited to 'runtime/syntax/wat.vim')
-rw-r--r-- | runtime/syntax/wat.vim | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/runtime/syntax/wat.vim b/runtime/syntax/wat.vim new file mode 100644 index 0000000..a6b926b --- /dev/null +++ b/runtime/syntax/wat.vim @@ -0,0 +1,97 @@ +" Vim syntax file +" Language: WebAssembly +" Maintainer: rhysd <lin90162@yahoo.co.jp> +" Last Change: Nov 14, 2023 +" 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 watNotTop contains=watModule,watInstWithType,watInstGetSet,watInstGeneral,watParamInst,watControlInst,watSimdInst,watString,watNamedVar,watUnnamedVar,watFloat,watNumber,watComment,watList,watType + +" Instructions +" https://webassembly.github.io/spec/core/text/instructions.html +" Note: memarg (align=,offset=) can be added to memory instructions +syn match watInstWithType "\%((\s*\)\@<=\<\%(i32\|i64\|f32\|f64\|memory\)\.[[:alnum:]_]\+\%(/\%(i32\|i64\|f32\|f64\)\)\=\>\%(\s\+\%(align\|offset\)=\)\=" contained display +syn match watInstGeneral "\%((\s*\)\@<=\<[[:alnum:]_]\+\>" contained display +syn match watInstGetSet "\%((\s*\)\@<=\<\%(local\|global\)\.\%(get\|set\)\>" contained display +" https://webassembly.github.io/spec/core/text/instructions.html#control-instructions +syn match watControlInst "\%((\s*\)\@<=\<\%(block\|end\|loop\|if\|then\|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 watParamInst "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display +" SIMD instructions +" https://webassembly.github.io/simd/core/text/instructions.html#simd-instructions +syn match watSimdInst "\<\%(v128\|i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2)\)\.[[:alnum:]_]\+\%(\s\+\%(i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2\)\)\=\>" contained display + +" Identifiers +" https://webassembly.github.io/spec/core/text/values.html#text-id +syn match watNamedVar "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained contains=watEscapeUtf8 +syn match watUnnamedVar "$\+\d\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]\@!" contained display +" Presuming the source text is itself encoded correctly, strings that do not +" contain any uses of hexadecimal byte escapes are always valid names. +" https://webassembly.github.io/spec/core/text/values.html#names +syn match watEscapedUtf8 "\\\x\{1,6}" contained containedin=watNamedVar display + +" String literals +" https://webassembly.github.io/spec/core/text/values.html#strings +syn region watString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=watStringSpecial +syn match watStringSpecial "\\\x\x\|\\[tnr'\\\"]\|\\u\x\+" contained containedin=watString display + +" Float literals +" https://webassembly.github.io/spec/core/text/values.html#floating-point +syn match watFloat "\<-\=\d\%(_\=\d\)*\%(\.\d\%(_\=\d\)*\)\=\%([eE][-+]\=\d\%(_\=\d\)*\)\=" display contained +syn match watFloat "\<-\=0x\x\%(_\=\x\)*\%(\.\x\%(_\=\x\)*\)\=\%([pP][-+]\=\d\%(_\=\d\)*\)\=" display contained +syn keyword watFloat inf nan contained +syn match watFloat "nan:0x\x\%(_\=\x\)*" display contained + +" Integer literals +" https://webassembly.github.io/spec/core/text/values.html#integers +syn match watNumber "\<-\=\d\%(_\=\d\)*\>" display contained +syn match watNumber "\<-\=0x\x\%(_\=\x\)*\>" display contained + +" Comments +" https://webassembly.github.io/spec/core/text/lexical.html#comments +syn region watComment start=";;" end="$" +syn region watComment start="(;;\@!" end=";)" + +syn region watList matchgroup=watListDelimiter start="(;\@!" matchgroup=watListDelimiter end=";\@<!)" contains=@watNotTop + +" Types +" https://webassembly.github.io/spec/core/text/types.html +" Note: `mut` was changed to `const`/`var` at Wasm 2.0 +syn keyword watType i64 i32 f64 f32 param result funcref func externref extern mut v128 const var contained +syn match watType "\%((\_s*\)\@<=func\%(\_s*[()]\)\@=" display contained + +" Modules +" https://webassembly.github.io/spec/core/text/modules.html +syn keyword watModule module type export import table memory global data elem contained +syn match watModule "\%((\_s*\)\@<=func\%(\_s\+\$\)\@=" display contained + +syn sync maxlines=100 + +hi def link watModule PreProc +hi def link watListDelimiter Delimiter +hi def link watInstWithType Operator +hi def link watInstGetSet Operator +hi def link watInstGeneral Operator +hi def link watControlInst Statement +hi def link watSimdInst Operator +hi def link watParamInst Conditional +hi def link watString String +hi def link watStringSpecial Special +hi def link watNamedVar Identifier +hi def link watUnnamedVar PreProc +hi def link watFloat Float +hi def link watNumber Number +hi def link watComment Comment +hi def link watType Type +hi def link watEscapedUtf8 Special + +let b:current_syntax = "wat" + +let &cpo = s:cpo_save +unlet s:cpo_save |