dtrace.vim (6443B)
1 " DTrace D script syntax file. To avoid confusion with the D programming 2 " language, I call this script dtrace.vim instead of d.vim. 3 " Language: D script as described in "Solaris Dynamic Tracing Guide", 4 " http://docs.sun.com/app/docs/doc/817-6223 5 " Version: 1.5 6 " Last Change: 2008/04/05 7 " Maintainer: Nicolas Weber <nicolasweber@gmx.de> 8 9 " dtrace lexer and parser are at 10 " http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_lex.l 11 " http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_grammar.y 12 13 " quit when a syntax file was already loaded 14 if exists("b:current_syntax") 15 finish 16 endif 17 18 " Read the C syntax to start with 19 runtime! syntax/c.vim 20 unlet b:current_syntax 21 22 syn clear cCommentL " dtrace doesn't support // style comments 23 24 " First line may start with #!, also make sure a '-s' flag is somewhere in 25 " that line. 26 syn match dtraceComment "\%^#!.*-s.*" 27 28 " Probe descriptors need explicit matches, so that keywords in probe 29 " descriptors don't show up as errors. Note that this regex detects probes 30 " as "something with three ':' in it". This works in practice, but it's not 31 " really correct. Also add special case code for BEGIN, END and ERROR, since 32 " they are common. 33 " Be careful not to detect '/*some:::node*/\n/**/' as probe, as it's 34 " commented out. 35 " XXX: This allows a probe description to end with ',', even if it's not 36 " followed by another probe. 37 " XXX: This doesn't work if followed by a comment. 38 let s:oneProbe = '\%(BEGIN\|END\|ERROR\|\S\{-}:\S\{-}:\S\{-}:\S\{-}\)\_s*' 39 exec 'syn match dtraceProbe "'.s:oneProbe.'\%(,\_s*'.s:oneProbe.'\)*\ze\_s\%({\|\/[^*]\|\%$\)"' 40 41 " Note: We have to be careful to not make this match /* */ comments. 42 " Also be careful not to eat `c = a / b; b = a / 2;`. We use the same 43 " technique as the dtrace lexer: a predicate has to be followed by {, ;, or 44 " EOF. Also note that dtrace doesn't allow an empty predicate // (we do). 45 " This regex doesn't allow a division operator in the predicate. 46 " Make sure that this matches the empty predicate as well. 47 " XXX: This doesn't work if followed by a comment. 48 syn match dtracePredicate "/\*\@!\_[^/]*/\ze\_s*\%({\|;\|\%$\)" 49 "contains=ALLBUT,dtraceOption " this lets the region contain too much stuff 50 51 " Pragmas. 52 " dtrace seems not to support whitespace before or after the '='. dtrace 53 " supports only one option per #pragma, and no continuations of #pragma over 54 " several lines with '\'. 55 " Note that dtrace treats units (Hz etc) as case-insenstive, we allow only 56 " sane unit capitalization in this script (ie 'ns', 'us', 'ms', 's' have to be 57 " small, Hertz can be 'Hz' or 'hz') 58 " XXX: "cpu" is always highlighted as builtin var, not as option 59 60 " auto or manual: bufresize 61 syn match dtraceOption contained "bufresize=\%(auto\|manual\)\s*$" 62 63 " scalar: cpu jstackframes jstackstrsize nspec stackframes stackindent ustackframes 64 syn match dtraceOption contained "\%(cpu\|jstackframes\|jstackstrsize\|nspec\|stackframes\|stackindent\|ustackframes\)=\d\+\s*$" 65 66 " size: aggsize bufsize dynvarsize specsize strsize 67 " size defaults to something if no unit is given (ie., having no unit is ok) 68 syn match dtraceOption contained "\%(aggsize\|bufsize\|dynvarsize\|specsize\|strsize\)=\d\+\%(k\|m\|g\|t\|K\|M\|G\|T\)\=\s*$" 69 70 " time: aggrate cleanrate statusrate switchrate 71 " time defaults to hz if no unit is given 72 syn match dtraceOption contained "\%(aggrate\|cleanrate\|statusrate\|switchrate\)=\d\+\%(hz\|Hz\|ns\|us\|ms\|s\)\=\s*$" 73 74 " No type: defaultargs destructive flowindent grabanon quiet rawbytes 75 syn match dtraceOption contained "\%(defaultargs\|destructive\|flowindent\|grabanon\|quiet\|rawbytes\)\s*$" 76 77 78 " Turn reserved but unspecified keywords into errors 79 syn keyword dtraceReservedKeyword auto break case continue counter default do 80 syn keyword dtraceReservedKeyword else for goto if import probe provider 81 syn keyword dtraceReservedKeyword register restrict return static switch while 82 83 " Add dtrace-specific stuff 84 syn keyword dtraceOperator sizeof offsetof stringof xlate 85 syn keyword dtraceStatement self inline xlate this translator 86 87 " Builtin variables 88 syn keyword dtraceIdentifier arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 89 syn keyword dtraceIdentifier args caller chip cpu curcpu curlwpsinfo curpsinfo 90 syn keyword dtraceIdentifier curthread cwd epid errno execname gid id ipl lgrp 91 syn keyword dtraceIdentifier pid ppid probefunc probemod probename probeprov 92 syn keyword dtraceIdentifier pset root stackdepth tid timestamp uid uregs 93 syn keyword dtraceIdentifier vtimestamp walltimestamp 94 syn keyword dtraceIdentifier ustackdepth 95 96 " Macro Variables 97 syn match dtraceConstant "$[0-9]\+" 98 syn match dtraceConstant "$\(egid\|euid\|gid\|pgid\|ppid\)" 99 syn match dtraceConstant "$\(projid\|sid\|target\|taskid\|uid\)" 100 101 " Data Recording Actions 102 syn keyword dtraceFunction trace tracemem printf printa stack ustack jstack 103 104 " Process Destructive Actions 105 syn keyword dtraceFunction stop raise copyout copyoutstr system 106 107 " Kernel Destructive Actions 108 syn keyword dtraceFunction breakpoint panic chill 109 110 " Special Actions 111 syn keyword dtraceFunction speculate commit discard exit 112 113 " Subroutines 114 syn keyword dtraceFunction alloca basename bcopy cleanpath copyin copyinstr 115 syn keyword dtraceFunction copyinto dirname msgdsize msgsize mutex_owned 116 syn keyword dtraceFunction mutex_owner mutex_type_adaptive progenyof 117 syn keyword dtraceFunction rand rw_iswriter rw_write_held speculation 118 syn keyword dtraceFunction strjoin strlen 119 120 " Aggregating Functions 121 syn keyword dtraceAggregatingFunction count sum avg min max lquantize quantize 122 123 syn keyword dtraceType int8_t int16_t int32_t int64_t intptr_t 124 syn keyword dtraceType uint8_t uint16_t uint32_t uint64_t uintptr_t 125 syn keyword dtraceType string 126 syn keyword dtraceType pid_t id_t 127 128 129 " Define the default highlighting. 130 " We use `hi def link` directly, this requires 5.8. 131 hi def link dtraceReservedKeyword Error 132 hi def link dtracePredicate String 133 hi def link dtraceProbe dtraceStatement 134 hi def link dtraceStatement Statement 135 hi def link dtraceConstant Constant 136 hi def link dtraceIdentifier Identifier 137 hi def link dtraceAggregatingFunction dtraceFunction 138 hi def link dtraceFunction Function 139 hi def link dtraceType Type 140 hi def link dtraceOperator Operator 141 hi def link dtraceComment Comment 142 hi def link dtraceNumber Number 143 hi def link dtraceOption Identifier 144 145 let b:current_syntax = "dtrace"