Camelia, the Perl 6 bug

IRC log for #parrot, 2008-02-13

Parrot | source cross referenced

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:01 wknight8111 okay, thanks. Assuming that I am fixing the issues they reference, can I delete them as I fix?
00:02 chromatic Please do.
00:03 wknight8111 done and done.
00:03 kid51 You might want to take a peek at those tickets in RT and say something there about how your patch will affect them.
00:04 rdice joined #parrot
00:04 kid51 ptc periodically goes thru the repository and creates new RT tickets from any comments like 'XXX' or 'TODO' -- so they eventually have to be closed.
00:05 Limbic_Region joined #parrot
00:10 Limbic_Region Coke ping
00:11 Andy joined #parrot
00:18 wknight8111 mem_sys_allocate is a wrapper around malloc? Pointers returned from it need to be freed?
00:19 davidfetter joined #parrot
00:27 Andy Are we adding unnecessary braces around blocks
00:27 Andy ?
00:27 Andy if (foo) { blah; }
00:29 wknight8111 from the code i'm looking at, it doesnt appear that way
00:30 wknight8111 of course, it may just be one or two bad files
00:31 svnbotl joined #parrot
00:34 wknight8111 what is the difference, exactly, between Parrot_Run_OS_Command, and Parrot_Exec_OS_Command?
00:34 wknight8111 they appear to me to basically do the same thing
00:35 wknight8111 no, nevermind. I see what they do now
00:38 svnbotl r25674 | jkeenan++ | tcif:
00:38 svnbotl : Pull object methods out of Parrot::Configure and place them in new package Parrot::Configure::Base (so that they can be inherited by other packages (to come)).
00:38 svnbotl r25675 | jkeenan++ | tcif:
00:38 svnbotl : For ease of editing, move documentation to end of file.
00:38 svnbotl r25676 | jkeenan++ | tcif:
00:38 svnbotl : Add Parrot::Configure::Parallel.
00:38 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25676
01:14 AndyA joined #parrot
01:32 Coke joined #parrot
01:40 svnbotl r25677 | coke++ | trunk:
01:40 svnbotl : [docs]
01:40 svnbotl : minor docupdates
01:40 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25677
01:41 Coke I find it somewhat disconcerting that file_metadata.t just barfs if parrot is not configured.
01:43 Coke Ahhhh. prove -v is your friend. nevermind.
01:59 wknight8111 should I use Parrot_warn() for RT#48276? If malloc() or _putenv() fail, there's probably a BIG problem with system memory levels.
01:59 svnbotl r25678 | coke++ | trunk:
01:59 svnbotl : [codingstd]
01:59 svnbotl : Fixup some paren-based codingstd nits.
01:59 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25678
02:09 Coke wknight8111: Iunno.
02:20 wknight8111 i submitted the patch with Parrot_warn(), so it will have to do
02:20 * wknight8111 submitted his first patch!
02:23 Coke woot!
02:35 klapperl joined #parrot
02:40 kid51 joined #parrot
02:41 Coke hey, james.
02:41 Coke I'm about to commit a change to lib/Parrot/Distribution.pm ; any tests you know I should run for sure?
02:47 Coke ... Urk. can someone explain the shebang in compilers/nqp/t/10-sub.t
02:47 Coke ?
02:47 klapperl joined #parrot
02:48 chromatic My explanation is "This probably won't work."
02:49 Coke I am updating Parrot::Distribution to return .t files that claim to be PIR; I am going to have it assume that not only are .pir PIR, but also that .t with a shebang that includes parrot (but not .pir or .pbc) is PIR.
02:49 Coke ... and I was just checking the new files that are caught, and that shouldn't be one of them
02:49 Coke I think I'm going to commit my fix anyway. :|
02:52 Coke src/gc/dod.c:476: warning: passing argument 1 of 'Parrot_assert' makes integer from pointer without a cast
02:52 Coke ... there are hundreds of these.
02:52 Coke I think I'm going to count them and open a ticket and assign it to andy!
02:53 wknight8111 where is PARROT_ASSERT defined?
02:54 chromatic include/parrot/exceptions.h
02:54 Coke <particle> make tags and then use vi -<mumble> PARROT_ASSERT</particle>
02:55 kid51 Coke:  I haven't touched Parrot::Distribution in > 1 year.
02:56 Coke hokay.
02:56 kid51 I suspect many of the tests in t/distro and t/codingstd and t/harness exercise it.
02:57 kid51 I only do little touch-ups in those tests.
02:57 Coke yah, I was making the change to force t/codingstd/pir_code_coda.t to check more files.
02:58 svnbotl r25679 | jkeenan++ | tcif:
02:58 svnbotl : 1. t/harness:  Pull pre- and post-configuration tests out of @default
02:58 svnbotl : tests.  (Somewhere, chromatic is smiling!)
02:58 svnbotl : 2. config/gen/makefiles/root.in:  (a) Eliminate 'configure_tests' make
02:58 svnbotl : target.  These tests should be run pre-configuration (with perl
02:58 Coke ok. Just wondering if you knew off the top of your head. running test right now.
02:58 chromatic Smirking, anyway.
02:58 Coke ... taste the rainbow!
03:00 Coke bugadmins, lolcode is now a language in RT. Enjoy.
03:03 * Coke wonders if it's worth building the ability to memoize into parrot.
03:03 wknight8111 Coke, we can kill all those errors by casting to int in the definition of the PARROT_ASSERT macro
03:04 Coke wknight8111: ok. there's a ticket now you can add a patch to.
03:04 chromatic Seems like we should be able to tag subs as :pure
03:04 wknight8111 #define PARROT_ASSERT(x) Parrot_assert((int)x, #x, __FILE__, __LINE__)
03:04 Coke chromatic: exactly.
03:04 svnbotl r25680 | jkeenan++ | tcif:
03:04 svnbotl : Make sure that print_conclusion() always gets a defined value for  argument.
03:04 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25680
03:05 Coke ... we could be lying of course. I suspect we'd get what we deserve, though.
03:06 chromatic Optimizations are all a form of cheating, and cheaters eventually get caught.
03:06 Coke bad .sub; no .donut.
03:07 Coke jhorwitz broke t/codingstd/line*.t ; but I don't see how we can fix that.
03:07 Coke (line 231 is too long.)
03:09 kid51 line 231 in what file?
03:09 Coke whoops. docs/embed.pod
03:09 svnbotl r25681 | jkeenan++ | tcif:
03:09 svnbotl : For ease in editing in this branch, temporarily change the way elements of steps list are typed.
03:09 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25681
03:10 Andy joined #parrot
03:12 avar w 36
03:15 Andy Is there a reason that the *.ops files are only 2-space indents?
03:16 svnbotl r25682 | coke++ | trunk:
03:16 svnbotl : [codingstd]
03:16 svnbotl : Resolve RT #50046; Parrot::Distribution now returns all .t files that claim
03:16 svnbotl : to be PIR as well as .pir files when asked.
03:16 svnbotl : ... However, this causes t/codingstd/pir_code_coda.t to fail, as many .t
03:17 Coke Andy: core.ops doesn't seem to be.
03:17 Coke (seems to be 4.)
03:17 Andy string.ops is
03:18 Coke isn't that what "shiftwidth" is supposed to indicate?
03:18 Coke (no reason I can see.)
03:23 svnbotl r25683 | petdance++ | trunk:
03:23 svnbotl : a little bit of consting
03:23 svnbotl r25684 | coke++ | trunk:
03:23 svnbotl : [build]
03:23 svnbotl : Silence 2114 warnings in the build. Resolves RT #50074.
03:25 Coke ... I added a karma message in there, dammit.
03:25 Coke wknight8111++
03:28 Andy yeah, I wish svnbot would put the entire message
03:36 wknight8111 yay!
03:48 svnbotl r25686 | jkeenan++ | tcif:
03:48 svnbotl : Begin to adapt to TAP::Parser.  t/config/025 has a skipped failure;
03:48 svnbotl : postconfiguration tests not running.
03:48 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25686
03:51 * kid51 must sleep
03:51 purl $kid51->sleep(8 * 3600);
03:55 svnbotl r25687 | petdance++ | trunk:
03:55 svnbotl : localizing variables
03:55 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25687
04:53 alvar joined #parrot
05:08 Andy I'm trying to figure the differences between string_append() and string_concat().
05:15 chromatic One creates a new string, I think.
05:45 AndyA joined #parrot
05:50 krumms joined #parrot
06:05 jjore joined #parrot
06:11 svnbotl r25688 | petdance++ | trunk:
06:11 svnbotl : moved string_concat next to its brother string_append
06:11 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25688
06:22 iblechbot joined #parrot
06:23 svnbotl r25689 | petdance++ | trunk:
06:23 svnbotl : added malloclist target to show all the PARROT_MALLOC functions
06:23 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25689
07:12 uniejo joined #parrot
07:14 paq joined #parrot
07:29 * Tene pings Coke for tickets to work on tomorrow night.
07:54 skv_ joined #parrot
07:56 skv__ joined #parrot
07:58 aero joined #parrot
07:59 aero left #parrot
08:10 HG` joined #parrot
08:21 skv__ joined #parrot
08:22 marmic joined #parrot
08:23 skv___ joined #parrot
08:25 uniejo joined #parrot
08:34 jonathan joined #parrot
08:51 moritz who broke the build?
08:52 moritz http://perlpunks.de/paste/show/47b2afa5.4b18.3e5
09:21 alvar joined #parrot
09:47 kj joined #parrot
10:34 ruoso joined #parrot
10:36 svnbotl r25690 | fperrad++ | trunk:
10:36 svnbotl : [build]
10:36 svnbotl : - macro argument with parentheses
10:36 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25690
10:43 svnbotl r25691 | kjs++ | trunk:
10:43 svnbotl : [docs] fix line length which was too long.
10:43 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25691
10:55 avar joined #parrot
11:29 wknight8111 joined #parrot
11:32 rdice joined #parrot
11:40 jq joined #parrot
12:49 krumms_ joined #parrot
12:50 krumms does anybody know of some decent documentation on code generation for a register-based VM such as parrot?
12:55 kj krumms: there's a lot of literature on compilers
12:55 kj the dragon book for instance by aho et al.
12:56 kj and I'm sure 15 minutes of googling will yield enough to read the whole afternoon :-)
12:57 krumms kj: not compilers in general, just code generation for register-based machines. I've got a super basic little language cooked up using lex/yacc, but I'm more accustomed to generating code for stack-based machines (the JVM, Python's VM)
12:58 krumms so on a conceptual level I'm struggling a little :)
12:58 alvar joined #parrot
12:58 kj ok.usually there's always a chapter on code generation, and I'm pretty sure the dragon book does discuss register based machines
12:59 kj but as said, there's much to be found in articles on the web
12:59 krumms kj: sure
12:59 kj google this: register based machine code generation
13:00 kj at least it will get you up and running with basics. registers can just be seen as stack positions..
13:00 kj except that they are numbered
13:01 krumms kj: cheers. I think PIR should make it a little easier to deal with, too.
13:06 lidden joined #parrot
13:11 kj krumms: especially because PIR has an infinite amount of registers
13:11 kj no need for an allocator; this is already handled by the pir compiler
13:11 krumms kj: fantastic
13:12 kj even better: depending on what you want: running your language on parrot or learning about code generation, you can also use the Parrot abstract tree nodes
13:12 krumms abstract tree nodes?
13:12 kj then you just need to create these PAST nodes
13:12 kj abstract tree. that's a data structure that parsers generally create during a parse
13:13 kj it's just a bunch of nodes linked together, representing the program you compile
13:13 kj for instance, a node representing if <expr> then <stmt> should probably have 2 children: the node representing <expr> and one to represent the <stmt>
13:14 kj so the syntax is stripped off, and you just end up with the stuff that matters
13:14 krumms kj: familiar with ASTs, I just didn't realize this stuff was built in :) great to hear
13:14 kj it gets even better than this ;-)
13:14 krumms *sighs* I need more time in my day, it's already midnight here :(
13:14 kj but I don't want to give away too much
13:15 krumms haha sure
13:16 kj today, for simple languages, you only need to create a parser, and write some straightforward Perl 6 code to implement a compiler targeting parrot
13:17 kj oh; i forgot the word "syntax" there with the abstract tree. sorry, that must have been the confusing part :-)
13:22 davidfetter joined #parrot
13:47 ruoso joined #parrot
13:53 alvar joined #parrot
13:54 HG` joined #parrot
13:59 alvar_ joined #parrot
13:59 alvar__ joined #parrot
13:59 svnbotl r25692 | jonathan++ | trunk:
13:59 svnbotl : [rakudo] Big refactoring to the objects implementation to remove a lot of inline PIR from the actions file and to make it earlier to allow different metaclasses to give meaning to various keywords later, as we'll need to do S12. No doubt we'll need futher clear-ups later, but this is further in the right direction.
13:59 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25692
14:02 alvar joined #parrot
14:03 alvar_ joined #parrot
14:07 alvar joined #parrot
14:09 alvar joined #parrot
14:10 alvar joined #parrot
14:11 gryphon joined #parrot
14:12 alvar_ joined #parrot
14:12 svnbotl r25693 | jonathan++ | trunk:
14:12 svnbotl : [rakudo] Remove another bit of inline PIR in favor of generating PAST nodes.
14:12 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25693
14:13 alvar_ left #parrot
14:15 iblechbot joined #parrot
14:16 IllvilJa joined #parrot
14:20 moritz jonathan: are you in Erlangen right now?
14:22 jonathan moritz: Yeah.
14:22 moritz jonathan: where?
14:22 jonathan Second row, extreme left.
14:22 jonathan Guy with messy shoulder-lengh-ish hair and over-sized beard who can't speak German. ;-)
14:22 moritz ah, I saw you hacking with parrot
14:23 moritz im' on your right, one row behind you
14:23 jonathan hi!
14:25 svnbotl r25694 | jonathan++ | trunk:
14:25 svnbotl : [rakudo] Fix accessor/mutator generation for attributes, which got broken.
14:25 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25694
14:25 moritz jonathan++ # rakudo hacking, coming to Germany
14:25 jonathan Yeah, braving the cold!
14:26 moritz ;)
14:28 TimToady you're being very productive; maybe we should send you to Deutschland more often  :)
14:29 moritz ;)
14:30 moritz perl6 seems to hang on t/spec/S03-operators/assign.rakudo
14:30 moritz it used to produce a syntax error, so I added a #?rakudo 2 skip "not implemented"
14:30 moritz no it loops :/
14:32 avar somebody shout "Schnell, schnell!" at him:)
14:32 moritz avar: bad idea, would interrupt the talk ;)
14:33 avar American media has led me to believe that shouting unparsable sentences at people is acceptable in all social situations in Germany
14:35 TimToady s/in Germany//
14:36 moritz well, "Schnell, schnell" _is_ parsable ;)
14:37 avar If your german is parsable I think you need to work on your shouting:)
14:38 TimToady you just need a mutable parser :)
14:40 TimToady then you would misunderstand "Ich bin ein Berliner." perfectly...
14:40 * davidfetter turns into a jelly donut
14:42 jonathan TimToady: Any Perl event where I don't understand the language of the talks will do. ;-)
14:42 jonathan I would say it doesn't have to be in a country this cold, but I've got the Ukranian one come up in a week and a bit...
15:05 jhorwitz joined #parrot
15:05 rdice joined #parrot
15:06 Andy joined #parrot
15:08 Andy Morning all.
15:08 purl afternoon, Andy
15:28 svnbotl r25695 | petdance++ | trunk:
15:28 svnbotl : removed PARROT_MALLOC from a bunch of functions that actually just snag stuff from pools
15:28 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25695
15:40 svnbotl r25696 | jonathan++ | trunk:
15:40 svnbotl : [core] Role composition using the v-table method ignored resolve_method list; fix this.
15:40 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25696
15:47 svnbotl r25697 | jonathan++ | trunk:
15:47 svnbotl : [rakudo] Fix role composition so methods in the class resolve conflicts and get priority over methods from roles.
15:47 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25697
15:49 marmic joined #parrot
16:00 svnbotl r25698 | petdance++ | trunk:
16:00 svnbotl : consting & macroing
16:00 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25698
16:01 PerlJam joined #parrot
16:01 jonathan joined #parrot
16:02 pmichaud joined #parrot
16:09 Coke joined #parrot
16:12 * Coke ~~
16:14 leo joined #parrot
16:14 Coke guten tag, leo.
16:17 leo hi
16:17 purl salut, leo.
16:20 particl1 joined #parrot
16:24 contingencyplan joined #parrot
16:43 svnbotl r25699 | petdance++ | trunk:
16:43 svnbotl : consting
16:43 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25699
16:51 dwave joined #parrot
16:54 Coke opbots, names
16:54 Coke opbots, trust Tene
16:54 clunker Ok
16:54 slavorg Ok
16:59 mj41_ joined #parrot
17:14 cout joined #parrot
17:43 cognominal_ joined #parrot
18:07 cognominal_ some recent change broke parrot on my intel macbook. It compiles with the i386 _and_  ppc architecture but I unicode library is i386 only
18:09 cognominal_ should I be obliged to compile a Universal parrot by default?
18:11 krumms joined #parrot
18:31 Coke nope.
18:31 Coke I think the default for now should not be a fat binary.
18:35 parrot-poke joined #parrot
18:47 Coke cognominal_: note that fat binary was the default for some time.
18:49 Coke ls
18:57 cognominal_ how come it hurs me know?
18:58 cognominal_ ho, it works anyway, I just did not notice the message before
18:59 cognominal_ being able to compile a fat parrot is good anyway. So that was just a warning tell me that icu was not fat
19:00 cognominal_ s/warning/warning message/
19:02 Coke ah.
19:02 Coke did you recently start linking against icu?
19:03 Coke cage task: add a tool that runs all the coding standards tests against a particular file.
19:04 Coke (each codingstd test should take an optional list of files to check, and just quit if the file doesn't make sense to test.)
19:06 cognominal_ no, I just did not notice the message before.
19:08 cognominal_ btw: as a warming I try to translat  Getopt/Obj.pir in Perl6
19:09 cognominal_ once done, I guess that will lead me to handle class/package/module  loading by long names
19:20 peeps[work] joined #parrot
19:22 Ron joined #parrot
19:49 Coke seen chromatic?
19:49 purl chromatic was last seen on #parrot 14 hours and 34 minutes ago, saying: One creates a new string, I think.
19:51 cotto joined #parrot
19:59 TimToady phone &
20:01 Coke i'll be there as soon as possible.
20:01 TimToady so far I'm the only one...
20:05 cotto If I were going to implement a PHPArray PMC, how much of the current code could in Parrot (esp src/hash.c) could I reuse?  My main concern is the ability of PHP arrays to be ordered.
20:06 particle take a look at src/pmc/orderedhash.pmc
20:06 particle see if that fits your needs
20:06 cotto thanks
20:11 jrockway joined #parrot
20:15 japhb joined #parrot
20:20 sjansen joined #parrot
20:43 cotto joined #parrot
20:50 particle Andy: know a good way to list the dirs in a svn working copy without the crud? i don't think ack handles that :(
20:51 Andy ack -fa
20:51 particle dirs, not files
20:51 Andy oh, no, ack doesnt' do anything with dirs at all.
20:51 Coke once you have the dir list, you can pipeline it.
20:51 Coke er, file list.
20:52 particle not for empty dirs
20:52 PerlJam particle: find . -type d | grep -v .svn  ?
20:52 particle <--windows
20:52 Coke particle;gimmie a minute.
20:52 Andy yeah, that's one where find | grep is the best way to go.
20:53 particle i do have unix utils on windows, so find | grep works for me, but not in general
20:53 PerlJam particle: perl -MFile::Find -e 'find(sub { -d $_ && print }, @ARGV);'   # untested  :)
20:53 jhorwitz nopaste?
20:53 purl i guess nopaste is at http://nopaste.snit.ch/ (ask TonyC for new channels) or http://rafb.net/paste or http://paste.husk.org/ or http://poundperl.pastebin.com/ or http://paste.scsys.co.uk/ or don't bother me while I'm eating
20:54 particle if file::next was taught to deal with dirs, it'd be an easy add to ack, but i don't know if you want to go there.
20:54 PerlJam of course you still need to add the part that ignores the "crud"
20:54 Andy I don't want ack to do anything with directories.
20:55 particle yeah, i'd like to take the crud-ignoring parts of ack and have a utility for dirs
20:55 PerlJam particle: time for you to create App:Dack or something
20:55 Coke particle: DIR /B /S /A:D | find /V ".svn"
20:56 Coke (tried here with a local CVS repo and "CVS" instead of ".svn", works great.
20:56 PerlJam Coke++ that's some serious windows command line fu
20:56 Andy And in Windows no less
20:57 * Coke actually got paid to do that sort of thing once.
20:57 Coke for a week or so.
20:57 Coke "you don't have perl. GO!"
20:57 particle yeah, i hate windows find
20:57 PerlJam I'm too lazy to learn all of that dreck so I just use cygwin or some other thing to make windows look like unix if I have to use windows
20:57 particle here, it's the same name as the unix util, but works totally different. have fun.
20:58 Coke on windows, it's more like grep.
20:58 Coke particle: that work with the svn?
21:02 particle it would, except here 'find' is the unix command
21:02 particle so, find | grep works
21:02 particle but yep, your solution will work on my other win box, thx!
21:02 Coke You can probably force the issue with FIND.EXE
21:02 jhorwitz particle: check out this bare bones ModPerl6::Registry.  it works!
21:02 Coke or .bat or something.
21:03 nopaste "jhorwitz" at 68.163.18.104 pasted "particle: ModPerl6::Registry" (13 lines) at http://nopaste.snit.ch/12319
21:03 Coke but as long as it works. =-)
21:04 particle whee! jhorwitz++
21:06 jhorwitz just in time for frozen perl...
22:06 Coke -> afk
22:27 parrot-poke_ joined #parrot
22:31 jonathan_ joined #parrot
22:35 PerlPilot joined #parrot
22:36 pmichaud_ joined #parrot
22:37 Piper joined #parrot
22:37 Piper Hi there.  I am Piper.  I am now publicly logging this channel.  If you don't want to be logged, please leave now.
22:37 confound hi piper
22:39 Theory joined #parrot
22:40 leo_ joined #parrot
22:43 diakopter purl: Piper?
22:43 purl diakopter: i haven't a clue
22:46 mj41_ joined #parrot
22:55 workbench joined #parrot
23:01 apple-gunkies_ joined #parrot
23:01 davidfetter joined #parrot
23:02 sjansen joined #parrot
23:02 skids joined #parrot
23:02 peeps[work] joined #parrot
23:12 jonathan Lot of disconnects today... :-S
23:13 slightlyoff joined #parrot
23:23 mdiep_ joined #parrot
23:23 mdiep joined #parrot
23:31 svnbotl r25700 | jonathan++ | trunk:
23:31 svnbotl : [rakudo] Remove now-unused regex.pir.
23:31 svnbotl diff: http://parrotvm.org/svn/parrot/revision/?rev=25700
23:31 kid51 joined #parrot
23:38 * kid51 cannot reach svn.perl.org.  Anyone know anything about that?
23:42 jonathan kid51: I checked something in less than 10 mins ago and it worked fine... :-S
23:43 Andy joined #parrot
23:45 kid51 jonathan:  Am getting nothing from 'svn up'
23:46 cotto to
23:47 jonathan kid51: Oddness. It works here.

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

Parrot | source cross referenced