home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / syntax / dtrace.vim < prev    next >
Encoding:
Text File  |  2010-08-14  |  6.5 KB  |  151 lines

  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"
  151.