Camelia, the Perl 6 bug

IRC log for #parrot, 2012-07-07

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:57 dalek nqp/toqast: 407a1cf | pmichaud++ | src/HLL/Compiler.pm:
00:57 dalek nqp/toqast: Update stagestats to use a bitmask instead of levels.
00:57 dalek nqp/toqast:    0x02 = display memory and pmc allocation
00:57 dalek nqp/toqast:    0x04 = force gc sweep before displaying stats
00:57 dalek nqp/toqast:    0x08 = pause between stages
00:57 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/407a1cf7a9
01:16 dalek nqp: a4165a9 | pmichaud++ | src/HLL/Compiler.pm:
01:16 dalek nqp: Update stagestats to use a bitmask instead of levels.
01:16 dalek nqp:    0x02 = display memory and pmc allocation
01:16 dalek nqp:    0x04 = force gc sweep before displaying stats
01:16 dalek nqp:    0x08 = pause between stages
01:16 dalek nqp: review: https://github.com/perl6/nqp/commit/a4165a9eb6
03:11 perlite joined #parrot
03:59 kid51 joined #parrot
04:20 dalek nqp: b9d44ce | pmichaud++ | src/QRegex/ (3 files):
04:20 dalek nqp: [qregex]  Initial implementation of <( and )> tokens.
04:20 dalek nqp: review: https://github.com/perl6/nqp/commit/b9d44ce7b3
04:20 dalek nqp: 66edbf6 | pmichaud++ | t/qregex/01-qregex.t:
04:20 dalek nqp: Add some got/expected output to t/qregex/01-qregex.t .
04:20 dalek nqp: review: https://github.com/perl6/nqp/commit/66edbf6a36
04:20 dalek nqp: b07bc9e | pmichaud++ | t/qregex/rx_metachars:
04:20 dalek nqp: [qregex]: Add some tests for <( and )> .
04:20 dalek nqp: review: https://github.com/perl6/nqp/commit/b07bc9e530
04:34 dalek rakudo/nom: a569e39 | pmichaud++ | / (4 files):
04:34 dalek rakudo/nom: Update <( and )> in regexes to use code inherited from NQP.
04:34 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/a569e39fa9
06:19 y_echo joined #parrot
06:32 Khisanth joined #parrot
07:19 dalek mod_parrot: d7b486b | (Bart Wiegmans)++ | / (9 files):
07:19 dalek mod_parrot: mod_parrot_util now uses the /internal/ parrot api which fixes a problem with error catching and return
07:19 dalek mod_parrot: review: https://github.com/bdw/mod​_parrot/commit/d7b486b2d7
08:37 brrt joined #parrot
09:26 PacoAir joined #parrot
10:03 whiteknight joined #parrot
10:04 whiteknight good morning, #parrot
10:16 brrt hey, whiteknight
10:16 brrt i just send a mail
10:23 brrt i predictably am in kind of a pickle again :-)
10:24 Psyche^ joined #parrot
10:29 brrt joined #parrot
10:29 brrt but, its time for lunch
10:30 brrt so we will probably talk later
10:30 brrt bye &
10:36 zby_home joined #parrot
11:06 rich joined #parrot
11:35 dalek Heuristic branch merge: pushed 67 commits to parrot/threads by Whiteknight
12:33 dalek rakudo/toqast: f96df3b | jnthn++ | src/QPerl6/Actions.pm:
12:33 dalek rakudo/toqast: Translate the rest of the 'obvious' remaining PAST:: usages in the Actions. Thsoe that remain are interesting in some way. :-)
12:33 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/f96df3b2ac
12:33 dalek rakudo/toqast: 0c943c2 | jnthn++ | src/QPerl6/World.pm:
12:33 dalek rakudo/toqast: Translate the easy remaining PAST usages in World.
12:33 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/0c943c2536
13:05 dalek nqp/toqast: fd47dae | jnthn++ | src/QAST/Operations.nqp:
13:05 dalek nqp/toqast: Add what/how/who ops.
13:05 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/fd47dae8a6
13:05 dalek nqp/toqast: 58acfd1 | jnthn++ | src/QAST/ (2 files):
13:05 dalek nqp/toqast: Add a way to mark a block as having a custom arguments processor, and compile it to a :call_sig usage on Parrot.
13:05 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/58acfd16bf
13:07 dalek rakudo/toqast: 9b02aca | jnthn++ | src/QPerl6/ (3 files):
13:07 dalek rakudo/toqast: Add a few ops to the abstraction layer.
13:07 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/9b02aca31c
13:07 dalek rakudo/toqast: c62d139 | jnthn++ | src/QPerl6/Actions.pm:
13:07 dalek rakudo/toqast: Update arguments handling. Gets back one more sanity test, and changes the failure mode of many others.
13:07 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/c62d139c7c
13:07 dalek rakudo/toqast: bf653dd | jnthn++ | src/QPerl6/Actions.pm:
13:07 dalek rakudo/toqast: Update compilation of .WHAT/.HOW/.WHO.
13:07 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/bf653dd901
13:22 dalek rakudo/toqast: 9114f92 | jnthn++ | src/QPerl6/ (2 files):
13:22 dalek rakudo/toqast: Start to update return value handling.
13:22 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/9114f9234c
13:22 dalek rakudo/toqast: a543d24 | jnthn++ | src/QPerl6/ (2 files):
13:22 dalek rakudo/toqast: Update Perl 6 capture_lex handling, which wins back one more sanity test.
13:22 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/a543d246dd
13:22 dalek rakudo/toqast: 3f5bb89 | jnthn++ | src/QPerl6/Actions.pm:
13:22 dalek rakudo/toqast: Make returnless analysis not explode.
13:22 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/3f5bb8971f
13:39 kid51 joined #parrot
14:05 kid51 msg whiteknight Please see http://irclog.perlgeek.de/p​arrot/2012-06-11#i_5710278 for my initial report of severe problems with threads branch
14:05 aloha OK. I'll deliver the message.
14:11 brrt joined #parrot
14:12 brrt joined #parrot
14:14 dalek nqp/toqast: 9c4dfa5 | jnthn++ | / (4 files):
14:14 dalek nqp/toqast: Implement and test resultchild, which allows something other than the final statement of a QAST::Stmt or QAST::Stmts to be used as the result of the overall operation.
14:14 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/9c4dfa54ef
14:20 PacoAir_ joined #parrot
14:49 whiteknight joined #parrot
14:55 dalek nqp/toqast: 2cf193e | jnthn++ | src/QAST/Operations.nqp:
14:55 dalek nqp/toqast: Port lexotic to QAST.
14:55 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/2cf193eabd
14:57 brrt ping NotFound
14:57 brrt or, anybody about winxed
14:58 brrt i want to catch exceptions java-style
14:58 brrt i.e.
14:58 brrt catch all apache.error
14:58 brrt but no other exceptions
14:59 brrt ... wait, i just try it out :-)
15:00 brrt well, purely java-style does not work
15:01 brrt hmm.
15:01 brrt looking at the ops in question looks like it is impossible it will ever work
15:02 brrt fair enough
15:05 brrt ok, now i have another problem
15:06 brrt i need to reliably determine if something 'does' an array
15:06 brrt but there are X array types
15:08 brrt looking at tests
15:08 brrt does $P0, 'array'
15:09 brrt that should be it
15:17 whiteknight yes
15:18 whiteknight Parrot has a notion of named roles, which the "does" opcode tests for
15:18 whiteknight isa (winxed "instanceof" operator) tests for class hierarchy, does tests named roles
15:18 whiteknight so all our array types will "does 'array'"
15:19 whiteknight but some of them will x instanceof 'ResizablePMCArray'
15:19 whiteknight similar for does "hash" on some types
15:22 brrt does is not builtin in winxed, but inline makes it so
15:22 brrt :-)
15:23 * brrt thinks psgi is a bit byzantine
15:26 whiteknight ah, Rosella must have it as one of it's inlines, because I use it often
15:26 whiteknight I can never remember what I add or what is built in to winxed
15:30 brrt adding inlines is easy though :-)
15:30 brrt for that matter
15:31 brrt having all code available is hugely easy in general
15:39 whiteknight yes
15:40 brrt hows closure support in winxed, is it lousy / disadviced, or ok?
15:41 markp joined #parrot
15:53 PacoAir joined #parrot
15:55 whiteknight it's good
15:55 whiteknight it passes the man/boy test easily, and I've done a Y combinator in it before that's quite clean looking
15:56 rurban How about merging iocleanup1 ? Only some pod and assert tests fail. Or do you need windows tests?
15:57 whiteknight rakudo fails some tests still, because of slightly differnet read() semantics
15:57 whiteknight windows tests would be very good. I haven't gotten there yet because I wanted to merge threads first
15:57 whiteknight but I forgot about kid51++'s error reports, so I'm not going to do that
15:59 rurban whiteknight: kid51 said 8 tests between lines 1310 and 1985
15:59 rurban on threads
15:59 whiteknight yeah
15:59 rurban probably not important I guess.
16:00 whiteknight I have to get access to a PPC box and look at it, before moving forward
16:00 dalek nqp/toqast: f80052a | jnthn++ | src/QAST/Compiler.nqp:
16:00 dalek nqp/toqast: s/newclosure/capture_lex/ for consistency with PAST.
16:00 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/f80052aa6c
16:00 dalek nqp/toqast: 7de611e | jnthn++ | src/QAST/ (2 files):
16:00 dalek nqp/toqast: Fix register allocation so that lexicals don't get stomped on.
16:00 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/7de611ec9b
16:00 rurban I started testing those two branches also. I have no PPC, only kid51
16:00 dalek rakudo/toqast: 05a1e61 | jnthn++ | src/QPerl6/Actions.pm:
16:00 dalek rakudo/toqast: Update return handling for QAST.
16:00 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/05a1e61938
16:00 dalek rakudo/toqast: c6c6488 | jnthn++ | src/QPerl6/Actions.pm:
16:00 dalek rakudo/toqast: Stop add_inlining_info blowing up, though really this whole thing goes away soon since we'll be able to serialize bits of QAST.
16:00 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/c6c648801d
16:00 rurban But I'm trying some other esoteric platforms
16:02 whiteknight I haven't tested io_cleanup1 on windows in a while. I will try to do that tonight
16:02 whiteknight you can too, if you have access :)
16:02 whiteknight brb, have to go get lunch
16:03 rurban I have my own windows test box
16:13 jashwanth joined #parrot
16:16 dalek nqp/toqast: 2cb23aa | jnthn++ | src/QAST/Compiler.nqp:
16:16 dalek nqp/toqast: Ensure blocks always end up with a lexinfo.
16:16 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/2cb23aa30b
16:25 fperrad joined #parrot
16:57 benabik ~~
16:58 whiteknight hello benabik
16:59 benabik o/ whiteknight
16:59 benabik How's things?
16:59 whiteknight heh, compared to what you've been going through, I'm doing great
17:00 whiteknight how are you? How's the new person?
17:00 benabik I'm feeling alright, but that's partially because my wife kept saying "Go back to sleep" before I was fully awake.  Have to break her of that habit.
17:00 benabik He's doing fine.  Much less like a banana and gaining weight despite feeding difficulties.
17:01 moritz if she's breast-feeding him, there's not too much you can do :-)
17:01 benabik I can change him and bottle feed him instead of having her fuss over it for an hour.
17:03 moritz well, not all children like the mixture of breast and bottle feeding
17:03 benabik Better than him not eating.  :-/
17:04 benabik But we just saw the pediatrician and he's healthy, so less complaints.  :-)
17:04 moritz aye
17:04 moritz if he gains weight, (nearlly) all is fine
17:05 benabik Gained more than an ounce since discharge yesterday, so can't be too bad.  :-D
17:12 dalek nqp/toqast: ad562d8 | jnthn++ | src/QAST/Operations.nqp:
17:12 dalek nqp/toqast: Implement op xor (which has the semantics of xor_nqp).
17:12 dalek nqp/toqast: review: https://github.com/perl6/nqp/commit/ad562d8a09
17:13 dalek rakudo/toqast: 2ce8e79 | jnthn++ | src/QPerl6/Grammar.pm:
17:13 dalek rakudo/toqast: xor_nqp => xor; now down to 2 failing test files in 00-parrot and 3 in 01-sanity.
17:13 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/2ce8e795b3
17:15 whiteknight benabik: we had a lot of trouble feeding ours the first few days. But the rule never changes: If they get hungry enough, they will eat
17:35 lucian joined #parrot
17:40 dalek rakudo/toqast: 3dd5f6f | jnthn++ | src/QPerl6/Actions.pm:
17:40 dalek rakudo/toqast: Eliminate a usage of viviself.
17:40 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/3dd5f6f91c
17:40 dalek rakudo/toqast: a466813 | jnthn++ | src/QPerl6/ (2 files):
17:40 dalek rakudo/toqast: Start fixing package lookups a bit. Gets us one more test passing again.
17:40 dalek rakudo/toqast: review: https://github.com/rakudo/rakudo/commit/a4668139cd
17:53 sorear aloha: source
17:54 sorear does anyone here know where aloha's source is?
17:54 PerlJam joined #parrot
18:01 dalek rakudo/nom: c24da0b | pmichaud++ | src/core/Str.pm:
18:01 dalek rakudo/nom: Improve the negative start/length failure messages for substr.
18:01 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/c24da0b30e
18:01 pmichaud it still bugs me that substr calls that last argument "length".  :-)
18:02 pmichaud (in S32)
18:02 pmichaud afk, lunch
18:18 contingencyplan joined #parrot
18:43 benabik aloha: aloha?
18:43 aloha benabik: aloha is simple Bot::BasicBot::Pluggable hosted on https://github.com/bacek/aloha
18:43 benabik sorear: ^^
18:45 sorear thanks
19:39 rurban whiteknight: io_cleanup1 fails on solaris with cc: "src/io/api.c", line 1923: void function cannot return value
19:58 whiteknight joined #parrot
20:00 whiteknight good afternoon, #parrot
20:00 rurban whiteknight: What about the unused io_userhandle vtable functions?
20:00 whiteknight which ones are unused?
20:01 rurban all
20:01 whiteknight oh, the userhandle ones. Sorry
20:01 whiteknight yeah, that's not implemented yet
20:01 rurban in your io_cleanup1 branch
20:01 whiteknight it's a stub for later work
20:01 rurban Ok, I fixed the t/codingstd/c_arg_assert.t to skip those tests
20:01 rurban Is there a ticket?
20:02 whiteknight no
20:03 rurban It's GH #796 now
20:04 rurban I don't have write access to parrot on github btw. yet
20:04 rurban So I'll do pull requests
20:04 whiteknight why not? Do you want it?
20:04 rurban Sure
20:05 whiteknight done
20:06 rurban thanks. This is easier now
20:07 whiteknight much easier
20:07 dalek parrot/whiteknight/io_cleanup1: 9c08d45 | rurban++ | src/io/api.c:
20:07 dalek parrot/whiteknight/io_cleanup1: sun cc detected: "src/io/api.c", line 1923: void function cannot return value
20:07 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/9c08d450fe
20:07 dalek parrot/whiteknight/io_cleanup1: 065b5a2 | rurban++ | t/codingstd/c_arg_assert.t:
20:07 dalek parrot/whiteknight/io_cleanup1: skip yet unused io_userhandle vtable functions [GH #796]
20:07 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/065b5a2ee0
20:08 whiteknight I used to have an opensolaris VM I used for testing, but I haven't been able to find a version I liked since the oracle merger
20:08 whiteknight so I haven't used suncc in two years now
20:08 rurban I am happily using sun cc and gcc on an opensolaris 10 vm
20:09 rurban But it was pretty hard to find the best release. I hated solaris 11
20:09 benabik ...  Happy?  Sun CC?  These concepts do not go together in my head.
20:10 rurban CC (their c++ compiler) is still too tricky to use for me.
20:10 rurban I am happy if cc finds bugs gcc does not find
20:10 rurban even clang not
20:11 rurban But the HPUX linker is still the weirdest. Tux uses that.
20:11 rurban io_cleanup1 looks mergable to me now
20:14 rurban threads needs lib/Parrot/Pmc2c/Attribute.pm usage to be fixed
20:18 dalek rakudo/nom: 3e00089 | pmichaud++ | src/core/Parameter.pm:
20:18 dalek rakudo/nom: Fix .positional for capture parameters in signatures.  masak++
20:18 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/3e00089519
20:31 whiteknight rurban++ Thanks!
20:31 whiteknight There's still an issue with Rakudo failing some spectests on that branch, because of the different read() semantics
20:31 whiteknight so I need to figure out if we can patch Rakudo or if we need to revert the semantics in the  branch
20:31 rurban I think moritz fixed some rakudo issues on iocleanup1 today
20:32 whiteknight I think I can move back to the old semantis WITHOUT bringing back all the ugly code
20:32 whiteknight doesn't look like any commits to that branch recently
20:33 rurban yeah, old. https://github.com/rakudo/rak​udo/commits/parrot-iocleanup1
20:34 rurban but iocleanup1 still looks much easier to merge than threads.
20:34 rurban We need a threads merge volunteer because time is running out.
20:38 whiteknight why is time running out?
20:38 rurban Because I want to have it in 4.6
20:38 moritz rurban: I don't think I did
20:39 whiteknight moritz!
20:39 moritz yes, that's me :-)
20:39 whiteknight moritz: What do you want to do with the io_cleanup1 branch? Do you want me to change read() back to the old semantics? Or can we try to patch Rakudo to use the new behavior?
20:39 rurban moritz: sorry. I mixed it up
20:39 whiteknight I really don't know what the synopses require, if they have a stance on it at all
20:39 moritz whiteknight: well, first of all I want sockets fixed
20:40 whiteknight moritz: I think the last remaining sockets failures are because of the read differences
20:40 whiteknight I think I've fixed the encoding problems
20:40 moritz whiteknight: when?
20:40 whiteknight either that, or I'm reading the test output wrong
20:40 moritz whiteknight: 'cause last time I tried (after you said you fixed the soeckts), I still got the weird error message about ASCII stuff
20:41 whiteknight let me check again
20:41 whiteknight I'm going to rebuild everything now and try the test again
20:41 whiteknight maybe I'm going crazy
20:41 moritz I don't know what the current state of read is
20:42 moritz but I'm fine with read_bytes($n) returning $n bytes, and read($n) returning $n characters
20:42 whiteknight okay
20:42 whiteknight read_bytes($n) returns $n bytes exactly in a ByteBuffer, while read($n) returns $n characters?
20:43 moritz yes (unless it might make sense to return fewer bytes/characters in some situations; I'm not sure what the best practise is)
20:44 whiteknight yeah, they return up to $n bytes/characters
20:44 whiteknight fewer if there are fewer to be had
20:44 moritz then that's fine with me
20:44 whiteknight okay, great
20:45 sorear note though that "fewer to be had" can be a transient condition
20:45 whiteknight of course
20:45 sorear generally on Unix, a socket read will return when there is at least one byte in the kernel socket buffer
20:45 whiteknight yes, that semantic was a source of much....tweaking
20:46 sorear I happen to be a great fan of that
20:47 moritz it's easier to emulate the other behaviour (gathering more bytes in a buffer) than the other way round
20:47 whiteknight the problem with that is if you do a recv and there's nothing in the buffer and noting on the way, you can hang
20:49 sorear does aloha still do tickets?
20:51 dalek nqp: 8062b32 | pmichaud++ | src/QRegex/Cursor.nqp:
20:51 dalek nqp: [qregex] Add !cursor_more, a preliminary method for handling :g, :ov, :ex.
20:51 dalek nqp: review: https://github.com/perl6/nqp/commit/8062b3239a
20:51 dalek nqp: 052b7a1 | pmichaud++ | src/pmc/qrpa.pmc:
20:51 dalek nqp: [qrpa]  Fix exception message for shift from empty array (jnthn++).
20:51 dalek nqp: review: https://github.com/perl6/nqp/commit/052b7a17c9
20:51 whiteknight I think it was dalek doing the tickets, and I don't know
20:52 sorear looks like there's no ticket handling at the moment
20:52 sorear so much for pulling aloha source to look for code I could copy into dalek!
20:52 rurban whiteknight: Thanks for the threads cleanup. Testing this now
20:53 rurban t/pmc/alarm.t hangs on cygwin
20:55 whiteknight okay, that's news to me
20:55 rurban it hangs in WaitForSingleObjectEx()
20:55 whiteknight I should really record all these reports
20:55 rurban I should really parrotbug them.
20:55 whiteknight hmm.. I wonder if the threading code is misidentifying cygwin as being regular windows
20:56 whiteknight rurban: yes please!
20:56 rurban It hang only in the last alarm test. I'll check it out.
20:56 rurban This is on master, not threads
20:57 whiteknight oh
20:57 whiteknight master has alarms tests?
20:59 rurban apparently. The last "Alarm/sleep interaction" test
21:00 whiteknight weird
21:00 whiteknight alarms and sleep are both arguably broken in master, so I guess I'm not surprised
21:01 whiteknight arguably, they always have been (but sometimes they don't break the tests)
21:05 moritz whiteknight: oh, the socket tests really have improved
21:05 moritz now "just" 10 of them fail
21:09 moritz I think a recv_bytes or so would allow me to restore the old behavior
21:09 moritz but I'm not certain that that's what we want
21:09 moritz I'll have to check with the #perl6 folks
21:09 moritz but now, sleep &
21:10 rurban http://smolder.parrot.org/app/​projects/report_details/30024 is the failing cywgin test on master
21:11 rurban There's is also no windows test at all for this on smolder
21:17 rurban http://smolder.parrot.org/app/​projects/report_details/30025 catches an io_cleanup1 error on solaris in t/pmc/filehandle.t
21:18 rurban not ok 2 - $I0 = $P0.buffer_size() # get buffer size
21:25 whiteknight moritz: yay! I'm not crazy!
21:25 whiteknight at least, not completely. And not today
21:25 whiteknight msg moritz: Just tell me whatever Rakudo wants from the io_cleanup1 branch and I'll make it happen
21:25 aloha OK. I'll deliver the message.
21:40 * rurban going home
22:25 markp joined #parrot
22:31 dalek nqp: 7995664 | pmichaud++ | src/ops/nqp.ops:
22:31 dalek nqp: Clean up some gcc compiler warnings.
22:31 dalek nqp: review: https://github.com/perl6/nqp/commit/7995664736
22:31 dalek nqp: eb7f09e | pmichaud++ | src/6model/ (4 files):
22:31 dalek nqp: More compiler warning cleanups.
22:31 dalek nqp: review: https://github.com/perl6/nqp/commit/eb7f09e0fb
22:31 dalek nqp: 28f89ef | pmichaud++ | src/6model/base64.c:
22:31 dalek nqp: More casting and code cleanup.
22:31 dalek nqp: review: https://github.com/perl6/nqp/commit/28f89ef3ff
22:39 lucian joined #parrot
22:50 perlite joined #parrot
23:36 kid51 joined #parrot

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

Parrot | source cross referenced