tagged release 0.7.1
[parrot.git] / languages / WMLScript / wmlsi.pir
blob708e0dad9234bf740bcd5fb80c7d1e365fe4bf38
1 # Copyright (C) 2006-2008, The Perl Foundation.
2 # $Id$
4 =head1 NAME
6 wmlsi - WMLScript Interpreter
8 =head1 SYNOPSYS
10  parrot wmlsi.pir file.wmlsc function [params ...]
12 =head1 DESCRIPTION
14 B<wmlsi> translates a WMLScript bytecode file to Parrot PBC and calls
15 C<function(params, ...)>.
17 =head1 SEE ALSO
19 wmlsd, wmls2pir, wmls2pbc
21 =head1 AUTHOR
23 Francois Perrad.
25 =cut
27 .loadlib 'wmls_ops'
28 .HLL 'WMLScript', 'wmls_group'
30 .sub 'main' :main
31     .param pmc argv
32     load_bytecode 'languages/WMLScript/src/WMLScript.pbc'
33     .local int argc
34     .local string progname
35     .local string filename
36     .local string entryname
37     .local string content
38     argc = elements argv
39     if argc < 3 goto USAGE
40     progname = shift argv
41     filename = shift argv
42     entryname = shift argv
43     content = load_script(filename)
44     unless content goto L1
45     .local pmc loader
46     .local pmc script
47     new loader, 'WmlsBytecode'
48     push_eh _handler
49     script = loader.load(content)
50     script['filename'] = filename
51     .local string gen_pir
52     gen_pir = script.translate()
53     .local pmc pir_comp
54     .local pmc pbc_out
55     pir_comp = compreg 'PIR'
56     pbc_out = pir_comp(gen_pir)
57     $P0 = pbc_out[0]    # __onload
58     $P0()
59     .local pmc params
60     new params, 'ResizablePMCArray'
61   L2:
62     unless argv goto L3
63     $S0 = shift argv
64     new $P0, 'WmlsString'
65     $P0 = $S0
66     push params, $P0
67     goto L2
68   L3:
69     .local pmc entry
70     $S0 = filename
71     $S0 .= ':'
72     $S0 .= entryname
73     entry = get_hll_global $S0
74     unless null entry goto L4
75     print $S0
76     print " not found.\n"
77     end
78   L4:
79     entry(params :flat)
80     end
81   _handler:
82     .local pmc e
83     .local string s
84     .get_results (e, s)
85     print s
86     print "\n"
87   L1:
88     end
89   USAGE:
90     printerr "Usage: parrot wmlsi.pbc filename entry\n"
91     exit -1
92 .end
95 # Local Variables:
96 #   mode: pir
97 #   fill-column: 100
98 # End:
99 # vim: expandtab shiftwidth=4 ft=pir: