Parrot 1.1.0 Released | parrot.org/ | 322 RTs left | Weekly Priority: Remove Deprecated Items
Set by moderator on 6 May 2009.
dalek cnum-dynpmcs: r27 | darbelo++ | trunk/src/pmc/decnum.pmc:
Raise exceptions only on actual errors.
00:04
rrot: r38620 | whiteknight++ | branches/gc_api (8 files):
move pobject_lives into the api. Add a new Parrot_gc_ptr_is_pmc api function to hide some internals functions move some other stuff around
00:11
rrot: r38621 | whiteknight++ | branches/gc_api (57 files):
[gc_api] rename pobject_lives Parrot_gc_mark_PObj_alive
00:18
Whiteknight thank god for sed 00:21
(never thought I would say that)
darbelo I'm not sure I would admit using sed instead of perl arround here :)
Whiteknight i never was any good at perl command-line one-liners 00:22
darbelo toss your script at s2p then ;) 00:23
then you'd be using perl.
dalek rrot: r38622 | whiteknight++ | branches/gc_api/include/parrot (2 files):
[gc_api] move all the guts of gc_mark_sweep.h into gc_api.h, preparing to delete the former
00:25
Whiteknight never even heard of s2p 00:27
darbelo it translates sed to perl. 00:28
dalek cnum-dynpmcs: r28 | darbelo++ | trunk/examples/decnum.pir:
Make the decnum example actually show us something useful.
00:29
darbelo www.perl.com/doc/manual/html/x2p/s2p.html 00:30
Whiteknight good work tonight darbelo 00:33
well, it's night for me
darbelo Thanks. I'll blog about a few discoveries later. Night. 00:34
Whiteknight excellent, looking forward to it! 00:35
goodnight
dalek rrot: r38623 | whiteknight++ | branches/gc_api (7 files):
[gc_api] kill gc_mark_sweep.h file. the public functions are moved into the api, and the private functions into gc_private.h
rrot: r38624 | whiteknight++ | branches/gc_api/src/gc/gc_private.h:
[gc_api] run make headerizer, cleans some things up slightly. Done work for the night
cotto d'oh. I was going to say something nice, but he just left. 00:56
Infinoid There's always next time :) 01:06
I usually run "make test" and "make codetest" in parallel 01:27
When I forget the "code" part on one of those, the results are sometimes spectacular
01:32 confound joined
dalek rrot: r38625 | Infinoid++ | trunk/config/auto/arch.pm:
[config] Apply change from rrauenza++ in TT #653. Apparently r38512 had added the fixup after the string had already been parsed.
01:34
Infinoid Oh no, lost karma!
Infinoid shakes fist at the ghost of purl 01:35
cotto Infinoid++ 01:36
heh
01:36 kid51 joined
Infinoid heh, cotto++ 01:37
cotto now's the time for any would-be purl impersonators
Infinoid I already had it that way, cotto. 01:39
01:42 dukeleto joined
Infinoid I am now officially unemployed 01:53
Oh well, might as well help break the GC.
cotto Sorry to hear that. 01:55
Infinoid Eh, 'tis the season 01:56
s1n Infinoid: laid off? that's a bummer, sorry to hear 01:58
Infinoid thanks, I'll figure something out 02:00
kid51 t/codingstd/perlcritic.........262/307 Argument "5.010_000" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.10.0/Perl/Critic/Document.pm line 139.
don't believe I've seen that warning before.
Infinoid msg whiteknight Hey, breaking the GC looks like fun. Do you have a plan or task list or something? Can I help? 02:01
Oh, ENOPURL
kid51 When I got to parrot.org and search for "YAPC" I don't get any links pertaining to the Parrot workshop preceding the conference -- only links to last year's events. 02:04
It doesn't show up on our little calendar of events thingie, either. 02:05
02:23 dukeleto joined 02:35 janus joined 02:54 qiang joined 02:56 cognominal joined
afk_coke now 03:48
now?
Coke anyone msg masque yet? 03:49
cotto we need purl for that 03:51
03:52 tetragon joined
Coke not msg, /msg 03:52
I just did.
04:08 Andy joined
dalek rrot: r38626 | petdance++ | trunk (2 files):
properly shimmed some arguments
04:31
bacek hi again 04:37
dalek rrot: r38627 | bacek++ | branches/tt631_part3:
Removed tt631_part3 branch. It was merged to trunk
bacek Hey, where is our lovely girl?
dalek tracwiki: v13 | bacek++ | BranchDescriptions 04:44
tracwiki: Drop tt631_part3 branch.
tracwiki: trac.parrot.org/parrot/wiki/Branch...ction=diff
cotto I guess all the karma killed her. 04:52
bacek bad karma... 05:03
cotto: any plans for pmc_pct branch? 05:05
cotto I spent a bunch of time trying to get function pointer attrs working, but I'm putting that off for now. 05:07
Next on the list is generating some meaningful ATTR accessor macros.
Working from the C99 standard turned out to be overkill. 05:08
bacek Ok. I'll take generating vtable functions. 05:10
cotto sounds like a plan
bacek Sorta :) 05:12
cotto enough of one that we won't step on each other's feet 05:15
bacek Agreed 05:16
cotto can regexes be used in nqp? 05:22
bacek cotto: no idea... Probably yes. Grammar is regex anyway. 05:24
05:26 mikehh_ joined
dalek rrot: r38628 | petdance++ | trunk/src/hash.c:
consting and fixing indentation
05:36
05:51 preflex joined 06:10 gaurav joined 06:34 cognominal joined 07:03 signals joined 07:04 signals left 07:47 purl joined
bacek hi purl! 07:49
purl: good girl
purl thanks bacek :)
bacek horray! She's back! :)
cotto woohoo 07:50
< purl-- > 07:51
for being broken
incoming 07:52
dalek rrot: r38629 | cotto++ | branches/pmc_pct/compilers/pmcc/src (3 files):
[pmcc] add ATTR accessor macro generation
07:53
cotto still need to figure out function pointer ATTRs and inheritance, but that covers the basics
08:05 iblechbot joined 08:16 contingencyplan joined
bacek cotto++ 08:17
We are getting closer to step 4! :) 08:18
cotto technically yes, but which step 4?
bacek compilers/pmc/TODO :) 08:19
cotto bacek++
profit++
karma profit
purl profit has karma of 6
cotto karma prophet 08:20
purl prophet has karma of 1
bacek profit++ # Need more karma!
afk # kids time
cotto kids are good 08:21
don't forget to feed them. I think they need that.
bacek back 08:48
cotto: oh...
afk # feed kids
cotto btw, how does kangaroo taste? 09:27
cotto suddently wants chicken 09:30
bacek cotto: they are pretty tasty 09:48
ok. Another EPIC FAIL. 10:09
10:09 qiang1 joined
cotto ? 10:09
bacek Trying to parse vtable body independently.
cotto how so? 10:10
bacek Overcomplicated.
I'll try to parse in just in grammar.pg
cotto it looks like figuring out the name of the pmc file being compiled will be interesting too 10:11
although the only reason I need that is so I know where to put the .dump files.
bacek $pmc.name 10:15
cotto no, I mean the actual path to the file, including the filename.
as in src/pmc/file.pmc
although I don't think there's anything wrong with dumping them somewhere else 10:16
bacek Apart from dealing with dynpmc - nothing 10:17
cotto I'll solve it for normal PMCs, then deal with dynpmcs
bacek hey. I created filename/set_filename in emitter.pm. Will they help if we'll use them consistently? 10:18
cotto sure 10:24
we'll need that same info for dumping the .c and .h files anyway 10:27
bacek so, let's use them! :)
cotto obvious++ 10:34
;)
Alright. It's hacky, but inheritance is working. 10:42
and I'm failing a bunch of tests. :{
bacek I'm failing to produce few lines of working code today... Totally stuck... 11:00
11:05 Whiteknight joined
cotto those days happen 11:11
dalek rrot: r38630 | whiteknight++ | branches/gc_api (16 files):
[gc_api] rename the rest of the functions in the API to be Parrot_gc_*, fix some documentation, etc
11:38
cotto committed 11:40
purl, committed
purl cotto: i'm not following you...
dalek rrot: r38631 | cotto++ | branches/pmc_pct/compilers/pmcc (8 files):
[pmcc] initial version of ATTR inheritance
11:41
rrot: r38632 | whiteknight++ | branches/gc_api (2 files):
[gc_api] Remove the last non-api functions from gc_api.c. With that, the GC *should be* properly encapsulated. Now we just need to refine the boundary.
11:45
12:01 Whiteknight joined
cotto Whiteknight, ooc when's that branch going to merge? 12:03
Whiteknight soon, hopefully 12:04
why, you blocking on it?
cotto nope. just curious
12:05 mikehh joined
dalek rrot: r38633 | whiteknight++ | branches/gc_api (7 files):
[gc_api] move some logic from src/pmc_freeze.c to the gc api, because it was monkeying around in the arenas. I'm still not entirely happy about how pmc_freeze breaks GC encapsulation, need to work on that
12:05
rrot: r38634 | cotto++ | branches/pmc_pct/compilers/pmcc/src (4 files):
[pmcc] add support for (simple) function pointer ATTRs
Whiteknight cotto: I could probably merge within a few hours, it's stable now and I don't have a finite todo list 12:08
the longer I keep the branch open, the more I will do
dalek rrot: r38635 | cotto++ | branches/pmc_pct/compilers/pmcc/src/nodes.pir:
[pmcc] fix test failure from previous commit
12:09
cotto but the longer you keep it open, the less fun it'll be to merge 12:10
time for a nap 12:13
12:22 kid51 joined
dalek rrot: r38636 | whiteknight++ | branches/gc_api (4 files):
[gc_api] Add a function to the API to explicitly free a PMC header, to prevent pmc.c from having to deal with Small_Object_Pool structures directly.
12:25
12:28 masak joined
masak oh hai, I'm having build fails with Parrot since chromatic's r38577 optimisation. 12:29
I'm on Darwin. getting "Bus Error" when trying to compile Perl6Grammar.pir
cotto smolder? 12:32
purl it has been said that smolder is sourceforge.net/projects/smolder or web-based smoke test aggregator used by developers and testers to upload (automated or manually) and view smoke/regression tests using the Test Anything Protocol (TAP). or smolder.plusthree.com/app/public_pr..._reports/8
dalek rrot: r38637 | whiteknight++ | branches/gc_api (4 files):
[gc_api] add a new api function Parrot_gc_free_string_header, use that to get references of Small_Object_Pool out of src/string/api.c. Also, use API functions in retcontinuation PMC to preserve encapsulation
12:35
12:39 rdice joined 12:40 rg1 joined
masak chromatic: gist.github.com/109252 12:46
dalek rrot: r38638 | whiteknight++ | branches/gc_api (3 files):
[gc_api] add two new api functions to get the number of active sized buffers, and total sized buffers.
12:48
rrot: r38639 | whiteknight++ | branches/gc_api (4 files):
[gc_api] Small_Object_Pool and Small_Object_Arena structures are now gc-private and are not used or visible outside the GC
12:58
rrot: r38640 | whiteknight++ | branches/gc_api (3 files):
[gc_api] Add new API functions to get the number of GC mark and collect runs, use them to reduce access to the Arenas structure outside the GC
13:11
rrot: r38641 | whiteknight++ | branches/gc_api (3 files):
[gc_api] add more api functions to control access to the Arenas structure
13:18
a: 28ba481 | fperrad++ | src/pmc/luastring.pmc:
fix build with Parrot r38536 (tt631_part2 merge)
13:48
a: c0a72c1 | fperrad++ | src/pmc/lua (4 files):
s/interp/INTERP/g
13:49 pfig joined
dalek kudo: f2557a8 | pmichaud++ | Configure.pl:
Fix bug with Configure.pl's 'make clean' on Win32. (azawawi++)
13:57
13:58 cognominal joined
dalek rrot: r38642 | jkeenan++ | trunk/tools/dev/branch_status.pl:
Change way version is specified to pass perlcritic.t. (This is more likely to be a Perl::Critic bug than our bug. Cf.: rt.cpan.org/Ticket/Display.html?id=45892.). Also, 'use feature' is not needed once we've specified 5.10 (per 'perldoc -f use').
14:01
purl dalek: that doesn't look right
rrot: r38643 | whiteknight++ | branches/gc_api (8 files):
[gc_api] move Arenas struct into gc_private.h. It is no longer directly accessible from outside the GC system. Notice also that the block/unblock routines are no longer macros, they are now regular API functions.
14:04
14:14 tetragon joined 14:27 s1n joined
dalek rrot: r38644 | fperrad++ | trunk/config/auto/gmp/gmp_c.in:
[config] fix compilation on Windows

test_3020.c:29: warning: implicit declaration of function `SetErrorMode' test_3020.c:29: warning: nested extern declaration of `SetErrorMode' test_3020.c:29: error: `SEM_NOGPFAULTERRORBOX' undeclared (first use in this function) test_3020.c:29: error: (Each undeclared identifier is reported only once test_3020.c:29: error: for each function it appears in.)
14:53
14:55 masak joined
Infinoid masak: So your "item" pointer is NULL. Any chance you can check what the "size" value was? 15:04
Looking at r38577, I think it must be some kind of corruption, which means it might be tricky to debug, but we might as well look up the obvious stuff first 15:05
masak Infinoid: teach me how to check, and I'll check. 15:06
dalek rrot: r38645 | whiteknight++ | branches/gc_api (4 files):
[gc_api] some basic cleanups. Rename some stuff to be better, documentation, fix some mis-matched data types
15:07
Infinoid You used gdb to get that backtrace, right?
At the same place you had typed "bt" or "backtrace", type "print size"
masak Infinoid: ok. 15:13
masak does that
Infinoid Thanks.
Which version of parrot are you using?
Just to verify what's going on, does this patch (upcoming nopaste) get things building for you? 15:14
nopaste "infinoid" at 76.215.211.232 pasted "[PATCH] masak: debugging patch, does this crash?" (26 lines) at nopaste.snit.ch/16505
masak one thing at a time :) 15:15
Infinoid hehe
masak getting size for you first.
Infinoid The code changed by r38577 has a couple of code paths, one optimized and one normal. One weird thing is, chromatic's commit message made it sound like it used the optimized case in all cases, but in reality, it enabled *both* code paths. The above nopaste disables the non-optimized path, which I think may have been his intention 15:16
masak as to version, I'm running r38577.
the first one that fails for me.
Infinoid ok, thanks 15:17
masak 'print size' gives '$1 = 12945440' 15:19
jonathan
.oO( that's a big size )
15:20
masak that's what it says.
15:20 Theory joined
Infinoid Wow, sounds like the PMC is definitely corrupt (or not an RPA to begin with) 15:20
masak trying patch now. 15:21
Infinoid Thanks. If it works, I won't be able to explain why, but it fixes the only thing about r38577 which looks suspicious to me 15:22
dalek kudo: 95aab9d | jnthn++ | src/builtins/assign.pir:
Implement hash versions of hyper operators.
jonathan If there's PMC corruption, a -G can be worthwhile too.
masak no need for exact explanations. I just want it to work so I can compile Rakudo. :)
masak Infinoid: it worked. 15:23
purl Of course it worked
masak purl: shut up.
purl make me
masak assaults purl
Infinoid purl, die in a fire
purl HALP
Infinoid masak++ # I'll check in a cleaner version of that 15:24
masak Infinoid++ # thanks for the help
jonathan purl++ # putting up a fun-to-watch fight
dalek rrot: r38646 | whiteknight++ | branches/gc_api/src/gc/api.c:
[gc_api] rearrange some things so they're in a reasonable order
15:26
Infinoid masak: r38648 15:28
dalek rrot: r38647 | Infinoid++ | trunk/config/auto/gmp/gmp_c.in:
[cage] c_indent.t fix.
15:30
masak Whiteknight: ping
rrot: r38648 | Infinoid++ | trunk/src/pmc/retcontinuation.pmc:
[PMC] According to masak++, r38577 causes a SIGBUS on darwin.

The r38577 commit log suggests that the optimized path was enabled in all cases. But in reality, *both* paths were being executed. This patch disables the non-optimized path. I can't tell you why this fixes it, but apparently it does.
Infinoid msg chromatic Can you review r38648 when you get the chance? I don't understand the code well enough to know whether it was the right fix. Thanks!
purl Message for chromatic stored.
dalek rrot: r38649 | jhorwitz++ | trunk/docs/embed.pod:
replace call to internal Parrot_Class_instantiate with VTABLE_instantiate
15:39
16:13 pfig joined
Whiteknight damnit, I tried to merge my branch to trunk and I developed a test failure 16:27
before I go crazy, is anybody else seeing failures on t/pmc/packfiledirectory.t? 16:28
Infinoid It passes in trunk for me 16:33
Which branch? 16:34
Whiteknight gc_api branch 16:51
it passes in the branch too, but when I merge with trunk I get the test failure
masak: pong 16:52
Infinoid I just tried rebasing gc_api on top of trunk, and got a double free error compiling PGE
Whiteknight oh, I must not have committed that fix yet 16:53
masak Whiteknight: the Perl 6 wikibooks thing. I'm given to understand that you've written much of it.
Whiteknight Infinoid: committing that one now 16:54
masak: Yes, I think I've written nearly all of it
but it's out of date now
Infinoid Whiteknight: I've got valgrind output that shows me that your branch changes perturb r38577 somehow; it's accessing an already-freed RetContinuation PMC. Is your fix related to that?
masak Whiteknight: yes. that was part of my point.
dalek rrot: r38650 | whiteknight++ | branches/gc_api/src/pmc/retcontinuation.pmc:
[gc_api] fix for retcontinuation pmc to avoid double-free
masak I'm finding factual inaccuracies in it, or out-of-date things. 16:55
Infinoid heh, cool. Whiteknight++
masak I'd contribute, but I'm slightly uncomfortable with the fact that commits might be left sitting around without being approved.
16:56 Theory joined
masak Whiteknight: this section, f'rex, is way off: en.wikibooks.org/wiki/Perl_6_Progra...t_Matching 16:56
Whiteknight masak: Yeah, probably is. I really need to get back to work on that book and get things improved 17:00
if you send me suggestions/patches I'll implement them for you
masak Whiteknight: as I said, I'd be happy to contribute directly, if I were only a bit more clear on what gets approved and when. 17:01
Whiteknight: I'm used to changes to wikis/svn/git appearing directly.
Whiteknight masak: Nothing gets "approved". All your changes go live immediately on the wiki
masak Whiteknight: it's been a while since I committed to it. 17:02
Whiteknight: last time I did, things had to be approved.
Whiteknight I dont ever remember that being the case, did you log in?
masak aye.
I wouldn't go so far as calling it "off-putting", but it does create a barrier.
Whiteknight yeah, if you're logged in all changes should appear immediately
masak Whiteknight: maybe you're an owner of the book and I'm not. 17:03
or some other difference like that.
Whiteknight nope, no such concept as "owner" or anything.
masak Whiteknight: trying now.
Whiteknight okay, awesome. let me know how it works
(i'll kick some butts if it gives you trouble)
masak Whiteknight: "Edits will be incorporated into the stable version once an authorised user reviews them. The draft is shown below. 1 change awaits review." 17:06
Whiteknight oh, that's an anti-vandalism thing. your edit is visible to all logged-in users
masak ok. I understand the need for protection against vandalism on a public wiki. 17:07
just wondering with what kind of regularity you tend to go actually approving edits. 17:08
Whiteknight pretty regular, we have teams of page-reviewers
masak sounds good.
I'll see if I can make some more sweeping reviews of the text soon. 17:09
Whiteknight Great! masak++ We need all the help on that book we can get
17:10 jhorwitz joined
dalek rrot: r38651 | coke++ | trunk/t/compilers/imcc/syn/regressions.t:
Add a test for TT #654
17:11
Whiteknight okay, I have to disappear for now. later
17:37 pfig joined 17:47 rdice joined 18:48 pfig joined 18:51 Khisanth joined 18:53 pfigz joined 19:01 pfig joined 19:02 Whiteknight joined 19:03 pfigz_ joined 19:12 Eevee joined
dalek rrot: r38652 | whiteknight++ | branches/gc_api (82 files):
[gc_api] merge to trunk from 38520:38575. The error hasn't appeared yet
19:22
rrot: r38653 | whiteknight++ | branches/gc_api (84 files):
[gc_api] merge to trunk HEAD (38652). found the error
19:35
Whiteknight prepare yourselves.... 20:02
dalek rrot: r38654 | whiteknight++ | trunk (132 files):
[gc_api] Behold! Parrot is entering an age of slightly less lousy GC! Merging the gc_api branch into trunk, all tests pass.
20:05
jonathan *gulp* 20:24
:-)
dalek kudo: 67581ac | jnthn++ | src/classes/Code.pir:
Remove duplicate .count method, spotted by jhorwitz++.
jonathan hopes this will make it easier to play with other GC schemes.
20:40 Eevee joined 21:00 register joined 21:04 Theory joined
register where is twek? 21:07
moritz did you mean tewk? 21:08
register yes sorry
i meant tewk
Infinoid Whiteknight: I had to leave for a while, but I'm back. After your double free fix, I have a merged git branch here which seems to test fine 21:26
dalek kudo: 70c5195 | moritz++ | (4 files):
track changed parrot function name
kudo: 7d581a5 | moritz++ | src/pmc/objectref_pmc.template:
forgot one old function name
Whiteknight yeah, I had to comment out a line of code in retcontinuation.pmc:invoke
I'm gdb'ing it right now to figure out why that line causes a failure in packfiledirectory.t 21:27
Infinoid what's the line? (is it checked in?)
things seem to be working fine for me (gentoo/amd64)
oh, it's already merged. nevermind 21:28
Whiteknight Infinoid: it's like 103 21:34
uncomment it, and t/pmc/packfiledirectory.t fails with a segfault
"it's line 103"
I think you've made an edit in that general area recently, removing the "#if NDEBUG" conditional 21:36
Infinoid yeah 21:37
r38648 was my fixup of chromatic's removal of that stuff (r38577)
Whiteknight in the branch I moved most of the code from that section into the Parrot_gc_free_pmc_header, so it should be doing an identical operation 21:38
Infinoid I still don't get a failure in t/pmc/packfiledirectory.t in current trunk, even with that line uncommented 21:45
21:47 pfig joined 21:50 pfigz joined
dalek rrot: r38655 | Infinoid++ | trunk/src/runcore/cores.c:
[core] Fix the following warnings:

src/runcore/cores.c:418: warning: comparison between signed and unsigned
21:59
Whiteknight really? Then I wonder what thehell is wrong with my checkout
rrot: r38656 | Infinoid++ | trunk (6 files):
[cage] Some codetest fixes.
Infinoid something different about our machines perhaps
got a backtrace? 22:00
Whiteknight what machine are you on? I'm Ubuntu 9.04, x86-64
Whiteknight is getting a backtrace right now
Infinoid gentoo x86-64
Whiteknight nopaste? 22:02
clunker3 pasta.test-smoke.org/ or paste.husk.org/ or nopaste.snit.ch:8001/ or rafb.net/paste or poundperl.pastebin.com/ or paste.scsys.co.uk/
purl nopaste is at nopaste.snit.ch/ (ask TonyC for new channels) or rafb.net/paste or poundperl.pastebin.com/ or paste.scsys.co.uk/ or App::Nopaste or tools/dev/nopaste.pl or at www.extpaste.com/ or paste.scsys.co.uk (for #catalyst, #dbix-class, #moose and others)
nopaste "Whiteknight" at 69.249.200.13 pasted "packfiledirectory.t failures for Infinoid++" (67 lines) at nopaste.snit.ch/16511
Whiteknight I printed out the contents of some of the parameters too, the "value" pmc has 0xdeadbeef for it's vtable 22:03
actually, I guess that makes sense since it should be an integer, right?
Infinoid no, integer pmcs still have vtables 22:04
otherwise VTABLE_get_integer() wouldn't work :)
if its vtable is 0xdeadbeef, it probably means it was recycled but something else still had a pointer to it 22:05
though... what that has to do with explicit freeing of retcontinuations, I dunno
Whiteknight I just traced through, and the code before and after the branch in src/pmc/retcontinuation.pmc:invoke does exactly the same stuff 22:08
the same lines of code are executed in the same order
So I dont know why prior to the merge the test passes for me, and afterwards it fails
Infinoid some change in trunk, I guess 22:09
Whiteknight yeah
Infinoid at the time of the crash, does your pmc pointer value change every time you run it?
Whiteknight which pointer value?
p value?
Infinoid nah, pmc 22:10
usually when I have to debug this kind of crash, I end up having to set a watchpoint... but the linux kernel seems to randomize stack or heap locations and I have to turn that off before I can reliably set a watchpoint
Whiteknight just ran it 5 times, diffrent each time
I'm no good with watchpoints
Infinoid it's a pain anyway. would help to boil down the test case first 22:11
dalek rrot: r38657 | cotto++ | branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm:
[pmcc] only generate ATTR-related code when there are ATTRs
22:12
Whiteknight chromatic is going to be unhappy that I borked up his optimization 22:14
Infinoid sounded like his optimization was borked on darwin anyway :) 22:15
cotto He said it was "slightly dangerous".
Infinoid I had asked him to review my fix, as I dunno the code very well
Whiteknight actually, I think I just had a suspicion about what may be causing it
we're manually freeing the RetContinuation PMC, but we're not NULLing out the pointer to it in the Context structure 22:16
Infinoid but when you do NULL out the pointer in the Context structure, you get SIGBUS on darwin :)
Whiteknight that's particularly strange to me. We shouldn't get SIGBUS on a structure field access, the compiler should properly align that 22:17
Infinoid The SIGBUS didn't happen until way later, and it was just untracable memory corruption. masak++ narrowed it down by bisecting old revisions
Whiteknight I don't want to null out the pointer to the context, I want to null out the pointer in the context to the PMC 22:18
Infinoid some (apparently completely unrelated) PMC pointer was NULL when it shouldn't have been
Whiteknight goes digging
Infinoid gist.github.com/109252 was his backtrace
(but it doesn't clear things up much) 22:19
Whiteknight no
Infinoid he ended up with an RPA that had a NULL pointer to the item[] array, and a size (number of members) value of 12945440 22:20
Whiteknight that's quite strange indeed 22:30
so a null pointer deref in darwin raises SIGBUS instead of SIGSEG?
Infinoid apparently... the two are pretty similar 22:32
jonathan Whenever I've debugged problems along these lines, it's often tended to boil down to 22:33
Infinoid they both mean "there isn't any memory mapped to that address range, dork", for varying values of "mapped"
jonathan Something still references a PMC but isn't telling the GC about it. 22:34
So the memory gets re-used for something else
And you get corruption from the two things trying to do different things with the PMC.
Infinoid indeed 22:35
jonathan In this case, my suspicion is that the RetContinuation is still referenced in some way, or at some point during the re-cycle the GC ends up thinking it is claimable.
Infinoid I'm wary about the whole idea of explicitly freeing PMCs, for this reason
especially since we don't refcount them
jonathan If they are explicitly created and freed within a given scope and have no chance to escape it ain't so bad. 22:36
But otherwise it's dangerous.
Particularly with RetContinuations, which can in their life time cease to be RetConts.
Infinoid I'm not even really sure what a RetContinuation *is*, but I had been assuming (from previous hacks in this code) that there's some sort of guarantee that there's only one reference to it
jonathan (e.g. when they are upgraded to full ones) 22:37
Infinoid But apparently there isn't.
jonathan That may be the intention. The failing here may be that the code doesn't check if the PMC was upgraded to a full continuation.
If you recycle something that got upgraded you're probably quite screwed. 22:38
(It's done as a v-table swap.)
Infinoid You're way over my head. Are there some docs I can read so I can understand without slowing you down? :)
(I'm not sure why or when you'd do that morph, or exactly what it means)
jonathan I've mostly gone on reading the code when I've been debugging stuff in that area more than reading docs. :-| 22:39
As far as I can grasp it, the idea of a RetContinuation is that it's "one shot" - that is, we'll only ever invoke the continuation once and we're done. 22:40
Which is the case for a straightforward thing-that-invokes-then-returns.
And when you start getting contexts referecning each other in more complex ways, that return continuation needs to become a full one.
I think some copying then takes place, or at least referencing incrementation on the contexts (since those are ref-counted). 22:41
Whiteknight well, my idea didn't pan out
Infinoid Do you create a RetContinuation when invoking a new sub, then? And convert to a Continuation when you somehow end up making a closure out of it?
jonathan And we change the vtable pointer to Continuation from RetContinuation.
As far as I can understand it, yes.
Infinoid Makes sense, thanks 22:42
jonathan Anyway, the point is that in the lifecycle of a call, you can't rely on something that once was a RetContinuation staying as one.
Whiteknight but if it's not a retcontinuation anymore, then it wont call retcontinuation:invoke and therefore won't be explicitly freed
but you're right, something still is pointing to this object
jonathan Whiteknight: I can't quite tell exactly what's going on in this case, but I think it's something along these lines. 22:43
Infinoid Would boiling down the test case help?
Whiteknight Infinoid: I imagine so 22:48
what really needs to happen, I think, is to trace through a subroutine call and take note of all the places where a RetContinuation PMC is examined 22:49
and make sure that all those pointers are killed before explicitly freeing the retcontinuation
Infinoid
.oO(wouldn't it be nice if we had a nice GC system to do all that hard work for us)
22:50
jonathan Oh, hmm 22:51
Whiteknight: Did you change the call to destroy and the free to Parrot_gc_free_pmc_header(interp, SELF); ? 22:53
Does that also call destroy?
If not we at least would leak memory.
You're right though. If we make it into invoke of the retcontinuation pmc, I don't see any code path between then and the freeing that would get us an extra reference. 22:54
Whiteknight: Also, when we free a normal continuation, we do 22:57
if (cc->from_ctx)
Parrot_free_context(interp, cc->from_ctx, 1);
In the destroy vtable mthod.
In a RetContinuation we don't do that.
Whiteknight: Oh, false alarm. 22:58
When a continuation is upgraded it takes on an additonal reference to the context.
So it balances ups.
So in conclusion, nothing jumps out as me at wrong in that department. 23:01
Whiteknight yeah, I didn't see anything obvious either 23:13
(sorry about delay, was eating)
when do RetContinuations upgrade to Continuations? 23:14
I know that it does happen, but I dont know in what situation
jonathan Look up (IIRC) retc_invalidate 23:15
When there is an outer I think they do.
But there may be other cases too. 23:16
Ah, maybe for with co-routines also.
Whiteknight oh, like in a tailcall?
okay, that makes good sense
jonathan I don't think a tail call would do it.
I mean :otuer
*:outer
If you have one of those you can make a closure.
Whiteknight okay 23:17
jonathan: Does rakudo build properly on Parrot HEAD now? 23:26
I want to make sure the GC refactor didn't bork anything higher up the chain
I did some testing, but I don't think I did enough 23:27
szbalint masak++ 23:28
23:28 kid51 joined
jonathan Whiteknight: Let me pull and check. 23:28
erm, svn up
ETOOMUCHGIT 23:29
szbalint git svn rebase? :)
jonathan I never got to trying git svn yet. :-)
No idea how that works on Windows.
*Windows
For better or worse, my contributions to Parrot these days are relatively few, mostly smallish bug fixes. 23:30
dalek rrot: r38658 | jkeenan++ | branches/splint:
Following discussion with petdance, removing a branch which hasn't been touched in 22 months.
jonathan So don't deal with svn branches so much now that Rakudo moved over to git. 23:31
Whiteknight you're lucky, branches are TEH EVILZ!
jonathan Yeah, I don't admire git's learnability, but it's branch management is good. 23:32
kid51 has no problem with svn branches. 23:33
szbalint svn branches become nasty when your directory that you branch contains >100MB or so, before that it's fine I guess. 23:34
bacek good morning from future 23:36
cotto: around?
cotto bacek, nope
this is a bot
bacek cotto: it's good. Then I can brake pmc_pct branch
cotto cotto's bot gives you permission 23:37
jonathan ponders testing the bot's intelligence
cotto, bacon?
bacek cotto: good gir^W bot
cotto want
jonathan OK, it's intelligent. :-)
bacek cotto: swine flu
purl swine flu is the Swine Flu of our times!
cotto prefer bacon 23:38
jonathan purl sets a low standard. :-)
purl jonathan: huh?
bacek It's intelligent :)
cotto: ok. I broke c_body emitting.
in r38659 23:39
cotto go crazy. I don't have any pending work.
dalek rrot: r38659 | bacek++ | branches/pmc_pct/compilers/pmcc (5 files):
Initial parsing of VTABLE macros such as SELF, SUPER, etc. Emitting is broken
23:40
cotto afk
(and the bot too)
davidfetter
.oO(and your little dog, too!)
23:42
bacek want multi-dispatch in NQP... 23:54
jonathan bacek: Arity based? 23:55
bacek jonathan: PIR style. Even with manual supply of ":multi([Foo])" 23:56
dalek rrot: r38660 | bacek++ | branches/pmc_pct/compilers/pmcc/src/emitter/c.pir:
Sligtly better c_body emitting
23:57
rrot: r38661 | bacek++ | branches/pmc_pct/compilers/pmcc/t/06-body.t:
Fix test
bacek "sub foo :multi(_,['PAST';'Op']) { ... }"
something like this. Then I can write PMC compiler purely in NQP
jonathan bacek: Ah, you're walking the PAST tree? 23:59
bacek jonathan: yes.
jonathan bacek: Ah. That's not a common thing for other languages to do, so it's not so surprising you're finding it a pain point.
(Since most want to then just go down to PIR.)
bacek I'm emitting C code :)
jonathan Aye.