" ril.vim
" Syntax for Radiance IL (.ril) files
" (c) Alexis Sellier
"
if exists("b:current_syntax")
  finish
endif

syntax clear

" Comments (Radiance style)
syntax match rilComment "//.*$"
syntax keyword rilTodo TODO FIXME contained containedin=rilComment

" Keywords
syntax keyword rilKeyword fn data extern mut align

" Instructions (memory)
syntax keyword rilInstr reserve load sload store blit copy elem
" Instructions (arithmetic)
syntax keyword rilInstr add sub mul sdiv udiv srem urem neg
" Instructions (comparison)
syntax keyword rilInstr eq ne slt sge ult uge
" Instructions (bitwise)
syntax keyword rilInstr and or xor shl sshr ushr not
" Instructions (conversions)
syntax keyword rilInstr zext sext
" Instructions (pointer)
syntax keyword rilInstr ptr
" Instructions (calls and terminators)
syntax keyword rilInstr call ret jmp switch unreachable
" Instructions (intrinsics)
syntax keyword rilInstr ecall ebreak

" Branch instructions (br.eq, br.ne, br.slt, br.ult)
syntax match rilBranch "\<br\.\(eq\|ne\|slt\|ult\)\>"

" Data items
syntax keyword rilDataItem str sym undef

" Types
syntax keyword rilType w8 w16 w32 w64 ptr void

" Block labels (@identifier0, @eq#foobar1)
syntax match rilLabel "@[A-Za-z_][A-Za-z0-9_#]*"

" Symbol names ($name or $"qualified::name")
syntax match rilSymbol "\$[A-Za-z_][$A-Za-z0-9_]*"
syntax match rilSymbol '\$"[^"]*"'

" Registers (%0, %1, etc.)
syntax match rilReg "%\d\+"

" Numbers
syntax match rilNumber "\<-\?\d\+\>"
syntax match rilNumber "\<0[xX][a-fA-F0-9]\+\>"

" Strings
syntax region rilString start=+"+ skip=+\\"+ end=+"+

" Punctuation
syntax match rilPunct "[{}();:,]"
syntax match rilOperator "\*"

" Define highlighting
highlight default link rilKeyword Keyword
highlight default link rilInstr Statement
highlight default link rilBranch Statement
highlight default link rilDataItem Special
highlight default link rilType Type
highlight default link rilComment Comment
highlight default link rilTodo Todo
highlight default link rilLabel Label
highlight default link rilSymbol Function
highlight default link rilReg Identifier
highlight default link rilNumber Number
highlight default link rilString String
highlight default link rilPunct Delimiter
highlight default link rilOperator Operator

let b:current_syntax = "ril"
