summaryrefslogtreecommitdiffstats
path: root/old/syntax/pir.vim
blob: 338cc816ea0e35875effb319ff73824c3ed4f0eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
" Vim syntax file
" Language:	Parrot IMCC
" Maintainer:	Luke Palmer <fibonaci@babylonia.flatirons.org>
" Modified: Joshua Isom
" Last Change:	Jan 6 2006

" For installation please read:
" :he filetypes
" :he syntax
"
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
"
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

syntax clear

syn include @Pod syntax/pod.vim
syn region pirPod start="^=[a-z]" end="^=cut" keepend contains=@Pod

syn keyword pirType int float num string pmc
syn match   pirPMC  /\.\(Compiler\|Continuation\|Coroutine\|CSub\|NCI\|Eval\|Sub\|Scratchpad\)/
syn match   pirPMC  /\.\(BigInt\|Boolean\|Complex\|Float\|Integer\|PMC\|String\|Hash\)/
syn match   pirPMC  /\.\(Fixed\|Resizable\)\(Boolean\|Float\|Integer\|PMC\|String\)Array/
syn match   pirPMC  /\.\(IntList\|Iterator\|Key\|ManagedStruct\|UnManagedStruct\|Pointer\)/
syn match   pirPMC  /\.\(FloatVal\|Multi\|S\|String\)\?Array/
syn match   pirPMC  /\.Perl\(Array\|Env\|Hash\|Int\|Num\|Scalar\|String\|Undef\)/
syn match   pirPMC  /\.Parrot\(Class\|Interpreter\|IO\|Library\|Object\|Thread\)/
syn keyword pirPMC self

syn keyword pirOp   goto if unless global addr

syn match pirDirective  /\.\(sub\|endm\|pcc_sub\|macro\|end\|emit\|eom\)/
syn match pirDirective  /\.\(local\|sym\|const\|lex\|global\|globalconst\)/
syn match pirDirective  /\.\(endnamespace\|namespace\)/
syn match pirDirective  /\.\(param\|arg\|return\|yield\)/
syn match pirDirective  /\.\(pragma\|HLL_map\|HLL\|include\|loadlib\)/
syn match pirDirective  /\.\(pcc_begin\|pcc_call\|pcc_end\|invocant\|meth_call\|nci_call\)/
syn match pirDirective  /\.\(pcc_begin_return\|pcc_end_return\)/
syn match pirDirective  /\.\(pcc_begin_yield\|pcc_end_yield\)/

syn match pirDirective  /:\(main\|method\|load\|anon\|multi\|immediate\|outer\|lex\)/
syn match pirDirective  /:\(flat\|slurpy\|optional\|opt_flag\|named\)/

" Macro invocation
syn match pirDirective  /\.\I\i*(/he=e-1


" pirWord before pirRegister
" FIXME :: in identifiers and labels
syn match pirWord           /[A-Za-z_][A-Za-z0-9_]*/
syn match pirComment        /#.*/
syn match pirLabel          /[A-Za-z0-9_]\+:/he=e-1
syn match pirRegister       /[INPS]\([12][0-9]\|3[01]\|[0-9]\)/
syn match pirDollarRegister /\$[INPS][0-9]\+/

syn match pirNumber         /[+-]\?[0-9]\+\(\.[0-9]*\([Ee][+-]\?[0-9]\+\)\?\)\?/
syn match pirNumber         /0[xX][0-9a-fA-F]\+/
syn match pirNumber         /0[oO][0-7]\+/
syn match pirNumber         /0[bB][01]\+/

syn region pirString start=/"/ skip=/\\"/ end=/"/ contains=pirStringSpecial
syn region pirString start=/<<"\z(\I\i*\)"/ end=/^\z1$/ contains=pirStringSpecial
syn region pirString start=/<<'\z(\I\i*\)'/ end=/^\z1$/
syn region pirString start=/'/ end=/'/
syn match  pirStringSpecial "\\\([abtnvfre\\"]\|\o\{1,3\}\|x{\x\{1,8\}}\|x\x\{1,2\}\|u\x\{4\}\|U\x\{8\}\|c[A-Z]\)" contained

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_pasm_syntax_inits")
  if version < 508
    let did_pasm_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  HiLink pirPod             Comment
  HiLink pirWord            Normal
  HiLink pirComment         Comment
  HiLink pirLabel           Label
  HiLink pirRegister        Identifier
  HiLink pirDollarRegister  Identifier
  HiLink pirType            Type
  HiLink pirPMC             Type
  HiLink pirString          String
  HiLink pirStringSpecial   Special
  HiLink pirNumber          Number
  HiLink pirDirective       Macro
  HiLink pirOp              Conditional

  delcommand HiLink
endif

let b:current_syntax = "pir"

" Ops -- dynamically generated from ops2vim.pl
syn keyword pirOp band bands bnot n_bnot bnots n_bnots bor bors shl shr
syn keyword pirOp lsr rot bxor bxors eq eq_str eq_num eq_addr ne ne_str
syn keyword pirOp ne_num ne_addr lt lt_str lt_num le le_str le_num gt
syn keyword pirOp gt_str gt_num ge ge_str ge_num cmp cmp_str cmp_num and
syn keyword pirOp not n_not or xor issame isntsame istrue isfalse isgt
syn keyword pirOp isge isle islt iseq isne if_null unless_null end noop
syn keyword pirOp cpu_ret check_events check_events__ wrapper__
syn keyword pirOp prederef__ reserved load_bytecode branch branch_cs bsr
syn keyword pirOp ret jsr jump enternative if unless invokecc invoke
syn keyword pirOp yield tailcall returncc newclosure set_args get_results
syn keyword pirOp get_params set_returns result_info set_addr get_addr
syn keyword pirOp push_eh clear_eh throw rethrow die exit pushmark
syn keyword pirOp popmark pushaction debug bounds profile trace gc_debug
syn keyword pirOp interpinfo warningson warningsoff errorson errorsoff
syn keyword pirOp runinterp getinterp sweep collect sweepoff sweepon
syn keyword pirOp collectoff collecton needs_destroy loadlib dlfunc dlvar
syn keyword pirOp compile compreg new_callback debug_init debug_load
syn keyword pirOp debug_break debug_print backtrace getline getfile
syn keyword pirOp print_newline gcd splice slice iter morph exec
syn keyword pirOp classname trap pow getclass new instantiate pmcinfo
syn keyword pirOp add_io_event need_finalize close fdopen getfd getstdin
syn keyword pirOp getstdout getstderr setstdout setstderr pioctl open
syn keyword pirOp print printerr read readline peek stat seek tell socket
syn keyword pirOp sockaddr connect recv send poll bind listen accept
syn keyword pirOp infix n_infix abs n_abs add cmod dec div fdiv ceil
syn keyword pirOp floor inc mod mul neg n_neg sub sqrt acos asec asin
syn keyword pirOp atan cos cosh exp ln log10 log2 sec sech sin sinh tan
syn keyword pirOp tanh lcm fact callmethodcc callmethod tailcallmethod
syn keyword pirOp DELETED_fetchmethod addmethod can does isa newclass
syn keyword pirOp subclass singleton class addparent removeparent
syn keyword pirOp addattribute removeattribute getattribute setattribute
syn keyword pirOp classoffset adddoes removedoes covers exsec hav vers
syn keyword pirOp pic_infix__ pic_inline_sub__ pic_get_params__
syn keyword pirOp pic_set_returns__ pic_callr__ typeof find_type
syn keyword pirOp valid_type get_repr find_method defined exists delete
syn keyword pirOp elements push pop unshift shift setprop getprop delprop
syn keyword pirOp prophash freeze thaw mmdvtregister mmdvtfind register
syn keyword pirOp unregister hash get_mro clone exchange set assign
syn keyword pirOp setref deref setp_ind setn_ind sets_ind seti_ind null
syn keyword pirOp cleari clearn clears clearp saveall restoreall
syn keyword pirOp entrytype depth lookback save savec restore rotate_up
syn keyword pirOp stm_start stm_validate stm_commit stm_wait stm_abort
syn keyword pirOp stm_depth ord chr chopn concat repeat length bytelength
syn keyword pirOp pin unpin substr substr_r index sprintf find_encoding
syn keyword pirOp stringinfo upcase downcase titlecase join split charset
syn keyword pirOp charsetname find_charset trans_charset encoding
syn keyword pirOp encodingname trans_encoding is_cclass find_cclass
syn keyword pirOp find_not_cclass escape compose spawnw err time gmtime
syn keyword pirOp localtime decodetime decodelocaltime sysinfo sleep
syn keyword pirOp sizeof store_lex find_lex get_namespace
syn keyword pirOp get_hll_namespace get_root_namespace get_global
syn keyword pirOp get_hll_global get_root_global set_global
syn keyword pirOp set_hll_global set_root_global store_global find_global
syn keyword pirOp find_name