Camelia, the Perl 6 bug

IRC log for #parrot, 2011-09-29

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:53 ilbot2 joined #parrot
00:53 Topic for #parrot is now Parrot 3.8.0 "Magrathea" | http://parrot.org | Log: http://irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
00:53 slavorgn joined #parrot
00:56 Psyche^ joined #parrot
00:56 tewk_ joined #parrot
00:57 dalek rakudo/optimizer: 74e8d35 | jnthn++ | src/Perl6/Actions.pm:
00:57 dalek rakudo/optimizer: Handle natively typed variables in inlinability analysis.
00:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/74e8d35f35
00:57 dalek rakudo/optimizer: b4ecf53 | jnthn++ | src/binder/multidispatch.c:
00:57 dalek rakudo/optimizer: Couple of fixes to native types in multi-dispatch; one in narrowness compuation, another in compile time analysis.
00:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/b4ecf537fa
00:57 dalek rakudo/optimizer: 7d26339 | jnthn++ | src/core/Int.pm:
00:57 dalek rakudo/optimizer: Stub in first couple of native operators.
00:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/7d26339432
00:57 dalek rakudo/optimizer: 074021d | jnthn++ | src/Perl6/Optimizer.pm:
00:57 dalek rakudo/optimizer: A crack at enabling inlining in the simple case of chaining operators, though something seems slightly adrift here. At this point, we can now inline the couple of native operators that have been added to the setting. There's various issues, various test regressions, but not crazily many.
00:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/074021dfcb
00:59 autark joined #parrot
01:00 slavorg joined #parrot
01:11 particle joined #parrot
01:18 benabik joined #parrot
01:30 alester joined #parrot
01:34 particle joined #parrot
01:55 cotto ~~
02:01 particle joined #parrot
02:02 jsut_ joined #parrot
02:13 AzureStone joined #parrot
02:21 woosley joined #parrot
02:58 dalek joined #parrot
03:07 dalek joined #parrot
03:21 rfw joined #parrot
04:18 particle joined #parrot
04:23 contingencyplan joined #parrot
04:50 preflex joined #parrot
05:08 preflex_ joined #parrot
06:39 nine Good morning #parrot
06:46 cotto hi nine
07:20 nine After DLL hell and dependecy hell, parrot now brings: bootstrap hell
07:42 mj41 joined #parrot
07:46 nine Funny: it seems like kill_threads is actually the smallest problem for green_threads. Things like the new embedding interface or splitting arguments into sysargs and progargs make my life much more difficult
08:19 lucian joined #parrot
08:30 jsut_ joined #parrot
08:40 mj41 joined #parrot
09:19 mj41 joined #parrot
09:38 mj41 joined #parrot
09:41 woosley left #parrot
09:53 nine Ok, how am I supposed to create a FixedPMCArray with the new embedding API?
09:55 schmooster joined #parrot
09:58 tadzik nine: you may want to read through the PL/Perl6 project, it's about embedding Parrot in PostgreSQL
10:02 nine tadzik: plparrot seems to use the old and supposedly deprecated embedding API. At least that's what I see in https://raw.github.com/leto​/plparrot/master/plparrot.c
10:03 tadzik oh, ok
10:03 tadzik well, I'd look for tests then. dukeleto had a grant some time ago to improve test coverage of the embedding api, so I suppose those tests are up to date
10:05 redicaps joined #parrot
10:14 nine Four lines of code and four variables. That's crazy.
10:15 nine And it doesn't even work :)
10:17 tadzik :P
10:18 mj41 joined #parrot
10:21 nine but thanks for the hint
10:29 nine It's actually much easier to create a PMC for a string array than it is to create one for a single string or even a simple int
10:39 nine Extra trap: FixedPMCArray init function takes a size int. But it fails if you actually give it a size. Instead, you have to use set_integer_native which's docs explicitely state that it cannot be used to resize the array.
10:44 tadzik ah, been there, done that :/
11:04 SHODAN joined #parrot
11:09 dalek nqp: 422048a | jnthn++ | src/PAST/NQP.pir:
11:09 dalek nqp: Fix handling of WHAT in nqp::op mapping.
11:09 dalek nqp: review: https://github.com/perl6/nqp/commit/422048a4ff
11:12 benabik left #parrot
11:26 nine waaaaaaaaaaaaaaaaaaaah
11:35 jsut joined #parrot
11:35 dalek rakudo/optimizer: 1a2a145 | jnthn++ | tools/build/NQP_REVISION:
11:35 dalek rakudo/optimizer: Bump NQP_REVISION to get map_node fixes.
11:35 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/1a2a145cfd
11:35 dalek rakudo/optimizer: 7b09735 | jnthn++ | src/Perl6/ (2 files):
11:35 dalek rakudo/optimizer: Add supprot for nqp::want, and make various bits of analysis smarter about PAST::Want.
11:35 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/7b09735e76
11:36 dalek rakudo/optimizer: f70067c | jnthn++ | src/core/Int.pm:
11:36 dalek rakudo/optimizer: Native operators should use nqp::want; get infix:<+>(int, int) to do so.
11:36 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/f70067c8b3
11:36 dalek rakudo/optimizer: e14527f | jnthn++ | src/Perl6/Optimizer.pm:
11:36 dalek rakudo/optimizer: Correct the chain analysis so it only handles the very constrained (but very common) case I'd intended it to. Fixes various of the spectest regressions.
11:36 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/e14527fce1
11:36 Psyche^ joined #parrot
11:53 benabik joined #parrot
12:01 whiteknight joined #parrot
12:11 SHODAN joined #parrot
12:22 whiteknight good morning, #parrot
12:23 nine good morning whiteknight
12:23 benabik o/ whiteknight, #parrot
12:28 nine parrot's build system is the horror
12:29 atrodo =~
12:30 benabik It could be worse, but it is pretty bad
12:31 dalek rakudo/optimizer: a3f69b6 | jnthn++ | src/ (2 files):
12:31 dalek rakudo/optimizer: Don't lie about what types we can provide.
12:31 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/a3f69b6800
12:31 dalek rakudo/optimizer: 1f0a570 | jnthn++ | src/Perl6/Optimizer.pm:
12:31 dalek rakudo/optimizer: Don't lose :named during inlining a call. Fixes majority of inliner-induced failures.
12:31 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/1f0a570338
12:32 whiteknight hello nine. What don't you like about the build system? What do you need to change about it?
12:32 whiteknight good morning also, benabik
12:32 Kulag joined #parrot
12:33 benabik My major objection to the build system is the total failure of make after a version number change.  This can probably be fixed either by having more things depend on the version number or by making the PBC format more stable.
12:34 nine whiteknight: fighting with boostrapping. Had to change frontend/parrot2/prt0.winxed but to bootstrap, I need a working ./miniparrot. So I cannot do the corresponding changes in frontend/parrot2/main.c at the same time
12:35 whiteknight oh, what changes do you need to make to the frontend? Also, miniparrot is made from frontend/parrot/main.c, not parrot2/main.c
12:35 nine Now there's pbc_to_exe.pir which seems to need the same change. Only that other times, it seems to be called different, so it doesn't need the change.
12:35 whiteknight what change needs to be made?
12:36 Coke I am interested in conversations about the build system, having forced the makefile to DTRT in some cases.
12:36 mj41 joined #parrot
12:36 nine whiteknight: the source of these changes is that to move the call of :main to a scheduled task, it can only have a single argument
12:38 bluescreen joined #parrot
12:44 jsut_ joined #parrot
12:48 whiteknight nine: damnit, allowing :main to take more than one was a change I added recently. Is there a way we can update scheduled tasks to be more flexible?
12:48 benabik …  What's expected to be passed to a :main sub?
12:48 whiteknight benabik: in the frontend I updated it so it can take two sets of arguments, those for the VM and those for the program
12:49 whiteknight it's much easier to separate out the two at the C level than at the PIR level
12:50 whiteknight benabik: most programs written in PIR or higher only expect a single argument, which is the array of args passed to that program, but the frontend is a little different because it needs to take options for controlling the VM as well
12:50 nine whiteknight: I know. Like I mentioned this morning: actually kill_threads was very simple to merge. Other changes are unexpectedly much more of a problem for me.
12:50 whiteknight nine: you can bootstrap prt0.winxed.pir with a separate parrot install
12:53 whiteknight nine: feel free to break out tasks and assign them out to me
12:53 whiteknight if you run into problems like that, especially if I caused them, I'll gladly fix them
12:56 nine whiteknight: thanks for the offer. For now I can still use the learning experience, so I'll try to handle it myself. But of course I appreciate all hints :)
12:56 particle joined #parrot
12:58 whiteknight frontend/parrot/main.c is the old frontend which is used to build miniparrot, so that should only take a single argument to :main and you should be able to build that at least
12:59 whiteknight Instead of using two separate arguments to main like I have been doing, You can append the two lists together at the C level. Just do a rudimentary sort to put the system arguments first and the program arguments second, maybe separated by a flag or something
12:59 benabik Or pass it an array with two arrays.
13:00 whiteknight yeah, I thought about that too
13:00 nine I'm passing a FixedPMCArray containing the two arrays now
13:00 whiteknight okay, that works fine too
13:00 benabik Do we have a basic list/pair structure?  (Cons cell, linked list, tuple, whatever)
13:01 whiteknight benabik: no
13:01 benabik sadface
13:01 whiteknight there's no reason why not, other than nobody having written them
13:01 whiteknight we have RPA and Key
13:01 benabik I like immutable data structures.
13:01 benabik Key is fairly close, albeit hard to manipulate.
13:01 whiteknight yeah, that's exactly it. Key isn't used much, so it doesn't have a nice interface for usability
13:01 nine Converting the task PMC to allow an arbitrary amount of parameters seems rather difficult. I have no idea how I would construct the signature for Parrot_ext_call
13:02 benabik It could use a Capture to pass things around and expand it inside the task..
13:02 whiteknight nine: we could do such a thing through judicious use of the :flat and :slurpy modifiers, but that does seem like a waste
13:02 benabik (if that makes sense.  I'm not sure I'm awake)
13:04 nine As long as you're not a parrot beginner trying to change the VM entry, packing your task parameters into some data structure should be very simple. So I don't see much of a gain by allowing more than one parameter
13:05 whiteknight nine: yeah, that's exactly true. There is no real reason to keep a special exception if it's only used by the one frontend
13:06 nine so I'll just keep fighting with pbc_to_exe :) parrot and miniparrot seem to work
13:07 nine I did the argument packing in Parrot_pf_execute_bytecode_program
13:11 whiteknight pbc_to_exe wasn't updated when I added the new frontend, it should be functionally similar to miniparrot
13:12 whiteknight it's not as easy to play with, because of all the PIR
13:13 whiteknight I had wanted to rewrite it in Winxed, but I never got around to it
13:14 nine since both frontends ended up using Parrot_pf_execute_bytecode_program all mains should no be called with a single parameter.
13:15 nine That's funny: http://paste.scsys.co.uk/145648
13:16 whiteknight ...lolfail?
13:17 nine The first case seems to be a pbc_to_exe expecting a single argument getting called with two and the second case expects two arguments but gets called with a single one
13:18 whiteknight weird
13:18 nine that's bootstrap hell :)
13:18 whiteknight for the first project, we like to drive new developers crazy
13:19 nine it's good that I did not pick something really difficult ;)
13:20 nine Just today I've been bitten by:
13:21 nine * building parrot requires a working parrot
13:21 nine * old embedding api / new api
13:21 nine * old frontend / new frontend
13:21 nine * having to not use the obvious parameter but use a function where the doc says "don't use me!"
13:22 nine * code that works in a frontend file absolutely blows when moved to an internal function
13:33 whiteknight what function says "don't use me?"
13:33 nine That's what I meant: Extra trap: FixedPMCArray init function takes a size int. But it fails if you actually give it a size. Instead, you have to use set_integer_native which's docs explicitely state that it cannot be used to resize the array.
13:34 whiteknight FixedPMCArray is a huge fail, you're right
13:38 nine I don't understand why ./parrot pbc_to_exe.pbc pbc_to_exe.pbc would fail. ./parrot got rebuilt and so has to use my changed Parrot_pf_execute_bytecode_program. So where's the FixedPMCArray?
13:39 whiteknight is there a parrot_old binary around you can use instead?
13:40 nine whiteknight: there is and it works. But make still wants to redo the call
13:41 nine ah no, it just needs to compile some more files
13:46 whiteknight ok
13:54 nine similiar problem later with nqp-rx.pbc
13:55 dalek rakudo/optimizer: 1cb3f8d | jnthn++ | src/core/Int.pm:
13:55 dalek rakudo/optimizer: A few more native int operators. If anybody fancies doing the num ones, dive in!
13:55 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/1cb3f8dc7e
13:59 whiteknight nine: weird
13:59 whiteknight oh wait, I think I know what the problem is
13:59 nine yeah?
13:59 whiteknight when you call ./parrot pbc_to_exe.pbc, it packs the two arrays into a single array and passes it to the frontend
14:00 nine Actually I think miniparrot works, but parrot still calls using two params
14:00 whiteknight when you call ./pbc_to_exe, it only has one array that doesn't get packed
14:00 whiteknight that same program, in two different forms, gets two different input arguments
14:01 whiteknight remember, frontend/parrot2/main.c is different from frontend/parrot/main.c and pbc_to_exe
14:02 whiteknight I think you're going to have to undo that solution, and instead of making an array of arrays in frontend/parrot2/main.c, you need to just have one normal ResizableStringArray
14:05 nine whiteknight: I did not change frontend/parrot2/main.c. I implemented the packing in Parrot_pf_execute_bytecode_program in src/packfile/api.c which is used by both frontend/parrot/main.c and frontend/parrot2/main.c
14:05 nine At least that's what I think
14:05 whiteknight oh, so it always packs?
14:05 nine it should
14:05 whiteknight okay
14:06 whiteknight then how are you doing Parrot_ext_call?
14:08 nine I'm not using Parrot_ext_call yet. I'm trying to implement the argument packing in a clean master since the change is completely tangential to green_threads. I'm not trying to do two fundamentally changing things at the same time :)
14:08 whiteknight ok
14:09 whiteknight if you commit what you have, I can take a look at it in a little while
14:11 nine pushed to git@github.com:niner/parrot.git pack_main_args branch
14:12 nine have to leave now anyway
14:12 whiteknight okay, I'll take a look. Thanks
14:12 nine thank you :)
14:18 nbrown joined #parrot
14:26 contingencyplan joined #parrot
14:40 dmalcolm joined #parrot
14:57 particle1 joined #parrot
15:02 dalek rakudo/nom: 38f1a2c | jnthn++ | src/ (2 files):
15:02 dalek rakudo/nom: Implement 'is required' on parameters.
15:02 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/38f1a2c6c3
15:02 dalek rakudo/nom: 9da03d2 | jnthn++ | t/spectest.data:
15:02 dalek rakudo/nom: Run S06-signature/slurpy-params.t.
15:02 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/9da03d2616
15:02 dalek rakudo/nom: 8ba6979 | jnthn++ | src/core/Range.pm:
15:02 dalek rakudo/nom: Tiny optimization to range iteration.
15:02 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/8ba6979c1d
15:23 dalek rakudo/nom: 1eeac15 | jnthn++ | src/core/Mu.pm:
15:23 dalek rakudo/nom: Fix error reporting for non-existent private methods.
15:23 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/1eeac15d52
15:23 dalek rakudo/nom: 1e95c0a | jnthn++ | src/Perl6/Actions.pm:
15:23 dalek rakudo/nom: Catch illegally unqualified private method calls at compile time.
15:23 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/1e95c0ad5b
15:38 dalek parrot/whiteknight/main_args: d6a0c0f | Whiteknight++ | / (9 files):
15:38 dalek parrot/whiteknight/main_args: Simplify argument passing to :main. Always pass exactly one PMC arg to :main. The new frontend combines it's two arrays into a single array argument, and parses that out.
15:38 dalek parrot/whiteknight/main_args: review: https://github.com/parrot/parrot/commit/d6a0c0f5db
15:39 whiteknight msg nine Check out the whiteknight/main_args branch in parrot/parrot. I redid arguments to :main so it always takes exactly one argument. I changed prt0.winxed to parse a single arg list instead of parsing two lists. Let me know if this works for you
15:39 aloha OK. I'll deliver the message.
15:51 dalek rakudo/nom: d104b94 | jnthn++ | src/core/Numeric.pm:
15:51 dalek rakudo/nom: Fix infinite recursion with lcm/gcd. Resolves the [lcm] 1..3 issue.
15:51 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/d104b94fd5
15:58 bubaflub joined #parrot
16:08 darbelo joined #parrot
16:16 dalek rakudo/nom: def94fa | jnthn++ | src/Perl6/Grammar.pm:
16:16 dalek rakudo/nom: Add error from STD for using $0 in a prameter list.
16:16 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/def94fa7f5
16:26 dodathome joined #parrot
17:02 dalek rakudo/nom: 71d1557 | jnthn++ | src/Perl6/Actions.pm:
17:02 dalek rakudo/nom: Fix .+$foo() style dispatches (many candidates plus indirect name in combination).
17:02 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/71d15575c3
17:04 benabik How do you get inf into a $N register in PIR?
17:04 Coke $S1="Inf"; $N1= $S1 # works, but probably a shorter way
17:04 fperrad joined #parrot
17:05 benabik Hm.  t/op/inf_nan.t appears to spell the special nuns 'Inf', '-Inf', and 'NaN'
17:05 benabik Fun.
17:05 Coke er, $N1 = "Inf" # shorter. ;)
17:10 dalek rakudo/nom: 9e7a62e | jnthn++ | src/core/Enum.pm:
17:10 dalek rakudo/nom: Add Enum.at_key.
17:10 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/9e7a62ef57
17:10 dalek rakudo/nom: db05a44 | jnthn++ | t/spectest.data:
17:10 dalek rakudo/nom: Run S12-methods/parallel-dispatch.t.
17:10 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/db05a44a31
17:20 mj41 joined #parrot
17:34 tadzik nom: say so IO::Socket::INET ~~ IO
17:34 p6eval nom def94f: OUTPUT«Could not find symbol 'IO::Socket::&INET'␤  in sub die at src/gen/CORE.setting:416␤  in block <anon> at /tmp/7O4mTYMyJM:1␤  in <anon> at /tmp/7O4mTYMyJM:1␤␤»
17:34 tadzik goddamnit, SAFE
17:34 tadzik b: say so IO::Socket::INET ~~ IO
17:34 p6eval b 1b7dd1: OUTPUT«Bool::False␤»
17:35 tadzik huh
17:35 tadzik oh, ww, pardon
17:39 dalek rakudo/optimizer: ebf115c | moritz++ | src/core/Num.pm:
17:39 dalek rakudo/optimizer: prefix:<->(num). Wracks havoc of tests becase -Inf now generates invalid PIR (set $N100, Inf)
17:39 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/ebf115ced9
17:50 nine whiteknight++ # making my life much easier :)
17:52 cotto_work ~~
18:20 whiteknight nine: it's better to just do it the right way, then to work around doing it the wrong way
18:21 whiteknight I haven't even run tests on that branch. I got it to build and I sent it to you for review. If you like it, I can finish the work
18:21 nine true, true
18:27 nine whiteknight: like it? absolutely
18:27 whiteknight awesome. I'll fix it up tonight and merge it to master
18:49 mj41 joined #parrot
18:49 Kulag joined #parrot
18:57 dalek rakudo/optimizer: b95d441 | moritz++ | src/core/Num.pm:
18:57 dalek rakudo/optimizer: more num ops; correct return value of cmp
18:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/b95d441c0b
18:57 dalek rakudo/optimizer: 0b30152 | moritz++ | src/core/Num.pm:
18:57 dalek rakudo/optimizer: more num ops
18:57 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/0b30152702
18:57 jsut joined #parrot
19:10 alvis joined #parrot
19:17 alester joined #parrot
19:57 ingy joined #parrot
20:00 athomason joined #parrot
20:09 ingy joined #parrot
20:13 sjn_ joined #parrot
20:42 d1-1 joined #parrot
20:43 d1-1 hello, can anybody point me towards the LALR stuff written by tcurtis for GSoC please?
20:45 bubaflub d1-1: https://github.com/ekiru/lalrskate
20:47 d1-1 awesome, thank you bubaflub
21:16 dalek rakudo/optimizer: 7bc5ce7 | jnthn++ | src/Perl6/SymbolTable.pm:
21:16 dalek rakudo/optimizer: Fix Inf/NaN in native num contexts.
21:16 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/7bc5ce71c2
21:41 perlite joined #parrot
21:47 jsut_ joined #parrot
22:18 dalek rakudo/optimizer: 2cf8944 | jnthn++ | src/core/Int.pm:
22:18 dalek rakudo/optimizer: Start to add some returns traits to various ops. Also a couple more native int ops.
22:18 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/2cf89446a4
22:18 dalek rakudo/optimizer: c085ef9 | jnthn++ | src/Perl6/ (3 files):
22:18 dalek rakudo/optimizer: If we know what we're going to call, add its return type into the tree, so things a level up can use that type in their analysis. This means that given ($a, $b, $c) are all int, $a + $b * $c will be able to inline both operations; before it would not inline the +.
22:18 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/c085ef9eac
23:08 bluescreen joined #parrot
23:14 dalek rakudo/optimizer: f7344b1 | jnthn++ | src/Perl6/Optimizer.pm:
23:14 dalek rakudo/optimizer: Little refactor in preparation for analyzing only calls further.
23:14 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/f7344b1444
23:14 dalek rakudo/optimizer: ea3e344 | jnthn++ | src/ (3 files):
23:14 dalek rakudo/optimizer: Some initial infrastructure for trial-binding calls to only subs.
23:14 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/ea3e344bfc
23:14 dalek rakudo/optimizer: 8c0c759 | jnthn++ | src/Perl6/Optimizer.pm:
23:14 dalek rakudo/optimizer: Update optimizer so that it can start making some use of the only-sub trial bind analysis, once it's implemented (at the moment, it always gets 'not sure' though, and does no transformation).
23:14 dalek rakudo/optimizer: review: https://github.com/rakudo/rakudo/commit/8c0c759c4a
23:20 whiteknight joined #parrot
23:20 cotto_work g'day wagle_
23:20 cotto_work er, whiteknight
23:21 whiteknight wigglewaggle, cotto_work
23:21 wagle_ zzz
23:21 wagle 5 year old came up with that one
23:22 wagle WAY gul
23:47 soh_cah_toa joined #parrot
23:51 benabik joined #parrot

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

Parrot | source cross referenced