12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- " 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
|