vim: add syntax highlighting support for intermediate language

This commit is contained in:
2025-01-27 19:19:29 +00:00
parent b4fd6a999b
commit 02ebb5c32b
10 changed files with 95 additions and 8 deletions

1
ivy.vim/ftdetect/ivy-asm.vim Executable file
View File

@@ -0,0 +1 @@
autocmd BufNewFile,BufRead *.iasm setfiletype ivy-asm

1
ivy.vim/ftdetect/ivy-ir.vim Executable file
View File

@@ -0,0 +1 @@
autocmd BufNewFile,BufRead *.ir setfiletype ivy-ir

View File

@@ -1,2 +1 @@
autocmd BufNewFile,BufRead *.im setfiletype ivy
autocmd BufNewFile,BufRead *.iasm setfiletype ivyasm

4
ivy.vim/ftplugin/ivy-ir.vim Executable file
View File

@@ -0,0 +1,4 @@
setlocal tabstop=8
setlocal softtabstop=8
setlocal shiftwidth=8
setlocal noexpandtab

View File

@@ -85,7 +85,7 @@ hi def link ivyasmLineContinuation ivyasmComment
hi def link ivyasmIdent @variable.builtin
hi def link ivyasmAtom Constant
let b:current_syntax = 'ivyasm'
let b:current_syntax = 'ivy-asm'
let &cpoptions = s:save_cpo
unlet s:save_cpo

82
ivy.vim/syntax/ivy-ir.vim Executable file
View File

@@ -0,0 +1,82 @@
if exists('b:current_syntax')
finish
endif
let s:save_cpo = &cpoptions
set cpoptions&vim
syn keyword ivyirUnspecifiedStatement record data define
syn keyword ivyirInstruction
\ alloca load store call br cmp
\ c.z c.nz c.eq c.ne c.lt c.le c.gt c.ge
\ br br.t br.f
\ add sub div mul push pop msg
syn match ivyirRegister "%[0-9]\>"
syn match ivyirRegister "%[1-9][0-9]\+\>"
syn match ivyirRegister "%\w\+\>"
syn match ivyirIdentifier /@\(\w\+\)\(\.\(\w\+\)\)*\>/
syn match ivyirIdentifier /@\.\(\w\+\)\(\.\(\w\+\)\)*\>/
syn match ivyirLabel /\(\w\+\)\(\.\(\w\+\)\)*\:/
syn keyword ivyirType id ptr str label
syn match ivyirType "i[0-9]\>"
syn match ivyirType "i[1-9][0-9]\+\>"
syn keyword ivyirBlockType iblock class lambda function
syn match ivyirFieldIndex /#[0-9]\+:\>/
syn match ivyirFieldIndex /#-[0-9]\+:\>/
syn match ivyirFieldIndex /#0x[:xdigit:]\+:\>/
syn match ivyirFieldIndex /#-0x[:xdigit:]\+:\>/
syn region ivyirString start=+"+ end=+"\%(u8\)\=+ end=+$+ extend
syn match ivyirInteger /#[0-9]\+\>/
syn match ivyirInteger /#-[0-9]\+\>/
syn match ivyirInteger /#0x[:xdigit:]\+\>/
syn match ivyirInteger /#-0x[:xdigit:]\+\>/
syn keyword ivyirTodo contained TODO FIXME XXX NOTE HACK TBD
syn region ivyirBlockComment start="/\*" end="\*/" contains=ivyirTodo,ivyirBlockComment
syn match ivyirLineComment ";.*$" contains=ivyirTodo,ivyirBlockComment
syn cluster ivyirComment contains=ivyirLineComment,ivyirBlockComment
syn match ivyirBrackets "[[\]]" display
syn match ivyirParens "[()]" display
syn match ivyPropertySymbol "\$" display
" The default highlighting.
hi def link ivyirUnspecifiedStatement Statement
hi def link ivyPropertySymbol Statement
hi def link ivyirInteger Number
hi def link ivyirParens Delimiter
hi def link ivyirBraces Structure
hi def link ivyirPropertyName @property
hi def link ivyirFieldName @variable.parameter
hi def link ivyirClassName Type
hi def link ivyirLambdaName @variable.parameter
hi def link ivyirInstruction Function
hi def link ivyirIdentifier Identifier
hi def link ivyirLabel Tag
hi def link ivyirIndexBase @variable.builtin
hi def link ivyirRegister Constant
hi def link ivyirString String
hi def link ivyirType Type
hi def link ivyirBlockType @attribute
hi def link ivyirComment Comment
hi def link ivyirLineComment ivyirComment
hi def link ivyirBlockComment ivyirComment
hi def link ivyirLineContinuation ivyirComment
hi def link ivyirIdent @variable.builtin
hi def link ivyirAtom Constant
let b:current_syntax = 'ivy-ir'
let &cpoptions = s:save_cpo
unlet s:save_cpo

View File

@@ -11,12 +11,12 @@ syn match ivyType /\<[A-Z]\{1,2\}\([a-z0-9]\+[A-Z]\{0,
" we have to use syn match for keywords because any keyword can be used as a
" label by adding : to the end, and adding : to iskeyword causes more problems
" than it solves.
syn match ivyStorage /\(class\|protocol\)\(\:\)\@!/
syn match ivyRepeat /\(for\|while\|break\|continue\)\(\:\)\@!/
syn match ivyConditional /\(if\|elif\|else\|unless\|match\)\(\:\)\@!/
syn match ivyException /\(try\|catch\|finally\|throw\)\(\:\)\@!/
syn match ivyBuiltinVar /\(error\|cout\|cin\|cerr\)\(\:\)\@!/
syn match ivyUnspecifiedStatement /\(end\|package\|use\|as\|then\|in\|do\|get\|set\)\(\:\)\@!/
syn match ivyStorage /\(class\|protocol\)\>\(\:\)\@!/
syn match ivyRepeat /\(for\|while\|break\|continue\)\>\(\:\)\@!/
syn match ivyConditional /\(if\|elif\|else\|unless\|match\)\>\(\:\)\@!/
syn match ivyException /\(try\|catch\|finally\|throw\)\>\(\:\)\@!/
syn match ivyBuiltinVar /\(error\|cout\|cin\|cerr\)\>\(\:\)\@!/
syn match ivyUnspecifiedStatement /\(end\|package\|use\|as\|then\|in\|do\|get\|set\)\>\(\:\)\@!/
syn match ivySelectorLabel /\<[a-z][A-Za-z0-9_]*\:/
"syn match ivySelectorLabel /\<\([a-z]\([A-Za-z0-9_]\+\)\:\(\:\)\@!\)\+/