Author: leo Date: Tue Mar 21 07:29:38 2006 New Revision: 11964 Added: trunk/examples/namespace/ trunk/examples/namespace/namespace_dump.pir Modified: trunk/MANIFEST
Log: add namespace_dump.pir example Modified: trunk/MANIFEST ============================================================================== --- trunk/MANIFEST (original) +++ trunk/MANIFEST Tue Mar 21 07:29:38 2006 @@ -494,6 +494,7 @@ examples/mops/mops.rb [main]doc examples/mops/mops.scheme [main]doc examples/mops/README [main]doc +examples/namespace/namespace_dump.pir [main]doc examples/nci/ls.pir [main]doc examples/nci/PQt.C [main]doc examples/nci/QtHelloWorld.pasm [main]doc Added: trunk/examples/namespace/namespace_dump.pir ============================================================================== --- (empty file) +++ trunk/examples/namespace/namespace_dump.pir Tue Mar 21 07:29:38 2006 @@ -0,0 +1,80 @@ +# +# dump all namespaces and the contents recursively +# +.sub main :main + .include "interpinfo.pasm" + .include "iterator.pasm" + .local pmc ns + ns = interpinfo .INTERPINFO_NAMESPACE_ROOT + dump(ns, 0) +.end + +# dump one namespace +.sub dump + .param pmc ns + .param int lev + .local pmc it + .local string spac + + it = iter ns + it = .ITERATE_FROM_START + $I2 = lev * 4 + spac = repeat " ", $I2 +lp: + unless it goto ex + $S0 = shift it + $P0 = it[$S0] + $I0 = typeof $P0 + if $I0 != .NCI goto no_nci + $P0 = new .String + $P0 = "NCI" +no_nci: + print spac + print $S0 + print " => " + if $I0 != .MultiSub goto no_multi + $I1 = lev + 1 + print " Multi [\n" + dump_multi($P0, $I1) + print spac + print "]\n" + goto lp +no_multi: + print $P0 + print "\n" + if $I0 != .NameSpace goto no_ns + $I1 = lev + 1 + dump($P0, $I1) +no_ns: + goto lp +ex: +.end + +# dump the types of a MultiSub +.sub dump_multi + .param pmc multi + .param int lev + .local int i, n, j, m + .local string spac + n = elements multi + null i + $I2 = lev * 4 + spac = repeat " ", $I2 +loop: + print spac + $P0 = multi[i] + $P1 = $P0."get_multisig"() + m = elements $P1 + j = 0 +lp2: + $I0 = $P1[j] + typeof $S0, $I0 + print $S0 + print " " + inc j + if j < m goto lp2 + + print "\n" + inc i + if i < n goto loop +.end
