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