Camelia, the Perl 6 bug

IRC log for #parrot, 2009-11-20

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 Coke pmichaud: you bout?
00:05 tetragon joined #parrot
00:06 dalek parrot: r42585 | jkeenan++ | trunk/config/gen/parrot_include.pm:
00:06 dalek parrot: Re-order subs to be more consistent with other config step classes.
00:06 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42585/
00:06 lucian joined #parrot
00:08 ttbot Parrot trunk/ r42585 i386-linux-thread-multi make error http://tt.ro.vutbr.cz/file/cmdout/148297.txt ( http://tt.ro.vutbr.cz//buil​dstatus/pr-Parrot/rp-trunk/ )
00:13 bluescreen joined #parrot
00:14 plobsing joined #parrot
00:14 darbelo That's a rather odd error...
00:16 dalek parrot: r42586 | jkeenan++ | trunk/config/gen/config_h.pm:
00:16 dalek parrot: Why do a sort 3 times when you only need to do it once?
00:16 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42586/
00:16 bluescreen Hi, do you have any good example on how to define class's methods using PIR
00:17 bluescreen I can't make it work I always get the Method 'blah...' not found for invocant of class '.....'
00:17 darbelo bluescreen: nopaste of the failing code?
00:18 bluescreen hold on
00:19 ttbot Parrot trunk/ r42586 i386-linux-thread-multi make error http://tt.ro.vutbr.cz/file/cmdout/148340.txt ( http://tt.ro.vutbr.cz//buil​dstatus/pr-Parrot/rp-trunk/ )
00:19 bluescreen http://pastebin.com/m44af8949
00:21 bluescreen by the way I'm using parrot 1.7
00:22 Coke bluescreen: I would recommend not using "Object", as that probably conflicts with src/pmc/object.pmc
00:22 Coke moment.
00:22 darbelo That paste gives me a syntax error, also.
00:22 bluescreen I've replaced with another name and same problem
00:23 bluescreen used Objecta
00:23 bluescreen no mather what name I use, it gives me same error
00:24 nopaste "coke" at 72.228.52.192 pasted "try this." (12 lines) at http://nopaste.snit.ch/18780
00:24 Coke bluescreen: that's for you.
00:26 bluescreen but i want to define class methods, not instance methods
00:26 Coke I don't think parrot distinguishes.
00:26 Coke moment.
00:26 bluescreen like static in Java
00:27 pmichaud Coke: here for a bit
00:27 Coke I am fairly certain that you have to call it as an instance method. ISTR parrot supported it at one point, but I recall having to change partcl to avoid it.
00:27 Coke (probably about 2 years ago)
00:27 chromatic Class methods are instance methods on an instance of a class.
00:27 chromatic There are no class methods.
00:28 Coke chromatic: which seems to me like a deficiency. But thankfully, tcl doesn't have objects so I don't care too much.
00:28 bluescreen so, are you planing to have those in the future?
00:29 bluescreen Its too memory consuming having to instance an void object if you will, to call an static method.
00:29 Coke wait, on an instance of a class or an instance of a 'Class' ?
00:29 bluescreen so Class is the meta class?
00:30 bluescreen I come from smalltalk world
00:30 pmichaud bluescreen: what do you see as being the difference between a class method and a normal subroutine?
00:30 mokurai joined #parrot
00:30 bluescreen you mean a global subroutine?
00:31 pmichaud or one within the class' namespace, perhaps
00:31 bluescreen constructor is a perfect example
00:31 bluescreen lets say I want to have different constructors
00:32 pmichaud then you could simply have a subroutine named 'new' in the various namespaces for each class
00:32 pmichaud (or however you'd like your constructor to be designated)
00:33 Coke (or abuse the init_pmc vtable which is invoked by the parrot opcode new.)
00:33 Coke (but a vtable isn't a user visible method.)
00:33 pmichaud you can also define a method 'new' for the class, and then get to it by using   classobject.'find_method'('new')
00:33 Coke pmichaud: (undefined identifier 'lexpad'
00:34 Coke ... from parrot;PCT;HLLCompiler;evalpmc)
00:34 darbelo bluescreen: I think you are mixing vm-features and hll-features.
00:34 bluescreen I think so darbelo
00:34 pmichaud Coke: have an example bit of code?
00:35 Coke bah. I think I have something stale, cleaning...
00:35 bluescreen I want to use as much as I can from the VM features
00:35 pmichaud bluescreen: for the code you pastebin'd,  there are two ways to get to the 'hello' method
00:35 pmichaud one is to have an instance of the class
00:35 pmichaud the other is to look it up by asking the class object
00:35 pmichaud e.g.
00:35 pmichaud $P0 = get_class ['Object']
00:36 pmichaud $P1 = $P0.'find_method'('hello')
00:36 pmichaud $P0.$P1()   # invoke $P1 with the class object as invocant
00:36 Coke pmichaud: yah, nevermind. it was a half-attempt at parsing {*} that i've since removed, nevermind.
00:37 pmichaud Coke: okay, good.  I still need to wrap my head around {*} a bit.  It's not entirely clear to me when substitutions occur or don't occur.
00:37 Coke pmichaud: well, we have it already in PGE/TGE variant, if that helps.
00:37 pmichaud I'd probably have trouble following the TGE version at this point.
00:38 pmichaud it's been 2+ years since I've done anything with TGE... and I wasn't much of a fan of it then.
00:38 bluescreen that did it pmichaud
00:39 pmichaud bluescreen: yeah.... Parrot doesn't really have "class methods" in the java sense, but we haven't really needed them much for our target languages either.
00:39 bluescreen are you implementing P6?
00:39 pmichaud yes.
00:39 bluescreen is larry W ever around here?
00:39 Coke seen TimToady?
00:39 purl TimToady was last seen on #parrot 1 days, 4 hours, 39 minutes and 28 seconds ago, saying: phone  [Nov 18 19:59:29 2009]
00:39 pmichaud he tends to hang out on freenode/#perl6
00:39 pmichaud but he's also here from time to time
00:41 bluescreen I've watched his video of Google tech talk, I don't think anybody got the parts where he showed the lexer
00:42 pmichaud oh, I understood it.  :)
00:42 pmichaud of course, I have a unique position in that respect.  :)
00:42 pmichaud time for me to feed kids -- bbl
00:42 bluescreen lol.. you should :D
00:43 kid51 I'm going to have to revert r42585
00:43 Coke why?
00:44 kid51 I rearranged the order in which its subs were declared to match other config steps ...
00:44 kid51 That shouldn't have made a difference, but boy did it.
00:44 kid51 So I have to investigate why.
00:44 Coke oh, as long as you're here;
00:44 darbelo kid51: It works here FWIW.
00:45 Coke I'm going to create config/make and use it to hold partial (generated and potentially static) makefile portions.
00:45 dalek parrot: r42587 | jkeenan++ | trunk/config/gen/parrot_include.pm:
00:45 dalek parrot: Revert r42585.  Changing order of subs within module broke something.
00:45 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42587/
00:46 kid51 darbelo:  It broke perl Configure.pl --test all over the place
00:46 Coke pmichaud: btw, mdiep is interested but is (like me) having trouble understanding NQP.
00:46 kid51 Coke:  What do you mean?  config/make
00:47 Coke "mkdir config/make"
00:47 cotto_work Coke++
00:47 cotto_work Apply more pressure.
00:48 Coke (see my parrot-dev mail of a few days ago about splitting up the big makefile into includable chunks. that's the dir where I plan to put the chunks)
00:48 darbelo kid51: Agh, sorry. I was building from a stale checkout.
00:48 kid51 Coke:  okay, off top of head I don't see that that would pose any problems to what I do
00:48 Coke kid51: excellent.
00:49 kid51 Coke:  So that would imply a lot of changes in config/gen/makefiles/root.in -- correct?
00:50 Coke kid51: mostly a carving up into smaller pieces, yes.
00:51 Coke e.g the bit that generates the makefile deps for PMCs will probably just dump it to a separate .mak that is then included in the main make.
00:51 Coke if I touch another config step, I'll try to remember to run config -test
00:51 Coke s/another/
00:52 dalek parrot: r42588 | jkeenan++ | trunk (2 files):
00:52 dalek parrot: Do a little refactoring in Linux hints file and add a steps test file for that.
00:52 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42588/
00:54 * kid51 looks at t/steps/gen/makefiles-01.t ... and is surprised to see that allison and chromatic have added substantial amounts of code to this test since he first wrote it!
00:56 abqar joined #parrot
00:58 chromatic kid51, your rearranging problem is because of the barewords parse_file and perform_directive in runstep().
01:00 kid51 Thanks, c, I'll take a look at it after dinner.
01:20 cognominal_ joined #parrot
01:21 davidfetter joined #parrot
01:47 theory joined #parrot
01:51 davidfetter joined #parrot
02:07 pmichaud Coke: (mdiep)  I'm happy to answer questions :)
02:15 pmichaud if you're having trouble even figuring out what to ask, I can start from there also :)
02:19 Tene pmichaud: Ooo!  Pick me!  I don't know any questions to ask right now!
02:21 dalek parrot: r42589 | jkeenan++ | trunk/config/inter/progs.pm:
02:21 dalek parrot: Change RT # to TT # in two locations.
02:21 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42589/
02:21 purl dalek: that doesn't look right
02:21 dalek parrot: r42590 | chromatic++ | trunk/src/library.c:
02:21 dalek parrot: [library] Removed build directory from PBC/PIR search paths in installable
02:21 dalek parrot: libparrot.  This should resolve TT #1279, reported by Patrick Michaud.
02:21 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42590/
02:23 dalek TT #1279 closed by chromatic++: Parrot prefers libraries in build tree to installed tree or current ...
02:25 chromatic pmichaud, I get an error message using this Callgrind invocation:
02:26 chromatic cg ./parrot ext/nqp-rx/nqp-rx.pbc --target=pir ext/nqp-rx/src/stage0/NQP-s0.pir
02:26 chromatic Obsolete pod format, please use =begin/=end instead at line 3, near "head1 NAME"
02:26 chromatic current instr.: 'parrot;HLL;Grammar;panic' pc 578 (src/stage0/HLL-s0.pir:360)....
02:27 chromatic Should I benchmark something else?
02:28 pmichaud ...that would be trying to compile a .pir file using nqp
02:28 pmichaud oh, yes
02:28 pmichaud the files to test against aren't (yet) in the parrot repo
02:28 pmichaud just a second
02:29 pmichaud http://github.com/perl6/nqp-rx/​blob/master/src/NQP/Actions.pm
02:29 pmichaud http://github.com/perl6/nqp-rx/​blob/master/src/NQP/Grammar.pm
02:29 pmichaud the first one would be the most "interesting"
02:29 pmichaud you can also do benchmarks against any of the files in ext/nqp-rx/t/nqp/*.t, although they're quite a bit smaller
02:29 pmichaud Actions.pm is probably the most representative at this time
02:30 chromatic I'll try Actions.pm.
02:33 chromatic 2.5 minutes so far.  It's definitely going to give some data.
02:34 dalek parrot: r42591 | jkeenan++ | trunk/config/gen/parrot_include.pm:
02:34 dalek parrot: Correct two cases where subroutine calls could be interpreted incorrectly (chromatic++).  Put subs in order more consistent with other config step classes.
02:34 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42591/
02:37 dalek parrot: r42592 | jkeenan++ | trunk (4 files):
02:37 dalek parrot: Eliminate an unnecessary internal sub in inter::progs.  Touch up its verbose output.  Adjust steps tests accordingly.
02:37 pmichaud by way of comparison, compiling that file in the standard runcore on my system is 16.020s (wall clock)
02:37 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42592/
02:38 chromatic 88.81% of the execution time is *marking* Capture.
02:38 chromatic ... and whatever it calls.
02:38 pmichaud well, a lot of Capture objects get created, yes.
02:39 pmichaud basically every node in the parse tree and in the ast is a Capture object of some sort
02:39 chromatic 4,686,462 PMCs created in this run.
02:40 chromatic Sorry, that's off.
02:40 chromatic 4,844,027.
02:40 pmichaud so, let me see if I understand what you said above.  88.81% of the total execution time is spent doing GC mark ?
02:40 chromatic 832,068 Subs invoked.
02:41 dalek parrot: r42593 | jkeenan++ | trunk/t/configure/033-step.t:
02:41 dalek parrot: Eliminate reference to long-resolved RT ticket.
02:41 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42593/
02:41 chromatic That's what KCachegrind says.  There's a cycle here that's changing things, but GC pressure is by far the biggest expense.
02:42 pmichaud that's.... interesting.  Especially since the new regex engine should be creating a lot fewer Capture PMCs than the old one did.
02:42 chromatic 23,994 Capture PMCs created.
02:43 pmichaud that seems right-ish.
02:43 pmichaud the number doesn't surprise me, at any rate.
02:43 chromatic 892,659 Contexts
02:44 chromatic 865,945 CallSigs
02:44 chromatic 855,060 RetConts
02:44 chromatic 826,628 CallSigRets
02:44 dalek parrot: r42594 | jkeenan++ | trunk/t/steps/inter (4 files):
02:44 dalek parrot: Change RT references to TT references.
02:44 purl dalek: that doesn't look right
02:44 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42594/
02:46 chromatic 75% of the PMCs created manage PCC.
02:46 JimmyZ joined #parrot
02:47 chromatic bacek_at_work, we're getting to the point we need to merge the "merge Context and CallSig" branch.
02:47 pmichaud Ouchie.  But most of those are relatively short-lived, I'd guess?
02:47 pmichaud as opposed to the Capture PMCs, which are relatively long-lived
02:48 chromatic 27,086 marks of Context PMCs.
02:48 chromatic 3,619 marks of CallSig PMCs.
02:48 chromatic 500,690 marks of Capture PMCs.
02:49 pmichaud right
02:49 pmichaud so Capture PMCs are a small number of PMCs created but reponsible for a lot of marking
02:49 pmichaud (relatively speaking)
02:49 chromatic It's not so much that they're responsible for a lot of marking, but that they live a lot longer than most other things.
02:50 chromatic Maybe the best way to say that is that they root near the rootiest root in the system.
02:50 chromatic 92 GC runs.
02:50 pmichaud well, since the whole point of nqp.pbc is to build a parse tree and ast.... yes, they tend to stick around until the program is done :)
02:50 chromatic 18.64% of execution time spent in the GC.
02:51 dalek parrot: r42595 | jkeenan++ | trunk/config (4 files):
02:51 dalek parrot: Change RT # to TT # where the RT was still open; otherwise, eliminate reference to closed RT ticket.
02:51 purl dalek: that doesn't look right
02:51 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42595/
02:52 pmichaud anyway, that profile is likely to be very representative for all of the nqp/pge/past/pct-based compilers, including (especially) rakudo
02:52 chromatic 11.22% of execution time in Hash's get_pmc_keyed_str(), with 8,018,416 calls.
02:56 chromatic I can get some speed back there.
02:56 pmichaud in get_pmc_keyed_str ?
02:57 chromatic Yes.
02:57 pmichaud that would be a good place for some optimizing.  method calls go through that, I think.
02:57 pmichaud and there are definitely a ton of method calls here.
02:59 pmichaud src/pmc/object.pmc:336   :          /* Walk and search. One day, we'll use the cache first. */
02:59 pmichaud interesting comment :)
03:00 pmichaud is there a way to find out how many invocations of find_method occurred?
03:01 pmichaud in particular, Object.find_method ?
03:01 chromatic The VTABLE entry?
03:01 purl i think the vtable entry is get_iter iirc
03:01 pmichaud yes
03:02 chromatic 797,861
03:02 chromatic 9.16% of execution time.
03:02 pmichaud that would seem like a huge potential for optimization
03:02 pmichaud currently every method call is walking the mro list
03:03 chromatic It shouldn't be.  At least, I thought I fixed that at one point.
03:03 pmichaud perhaps something else does the caching, then.
03:03 pmichaud but clearly of the ~900K subroutine calls made, about ~800K of them were method calls
03:03 chromatic 4% of execution time is in Parrot_oo_find_vtable_override_for_class.
03:03 chromatic We need to *fix* that.
03:04 pmichaud oh, it's an even greater percentage than that, I guess
03:04 pmichaud 02:40 <chromatic> 832,068 Subs invoked.
03:04 pmichaud 03:02 <chromatic> 797,861
03:04 pmichaud (last is find_method vtable invocations)
03:04 pmichaud looks like about 95% of our sub calls were method invocations
03:05 pmichaud (which is consistent with the way nqp and the tools work)
03:05 chromatic I might be able to get you a 3% improvement here in a moment.
03:06 cognominal_ joined #parrot
03:06 chromatic Not huge, but starting to be measurable, for a small investment of time and profiling.
03:06 pmichaud where are method lookups being cached, per your recollection?
03:07 chromatic The default PMC's find_method calls Parrot_find_method_with_cache.
03:07 chromatic Object's find_method doesn't.
03:07 pmichaud oh.
03:07 pmichaud then yes, we're not getting any caching here I don't think.
03:07 chromatic I don't know if Parrot_find_method_with_cache works, but it's worth considering.
03:08 pmichaud well, since those 797,861 invocations of find_method result in some greater number of calls to get_pmc_keyed_str, yes :)
03:08 chromatic 3.844% improvement here.
03:10 pmichaud I guess we still end up with a keyed lookup into a cache.... but right now if the method's we're invoking are inherited, then we're looking through multiple classes to get to them
03:10 pmichaud *methods
03:10 chromatic Yes, and that's way too much overhead.
03:11 dalek parrot: r42596 | chromatic++ | trunk/src/pmc/hash.pmc:
03:11 dalek parrot: [PMC] Added checks for the most likely key and value types in Hash's
03:11 dalek parrot: get_pmc_keyed_str() VTABLE, in the theory that avoiding the overhead of
03:11 dalek parrot: function calls for hot paths will be significant.  This speeds up NQP-rx's
03:11 dalek parrot: Actions.pm benchmark by 3.844%.
03:11 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42596/
03:12 pmichaud yes, r42596 is a quick improvement
03:12 pmichaud chromatic++
03:13 pmichaud are hash_key_from_string and hash_value_to_pmc that expensive?
03:13 chromatic If you call them 800,000 times they are.
03:13 pmichaud that's... interesting
03:14 pmichaud yes, but we're calling a lot of stuff 800,000 times :)
03:14 pmichaud so relatively speaking, those two accounted for nearly 4% of execution?
03:14 chromatic Yes.
03:14 pmichaud wow.
03:14 pmichaud I'm.... shocked.
03:14 chromatic That and get_pointer.
03:14 chromatic Whole program optimization is a lovely feature of C compilers.
03:14 chromatic Same as aggressive whole program inlining.
03:14 chromatic Sadly....
03:14 purl sadly is the only way to do it currently
03:20 bacek_at_work chromatic, check context_union branch. It's failing badly. Because "Context" allocated in build_sigobjects, registers for Context should be allocated in Sub.invoke, parameters fetching should check different depth of stack. "Returns" should build returns in different Context. And so on...
03:20 bacek_at_work It's freaking big task...
03:22 chromatic Sounds like we need to extract and unify context creation.
03:22 chromatic Can we do that reliably at the point of call?
03:22 mokurai joined #parrot
03:24 bacek_at_work chromatic, nope. At least I couldn't find easy way to do it.
03:25 chromatic What do we need next then?
03:26 bacek_at_work I need few free days to figure out exact way to merging context and allocating registers.
03:26 bacek_at_work Unfortunately I'll not have them anytime soon
03:27 chromatic Do you have any notes?
03:33 chromatic I think I have another 4%.
03:35 janus joined #parrot
03:39 chromatic Hm, nope.  Unfortunate.
03:42 theory joined #parrot
03:52 bacek_at_work chromatic, you can think about merging CallSig with CallSigReturns. It doesn't squeeze into VTABLE interface. So just move guts of CSReturns into src/call/args.c and call this functions.
03:53 chromatic Sounds easy enough.
03:54 theory_ joined #parrot
04:06 theory_ joined #parrot
04:06 benabik joined #parrot
04:24 davidfetter joined #parrot
05:48 * chromatic needs a volunteer to clean up src/hash.c
06:04 TiMBuS joined #parrot
06:06 davidfetter_ joined #parrot
06:10 davidfetter joined #parrot
06:15 JimmyZ_ joined #parrot
06:46 iblechbot joined #parrot
06:49 davidfetter joined #parrot
07:05 mokurai joined #parrot
07:06 uniejo joined #parrot
07:15 particle1 joined #parrot
07:40 mokurai joined #parrot
07:48 theory joined #parrot
07:56 barney joined #parrot
08:03 fperrad joined #parrot
08:15 fperrad_ joined #parrot
08:23 JimmyZ_ joined #parrot
08:27 mikehh joined #parrot
08:36 KatrinaTheLamia joined #parrot
08:43 dalek parrot: r42597 | chromatic++ | trunk/src/call/args.c:
08:43 dalek parrot: [PCC] Replaced repeated VTABLE accessor calls with macro access in
08:43 dalek parrot: fill_params(), for a minor performance improvement.
08:43 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42597/
08:43 dalek parrot: r42598 | chromatic++ | trunk/src/pmc (2 files):
08:43 dalek parrot: [oo] Added a naive method cache to Class PMC and used it from Object's
08:43 dalek parrot: find_method().  This improves NQP-rx's Actions.pm benchmark performance by some
08:43 dalek parrot: 7%.
08:43 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42598/
08:43 dalek parrot: r42599 | chromatic++ | trunk/src/gc/api.c:
08:43 dalek parrot: [GC] Removed an unnecessary memset() from get_free_buffer(), as the underlying
08:43 dalek parrot: allocator has already cleared the memory.
08:43 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42599/
09:01 eternaleye joined #parrot
09:02 estrabd_ joined #parrot
09:22 abqar_ joined #parrot
09:48 mikehh All tests PASS (pre/post-config, smoke (#30060), fulltest) at r42599 - Ubuntu 9.10 amd64 (g++ with --optimize)
09:57 eternaleye joined #parrot
10:24 lucian joined #parrot
11:03 particle joined #parrot
11:04 cghene joined #parrot
11:12 theory joined #parrot
11:20 cognominal joined #parrot
11:57 cconstantine joined #parrot
12:10 kid51 joined #parrot
12:17 payload joined #parrot
12:24 mariano__ joined #parrot
12:53 mariano__ joined #parrot
13:16 nopaste "coke" at 72.228.52.192 pasted "for pmichaud: NQP -> PIR has unreachable rethrow." (5 lines) at http://nopaste.snit.ch/18786
13:18 whiteknight joined #parrot
13:18 iblechbot joined #parrot
13:23 Coke pmichaud: suggestion on where to put issues as I find them? issue tracker on github?
13:23 Coke (there are a few, and hopefully we can drag in more people. =)
13:28 Coke (putting them in a todo for now.)
13:37 Coke pmichaud: the "undefined identifier 'lexpad'" is coming from "if".
13:48 ruoso joined #parrot
13:53 pmichaud issues in github are fine for now -- whatever will work best for you in the long run :)
13:53 zak_ joined #parrot
13:53 pmichaud what code generated the unreachable rethow?
13:54 pmichaud *rethrow
14:05 Coke pmichaud: it's in src/gen
14:06 Coke added a TODO.
14:08 Coke e.g. src/gen/pmtcl-actions.pir:224
14:09 Coke looks like that one might be the implicit return at the end of concat_atoms
14:22 patspam joined #parrot
14:26 pmichaud looks like the spurious rethrow is a fossil from an incomplete refactor
14:27 pmichaud (bisecting to find out where/why)
14:29 pmichaud yes, that's what it is.
14:29 pmichaud Coke++
14:34 Coke I have not been able to find what variant of [if] is causing the 'lexpad' error yet.
14:38 pmichaud I'm guessing it may have something to do with expr
14:48 dalek parrot: r42600 | pmichaud++ | trunk/compilers/pct/src/PAST/Compiler.pir:
14:48 dalek parrot: [past]:  Remove unreachable rethrow instruction in routines (Coke++).
14:48 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42600/
14:52 lucian joined #parrot
15:10 Psyche^ joined #parrot
15:12 PacoLinux joined #parrot
15:13 payload joined #parrot
15:16 nopaste "pmichaud" at 72.181.176.220 pasted "r42598 -- methodcache may need invalidating with add_method (for chromatic)" (39 lines) at http://nopaste.snit.ch/18788
15:18 pmichaud purl msg chromatic r42598 -- we probably need some way to clear method caches when new methods are added to classes (see http://nopaste.snit.ch/18788)
15:18 purl Message for chromatic stored.
15:18 cognominal joined #parrot
15:25 cognominal joined #parrot
15:30 bubaflub joined #parrot
15:34 Andy_ joined #parrot
15:44 dalek rakudo: 6bf0179 | masak++ | src/setting/Any-list.pm:
15:44 dalek rakudo: [Any-list.pm] removed Int constraint on $num in .pick
15:44 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​bf017930e6a020312229abdce7c93bf5ff7f857
15:56 dalek lua: 378a9d6 | fperrad++ |  (49 files):
15:56 dalek lua: convert tests to PIR (from Perl)
15:56 purl I don't know how to convert tests to PIR (from Perl).
15:56 dalek lua: review: http://github.com/fperrad/lua/commit/37​8a9d60302439dbbf1b062255c19b58f11c5901
16:08 darbelo joined #parrot
16:08 darbelo ls
16:08 darbelo Ouch. Wrong window.
16:08 cotto_work good morning
16:08 darbelo good localtime()
16:09 darbelo clock?
16:09 purl darbelo: LAX: Fri 8:09am PST / CHI: Fri 10:09am CST / NYC: Fri 11:09am EST / LON: Fri 4:09pm GMT / BER: Fri 5:09pm CET / IND: Fri 9:39pm IST / TOK: Sat 1:09am JST / SYD: Sat 3:09am EST /
16:10 dalek parrot: r42601 | jkeenan++ | trunk/docs/configuration.pod:
16:10 dalek parrot: Make explicit that new configuration steps should be proposed via Trac ticket.
16:10 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42601/
16:14 dalek TT #1189 closed by jkeenan++: t/steps/*/*.t:  Replace reliance on init::defaults
16:15 bubaflub hey ya'll, i'm converting t/library/md5.t to PIR.  any objections?
16:16 bubaflub (more of a "anyone else working on this?")
16:17 darbelo bubaflub: Break first, apologize later ;)
16:17 bubaflub roger that
16:18 darbelo That's my MO, at least.
16:23 mikehh All tests PASS (pre/post-config, smoke (#30076), fulltest) at r42600 - Ubuntu 9.10 amd64 (gcc with --optimize)
16:29 dalek lua: a7d205a | fperrad++ | t/ (39 files):
16:29 dalek lua: chmod +x t/*.t
16:29 dalek lua: review: http://github.com/fperrad/lua/commit/a7​d205a35c30fdbf41d7999699f613f2bc4a889c
16:29 dalek lua: 7574cbd | fperrad++ | t/pmc/ (16 files):
16:29 dalek lua: chmod +x t/pmc/*.t
16:29 dalek lua: review: http://github.com/fperrad/lua/commit/75​74cbd504196a8e422982e1b292e91e0a4ec874
16:29 dalek lua: b9ccf38 | fperrad++ | setup.pir:
16:29 dalek lua: build LUA_INIT from the config
16:29 dalek lua: review: http://github.com/fperrad/lua/commit/b9​ccf381c3f93839530c6e05fc1aef7d8b2311ac
16:29 dalek lua: e97ab92 | fperrad++ | plumage/lua.json:
16:29 dalek lua: add Plumage description
16:29 dalek lua: review: http://github.com/fperrad/lua/commit/e9​7ab926c08f5c8da0a028c12431bf8b8f1b1cb0
16:29 dalek lua: 256ef88 | fperrad++ | .gitignore:
16:30 dalek lua: update .gitignore
16:30 dalek lua: review: http://github.com/fperrad/lua/commit/25​6ef888157e6fc43d4dd5798bad6e2bf499ef89
16:33 zak_ joined #parrot
16:46 dalek lua: 26be3f8 | fperrad++ | lua/lib/luapackage.pir:
16:46 dalek lua: fix LUA_PBCPATH (for batteries)
16:46 dalek lua: review: http://github.com/fperrad/lua/commit/26​be3f8b830720988aa6a593b26d67f13adaa70f
16:50 mikehh All tests PASS (pre/post-config, smoke (#30077), fulltest) at r42601 - Ubuntu 9.10 amd64 (g++ no --optimize)
16:50 Coke is "num .= floor" in p6 "num = num.floor()" ?
16:52 payload joined #parrot
16:53 Tene Yes.
16:56 bubaflub is there any array syntax so i can set multiple items at once
16:57 cotto_work bubaflub, not in pir
16:57 bubaflub bummer.
16:57 bubaflub this test is going to be ugly
16:57 bubaflub fun, but ugly
16:57 bubaflub haha
16:58 Coke you can use json.
16:59 Coke or split.
16:59 Coke $P0 = split 'a b c d e' is a quicky.
16:59 Coke (you can even do it inside a .const sub so it happens at compile time.)
16:59 bubaflub ah, very nice Coke++
16:59 * Coke pokes.
17:00 Coke http://github.com/partcl/partcl/blob/​master/runtime/builtin/string.pir#L4
17:01 Coke (prolly overkill for a test, but good for something you'd otherwise have to split multiple times at runtime.)
17:01 bubaflub true
17:03 cotto_work bubaflub, note that you'll always get a ResizableStringArray with split.
17:04 bubaflub ok
17:04 nopaste "coke" at 72.228.52.192 pasted "for pmichaud stacktrace question..." (18 lines) at http://nopaste.snit.ch/18789
17:04 cotto_work (probably not an issue, but good to know)
17:04 Coke cotto_work: s/RSA/RSA or the HLL equivalent/
17:04 Coke (which you can abuse to force it to return any other core type you like.)
17:05 PerlJam Coke: how well-versed are you in how partcl-nqp works?
17:05 Coke PerlJam: who the what now?
17:05 PerlJam What connects the subs in Commands.pm to the stuff in Actions.pm?
17:05 PerlJam maybe there's some PASTism that I'm missing.
17:05 Coke PerlJam: I know where the PIR entry point is. I know there is HLLCompiler glue holding it together. I know where to poke the grammar, the actions, and the runtime.
17:06 Coke ah. moment.
17:09 Coke ... yah, i have no idea.
17:09 Coke You'd think that method command() would be it (in Actions.pm)
17:10 Coke oh. it is.
17:10 Coke It's pulling the name of the command, creating an op invocation, and then parsing the ast that's left into the args.
17:10 Coke so that turns "set a 3" into "set"("a","3")
17:11 Coke make sense to you?
17:11 PerlJam Sure.
17:11 Coke whee!
17:11 Coke now can I get you to supply a patch? =-)
17:12 PerlJam But by making the Op :name('set') (in your example, that's what happens),  does that mean "call the sub named "set" ?
17:12 PerlJam And why are all of the subs "our"?
17:13 PerlJam oh, that might be becaue of tcl scoping I guess
17:13 PerlJam Coke: what do you need patched?
17:15 pmichaud there's nothing that connects Commands.pm to Actions.pm
17:16 pmichaud but yes, PAST::Op.new( :name('set') )   creates a node that will call the subroutine named 'set'
17:16 pmichaud bbi10
17:18 Coke PerlJam: just updated the TODO. (could use more basic versions of those tcl builtins)
17:18 Coke "incr" is probably an easy one.
17:18 Coke er, /just/ updated.
17:18 Coke (no changes to grammar required as yet for builtins, just add something to Commands.pm)
17:18 Coke (happy to give you commit bits.)
17:20 * Coke wonders how to match a regular expression in NQP.
17:28 Coke where in rakudo-ng is the grammar?
17:29 dalek parrot: r42602 | mikehh++ | trunk/t/pmc/eval.t:
17:29 dalek parrot: remove TODO for passing test - TT #1142
17:29 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42602/
17:29 Coke found it.
17:30 allison joined #parrot
17:32 pmichaud Coke: src/Perl6/Grammar.pg
17:32 pmichaud er, .pm
17:32 * PerlJam looks at partcl-nqp's TODO
17:32 pmichaud http://github.com/rakudo/rakud​o/blob/ng/src/Perl6/Grammar.pm
17:32 pmichaud NQP doesn't have full regex support yet -- I should probably add that soonish.
17:33 Coke token infix:sym<==> { <sym> <O('%compare_numeric, :pirop<eq>')> }
17:33 pmichaud adding eq and == should be pretty straightforward
17:33 Coke eq_p_p dies; how can I coerce my args?
17:33 pmichaud you don't want :pirop<eq>
17:33 pmichaud you want  iseq
17:34 pmichaud or cmp_num
17:34 Coke The opcode 'iseq_p_p' (iseq<2>) was not found. Check the type and number of the arguments
17:34 pmichaud the better grammar to follow is NQP's
17:34 Coke pmichaud: as opposed to nqp rx's?
17:35 pmichaud no, nqp-rx's
17:35 pmichaud http://github.com/perl6/nqp-rx/​blob/master/src/NQP/Grammar.pm
17:35 Coke pmichaud: all i did was copy what was already in partcl-nqp's grammar.
17:35 pmichaud token infix:sym«==» { <sym> <O('%relational, :pirop<iseq INn>')> }
17:35 pmichaud the "INn" part is what coerces the arguments
17:35 Coke does the %foo matter?
17:36 pmichaud the %foo is pulling in the precedence
17:36 pmichaud here, let's back up
17:36 PerlJam Coke: gimme a commit bit then  (perlpilot on github)
17:36 Coke right, but do the names matter?
17:36 pmichaud you can name them whatever you want
17:36 Coke or can I pick whatever I want for them?
17:36 pmichaud so
17:36 pmichaud (but they have to look like Perl hashes)
17:36 pmichaud NQP::Grammar.O(':prec<t=>, :assoc<left>', '%additive');
17:36 pmichaud defines %additive as having prec => 't='  and assoc => 'left'
17:37 Coke PerlJam: done.
17:37 pmichaud then later
17:37 pmichaud token infix:sym<+> { <sym> <O('%additive, :pirop<add>')> }
17:37 pmichaud says that an infix + token should have the attributes defined by %additive, as well as pirop => 'add'
17:38 pmichaud the string  '%additive, :pirop<add>'   becomes the same as writing  ':prec<t=>, :assoc<left>, :pirop<add>'
17:38 Coke do the capitalizations on INn matter?
17:38 pmichaud yes
17:38 pmichaud I = int register
17:38 pmichaud N = num register
17:38 pmichaud n = num register or numeric constant
17:38 pmichaud i = int register or integer constant
17:38 pmichaud S = string register
17:39 pmichaud s = string register or string constant
17:39 pmichaud P = pmc register
17:39 Coke I get the idea. =-)
17:39 pmichaud there is also
17:39 pmichaud * = anything
17:39 pmichaud ~ = string register, string constant, or PMC
17:39 pmichaud + = anything numeric
17:39 pmichaud v = void
17:40 * diakopter learns
17:40 pmichaud so,   iseq INn     forces the opcode to look something like   $Ixx = iseq $Nxx, ##
17:40 * PerlJam builds a better parrot
17:40 pmichaud where ## will be a numeric constant if the argument is already numeric, otherwise it's cast into a $Nyy register
17:41 pmichaud I'm thinking of modifying the :pirop syntax to be    iseq__INn   (using double underscore instead of space), so that it more closely matches the pir::iseq__INn syntax in NQP
17:41 pmichaud (the old space separate form will continue to work through 2.0, of course :)
17:42 pmichaud time for lunch here  -- bbiah
17:42 pmichaud (wife is treating me to lunch :)
17:46 pmichaud btw, is there somewhere that has a better description of what {*} does exactly?
17:46 pmichaud it seems to me that it's just a form of :flat
17:46 PerlJam Coke: okay, teach me a little tcl syntax:  How do I set a variable and then output its value?  I tried "set x 3 ;puts [expr x]"
17:47 pmichaud PerlJam: set x 3; puts $x
17:47 pmichaud $x  is the rvalue form
17:47 pmichaud (waiting on wife to be ready to go)
17:48 Coke also, [set x]
17:48 Coke (though that fails atm.)
17:49 PerlJam How do I make an array?
17:50 PerlJam (llength looks easy enough too if only I knew more tcl  :)
17:50 Coke llength == list, not array.
17:50 PerlJam sorry, list then
17:50 Coke array in tcl means associative array.
17:50 Coke well, in a real tcl, you could do [list a b c]
17:51 Coke but if you stringify that, you get "a b c"... which conveniently listifies if you try to call llength or something listy on it.
17:51 Coke (so just use space separated strings for now.)
17:51 PerlJam so, "set x [list a b c]" ?
17:51 Coke yes.
17:52 pmichaud is that substantially different from    set x {a b c}   , ooc?
17:52 Coke pmichaud: in one, you end up with a list object internally. in the other, you end up with a string.
17:52 Coke but if you treat the string like a list, it morphs to one.
17:52 pmichaud and same for treating list like a string?
17:52 Coke yes.
17:52 pmichaud okay, that's what I thought.  I didn't write the custom list or string types needed to do that.
17:52 * PerlJam wonders if pmichaud is making the other pmichaud wait or if it's the other way around.
17:53 Coke pmichaud: I obviously already have most of that in PIR.
17:53 pmichaud Coke: right -- thus I figured I didn't need to worry about it :)
17:57 PerlJam Is it just me or is github being a little slow?
17:57 lucian PerlJam: i think it's just you
17:58 bubaflub github website or github push/pull?
17:58 PerlJam push/pull
17:58 purl well, push/pull is a pain because you can't change default push to not match pull
17:59 pmichaud Coke:  uplevel is     uplevel 3 {code}    which runs code in a context three levels up?
18:01 Coke yes, where 3 could also be of the style #N where it's then N levels down from the topmost context.
18:01 Coke so, uplevel #0 {code} runs code in the global context.
18:01 pmichaud oh.  I think that's pretty easy to implement in the nqp version
18:01 pmichaud does that mean that   eval {code}   is essentially the same as    uplevel 0 {code}   ?
18:02 pmichaud yay, we finally can go to lunch now
18:02 pmichaud bbiaw
18:03 nopaste "coke" at 72.228.52.192 pasted "3 examples for pmichaud" (13 lines) at http://nopaste.snit.ch/18791
18:03 Coke (I think eval does a little more processing on the input)
18:03 Coke enjoy l unch.
18:04 Coke I hope to hear "easy in nqp" very often, btw. =-)
18:05 Coke PerlJam++ #that was quick.
18:07 PerlJam I'll happily implement LHF if you point me at it   :)
18:08 PerlJam (though I'm still not sure how to think about lists in tcl)
18:08 Coke LHF?
18:08 purl somebody said LHF was Low Hanging Fruit
18:08 Coke ah.
18:09 Coke PerlJam: lists are kind of like scalars in tcl.
18:09 chromatic joined #parrot
18:09 Coke They're one of the types that stringifies and back. (as opposed to arrays, which are the only real "container" type.)
18:09 dalek parrot: r42603 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
18:09 dalek parrot: [distutils] add a target 'win32-inno-installer'
18:09 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42603/
18:10 Coke PerlJam: feel free to strike incr from the todo list.
18:10 Coke er, the TODO list.
18:10 PerlJam oh, yeah, I forgot about that
18:10 Coke puts stderr/stdout (with just literals for those channel ids) would probably be pretty easy.
18:11 Coke http://www.tcl.tk/man/tcl8.5/TclCmd/puts.htm
18:17 dalek TT #1142 closed by mikehh++: test 12 of t/pmc/eval.t fails in testr (passes in other runcores)
18:20 eiro joined #parrot
18:20 dalek TT #1310 created by bubaflub++: [PATCH] convert t/library/md5.t to PIR
18:22 PerlJam how do you even write to stderr in parrot?  Is there a say-equivalent for stderr (that doesn't die :)
18:23 Tene PerlJam: I think there's a way to get the stderr object, and then you write to it.
18:24 cotto_work PerlJam, use the getstderr op and pass that as the first argument to say
18:24 jan joined #parrot
18:24 cotto_work wait, scratch that
18:25 cotto_work you have to use print
18:30 mikehh bubaflub: I like that patch - will test it in a bit and apply it if it is ok
18:30 bubaflub mikehh: okey dokey.
18:34 PerlJam Coke: what are your plans for partcl's test suite?
18:34 PerlJam Coke: (I feel a little weird adding some functionality with no tests)
18:34 Coke PerlJam: I was trying to get it to the point where I could just run partcl's test suite.
18:34 Coke (and fail most of it miserably.)
18:35 Coke perhaps a "sanity" test file for "things we need to get to get test_more working."
18:35 PerlJam Coke: well, checkout what I just pushed and tell me if I did anything very wrong :)
18:35 Coke (just a single .t for now)
18:36 Coke I am almost willing to admit that NQP looks nicer than .hllmacros. =-)
18:37 Coke PerlJam++ #nice.
18:37 PerlJam almost?
18:38 Coke PerlJam: (you can remove puts from the todo. =-)
18:38 PerlJam ack!  I forget again.
18:39 Coke I don't know how I'd write an NQP based .t
18:39 Coke (that runs tcl)
18:40 Coke I wonder how return would work. it throws a control exception (of type return), but wouldn't that interfer with the NQP that the command is now written in?
18:41 Coke (test) guess I could just do it the hard way.
18:42 joeri joined #parrot
18:44 chromatic Do I remember that someone wrote a test for using the wrong type of register with :opt_flag?
18:44 mikehh All tests PASS (pre/post-config, smoke (#30080), fulltest) at r42603 - Ubuntu 9.10 amd64 (g++ with --optimize)
18:45 cotto_work chromatic, I recall seeing something like that fly by.
18:46 Coke chromatic: me, yes.
18:47 Coke regressions.t
18:47 chromatic Lovely, thanks
18:49 bubaflub hey ya'll, after running `make realclean` `git status` shows some files that are still untracked
18:49 bubaflub shouldn't realclean nuke everything that isn't tracked?
18:49 cotto_work bubaflub, parrot's vcs is svn
18:49 cotto_work ;)
18:49 bubaflub yeah, i'm using git svn
18:49 cotto_work ah
18:50 bubaflub it looks like some stuff in runtime/parrot/library/*.pbc
18:50 bubaflub HLL.pbc, P6Regex.pbc, Regex.pbc, and nqp-rx.pbc in there
18:50 bubaflub and then parrot-npq stuff as well
18:50 payload joined #parrot
18:52 Coke PerlJam: there, sanity test.
18:53 Coke bubaflub: yes.
18:55 bubaflub should some of those files be added to the makefile?
18:57 darbelo joined #parrot
19:04 pmichaud back from lunch
19:06 dalek parrot: r42604 | chromatic++ | trunk (4 files):
19:06 dalek parrot: [IMCC] Made IMCC throw a syntax error when using :opt_flag on a register that's
19:06 dalek parrot: not of the int type; this would have caught TT #744 (reported by Stephen
19:06 dalek parrot: Weeks).  This passes and unTODOs the three tests added in r42569.
19:06 pmichaud Coke: yes, throwing return from a NQP "return" sub would likely get caught.
19:06 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42604/
19:06 pmichaud maybe the answer is to have "return" written as a bare block instead of a routine
19:07 Coke well, we do have to dispatch to it. not sure how bare block would handle that.
19:07 pmichaud I'm thinking   GLOBAL::return := { ... };
19:07 pmichaud or, since you'll want args
19:07 pmichaud GLOBAL::return := -> *@args { ... };
19:08 Coke just slap that into Commands.pm ?
19:08 pmichaud probably needs to be in an INIT block in order to run
19:08 pmichaud and we need the code in the ... to create and throw the return exception
19:09 pmichaud although...
19:09 pmichaud 'return' already does that
19:09 pmichaud hmmm
19:09 dalek winxed: r183 | julian.notfound++ | trunk/examples/parser.winxed:
19:09 dalek winxed: parser example: temporary registers are now temporary
19:09 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=183
19:09 pmichaud simple form of return only takes a single argument?
19:09 pmichaud so I'd guess
19:09 pmichaud INIT { GLOBAL::return := -> $result = '' { return $result; }
19:10 pmichaud }
19:10 pmichaud then we need to get proc-defined blocks to catch return exceptions
19:11 pmichaud which, iirc, is just $block.control('return_pir');
19:11 Coke pmichaud: looks like it works without changing proc.
19:11 particle joined #parrot
19:11 Coke is proc already of a type that understands what a return exception means?
19:11 pmichaud no
19:12 pmichaud it's just a Block, iirc
19:12 pmichaud normally it wants to have a .control()
19:12 Coke (works) tclsh8.5 != pmtcl. :)
19:12 Coke Could not find non-existent sub return
19:13 pmichaud hmmm.
19:14 dukeleto 'ello
19:14 pmichaud oh, fwiw, I was generally keeping the commands in Commands.pm in alphabetical order  (noticing 'incr' at the bottom)
19:14 pmichaud puts was the exception, because we needed it before being able to do anything else :)
19:15 pmichaud omg, we have -nonewline?!
19:15 pmichaud cooooool
19:15 KatrinaTheLamia joined #parrot
19:16 Coke PerlJam++ was busy.
19:19 pmichaud Could not find non-existent sub return
19:19 pmichaud ....weird.
19:19 pmichaud I can see in the trace where it's indeed being set.
19:19 Coke is that tcl or nqp complaining, I wonder? =-)
19:19 pmichaud It's parrot.
19:19 pmichaud pmichaud@orange:~/partcl-nqp$ ./pmtcl 12248 set P0, PC810                                        P0=PMCNULL PC810=Sub=PMC(0x8320d60 pc:12262) 12251 capture_lex P0                                        P0=Sub=PMC(0x8320d60 pc:12262) 12253 set_hll_global PC799, "return", P0PC799=Key=PMC(0x834336c)  P0=Sub=PMC(0x8320d60 pc:12262) 12257 trace 0
19:19 pmichaud ugh
19:19 pmichaud irssi paste fail
19:20 Coke right, but it is complaining about tcl's return sub that we efined with INIT... or is it complaining about that sub's use of nqp's return?
19:20 pmichaud (nopasting)
19:20 pmichaud nqp's return doesn't result in a subroutine call
19:20 pmichaud so, it's the former.
19:21 Coke ok. INIT (GLOBAL::) is very magical to me, so I don't know where to start, there.
19:21 Coke (how does that differ from "our sub") ?
19:21 pmichaud INIT { ... }  simply defines things to be run when the code is loaded
19:21 pmichaud GLOBAL:: refers to the global hll namespace
19:22 pmichaud the difference is that   "our sub"  places a return handler in the block
19:25 bubaflub i'm having trouble converting a regex to something usable in PIR ... where is the doc for the syntax for new style regexes?
19:25 chromatic Hm, I can parse 127.1 lines of Actions.pm per second.
19:26 pmichaud chromatic: is that after your changes of last night?  I was going from the timings as of yesterday.
19:26 chromatic Yes, this is after my changes.
19:27 Coke bubaflub: the p6 regexes are described in synopsis 5.
19:27 bubaflub coke, thanks
19:27 pmichaud (i.e., when it took 16sec for me to compile a 685 line Actions.pm .
19:27 Coke http://perlcabal.org/syn/S05.html
19:27 chromatic It takes me 5.4.
19:27 pmichaud I'll try it again.
19:27 chromatic Are you using an optimized build?
19:28 pmichaud oh, probably not.
19:28 Coke insert rant about not being able to build optimized on os x. :|
19:28 pmichaud I can try with optimize.
19:28 chromatic Here's a nickel, kid.  Go buy yourself a Unix written sometime this millennium.
19:28 pmichaud "And bring back my nickel when you're done."
19:29 pmichaud Coke: aha.  Looks like the nqp-rx in parrot is a bit out of date.
19:29 pmichaud it's not the version that understands GLOBAL::
19:30 * Coke waits for the inevitable update!
19:30 pmichaud double-checking that it indeed works in nqp-rx master, first.
19:31 pmichaud it doesn't.
19:31 pmichaud bug bug bug
19:31 pmichaud ohhhhhhh
19:31 pmichaud no.
19:31 pmichaud hrm.
19:31 pmichaud ohhhhhh
19:31 pmichaud fixing.
19:32 Coke "aaaaaah ooooooh whatcha gonna dooooo?"
19:33 PerlJam "bad bugs, bad bugs, ... "  ?
19:35 * Coke was referring to the fu schnickens, but points for pop culture reference.
19:39 bubaflub arg, these new fangled perl 6 regex are killing me softly
19:39 dukeleto bubaflub: why so?
19:39 bubaflub dukeleto: i'm so use to "regular" regular expressions, i.e. Perl 5 style
19:40 pmichaud ugh, I need to run to store for a bit.  Will fix GLOBAL:: when I get back
19:40 bubaflub and all their convoluted nonsense
19:40 pmichaud in meantime, can do
19:40 bubaflub that the simpler stuff is actually taking some getting use to
19:40 PerlJam bubaflub: once you do get used to it, you'll never want to go back.
19:40 pmichaud INIT {  pir::set_hll_global__sP('return', -> $result = '' { return $result; } ); }   # I think
19:41 bubaflub PerlJam: last time i heard that, it was about switching to git from svn and they were totally right
19:41 PerlJam heh.
19:41 * PerlJam wonders if he was the one who said that about svn->git too
19:41 PerlJam (I would have said something like that anyway)
19:42 bubaflub PerlJam: well, i had to start learning last year for work
19:42 bubaflub long before i was hacking parrot
19:42 bubaflub but no doubt it is the case
19:42 bubaflub that you also said that
19:47 chromatic Hah, STRINGNULL is a performance improvement.
19:49 Coke chromatic: vindicated much?
19:51 chromatic I like when correctness AND performance improve together.
19:51 chromatic Oh yes, and the resulting code is *shorter*.
19:52 Coke pmichaud: I cannot make that work; complains that set_hll_global is getting /3/ args instead of 2.
19:52 Coke dropping the __sP, it then complains that the types are wrong.
19:53 Coke chromatic: how much of a performance improvement?
19:54 dalek TT #1311 created by bubaflub++: [PATCH] convert t/library/uuid.t to PIR
19:54 * Coke ponders running another spectest run on partcl0
19:54 Tene chromatic++
19:55 dalek parrot: r42605 | chromatic++ | trunk/src/pmc/string.pmc:
19:55 dalek parrot: [PMC] Used STRINGNULL in String PMC's init() instead of a new empty STRING,
19:55 dalek parrot: which improves performance on the NQP-rx Actions.pm benchmark by 1.45%.
19:55 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42605/
20:02 mikehh bubaflub: commited your patch at r42606
20:02 dalek parrot: r42606 | mikehh++ | trunk/t/library/md5.t:
20:02 dalek parrot: convert test to pir - patch from bubaflub++ (TT #1310)
20:02 purl I don't know how to convert test to pir - patch from bubaflub++ (TT #1310).
20:02 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42606/
20:02 bubaflub cool
20:06 pmichaud Coke: working on return now
20:06 pmichaud (updating nqp-rx first)
20:08 dalek winxed: r184 | julian.notfound++ | trunk/examples/parser.winxed:
20:08 dalek winxed: labels and goto in example parser
20:08 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=184
20:10 dukeleto chromatic++ # stringy nulls!
20:10 Essobi Is it save to blackrain
20:10 Essobi woops.. wrong window. Heh
20:10 Coke next up? stringy squirrel.
20:12 dalek parrot: r42607 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
20:12 dalek parrot: [distutils] add a target 'smoke'
20:12 * dukeleto prefers meaty squirrels
20:12 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42607/
20:12 Coke pmichaud: (return) thanks.
20:13 Coke (as long as you're in there, basic versions of continue/error/break would also be similar. =-)
20:13 japhb dukeleto, somewhere around here I still have an old copy of the Joy of Cooking which has a whole section on preparing squirrels and other similar small mammals for ... well, one presumes "eating", but perhaps just to scare the neighbors.
20:14 japhb Newer versions seem to skip that section ....
20:14 dukeleto japhb: nice. is that the backwoods edition?
20:14 Coke *thbbthp*
20:16 japhb Older JoC's were ... folksier.
20:16 japhb I remember back a decade or two buying the "now with (some) vaguely healthy food" edition.
20:17 dalek lua: 05607fb | fperrad++ | setup.pir:
20:17 dalek lua: use target 'smoke'
20:17 dalek lua: review: http://github.com/fperrad/lua/commit/05​607fb1d76bd482d4cda9bf51a1868aea0e4be2
20:17 dalek nqp-rx: b387ccf | pmichaud++ |  (2 files):
20:17 dalek nqp-rx: Allow bareword GLOBAL:: package identifier.
20:17 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/b​387ccfc432da46e854f30faa4a6feb41ee17292
20:17 dalek nqp-rx: 2443dcc | pmichaud++ | src/stage0/ (3 files):
20:17 dalek nqp-rx: Update bootstraps.
20:17 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/2​443dcc1d14f30463d21b279d630240d94268550
20:20 dalek TT #1312 created by bubaflub++: [PATCH] convert t/library/protoobject.t to PIR
20:20 bubaflub i'm out for now, everyone have a great weekend
20:22 dalek winxed: r185 | julian.notfound++ | trunk/examples/parser.winxed:
20:22 dalek winxed: minor fixes
20:22 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=185
20:23 cognominal joined #parrot
20:26 * Coke wonders how S| in p6 is different from ||
20:26 dalek parrot: r42608 | pmichaud++ | failed to fetch changeset:
20:26 dalek parrot: [nqp]:  Update to allow bare GLOBAL::symbol handling.
20:26 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42608/
20:28 pmichaud pushed update for return
20:28 pmichaud so, anywhere that I can find a better explanation of {*} in tcl ?
20:29 dalek lua: 010a358 | fperrad++ |  (5 files):
20:29 dalek lua: remove testclean,
20:29 Coke the "list of twelve" there doesn't help? checking the tclers wiki...
20:29 dalek lua: clean up is done in each test
20:29 dalek lua: review: http://github.com/fperrad/lua/commit/01​0a35898f9bce223c00bfa6c649f31fd046a69f
20:30 Coke (list of twelve is the "Dodekalogue", btw.)
20:30 pmichaud {*} is described there, but not clearly enough that it matches what I see from tclsh
20:31 pmichaud I think I'm missing something.
20:31 Coke here's the original TIP (like an RFC):
20:31 Coke http://www.tcl.tk/cgi-bin/tct/tip/157
20:31 Coke (where * was spelled expand)
20:32 Coke pmichaud: verified, that makes 'return' work.
20:32 dalek parrot: r42609 | chromatic++ | trunk/src/pmc/resizableintegerarray.pmc:
20:33 dalek parrot: [PMC] Modified ResizableIntegerArray PMC to use accessor macros instead of
20:33 dalek parrot: VTABLE calls in hot paths; this gives about a 0.5% performance improvement on
20:33 dalek parrot: the NQP-rx Actions.pm benchmark.
20:33 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42609/
20:33 dalek parrot: r42610 | NotFound++ | trunk/src/ops/cmp.ops:
20:33 dalek parrot: use STRING_IS_NULL in if_null and unless_null ops
20:33 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42610/
20:33 Coke (I'd write a test, but sanity.t is dying. =-)
20:33 Coke actually, I'll write a test anyone, one more thing to pass...
20:33 pmichaud so, it looks to me like {*} means   "perform substitutions, split into words, pass as flattened arguments"
20:35 pmichaud ...except that it does do backslash and brace handling... or, something.
20:37 Coke backslash is part of perform substitutions.
20:38 Coke (note that real tcl provides [subst] to do these substitutions at run time as well, as an aside.)
20:39 Coke so, yes, as I understand it, {*}<WORD> will replace that with [subst <WORD>] - and then replace that one word in the AST with all the words that result after the subst.
20:39 Coke so... yes, pretty much what you said.
20:44 Coke so, I would make a {*}<WORD> a special kind of word that you can use in a command (at any point, even as the command itself), and then have the ast there do a pass of substitutions (can we just do something like eval there and have it return the ast?) and wedge the ast from that into the ast of the command. Yes?
20:50 chromatic Hm, get_bool is 5.66% of execution time.
20:52 Coke r42609 breaks encapsulation, yes?
20:52 Coke (or no, because it's SELF?)
20:52 Coke (is it all SELF?)
20:52 japhb chromatic, did you fix pmichaud's issue about needing to invalidate the method cache on add_method?  I've gotten lost in the flow of commits ....
20:52 chromatic I haven't yet.
20:52 japhb k
20:52 japhb Thought I just didn't notice it go by.
20:52 chromatic I have most of an algorithm in my head, but haven't had the brainpower to make it work.
20:53 Coke (would GET_ATTR_foo even work on another type?)
20:53 chromatic If it's a subclass.
20:54 Coke k. so i won't worry about it. =-)
20:58 pmichaud chromatic: my suggestion is have a global counter or marker somewhere that gets cleared whenever a new method is added (to any class)
20:59 pmichaud protoregexes have to deal with something of the same issue-- they have to recalculate tables whenever a new regex is added
21:00 pmichaud each cache keeps track of the marker that was in place when the cache was created; if the marker changes, then the cache invalidates itself and starts anew
21:01 pmichaud more sophisticated mechanisms are possible, but this one is fairly simple and works okay when adding methods occurs infrequently (and in batches, such as with load_bytecode)
21:02 japhb dukeleto, ping
21:03 pmichaud Coke: surely the substitutions take place at runtime, not at compile time though?
21:03 pmichaud I don't think {*} is like an eval.
21:03 Coke the trick is that compile time doesn't happen until that command. =-)
21:03 pmichaud I think it's like a "take the result of normal substitutions to the following word and interpolate them here"
21:04 pmichaud so  cmd {*}"a b c"   is the same as    cmd a b c
21:04 Coke as long as it happens before the command getting invoked sees it, we're fine.
21:04 pmichaud right, that's definitely the case
21:04 pmichaud but with something like
21:05 pmichaud {*}{abc [expr 3+5] def}
21:05 pmichaud ...what happens there?
21:05 Coke that invokes the command "abc" with the arglist "8 def", I believe.
21:05 pmichaud well, something like   puts {*}{abc [expr 3+5] def}   then
21:06 theory joined #parrot
21:06 pmichaud % puts {*}{abc[expr 3+5]def}
21:06 pmichaud can not find channel named "abc[expr"
21:06 Coke puts("abc",8,"def") ?
21:06 Coke moment.
21:06 pmichaud in this case, the "substitution" is a brace substitution, no further substitutions occur, so the result is  puts("abc[expr", "3+5]def")
21:07 pmichaud (which is an error, because the first argument isn't a channel)
21:07 pmichaud but with
21:07 pmichaud % puts {*}{abc\ndef}
21:07 pmichaud abc
21:07 pmichaud def
21:07 pmichaud the \n substitution gets performed.
21:08 Coke yah, that's not what I was expecting, apologies. (verified with tclsh8.5)
21:09 Coke checking the docs again...
21:09 pmichaud [5] says
21:09 pmichaud "After substitution, the word is parsed again without substitutions, and its words are added to the command being substituted."
21:09 Coke right, but for me "substitutions" is all 3 kinds.
21:09 Coke (so the docs are a little misleading there.)
21:09 pmichaud sure
21:09 Coke seeing if there's a spectest.
21:10 pmichaud substitutions is all three kinds, but that would be
21:10 pmichaud hmmm, nm.
21:11 Coke basic.test has a lot of tests, one of which is:
21:11 Coke catch {namespace delete {*}[namespace children :: test_ns_*]}
21:12 Coke OH.
21:12 Coke puts {*}{abc [expr 3+5] def} NEQ
21:12 Coke puts {*}"abc [expr 3+5] def"
21:12 TimToady S| returns a junction, not the first true value
21:12 Coke TimToady: ah, thanks.
21:12 purl ah, thanks. is it fast enough?
21:12 Coke no, thanks is <reply>
21:12 pmichaud Coke: right, I understand the difference between the quoted version and the brace version
21:13 pmichaud in the quoted version, the substitution takes place before the split
21:14 pmichaud in the brace version, I would expect no substitutions to occur... but backslash substitutions do.
21:14 pmichaud % proc xyz {} {return 8}
21:14 pmichaud % puts {*}"abc[xyz]def"
21:14 pmichaud abc8def
21:14 pmichaud % puts {*}{abc[xyz]def}
21:14 pmichaud abc[xyz]def
21:15 pmichaud % puts {*}{abc\ndef}
21:15 pmichaud abc
21:15 pmichaud def
21:15 pmichaud it's just weird that backslash substitutions are included.
21:15 pmichaud when other "substitutions" are not.
21:16 Coke Yup. I agree, that is wierd. (checking to see if partcl can deal with any of these properly...)
21:16 Coke sorry I misunderstood the problem you were pointing at.
21:16 pmichaud the TIP mentioned Tcl_SplitList -- is there a command that corresponds to that?
21:17 Coke that's the raw C function in the Tcl API.
21:17 pmichaud right
21:17 Coke (which we're not using.) I'd have to skim tcl source to see what calls it.
21:17 pmichaud okay.
21:18 Coke partcl does handle those 3 cases properly. =-)
21:18 Coke I think mdiep did the original version of that.
21:19 pmichaud While extracting the arguments, Tcl_SplitList obeys the usual rules for backslash substitutions and braces.
21:21 dcolish will following trunk on launchpad be essentailly the same as following svn TRUNK?
21:21 Coke note that if we can just get a {*} that only passes 2 of those 3 samples, that's might get us through test_more.tcl
21:21 Coke (but doing it right the first time++, of course.)
21:21 Coke pmichaud: pinging #tcl...
21:23 Coke dcolish: I'm not sure if that's automatically synced. I am not sure launchpad is used for anything at this point, though.
21:24 Coke (huh. seems to be nearly up to date with annoyncements, at least.)
21:24 dcolish looks like it gets imported every 2 hours, but yeah i was sort of asking if it get used or not
21:25 Coke it was allison's push to get us on there. I think she was the only one that actively used it.
21:25 pmichaud Coke: okay, I think I have it figured out now from tclsh.  It's not the same as any of the existing substitutions -- it is its own beastie.
21:25 dukeleto dcolish: hola
21:25 dcolish dukeleto: hey !
21:25 dukeleto dcolish: i wanted to come to the pdxpug meeting last night, but IRL got in the way
21:25 Coke pmichaud: [::facepalm::]
21:25 chromatic Perl 5 has a similar marker.  I think it's possible to walk MRO backwards and touch only the affected classes, but we'll see.
21:26 dukeleto who wants to be a @parrotvm social media ninja?
21:26 dcolish dukeleto: not a problem, i'll be doing a phase 2 talk at one point
21:26 pmichaud chromatic: ...but how to walk mro forwards?
21:26 dcolish you did miss cupcakes although
21:26 chromatic We do have a GC which knows how to walk classes.
21:26 pmichaud chromatic: i.e., if I add a method to a parent class, how does all of its subclasses learn of it?
21:27 pmichaud okay, I could see how the gc could help a bit.
21:27 pmichaud just seems... weird.
21:27 Coke pmichaud: this may be instructive:
21:27 Coke lindex [list {*}{abc\ndef}] 0
21:27 mikehh joined #parrot
21:28 chromatic Mostly I mean that all classes have a single root.
21:28 Coke this may be covered by partcl's list/string shimmering
21:28 Coke (which would explain why it jfw for us.)
21:28 pmichaud Coke: this one surprised me a bit:
21:28 pmichaud % puts {*}{abc\n{def\nghi}}
21:28 pmichaud abc
21:28 pmichaud {def
21:28 pmichaud ghi}
21:28 chromatic Though walking all classes and filtering by presence in MRO may be more expensive than the naive "increment a generation number" approach.
21:29 allison Coke: I really only use launchpad for Ubuntu package testing (it is good for that)
21:30 particle dukeleto: http://www.king5.com/news/local/Police-Would-b​e-Seattle-ninja-impaled-on-fence-70291187.html
21:30 pmichaud afk, kid pickup
21:31 Coke pmichaud: I think the string -> list conversion there is what is surprising us. (and then it has to be converted back to a string for display)
21:33 dcolish is the http://docs.parrot.org/parrot/latest/​html/docs/book/pct/ch05_nqp.pod.html page still valid for nqp-rx?
21:34 Coke pmichaud: "parsed again /as a list/ without substitutions" is probably slightly more accurate.
21:34 Coke there is an objection that this makes Tcl.n non-self-contained, but I argue that the code isn't, so neither should be the man page.
21:35 Coke (opening a tcl tracker...)
21:36 payload joined #parrot
21:37 dalek TT #1310 closed by mikehh++: [PATCH] convert t/library/md5.t to PIR
21:43 pmichaud oh, I get it a bit
21:44 pmichaud in the last case, the braces aren't normal braces.
21:44 pmichaud but they still count for bracketing equality... which is kinda weird.
21:46 pmichaud ah, I see why they count for bracketing equality.
21:46 pmichaud very interesting :-)
21:47 pmichaud okay, I think I've got it.
21:47 pmichaud let's see if I can get a reasonable attempt for {*}
21:47 Coke +10
21:47 purl 10
21:47 pmichaud another errand, bbiab
21:49 Coke well, then only +8!
21:49 diakopter +16!
21:50 Coke pmichaud: https://sourceforge.net/tracker/?func=detail&amp​;aid=2901433&amp;group_id=10894&amp;atid=110894 (doc bug reported on {*})
21:56 nopaste "NotFound" at 213.96.228.50 pasted "Fix for examples/benchmarks/primes.pasm" (26 lines) at http://nopaste.snit.ch/18797
21:56 NotFound Is this fix correct?
22:00 chromatic Seems reasonable to me.
22:04 dalek TT #1313 created by bubaflub++: [PATCH] convert t/library/parrotlib.t to PIR
22:05 dalek parrot: r42611 | NotFound++ | trunk/examples/benchmarks/primes.pasm:
22:05 dalek parrot: [examples] fix primes.pasm to show the same "last is" as the other versions
22:05 dalek parrot: review: https://trac.parrot.org/parrot/changeset/42611/
22:05 NotFound Forgot to add: PacoLinux++
22:11 mikehh All tests PASS (pre/post-config, smoke (#30083), fulltest) at r42610 - Ubuntu 9.10 amd64 (gcc with --optimize)
22:11 mikehh bubaflub: will check out your new patch after a bit of a break
22:16 dalek winxed: r186 | julian.notfound++ | trunk/winxed.cpp:
22:16 dalek winxed: relax restrictions on ++ and -- operators
22:16 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=186
22:26 dalek winxed: r187 | julian.notfound++ | trunk/winxed.cpp:
22:26 dalek winxed: allow usage of <, <=, > amd >= with var
22:26 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=187
22:27 * chromatic tries describing a small, short-term project on the wiki
22:29 dalek tracwiki: v1 | chromatic++ | ClassVtableOverrides
22:29 dalek tracwiki: a plan and a plea for volunteers
22:29 dalek tracwiki: https://trac.parrot.org/parrot/wiki/Class​VtableOverrides?version=1&amp;action=diff
22:29 dalek tracwiki: v2 | chromatic++ | ClassVtableOverrides
22:29 dalek tracwiki: formatting improvements
22:29 dalek tracwiki: https://trac.parrot.org/parrot/wiki/Class​VtableOverrides?version=2&amp;action=diff
22:31 chromatic That should be an afternoon's worth of work for an Infinoid, a NotFound, a Tene, a Whiteknight, a cotto, or a bacek.
22:31 Tene What am I doing this weekend?
22:32 Tene oh, it's a wiki! Hello, wiki!
22:34 NotFound chromatic: I've been thinking about that sveral times, but never materialized.
22:35 chromatic Object's get_bool() is 5% of the NQP-rx benchmark I've been using, all thanks to checking for vanishingly few VTABLE overrides.
22:38 NotFound Interesting.
22:38 pmichaud note that vtable overrides are quite common in Rakudo, though.
22:39 chromatic If the suggested approach works, we don't pay the penalty for checking for them.
22:39 pmichaud that's fine
22:39 pmichaud just making sure that nqp-rx isn't taken as HLL representative in that respect
22:39 pmichaud (because nqp-rx is explicitly designed to work with native Parrot PMCs and not custom types, unlike HLLs which will tend to do a lot more overriding)
22:40 NotFound Another improvement might be to avoid entering a runloop in opcodes that does only a vable call, but I fail to imagine a plan for that.
22:41 chromatic I've had the same idea, NotFound, but I don't have a good plan either.
22:43 lucian joined #parrot
22:53 Coke chromatic: +1 on that mini project. will save a bunch of (#&*$ annoying code.
23:10 ilbot2 joined #parrot
23:10 Topic for #parrotis now Parrot 1.8.0 Zygodactyly released | Latest modified TT's: http://icanhaz.com/parrotbugs | Parrot Languages: http://icanhaz.com/parrotlang
23:10 nopaste "pmichaud" at 72.181.176.220 pasted "{*} expansion in pmtcl -- for Coke" (16 lines) at http://nopaste.snit.ch/18798
23:11 particle joined #parrot
23:11 Coke sweet!
23:11 Coke did you roll your own list->string->list conversion?
23:11 pmichaud string->list conversion, yes.
23:11 pmichaud It's handled by the 'list' rule in the grammar.
23:12 pmichaud it parses a string into a list, performing brace and backslash handling in the process
23:13 pmichaud http://github.com/partcl/partcl-nqp/​blob/master/src/PmTcl/Grammar.pm#L60
23:13 dalek parrot-plumage: e03130c | japhb++ | :
23:13 dalek parrot-plumage: Beginnings of speculative changeover to contextual globals; blocked on u...
23:13 dalek parrot-plumage: review: http://gitorious.org/parrot-plumage/parrot-plumag​e/commit/e03130cb080788bb07f8607d6258891e28f13d99
23:13 dalek parrot-plumage: 83bef3a | japhb++ | :
23:13 dalek parrot-plumage: [CORE] Glue.pir: Use less painful way to set dynamic lexicals that may n...
23:13 dalek parrot-plumage: review: http://gitorious.org/parrot-plumage/parrot-plumag​e/commit/83bef3a5c51151d4431e53113fe8d9db6a5b444e
23:13 dalek parrot-plumage: 3968bb3 | japhb++ | :
23:13 dalek parrot-plumage: More contextuals edits; CAN HAZ WURKNG NOW
23:13 dalek parrot-plumage: review: http://gitorious.org/parrot-plumage/parrot-plumag​e/commit/3968bb313afa07179ef645a9d096923292be366b
23:13 baest_ joined #parrot
23:13 sri joined #parrot
23:14 mj41 joined #parrot
23:15 pmichaud btw, there's definitely a problem with
23:15 pmichaud PmTcl::Grammar.O(':prec<13>', '%multiplicative');
23:15 pmichaud PmTcl::Grammar.O(':prec<12>', '%additive');
23:15 pmichaud PmTcl::Grammar.O(':prec<9>', '%compare_numeric');
23:15 pmichaud PmTcl::Grammar.O(':prec<8>', '%compare_string');
23:15 pmichaud precedence comparisons are string compares
23:15 pmichaud so you probably want "09" and "08"
23:16 Coke k
23:17 particle joined #parrot
23:21 Coke fixed.
23:25 particle1 joined #parrot
23:25 dalek winxed: r188 | julian.notfound++ | trunk/winxed.cpp:
23:25 dalek winxed: relax type restrictions o *, /, % and %% operators, unfinished
23:25 dalek winxed: review: http://code.google.com/p/w​inxed/source/detail?r=188
23:29 Coke pmichaud: any clues on the lexpad issue?
23:29 * Coke <- needy.
23:33 payload joined #parrot
23:35 Coke I wonder if <script> needs the same lexpad init as <body>
23:40 payload joined #parrot
23:43 japhb Is there a PIR way to determine whether a code PMC is a sub or a method?
23:45 chromatic $S0 = typeof $P0 ?
23:46 japhb chromatic, should I expect 'Sub' and 'Method' back from that?
23:47 japhb Somehow I expected it to be more contorted than that, given that the only difference is a flag on the .sub declaration ...
23:47 Hunger joined #parrot
23:48 chromatic Hm, good point.
23:48 pmichaud afaik, Parrot doesn't make a type distinction between subs and methods
23:48 japhb pmichaud, I'm having problems with setting object attributes from within inner blocks.  Like within a for loop inside a method.
23:49 japhb (in nqp-rx)
23:49 pmichaud have a short code example?
23:49 japhb Since the inner block is a separate pir sub, no 'self' exists.
23:49 pmichaud it's supposed to be lexical 'self' anyway
23:49 japhb give me a sec, and I'll try to get it minimal
23:50 mariano__ joined #parrot
23:51 japhb parrot-nqp -e 'class Foo; has $!foo; sub foo () { for 1,2,3 -> $a { $!foo := $a } };'
23:51 japhb The opcode 'setattribute_ic_sc_p' (setattribute<3>) was not found. Check the type and number of the arguments
23:52 japhb And with --target=pir, you can see why ... the for loop block isn't a method, and has no way of finding self, but that's what the generated setattribute code uses.
23:52 japhb urg
23:53 japhb Same error if I correctly use method instead of sub above, sorry.
23:56 kid51 joined #parrot
23:58 pmichaud ....doesn't need to find 'self' as a register, because 'self' is lexical.
23:59 pmichaud it can't be a method.
23:59 pmichaud just a sec, it's obviously a bug.
23:59 particle1 joined #parrot

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

Parrot | source cross referenced