2014-07-10 21:05:51 -07:00
|
|
|
" DTrace D script syntax file. To avoid confusion with the D programming
|
|
|
|
" language, I call this script dtrace.vim instead of d.vim.
|
|
|
|
" Language: D script as described in "Solaris Dynamic Tracing Guide",
|
|
|
|
" http://docs.sun.com/app/docs/doc/817-6223
|
|
|
|
" Version: 1.5
|
|
|
|
" Last Change: 2008/04/05
|
|
|
|
" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
|
|
|
|
|
|
|
|
" dtrace lexer and parser are at
|
|
|
|
" http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_lex.l
|
|
|
|
" http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_grammar.y
|
|
|
|
|
|
|
|
if version < 600
|
|
|
|
syntax clear
|
|
|
|
elseif exists("b:current_syntax")
|
|
|
|
finish
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Read the C syntax to start with
|
|
|
|
if version < 600
|
|
|
|
so <sfile>:p:h/c.vim
|
|
|
|
else
|
|
|
|
runtime! syntax/c.vim
|
|
|
|
unlet b:current_syntax
|
|
|
|
endif
|
|
|
|
|
|
|
|
syn clear cCommentL " dtrace doesn't support // style comments
|
|
|
|
|
|
|
|
" First line may start with #!, also make sure a '-s' flag is somewhere in
|
|
|
|
" that line.
|
|
|
|
syn match dtraceComment "\%^#!.*-s.*"
|
|
|
|
|
|
|
|
" Probe descriptors need explicit matches, so that keywords in probe
|
|
|
|
" descriptors don't show up as errors. Note that this regex detects probes
|
|
|
|
" as "something with three ':' in it". This works in practice, but it's not
|
|
|
|
" really correct. Also add special case code for BEGIN, END and ERROR, since
|
|
|
|
" they are common.
|
|
|
|
" Be careful not to detect '/*some:::node*/\n/**/' as probe, as it's
|
|
|
|
" commented out.
|
|
|
|
" XXX: This allows a probe description to end with ',', even if it's not
|
|
|
|
" followed by another probe.
|
|
|
|
" XXX: This doesn't work if followed by a comment.
|
|
|
|
let s:oneProbe = '\%(BEGIN\|END\|ERROR\|\S\{-}:\S\{-}:\S\{-}:\S\{-}\)\_s*'
|
|
|
|
exec 'syn match dtraceProbe "'.s:oneProbe.'\%(,\_s*'.s:oneProbe.'\)*\ze\_s\%({\|\/[^*]\|\%$\)"'
|
|
|
|
|
|
|
|
" Note: We have to be careful to not make this match /* */ comments.
|
|
|
|
" Also be careful not to eat `c = a / b; b = a / 2;`. We use the same
|
|
|
|
" technique as the dtrace lexer: a predicate has to be followed by {, ;, or
|
|
|
|
" EOF. Also note that dtrace doesn't allow an empty predicate // (we do).
|
2014-08-24 14:28:39 -07:00
|
|
|
" This regex doesn't allow a division operator in the predicate.
|
2014-07-10 21:05:51 -07:00
|
|
|
" Make sure that this matches the empty predicate as well.
|
|
|
|
" XXX: This doesn't work if followed by a comment.
|
|
|
|
syn match dtracePredicate "/\*\@!\_[^/]*/\ze\_s*\%({\|;\|\%$\)"
|
|
|
|
"contains=ALLBUT,dtraceOption " this lets the region contain too much stuff
|
|
|
|
|
|
|
|
" Pragmas.
|
|
|
|
" dtrace seems not to support whitespace before or after the '='. dtrace
|
|
|
|
" supports only one option per #pragma, and no continuations of #pragma over
|
|
|
|
" several lines with '\'.
|
|
|
|
" Note that dtrace treats units (Hz etc) as case-insenstive, we allow only
|
|
|
|
" sane unit capitalization in this script (ie 'ns', 'us', 'ms', 's' have to be
|
|
|
|
" small, Hertz can be 'Hz' or 'hz')
|
|
|
|
" XXX: "cpu" is always highlighted as builtin var, not as option
|
|
|
|
|
|
|
|
" auto or manual: bufresize
|
|
|
|
syn match dtraceOption contained "bufresize=\%(auto\|manual\)\s*$"
|
|
|
|
|
|
|
|
" scalar: cpu jstackframes jstackstrsize nspec stackframes stackindent ustackframes
|
|
|
|
syn match dtraceOption contained "\%(cpu\|jstackframes\|jstackstrsize\|nspec\|stackframes\|stackindent\|ustackframes\)=\d\+\s*$"
|
|
|
|
|
|
|
|
" size: aggsize bufsize dynvarsize specsize strsize
|
|
|
|
" size defaults to something if no unit is given (ie., having no unit is ok)
|
|
|
|
syn match dtraceOption contained "\%(aggsize\|bufsize\|dynvarsize\|specsize\|strsize\)=\d\+\%(k\|m\|g\|t\|K\|M\|G\|T\)\=\s*$"
|
|
|
|
|
|
|
|
" time: aggrate cleanrate statusrate switchrate
|
|
|
|
" time defaults to hz if no unit is given
|
|
|
|
syn match dtraceOption contained "\%(aggrate\|cleanrate\|statusrate\|switchrate\)=\d\+\%(hz\|Hz\|ns\|us\|ms\|s\)\=\s*$"
|
|
|
|
|
|
|
|
" No type: defaultargs destructive flowindent grabanon quiet rawbytes
|
|
|
|
syn match dtraceOption contained "\%(defaultargs\|destructive\|flowindent\|grabanon\|quiet\|rawbytes\)\s*$"
|
|
|
|
|
|
|
|
|
|
|
|
" Turn reserved but unspecified keywords into errors
|
|
|
|
syn keyword dtraceReservedKeyword auto break case continue counter default do
|
|
|
|
syn keyword dtraceReservedKeyword else for goto if import probe provider
|
|
|
|
syn keyword dtraceReservedKeyword register restrict return static switch while
|
|
|
|
|
|
|
|
" Add dtrace-specific stuff
|
|
|
|
syn keyword dtraceOperator sizeof offsetof stringof xlate
|
|
|
|
syn keyword dtraceStatement self inline xlate this translator
|
|
|
|
|
|
|
|
" Builtin variables
|
|
|
|
syn keyword dtraceIdentifier arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9
|
|
|
|
syn keyword dtraceIdentifier args caller chip cpu curcpu curlwpsinfo curpsinfo
|
|
|
|
syn keyword dtraceIdentifier curthread cwd epid errno execname gid id ipl lgrp
|
|
|
|
syn keyword dtraceIdentifier pid ppid probefunc probemod probename probeprov
|
|
|
|
syn keyword dtraceIdentifier pset root stackdepth tid timestamp uid uregs
|
|
|
|
syn keyword dtraceIdentifier vtimestamp walltimestamp
|
|
|
|
syn keyword dtraceIdentifier ustackdepth
|
|
|
|
|
|
|
|
" Macro Variables
|
|
|
|
syn match dtraceConstant "$[0-9]\+"
|
|
|
|
syn match dtraceConstant "$\(egid\|euid\|gid\|pgid\|ppid\)"
|
|
|
|
syn match dtraceConstant "$\(projid\|sid\|target\|taskid\|uid\)"
|
|
|
|
|
|
|
|
" Data Recording Actions
|
|
|
|
syn keyword dtraceFunction trace tracemem printf printa stack ustack jstack
|
|
|
|
|
|
|
|
" Process Destructive Actions
|
|
|
|
syn keyword dtraceFunction stop raise copyout copyoutstr system
|
|
|
|
|
|
|
|
" Kernel Destructive Actions
|
|
|
|
syn keyword dtraceFunction breakpoint panic chill
|
|
|
|
|
|
|
|
" Special Actions
|
|
|
|
syn keyword dtraceFunction speculate commit discard exit
|
|
|
|
|
|
|
|
" Subroutines
|
|
|
|
syn keyword dtraceFunction alloca basename bcopy cleanpath copyin copyinstr
|
|
|
|
syn keyword dtraceFunction copyinto dirname msgdsize msgsize mutex_owned
|
|
|
|
syn keyword dtraceFunction mutex_owner mutex_type_adaptive progenyof
|
|
|
|
syn keyword dtraceFunction rand rw_iswriter rw_write_held speculation
|
|
|
|
syn keyword dtraceFunction strjoin strlen
|
|
|
|
|
|
|
|
" Aggregating Functions
|
|
|
|
syn keyword dtraceAggregatingFunction count sum avg min max lquantize quantize
|
|
|
|
|
|
|
|
syn keyword dtraceType int8_t int16_t int32_t int64_t intptr_t
|
|
|
|
syn keyword dtraceType uint8_t uint16_t uint32_t uint64_t uintptr_t
|
|
|
|
syn keyword dtraceType string
|
|
|
|
syn keyword dtraceType pid_t id_t
|
|
|
|
|
|
|
|
|
|
|
|
" Define the default highlighting.
|
|
|
|
" We use `hi def link` directly, this requires 5.8.
|
|
|
|
hi def link dtraceReservedKeyword Error
|
|
|
|
hi def link dtracePredicate String
|
|
|
|
hi def link dtraceProbe dtraceStatement
|
|
|
|
hi def link dtraceStatement Statement
|
|
|
|
hi def link dtraceConstant Constant
|
|
|
|
hi def link dtraceIdentifier Identifier
|
|
|
|
hi def link dtraceAggregatingFunction dtraceFunction
|
|
|
|
hi def link dtraceFunction Function
|
|
|
|
hi def link dtraceType Type
|
|
|
|
hi def link dtraceOperator Operator
|
|
|
|
hi def link dtraceComment Comment
|
|
|
|
hi def link dtraceNumber Number
|
|
|
|
hi def link dtraceOption Identifier
|
|
|
|
|
|
|
|
let b:current_syntax = "dtrace"
|