fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / compilers / pct / src / PCT / Dumper.pir
blob9f3a5a7ab7a0607a057ad6e9bba87c711d175349
1 # Copyright (C) 2009, Parrot Foundation.
2 # $Id$
4 =head1 NAME
6 PCT::Dumper - various dumper formats for PCT
8 =head1 DESCRIPTION
10 This file implements a dumper that attempts to output PAST,
11 Match, and Capture objects in a format that can be easily
12 consumed by syntax highlighters (such as Padre).
13 Yes, the code is probably much uglier and convoluted than
14 it should be.  No, I'm not proud of it, but it works for now.
16 =cut
18 .namespace ['PCT';'Dumper']
20 .sub 'padre'
21     .param pmc obj
22     .param string name
23     .param pmc options         :slurpy :named
25     'padre_item'(obj, name)
26 .end
29 .sub 'padre_item' :multi(_)
30     .param pmc obj
31     .param pmc name
32 .end
35 .sub 'padre_item' :multi(['PGE';'Match'])
36     .param pmc obj
37     .param pmc name
39     .local string str
40     str = obj.'Str'()
41     $I0 = length str
42     if $I0 < 48 goto have_str
43     str = substr str, 0, 48
44     str .= '...'
45   have_str:
46     str = escape str
48     $S0 = obj['type']
49     unless $S0 goto have_name
50     name = $S0
51   have_name:
53     $P0 = new 'ResizablePMCArray'
54     $I1 = obj.'from'()
55     push $P0, $I1
56     $I2 = obj.'to'()
57     $I2 -= $I1
58     push $P0, $I2
59     push $P0, name
60     push $P0, str
62     $S0 = sprintf ' %4d %4d  %-20s "%s"', $P0
63     say $S0
65     .local pmc hash, hash_it
66     hash = obj.'hash'()
67     hash_it = iter hash
68   hash_it_loop:
69     unless hash_it goto hash_it_done
70     .local string key
71     key = shift hash_it
72     $P0 = hash[key]
73     'padre_item'($P0, key)
74     goto hash_it_loop
75   hash_it_done:
77     $P0 = obj.'list'()
78     'padre_item'($P0, name)
80 .end
83 .sub 'padre_item' :multi(['ResizablePMCArray'])
84     .param pmc obj
85     .param pmc name
87     .local pmc list_it
88     list_it = iter obj
89   list_it_loop:
90     unless list_it goto list_it_done
91     $P0 = shift list_it
92     'padre_item'($P0, name)
93     goto list_it_loop
94   list_it_done:
95 .end
97 =head1 AUTHOR
99 Patrick R. Michaud <pmichaud@pobox.com>
101 =cut
103 # Local Variables:
104 #   mode: pir
105 #   fill-column: 100
106 # End:
107 # vim: expandtab shiftwidth=4 ft=pir: