diff runtime/syntax/wast.vim @ 32699:2023f0835f75

update .wast files syntax highlighting (#12741) Commit: https://github.com/vim/vim/commit/8f566fdb1e3452c9104d9e7af402adbfbcb463c7 Author: Linda_pp <rhysd@users.noreply.github.com> Date: Wed Aug 9 23:45:52 2023 +0900 update .wast files syntax highlighting (https://github.com/vim/vim/issues/12741)
author Christian Brabandt <cb@256bit.org>
date Wed, 09 Aug 2023 17:00:03 +0200
parents 172f18a3a6cd
children
line wrap: on
line diff
--- a/runtime/syntax/wast.vim
+++ b/runtime/syntax/wast.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     WebAssembly
 " Maintainer:   rhysd <lin90162@yahoo.co.jp>
-" Last Change:  Jul 29, 2018
+" Last Change:  Aug 7, 2023
 " For bugs, patches and license go to https://github.com/rhysd/vim-wasm
 
 if exists("b:current_syntax")
@@ -11,33 +11,42 @@ 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
+syn cluster wastNotTop contains=wastModule,wastInstWithType,wastInstGetSet,wastInstGeneral,wastParamInst,wastControlInst,wastSimdInst,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
+syn match   wastInstGetSet    "\%((\s*\)\@<=\<\%(local\|global\)\.\%(get\|set\)\>" 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
+syn match   wastControlInst   "\%((\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   wastParamInst     "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display
+" SIMD instructions
+" https://webassembly.github.io/simd/core/text/instructions.html#simd-instructions
+syn match   wastSimdInst      "\<\%(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   wastNamedVar      "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained display
+syn match   wastNamedVar      "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained contains=wastEscapeUtf8
 syn match   wastUnnamedVar    "$\+\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   wastEscapedUtf8   "\\\x\{1,6}" contained containedin=wastNamedVar 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
+syn match   wastStringSpecial "\\\x\x\|\\[tnr'\\\"]\|\\u\x\+" contained containedin=wastString display
 
 " 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 match   wastFloat         "\<-\=0x\x\%(_\=\x\)*\%(\.\x\%(_\=\x\)*\)\=\%([pP][-+]\=\d\%(_\=\d\)*\)\=" display contained
 syn keyword wastFloat         inf nan contained
+syn match   wastFloat         "nan:0x\x\%(_\=\x\)*" display contained
 
 " Integer literals
 " https://webassembly.github.io/spec/core/text/values.html#integers
@@ -46,14 +55,15 @@ syn match   wastNumber        "\<-\=0x\x
 
 " Comments
 " https://webassembly.github.io/spec/core/text/lexical.html#comments
-syn region  wastComment       start=";;" end="$" display
+syn region  wastComment       start=";;" end="$"
 syn region  wastComment       start="(;;\@!" end=";)"
 
-syn region  wastList          matchgroup=wastListDelimiter start="(;\@!" matchgroup=wastListDelimiter end=";\@<!)" contains=@wastCluster
+syn region  wastList          matchgroup=wastListDelimiter start="(;\@!" matchgroup=wastListDelimiter end=";\@<!)" contains=@wastNotTop
 
 " Types
 " https://webassembly.github.io/spec/core/text/types.html
-syn keyword wastType          i64 i32 f64 f32 param result anyfunc mut contained
+" Note: `mut` was changed to `const`/`var` at Wasm 2.0
+syn keyword wastType          i64 i32 f64 f32 param result funcref func externref extern mut v128 const var contained
 syn match   wastType          "\%((\_s*\)\@<=func\%(\_s*[()]\)\@=" display contained
 
 " Modules
@@ -61,13 +71,15 @@ syn match   wastType          "\%((\_s*\
 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
+syn sync maxlines=100
 
 hi def link wastModule        PreProc
 hi def link wastListDelimiter Delimiter
 hi def link wastInstWithType  Operator
+hi def link wastInstGetSet    Operator
 hi def link wastInstGeneral   Operator
 hi def link wastControlInst   Statement
+hi def link wastSimdInst      Operator
 hi def link wastParamInst     Conditional
 hi def link wastString        String
 hi def link wastStringSpecial Special
@@ -77,6 +89,7 @@ hi def link wastFloat         Float
 hi def link wastNumber        Number
 hi def link wastComment       Comment
 hi def link wastType          Type
+hi def link wastEscapedUtf8   Special
 
 let b:current_syntax = "wast"