tagged release 0.7.1
[parrot.git] / t / compilers / pct / past.t
blobb90f7e612f725eb5d339d8f070036f6587cf4252
1 #! perl
3 # Copyright (C) 2006-2008, The Perl Foundation.
4 # $Id$
6 use strict;
7 use warnings;
8 use lib qw(t . lib ../lib ../../lib ../../../lib);
10 use Parrot::Test tests => 10;
12 foreach my $name (qw(Node Val Var Op Block Stmts)) {
13     my $module = "PAST::$name";
14     my $code   = <<'CODE'
15 .sub _main :main
16     load_bytecode 'PCT.pbc'
17     load_bytecode 'library/dumper.pbc'
18     .local pmc node
19     .local pmc node2
20 CODE
21         ;
23     $code .= "    node = new '$module'\n";
24     $code .= "    node2 = new '$module'\n";
25     $code .= <<'CODE'
26     node.'init'('name' => 'foo')
27     node2.'init'('name' => 'bar')
28     node.'push'(node2)
30     $P1 = node.'name'()
31     say $P1
32     "_dumper"(node, "ast")
33     .return ()
34 .end
35 CODE
36         ;
38     pir_output_is( $code, <<"OUT", "set attributes for $module via method" );
39 foo
40 "ast" => PMC '$module'  {
41     <name> => "foo"
42     [0] => PMC '$module'  {
43         <name> => "bar"
44     }
46 OUT
50 pir_output_is( <<'CODE', <<'OUT', 'dump PAST::Val node in visual format' );
51 .sub _main :main
52     load_bytecode 'PCT.pbc'
53     load_bytecode 'library/dumper.pbc'
54     .local pmc node
55     node = new 'PAST::Val'
56     node.'value'(1)
57     node.'returns'('Integer')
58     $P1 = node.'value'()
59     say $P1
60     $P1 = node.'returns'()
61     say $P1
62     "_dumper"(node, "ast")
63     .return ()
64 .end
65 CODE
67 Integer
68 "ast" => PMC 'PAST::Val'  {
69     <value> => 1
70     <returns> => "Integer"
72 OUT
74 ## TODO: test that return() is taken from the type of value when not specified
76 ## TODO: check the rest of the PAST::Var attributes
77 pir_output_is( <<'CODE', <<'OUT', 'dump PAST::Var node in visual format' );
78 .sub _main :main
79     load_bytecode 'PCT.pbc'
80     load_bytecode 'library/dumper.pbc'
81     .local pmc node
82     node = new 'PAST::Var'
83     node.'scope'('foo')
84     node.'viviself'('baz')
85     node.'lvalue'('buz')
86     "_dumper"(node, "ast")
87     .return ()
88 .end
89 CODE
90 "ast" => PMC 'PAST::Var'  {
91     <scope> => "foo"
92     <viviself> => "baz"
93     <lvalue> => "buz"
95 OUT
97 pir_output_is( <<'CODE', <<'OUT', 'dump PAST::Op node in visual format' );
98 .sub _main :main
99     load_bytecode 'PCT.pbc'
100     load_bytecode 'library/dumper.pbc'
101     .local pmc node
102     node = new 'PAST::Op'
103     node.'pasttype'('pirop')
104     node.'pirop'('add')
105     node.'lvalue'('foo')
106     node.'inline'('%r = add %0, %1')
107     "_dumper"(node, "ast")
108     .return ()
109 .end
110 CODE
111 "ast" => PMC 'PAST::Op'  {
112     <pasttype> => "pirop"
113     <pirop> => "add"
114     <lvalue> => "foo"
115     <inline> => "%r = add %0, %1"
119 pir_output_is( <<'CODE', <<'OUT', 'dump PAST::Block node in visual format' );
120 .sub _main :main
121     load_bytecode 'PCT.pbc'
122     load_bytecode 'library/dumper.pbc'
123     .local pmc node
124     node = new 'PAST::Block'
125     node.'blocktype'('declaration')
126     "_dumper"(node, "ast")
127     .return ()
128 .end
129 CODE
130 "ast" => PMC 'PAST::Block'  {
131     <blocktype> => "declaration"
135 # Local Variables:
136 #   mode: cperl
137 #   cperl-indent-level: 4
138 #   fill-column: 100
139 # End:
140 # vim: expandtab shiftwidth=4: