annotate runtime/syntax/dtrace.vim @ 5:db46d51a3939

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