Camelia, the Perl 6 bug

IRC log for #parrot, 2012-05-28

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:14 dalek parrot: 6b46960 | jkeenan++ | config/gen/makefiles/root.in:
00:14 dalek parrot: Add to test-clean target *.pbc files created under t/compilers/imcc/reg/.
00:14 dalek parrot: review: https://github.com/parrot/parrot/commit/6b46960a6a
00:14 dalek parrot: 6c22780 | jkeenan++ | config/gen/makefiles/root.in:
00:14 dalek parrot: Add files to test-clean or prog-clean targets.
00:14 dalek parrot: review: https://github.com/parrot/parrot/commit/6c22780a1a
01:51 dalek parrot/whiteknight/io_cleanup1: 9ce3625 | Whiteknight++ | / (7 files):
01:51 dalek parrot/whiteknight/io_cleanup1: Several cleanups and codestd. Remove a few unnecessary entries from the io vtable. Improved implementations of readline, peek and a few other things.
01:51 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/9ce3625724
01:51 dalek parrot/whiteknight/io_cleanup1: 8ec293c | Whiteknight++ | src/ (11 files):
01:51 dalek parrot/whiteknight/io_cleanup1: Start cleaning up sockets. Move API routines from src/io/socket.c to src/io/api.c. Rename them. Implement most socket IO_VTABLE routines. Rename functions in src/platform/xxx/socket.c to Parrot_io_internal_ to match conventions. Implement the new get_pointer_keyed_int and set_pointer_keyed_int vtables for most handle types
01:51 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/8ec293c093
01:51 whiteknight Cleaning up this much funk is exhausting
01:53 whiteknight ...off to bed
03:05 Coke aloha: tell whiteknight you closed http://trac.parrot.org/parrot/ticket/783 as a wishlist, but it's causing the memory leak in https://rt.perl.org/rt3/Ti​cket/Display.html?id=77644
03:05 Coke aloha: mgs whiteknight you closed http://trac.parrot.org/parrot/ticket/783 as a wishlist, but it's causing the memory leak in https://rt.perl.org/rt3/Ti​cket/Display.html?id=77644
03:05 Coke aloha: msg whiteknight you closed http://trac.parrot.org/parrot/ticket/783 as a wishlist, but it's causing the memory leak in https://rt.perl.org/rt3/Ti​cket/Display.html?id=77644
03:05 aloha Coke: OK. I'll deliver the message.
03:36 kurahaupo joined #parrot
04:00 kurahaupo joined #parrot
04:27 kurahaupo joined #parrot
06:27 dalek rakudo/nom: d0b9784 | moritz++ | src/core/ (2 files):
06:27 dalek rakudo/nom: typed exception for unsupported inheritance
06:27 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/d0b9784489
06:37 kjs joined #parrot
07:15 cotto hio kjs
07:15 brrt joined #parrot
07:16 cotto and he's gone
07:16 cotto like the wind
07:33 brrt left #parrot
07:42 lucian joined #parrot
07:52 kjs joined #parrot
07:52 dalek rakudo/nom: 3029a84 | moritz++ | src/core/ (2 files):
07:52 dalek rakudo/nom: typed exception for "is export" name clash
07:52 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/3029a848c5
08:20 dalek rakudo/nom: 197e0bd | moritz++ | src/core/ (2 files):
08:20 dalek rakudo/nom: typed exception when non-dwimmy hyperop has lists of unequal length
08:20 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/197e0bd857
08:23 lucian_ joined #parrot
08:30 brrt joined #parrot
08:42 dalek nqp: db80a11 | diakopter++ | src/QRegex/ (2 files):
08:42 dalek nqp: get %/%% working for real this time. all nqp and rakudo spectests pass. extremely ugly code. terrible, even. but there is a lot of unexpected behavior here that I can't explain if I change little things here and there, attepmting to optimize. This ugly hot mess is the best I can do safely. apologies.
08:42 dalek nqp: review: https://github.com/perl6/nqp/commit/db80a11591
08:42 dalek nqp: 2aee15e | diakopter++ | src/QRegex/ (2 files):
08:42 dalek nqp: Merge branch 'nfaquant'
08:42 dalek nqp: review: https://github.com/perl6/nqp/commit/2aee15e4c1
09:12 dalek mod_parrot: b19cbbf | (Bart Wiegmans)++ | mod_parrot (2 files):
09:12 dalek mod_parrot: Fixed CGI names for HTTP headers
09:12 dalek mod_parrot: review: https://github.com/bdw/mod​_parrot/commit/b19cbbf7a7
09:16 brrt joined #parrot
09:32 schm00ster joined #parrot
10:03 dalek m1: 382e010 | (kj, kjs)++ | m1_gencode.c:
10:03 dalek m1: implement == operator
10:03 dalek m1: review: https://github.com/parrot/m1/commit/382e010876
10:03 dalek m1: eb50e33 | (kj, kjs)++ | eq.m1:
10:03 dalek m1: add test for == operator
10:03 dalek m1: review: https://github.com/parrot/m1/commit/eb50e33db4
10:07 dalek m1: eacb4f5 | (kj, kjs)++ | / (2 files):
10:07 dalek m1: implement != operator and add test for this
10:07 dalek m1: review: https://github.com/parrot/m1/commit/eacb4f56df
10:10 crab2313 joined #parrot
10:16 dalek m1: 73135e1 | (kj, kjs)++ | / (2 files):
10:16 dalek m1: refactor code just checked in, update TODO
10:16 dalek m1: review: https://github.com/parrot/m1/commit/73135e1f2d
10:43 whiteknight joined #parrot
10:48 dalek m1: 68879ea | (kj, kjs)++ | m1. (2 files):
10:48 dalek m1: add other assignops
10:48 dalek m1: review: https://github.com/parrot/m1/commit/68879eaf7b
10:50 JimmyZ joined #parrot
11:05 whiteknight good morning, #parrot
11:06 JimmyZ_ joined #parrot
11:10 dalek m1: 7ceda91 | (kj, kjs)++ | m1_gencode.c:
11:10 dalek m1: fix problem with ++/--
11:10 dalek m1: review: https://github.com/parrot/m1/commit/7ceda91290
11:12 dalek m1: c852133 | (kj, kjs)++ | / (2 files):
11:12 dalek m1: update todo and remove unnecessary code
11:12 dalek m1: review: https://github.com/parrot/m1/commit/c852133a98
11:22 dalek m1: 7b30981 | (kj, kjs)++ | TODO.txt:
11:22 dalek m1: add a how to help section to TODO
11:22 dalek m1: review: https://github.com/parrot/m1/commit/7b30981493
11:34 JimmyZ http://blog.fallingsnow.net/2008​/05/23/simple-vm-jit-with-llvm/    # this code is very like the m0 :P
11:59 dalek parrot/whiteknight/io_cleanup1: 2dbddd8 | Whiteknight++ | src/ (6 files):
11:59 dalek parrot/whiteknight/io_cleanup1: Add a mark routine for buffers, since they may hold a PMC reference. Start updating PMCs to use the new API calls in a standard way instead of implementing things themselves. Fill in the StringHandle vtable with existing logic and new never-before-supported operations.
11:59 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/2dbddd848f
12:08 crab2313 joined #parrot
12:20 kjs joined #parrot
12:25 kjs JimmyZ++ # thanks for link
12:25 kjs That seems like an excellent idea to do for M0!
12:26 JimmyZ kjs :P
12:27 kjs I'd be very interested in getting that running for M0.
12:28 JimmyZ that's a good step
12:28 JimmyZ at least a good prototype
12:29 kjs M0's interpreter in C is fairly straightforward, and as you said looks a bit like this example in the article. Might be worthwhile to investigate.
12:30 JimmyZ aye
12:35 woosley joined #parrot
12:35 woosley left #parrot
12:36 eternaleye joined #parrot
12:46 crab2313 joined #parrot
12:56 PacoAir joined #parrot
13:00 kjs I found that it was difficult to find libjit that actually compiles on mac. This is a link to an article that explains how to d/l and build, works for mac.
13:00 kjs http://www.google.com/url?sa=t&rct=j&amp​;q=&esrc=s&source=web&cd=2&v​ed=0CFMQFjAB&url=http%3A%2F%2Fwww.cs.ari​zona.edu%2F~collberg%2FTeaching%2F553%2F2011​%2FAssignments%2FAss3.ps&ei=mnTDT-TdI4m3​hAey0_TsCQ&usg=AFQjCNGD3Qz-QpcItWhxfsYfg​sgASnoNQw&sig2=H4yG1Ra4hgh_D-43mku20w
13:00 kjs (for those who's interested)
13:07 Psyche^ joined #parrot
13:11 JimmyZ well, libjit seems latest version is 2008 ?
13:14 kjs yeah but if it still works
13:14 kjs might be useful to try both llvm and libjit and compare
13:18 JimmyZ what's what most people want, I think
13:19 JimmyZ *that's
13:19 brrt joined #parrot
13:32 not_gerd joined #parrot
13:32 not_gerd kjs: libjit is maintained by Aleksey Demakov: http://demakov.com/projects/
13:35 kjs not_gerd: thakns for pointer. seems libjit is still at v 0.1.2
13:36 not_gerd kjs: last I tried, the git version was +
13:36 kjs + means good? :-)
13:36 not_gerd reasonably stable
13:36 not_gerd no, mistype ;)
13:36 kjs that doesnt sound _very_ convincing for a production system...
13:37 JimmyZ joined #parrot
13:38 crab2313_ joined #parrot
13:39 not_gerd kjs: afaik Aleksey just publishes the changes he made while using it in production
13:40 kid51 joined #parrot
13:40 kjs not_gerd: it seems to be used by some people alright. I think it would be good to try to use it for M0
13:40 dalek mod_parrot: a97b976 | (Bart Wiegmans)++ | mod_parrot_run.c:
13:40 dalek mod_parrot: Add network parameters to script options
13:40 dalek mod_parrot: review: https://github.com/bdw/mod​_parrot/commit/a97b97660b
13:40 kjs ... so we can see how much performance will improve.
13:40 brrt also, i should figure out how to make dalek believe it is my nick, i want my pluspluses :-p
13:41 brrt karma Bart Wiegmans
13:41 kjs I'm missing out on all of them! :-(
13:41 aloha Bart Wiegmans has karma of 0.
13:41 brrt kjs, do you need setup infomration?
13:41 brrt i have it somewhere
13:41 kid51 karma kid51
13:41 aloha kid51 has karma of 98.
13:41 kid51 karma jkeenan
13:41 aloha jkeenan has karma of 668.
13:41 kid51 Split personality
13:42 brrt karma whiteknight
13:42 aloha whiteknight has karma of 2707.
13:42 brrt karma moritz
13:42 aloha moritz has karma of 3185.
13:42 brrt wow
13:42 not_gerd kjs: I'm planning to port the M0 C interpreter to LLVM IR once it has stabilized
13:42 not_gerd you can't really write fast interpreters in C, but thanks to blockaddress and indirectbr, you can in LLVM IR
13:42 not_gerd proof of concept: https://github.com/gerdr/x3
13:42 kjs not_gerd: it's stable, it's stable! :-)
13:43 whiteknight karma brrt
13:43 aloha brrt has karma of 7.
13:43 kjs not_gerd: awesome, btw, looking forward to it
13:43 kjs brrt: setup information?
13:43 whiteknight brrt: dalek reads the CREDITS file and should automatically convert commit pluspluses under that name to your nickname
13:43 kjs whiteknight: ah, I'll change the credits file so
13:44 not_gerd btw, you also need different ops for signed and unsigned integer div and mod
13:44 whiteknight kjs: it's an inexact science
13:44 not_gerd that's missing from both M0 spec and implementation
13:45 kjs not_gerd: ok. well those details are kindof beyond my expertise, though I suppose I should add the "unsigned" keyword to M1 :-)
13:45 * JimmyZ still wants typed regeisters
13:45 JimmyZ registers
13:45 not_gerd kjs: in two's complement, most integer ops are identical for signed and unsigned - however, anything which depends on division is not
13:46 kjs not_gerd: ah ok. btw; there was a link earlier to an example of using llvm. you might be interested in that
13:46 JimmyZ http://blog.fallingsnow.net/2008​/05/23/simple-vm-jit-with-llvm/
13:47 dalek parrot: a9b7258 | jkeenan++ | CREDITS:
13:47 dalek parrot: Add an alias.
13:47 dalek parrot: review: https://github.com/parrot/parrot/commit/a9b72583fd
13:47 not_gerd kjs, JimmyZ: I saw the link in the log
13:47 kid51 Let's see if this works.
13:47 kid51 karma jkeenan
13:47 aloha jkeenan has karma of 668.
13:47 kid51 karma kid51
13:47 aloha kid51 has karma of 98.
13:48 kid51 Doesn't seem to have made a difference.
13:48 not_gerd the planning to do an actual interpreter first, though (ie there's still be a runloop)
13:48 brrt i see
13:48 brrt (from whiteknights comments)
13:48 not_gerd s/^the/I'm7
13:48 brrt i think the (initial) c part is shaping up nicely enough
13:48 kjs the C impl of M0 is there..
13:48 * not_gerd lots of typing fail today
13:49 kjs that seems to be quite clean code.
13:49 brrt but still a lot to do
13:49 kid51 I didn't really expect dalek to pick up on that; after all, the string 'whiteknight' does not occur in the CREDITS
13:49 brrt configuration, for one thing, needs to be thought out
13:49 whiteknight kid51: All I know is the theory, not the reality
13:49 JimmyZ and there was a m0 debuger:  https://github.com/nbrown/parrot/tree/m0-debugger
13:49 whiteknight I think dalek is case-insensitive
13:50 JimmyZ kjs: you may like it
13:50 kjs not_gerd: do you think you can start with the C impl of M0?
13:50 kjs JimmyZ: does it work? :-)
13:51 not_gerd_ joined #parrot
13:51 JimmyZ kjs: yep, for simply debug
13:55 not_gerd joined #parrot
13:57 not_gerd joined #parrot
13:57 not_gerd kjs: porting it to LLVM IR or implementing the missing bits?
13:57 kjs not_gerd: porting
13:57 kjs not sure if there's many bits missing...
13:59 kjs I'd say there might be a few things that are missing, but implementing those would be straightforward I think. Once the majority of ops can be implemented on llvm, basically get things running, then it's easy to make complete, i expect.
14:01 not_gerd kjs: I could start a port, yes
14:02 kjs I believe going depth-first with this system would give good insights into the feasibility
14:02 dalek Heuristic branch merge: pushed 23 commits to parrot/m0-debugger by zhuomingliang
14:03 kjs so if we have an interpreter M0, a JIT for M0, and a HLL M1 that compiles down to M0, we have a basic infrastructure that could be tested and optimized.
14:07 dalek m1: 567a434 | (kj, kjs)++ | m1. (2 files):
14:07 dalek m1: add unsigned keyword in anticipation of a JIT
14:07 dalek m1: review: https://github.com/parrot/m1/commit/567a43482d
14:13 bluescreen joined #parrot
14:22 not_gerd is there a reason why the segment structures aren't flattened into the chunk structure in m0_mob_structures.h
14:24 kjs I believe cotto++ worked on M0. I have little knowledge of that.
14:25 not_gerd git blames chromatic
14:26 not_gerd it's not really important, but I just wondered if there's a need for all these seperate allocations
14:28 JimmyZ joined #parrot
14:28 kjs no idea. I would expect that at some point the memory allocation bits would be improved anyway. Currently, gc_alloc op is an alias for malloc.
14:40 dalek mod_bart: 3bd2b3b | (Bart Wiegmans)++ | / (4 files):
14:40 dalek mod_bart: Compiler API example (winxed)
14:40 dalek mod_bart: review: https://github.com/bdw/mod_bart/commit/3bd2b3b902
14:40 brrt left #parrot
15:11 benabik joined #parrot
15:18 Hunger joined #parrot
15:28 dalek winxed: 94ebe06 | NotFound++ | winxedst (2 files):
15:28 dalek winxed: fix nargs usage in builtin substr const evaluation
15:28 dalek winxed: (it was working anyway because of array evaluated as int)
15:28 dalek winxed: review: https://github.com/NotFoun​d/winxed/commit/94ebe0610f
15:28 dalek winxed: c1241c1 | NotFound++ | winxedst1.winxed:
15:28 dalek winxed: delete remaining of float literals in stage 1
15:28 dalek winxed: review: https://github.com/NotFoun​d/winxed/commit/c1241c1d0b
15:28 dalek winxed: d3fa0b7 | NotFound++ | winxedst1.winxed:
15:28 dalek winxed: drop optimization in Ifstatement.emit from stage 1
15:28 dalek winxed: review: https://github.com/NotFoun​d/winxed/commit/d3fa0b7353
15:32 dalek parrot: 94629c3 | benabik++ | src/pmc/key.pmc:
15:32 dalek parrot: Key: Add method to introspect type of value
15:32 dalek parrot:
15:32 dalek parrot: Returns an integer based on PCC's type flags.  I'd rather not expose
15:32 dalek parrot: Key's flag values to the outside world, so let's rely on values
15:32 dalek parrot: already exposed for simplicity/consistency.
15:32 dalek parrot: review: https://github.com/parrot/parrot/commit/94629c3c7a
15:32 dalek PACT: b5b757b | benabik++ | src/disasm.winxed:
15:32 dalek PACT: Use call_bits.pasm, not hand-rolled constants
15:32 dalek PACT: review: https://github.com/parrot/PACT/commit/b5b757b597
15:32 dalek PACT: 1e6d6ac | benabik++ | src/disasm.winxed:
15:32 dalek PACT: Use new key methods to introspect keys
15:32 dalek PACT:
15:32 dalek PACT: Now we can actually display keys instead of just giving up.
15:32 dalek PACT: whiteknight++
15:32 dalek PACT: review: https://github.com/parrot/PACT/commit/1e6d6ac8c6
15:40 dalek parrot/whiteknight/io_cleanup1: 171d85d | Whiteknight++ | / (15 files):
15:40 dalek parrot/whiteknight/io_cleanup1: Update Makefile, MANIFEST. Several fixes so that we can run headerizer, then I ran it.
15:40 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/171d85d738
15:40 dalek parrot/whiteknight/io_cleanup1: 2599900 | Whiteknight++ | / (4 files):
15:40 dalek parrot/whiteknight/io_cleanup1: fix headerization. Headerizer behaves very badly in the presence of C++-style comments so remove some of those and replace them with the much more verbose and padded Parrot-style comments.
15:40 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/2599900ac4
15:40 dalek parrot/whiteknight/io_cleanup1: b22b7d7 | Whiteknight++ | / (7 files):
15:40 dalek parrot/whiteknight/io_cleanup1: Several fixes. Add a new API method to easily set up buffering on an existing handle.
15:40 dalek parrot/whiteknight/io_cleanup1: review: https://github.com/parrot/parrot/commit/b22b7d78e2
15:40 whiteknight benabik: Did those key methods work for you? I haven't really tested them at all
15:43 whiteknight actually, no time to hear the answer, have to go!
15:50 crab2313 joined #parrot
15:51 dalek m1: 9d67918 | (kj, kjs)++ | CREDITS:
15:51 dalek m1: update nick in credits file
15:51 dalek m1: review: https://github.com/parrot/m1/commit/9d67918f0c
15:53 JimmyZ kjs: I think you want to update this one: https://github.com/parrot/​parrot/blob/master/CREDITS
15:53 kjs JimmyZ: I don't have commit access I think to that one. not sure
15:55 JimmyZ kjs: you have
15:56 kjs i tried to git push the change
15:56 kjs but didn't work
15:57 JimmyZ kjs: you may clone the readonly  url
15:57 JimmyZ kjs: right one is git@github.com:parrot/parrot.git
15:58 kjs it says: You can't push to git://github.com/parrot/parrot.git
15:58 kjs Use git@github.com:parrot/parrot.git
15:58 JimmyZ kjs: git://github.com/parrot/parrot.git is readonly url
15:59 kjs ok. what should i type or do to commit?
15:59 kurahaupo joined #parrot
15:59 JimmyZ git remote add origin git@github.com:parrot/parrot.git
16:00 JimmyZ to replace the readonly one
16:00 kjs remote origin already exists.
16:02 JimmyZ try git remote rm origin first :)
16:03 kjs ok that works. thanks!
16:03 * JimmyZ sleeps
16:19 cotto kjs, would you be happy with adding isgt and isge to the m0 spec?
16:20 kjs cotto: yes can do
16:20 kjs do you want me to add it?
16:20 cotto let's go with that then.  It doesn't matter.  I have a few minutes.
16:21 kjs cool thanks. it solves a small piece in the M1 puzzle
16:22 kjs I believe not_gerd indicated interest in doing llvm port of M0, once it's stable
16:28 cotto I saw that.  not_gerd++
16:31 dalek parrot/m0: 44c0b79 | cotto++ | / (2 files):
16:31 dalek parrot/m0: add some comparison ops to the spec (no implementations or tests yet)
16:31 dalek parrot/m0: review: https://github.com/parrot/parrot/commit/44c0b79f7b
16:31 kurahaupo joined #parrot
16:31 cotto kjs++ for agitating about those
16:32 kjs cotto++ for taking timely action :-)
16:37 cotto are you interested in adding an implementation and some tests?
16:38 kjs I'm coding it into M1 as we speak
16:38 cotto it won'
16:39 cotto t do much good until one of the m0 implementations supports it
16:39 kjs for the M0 C code, I can give it a try once I have a bit more time
16:40 kjs (leaving in a bit)
16:44 not_gerd joined #parrot
16:45 cotto apparently I haven't run m0 since upgrading to 12.04 a few days ago
16:45 not_gerd cotto: are m0 callframes variably-sized?
16:45 not_gerd if so, the config value CFGCFSZ doesn't make much sense
16:45 * not_gerd reading m0 spec
16:46 cotto I'd like to make it possible, since they'll usually not need all 255 registers
16:47 kjs cotto:  I suppose I should do a proper review of the spec, but one thing , before I forget it again, is that i was wondering about the "types" of regs (I, N, S, P), if in fact they can be all used alike.
16:48 kjs if you can store ints in S registers, why have the types as all, as you may run out of I register ,and then spill those, whereas you might as well use S regs as well.
16:48 not_gerd as I understand it, the register types are just by convention (ie syntactic sugar of the assembler)
16:50 not_gerd that doesn't play well with variably-sized callframes though - it might a good idea to annotate callframe allocations with the number of INSP registers so you could have custom mappings
16:58 dalek parrot/m0: a2cb0ea | cotto++ | / (6 files):
16:58 dalek parrot/m0: add untested implementations of the comparison ops to c-m0 and p5-m0
16:58 dalek parrot/m0: review: https://github.com/parrot/parrot/commit/a2cb0ea474
16:59 dalek m1: d17445f | (kj, kjs)++ | m1_gencode.c:
16:59 dalek m1: first bits of lt, gt, etc. ops. needs more work
16:59 dalek m1: review: https://github.com/parrot/m1/commit/d17445f4e4
18:13 bluescreen joined #parrot
18:22 bacek_at_work joined #parrot
18:27 aloha joined #parrot
18:39 benabik joined #parrot
18:41 benabik ~~
19:22 lucian joined #parrot
19:30 pjcj joined #parrot
19:50 isBEKaml joined #parrot
20:24 isBEKaml joined #parrot
20:47 dalek nqp: 6aef784 | diakopter++ | src/QRegex/NFA.nqp:
20:47 dalek nqp: implement NFA builder for ranged quantifiers. npq/rakudo spectest all green.
20:47 dalek nqp: review: https://github.com/perl6/nqp/commit/6aef784aed
21:39 dngor joined #parrot
23:01 kid51 joined #parrot
23:16 whiteknight joined #parrot
23:33 whiteknight good evening, #parrot
23:43 kurahaupo joined #parrot
23:44 sorear hello, whiteknight.
23:44 whiteknight hello sorear
23:54 whiteknight sorear: I hadn't realized it, but I wasn't following you or Niecza on github until yesterday. I didn't realize what I was missing!
23:55 whiteknight I don't normally give the feed of changes more than a quick glance, but I still want to follow along with such important projects

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

Parrot | source cross referenced