140 lines
5.1 KiB
VimL
140 lines
5.1 KiB
VimL
" Syntax highlighting rules for GIMPLE dump files (for Vim).
|
|
"
|
|
" Copyright (C) 2015 Free Software Foundation, Inc.
|
|
"
|
|
" This script is free software; you can redistribute it and/or modify
|
|
" it under the terms of the GNU General Public License as published by
|
|
" the Free Software Foundation; either version 3, or (at your option)
|
|
" any later version
|
|
"
|
|
" This Vim script highlights syntax in debug dumps containing GIMPLE
|
|
" intermediate representation. Such dumps are produced by GCC when
|
|
" it is invoked with -fdump-tree-* and/or -fdump-ipa-* switches. Tested
|
|
" in Vim 7.4 (but should also work with earlier versions).
|
|
"
|
|
" INSTALLATION:
|
|
" 1. Copy the script into $HOME/.vim/syntax directory
|
|
" 2. Create a file gimple.vim in $HOME/.vim/ftdetect directory with the
|
|
" following command in it:
|
|
"
|
|
" au BufRead,BufNewFile *.[0-2][0-9][0-9][ti].* set filetype=gimple
|
|
"
|
|
" The pattern in this autocommand corresponds to default file names
|
|
" of debug dumps, e.g.:
|
|
" filename.cc.123t.pass-name
|
|
|
|
|
|
" Do not continue, if syntax is already enabled in current buffer.
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
" If this variable is set to true, "Unknown tree" in -fdump-tree-original will
|
|
" be highlighted as an error.
|
|
let s:unknown_tree_is_error=0
|
|
|
|
" Comments for Phi nodes, value ranges, use/def-chains, etc.
|
|
syn match gimpleAnnotation "\v#.*$"
|
|
\ contains=gimpleAnnotationOp, gimpleAnnotationMark,
|
|
\ gimpleNumber, gimpleLineNo
|
|
syn match gimpleAnnotationMark "#" contained
|
|
syn keyword gimpleAnnotationOp PHI VUSE VDEF RANGE PT USE CLB
|
|
\ ALIGN MISALIGN NONZERO contained
|
|
|
|
" General-purpose comments.
|
|
syn match gimpleComment ";;.*$"
|
|
|
|
" Types - mostly borrowed from original Vim syntax file for C
|
|
syn keyword gimpleType int long short char void
|
|
\ signed unsigned float double
|
|
\ size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
|
|
\ clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
|
|
\ mbstate_t wctrans_t wint_t wctype_t
|
|
\ _Bool bool _Complex complex _Imaginary imaginary
|
|
\ int8_t int16_t int32_t int64_t
|
|
\ uint8_t uint16_t uint32_t uint64_t
|
|
\ int_least8_t int_least16_t int_least32_t int_least64_t
|
|
\ uint_least8_t uint_least16_t uint_least32_t uint_least64_t
|
|
\ int_fast8_t int_fast16_t int_fast32_t int_fast64_t
|
|
\ uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
|
|
\ intptr_t uintptr_t
|
|
\ intmax_t uintmax_t
|
|
\ __label__ __complex__ __volatile__
|
|
\ char16_t char32_t sizetype __vtbl_ptr_type
|
|
|
|
" C/C++-like control structures
|
|
syn keyword gimpleStatement goto return
|
|
syn keyword gimpleConditional if else
|
|
syn keyword gimpleLoop while
|
|
syn keyword gimpleException try catch finally
|
|
|
|
" Special 'values'
|
|
syn match gimpleConstant "{CLOBBER}"
|
|
syn match gimpleConstant "{ref-all}"
|
|
syn match gimpleConstant "{v}"
|
|
|
|
" Blocks
|
|
syn region gimpleBlock start="{" end="}" transparent fold
|
|
|
|
" String literals
|
|
syn region gimpleString start=/\v"/ skip=/\v\\./ end=/\v"/
|
|
|
|
" GENERIC AST nodes
|
|
syn keyword gimpleASTNode BIT_FIELD_REF TARGET_EXPR expr_stmt
|
|
\ NON_LVALUE_EXPR
|
|
\ must_not_throw_expr eh_spec_block eh_filter
|
|
\ eh_must_not_throw aggr_init_expr cleanup_point
|
|
|
|
if s:unknown_tree_is_error
|
|
syn match gimpleUnknownTree "\vUnknown tree: \w+"
|
|
end
|
|
|
|
" Numbers
|
|
syn match gimpleNumber "\v([^.a-zA-Z0-9_])\zs-?\d+B?"
|
|
syn match gimpleFloat "\v\W\zs-?\d*\.\d+(e\+\d+)?"
|
|
|
|
" Basic block label
|
|
" <bb 123>:
|
|
syn match gimpleLabel "\v^\s*\zs\<bb \d+\>"
|
|
" <D.1234>:
|
|
" <L1>:
|
|
syn match gimpleLabel "\v^\s*\zs\<[DL]\.?\d+\>"
|
|
" label: - user-defined label
|
|
" bb1L.1:
|
|
syn match gimpleLabel "\v^\s*[a-zA-Z0-9._]+\ze:\s*$"
|
|
|
|
" Match label after goto to suppress highlighting of numbers inside
|
|
syn match gimpleGotoLabel "\v<bb \d+\>[^:]"
|
|
|
|
" Line numbers, generated with -fdump-tree-*-lineno
|
|
syn match gimpleLineNo "\v\[[^\]]+:\d+:\d+\]"
|
|
|
|
" Misc C/C++-like keywords
|
|
syn keyword gimpleStructure struct union enum typedef class
|
|
syn keyword gimpleStorageClass static register auto volatile extern const
|
|
\ template inline __attribute__ _Alignas alignas _Atomic
|
|
\ _Thread_local thread_local _Alignof alignof sizeof
|
|
|
|
hi def link gimpleType Type
|
|
hi def link gimpleNumber Number
|
|
hi def link gimpleFloat Float
|
|
hi def link gimpleConstant Constant
|
|
hi def link gimpleStructure Structure
|
|
hi def link gimpleStorageClass StorageClass
|
|
hi def link gimpleOperator Operator
|
|
hi def link gimpleASTNode Operator
|
|
hi def link gimpleStatement Statement
|
|
hi def link gimpleConditional Conditional
|
|
hi def link gimpleLoop Repeat
|
|
hi def link gimpleException Exception
|
|
hi def link gimpleComment Comment
|
|
hi def link gimpleLineNo Comment
|
|
hi def link gimpleLabel Label
|
|
hi def link gimpleAnnotationOp Debug
|
|
hi def link gimpleAnnotationMark Debug
|
|
hi def link gimpleString String
|
|
hi def link gimpleUnknownTree Error
|
|
|
|
let b:current_syntax = "gimple"
|
|
|