00:06 lizmat joined
dalek arVM/more_debug_names_in_exceptions: 2e059d9 | timotimo++ | src/6model/reprs/P6opaque.c:
"this type" will now actually mention the type
00:23
arVM/more_debug_names_in_exceptions: 350a1ba | timotimo++ | src/6model/reprs/P6opaque.c:
"missing serialize" and "rebless" also mention type now
arVM/more_debug_names_in_exceptions: 6d630aa | timotimo++ | src/6model/reprs.c:
default repr functions will now mention debug_name.
timotimo i don't see a reason this could be problematic, but i decided to go for a branch anyway, because it's late
01:02 colomon joined
diakopter timotimo: :D' 01:26
02:15 geekosaur joined 03:29 vendethiel joined 06:10 leont joined 06:35 Ven joined 06:49 domidumont joined 06:54 domidumont joined
nine_ timotimo: oh those changes could have made my life much easier in the past couple of weeks. E.g. I only found out about debug_name by poking in gdb 07:00
07:29 zakharyas joined 07:47 domidumont joined 07:51 lizmat joined 08:45 brrt joined
jnthn moarning o/ 08:57
timotimo: Nice idea, see the review comment somebody left, though :) 08:58
08:58 Ven joined
brrt good moarning too 09:04
09:35 synopsebot6 joined 09:38 zakharyas joined 10:05 cognominal joined
timotimo i thought we had an option in our makefile that'd make gcc scream bloody murder when format strings don't match argument count 10:08
but it's very good someone wrote a review <3
nine_: sorry about that :S 10:09
arnsholt gcc -Wall-the-things? =)
timotimo -Waste-all-my-time-please
arnsholt =D
psch .oO( llvm --Wall-the-garden # apple specific extension )
dalek arVM/reframe: 1d92223 | jnthn++ | src/6model/6model.h:
Add collectable flag for frames.
10:21
MoarVM/reframe: 2ec94b7 | jnthn++ | src/core/frame.h:
MoarVM/reframe: Give MVMFrame an MVMCollectable header.
jnthn (just a rebase)
10:22 dalek joined 10:24 Ven joined
nwc10 OMG he killed dalek 10:28
dalek arVM/more_debug_names_in_exceptions: 75d91f6 | timotimo++ | src/6model/reprs/P6opaque.c:
@patzim noticed a missing format string placeholder
10:29
nine_ OMG he killed Ven
10:31 Ven joined 10:39 brrt joined
dalek arVM/reframe: f6f1085 | jnthn++ | src/core/ (3 files):
Add write barriers to late-bound lexical binds.
10:45
arVM/reframe: 91530a3 | jnthn++ | src/gc/gen2.h:
Bump number of gen2 bins.

So that an MVMFrame fits inside the binned area, rather than landing up in an overflow. Might be able to undo this after an MVMFrame diet.
jnthn If you disable JIT, the reframe branch now gets to building CORE.setting in the Rakudo build
(It may yet complete that too, just takes a while in a debug/no-optimize build)
Especially one where we allocate all frames using the GC, 'cus I didn't put the new common case fast-path in yet :) 10:47
hah, it does as well 10:48
Guess that probably means it can build an NQP too
timotimo reassuring! 10:50
jnthn Yeah, it does
Even though I know I've a couple of missing write barriers still to add :)
And yeah, the JIT is teh bust :(
nwc10 ASAN build (JIT disabled) has just passed all the NQP tests 10:51
jnthn Nice
nwc10 Rakudo build failed with 10:52
failed to load library 'dynext/libperl6_ops_moar.so'
retrying with a non-parallel make
might be a Makefile race condition 10:53
no, not so. does explode
src/vm/moar/ops/perl6_ops.c:455:43: warning: assignment makes pointer from integer without a cast ((MVMContext *)ctx)->body.context = MVM_frame_inc_ref(tc, outer); 10:54
not seen that one before
timotimo that's not an error?
nwc10 no. it's a warning. 10:55
timotimo right
nwc10 it's an error in C++, IIRC
timotimo the function doesn't exist, i bet
i mean, not any more
nwc10 I suspect no prototype
jnthn nwc10: Oh...
nwc10 however, as "my" machine has 64 bit pointers and 32 bit ints
timotimo no, i bet the function was *deleted*
nwc10 it might cause fun
timotimo removed from the API
jnthn nwc10: Rakudo's moar/reframe branch 10:56
nwc10 aha
jnthn It's...hard to see how to do this and not break API there...
Thankfully, we can still get away with it *for now* 10:57
I suspect there'll come a time we can't so easily...
On the upside, it's probably a not-too-bad sign that it's still possible to refactor MoarVM, breaking a key invariant that's been in place since day 1, and still be back at being able to build (OK, without JIT) NQP and Rakudo within a day's effort. 11:01
brrt is back from lunch 11:04
ok, whats busted, and why
jnthn brrt: FRAME 11:05
11:05 Ven joined
jnthn brrt: I'm killing of frame reference counting 11:05
*off
brrt oh, yes, i recall
cool
jnthn brrt: In favor of a call stack for the simple "linear" case, and then using the normal GC if they "escape"
This breaks the "an MVMFrame never moves over its lifetime" invariant 11:06
brrt ok.........
nwc10 I forget what it gains us (and I think that you've explained previously)
brrt not having refcounts, yay
jnthn And thus the JIT's FRAME register gets out of date
brrt yes 11:07
oh, that's... oh well
not necessarily even that bad
dalek arVM/more_debug_names_in_exceptions: 98c462b | timotimo++ | src/6model/reprs/P6opaque.c:
make no_such_attribute more helpful with action and debug_name
arVM/more_debug_names_in_exceptions: b33db60 | timotimo++ | src/6model/reprs/P6opaque.c:
invalid access (get/bind) now contain type and kind
arVM/more_debug_names_in_exceptions: a7f438b | timotimo++ | src/6model/reprs/P6opaque.c:
add tons of detail to p6opaque's compose

who knows, maybe someone will have need for this ... some time in the far future ...
jnthn brrt: Yeah, I'm curious how you'd handle it :)
brrt hmmm
ok, let me check out how it's used, before i say anything else 11:08
jnthn nwc10: I've a lengthy analysis blog post in the works on that, but in summary: ref counts + generational GC don't play well, plus having to maintain the ref counts involved CPU atomic ops (costly) because threads, and it turns out that every situation where you can shorten the frame lifetime by ref-counting is one where you have a linear chain of frames. 11:09
brrt it's accessed in a bunch of places, but nothing that really relies on the static FRAME pointer being in its place
having FRAME in a callee-saved register is somewhat cheaper and easier to use, but not at all essential 11:10
jnthn nwc10: But if you've a linear chain of frames then you don't need the reference counts, because they'd all be 1
brrt: The one that concerned me was some invokish check
brrt letmeseeaboutthat
that is a good one 11:11
i think the invokish check is always post-c-call
so it's save to put the current frame in a callee-saved register, or on the stack
jnthn nwc10: So long as you uphold a "stack-allocated frames can point to GC-allocated frames, but never the other way around" invariant, you're good. 11:12
brrt oh.... waitaminute though
hmm
storing jit entry labels uses the frame pointer
jnthn brrt: But what if the thing did a GC?
brrt ehm
jnthn brrt: And moved the frame?
brrt good point...
jnthn If it's on the C stack though
Then we can actually use the temp roots thing we use for things normally on the C stack 11:13
I guess we can call that from the JIT
brrt we can, but, it's evil
jnthn :-)
brrt i'm not entirely sure 11:15
timotimo i wonder if it's more expensive to grab tc->current_frame after every invokish ... 11:16
invokish or allocish
jnthn timotimo: That's not the problem here
timotimo: The problem is that we use "FRAME != tc->cur_frame" as our "did we invoke" test 11:17
timotimo oh
OH!
brrt which is not a perfect test to start with, though
jnthn Which is now not going to be reliable
dalek arVM/reframe: 6bd4b0d | jnthn++ | src/core/frame. (2 files):
Add write barriers on binding dynamic lexicals.
11:18
brrt i can't imagine that we can't come up with something cleverer 11:24
than what we have with invokish
dalek arVM/reframe: a30c2ea | jnthn++ | src/6model/reprs/NativeRef.c:
Write barrier in string lexical ref assignment.
jnthn Lunch, bbl :) 11:25
nwc10 ilmari: ^^ :-) 11:30
brrt eat well
jnthn: i feel like adding a temp root on every potentially invokish function call is more trouble than it is worth 11:31
it means pre-and post-wrapping
(for when you're back)
timotimo so then just add it when we enter and remove it when we leave?
brrt yeah, on a large proportion of all function calls 11:32
timotimo i mean, having a temp root more than necessary for an extended period of time shouldn't be bad or anything?
brrt hmmm
timotimo sorry, i mean when we enter a jitted frame and when we leave it
brrt that is true
timotimo that *should* still leave all push/pop pairs properly paired up, right?
brrt yes
it still feels like a hack :-) 11:33
and i'm not sure why we couldn't figure out something... more clever
less hacky
timotimo well, a jitted frame can put the root in there properly when it's marked 11:34
in its gc_mark, i mean 11:35
does that sound good?
11:35 konobi joined
brrt not yet 11:35
konobi just been reading about luajit... pretty dang impressive work 11:36
timotimo yeah, luajit is really quite something
brrt concurs
timotimo i don't understand why using gc_mark isn't good :) 11:37
brrt we need a cheap and effective way to see that we are no longer in the same place on the stack 11:41
the frame pointer is the main thing
timotimo oh, i thought we were trying for something to make moving frames update our local idea of what the current frame is 11:42
brrt ok, i have an idea that should be acceptable
we take a pointer to the frame in the jit enter code
we push that as a temp root
we pop it on leaving
then, we *pass a pointer to that* on jit entry 11:43
e.g. jit entry gets MVMFrame**
timotimo a pointer to the pointer you mean?
brrt because the first pointer is on the stack, it ought to be in cache
yes
timotimo sorry, why do we need the MVMFrame** on jit entry? 11:44
i thought we'd just pushed that as a temporary root?
the work pointer won't move, right? i mean, the blob of memory that we're working on 11:45
brrt ehm
timotimo i must be misunderstanding something important :)
brrt i must be misexplaining something important 11:46
:-)
timotimo don't misunderestisplain me!
brrt long story short, we *want* to have cheap access to 'the current place in the call stack of which this jit code is the code segment' 11:47
so that when we've secretly thrown ourselves out of it, or invoked into a deeper level, we will know to 'fall' on the interpreter 'trampoline' 11:48
so we want that to be a cheap check that is usually false
timotimo .o( wheeeee! )
ilmari *boing* 11:49
brrt so, we need to store 'our current frame' in a place where preferably the GC can update it, *or*, we need to have cheapish access to the same, which is already updated by the GC 11:50
so we can make that comparsison, 'are we still in the same frame'
actually, any way to answer that question is good to me 11:51
easy to forget what we're doing it for :-) 11:52
12:12 cognominal joined 12:16 domidumont joined 12:18 domidumont joined
jnthn back 12:28
brrt \o jnthn 12:29
jnthn So, something still wants a fix, given my build on HEAD just exploded Rakudo CORE.setting 12:32
(Something other than the JIT :))
brrt :-) 12:34
dalek arVM/reframe: 40a3087 | jnthn++ | src/6model/serialization.c:
Another write barrier.

Maybe not needed, but better safe than sorry.
12:41
12:43 Ven joined
dalek arVM/reframe: 6d15151 | jnthn++ | src/core/frame.c:
Fix continuation clone for GC-able frames.
12:47
jnthn builds a MoarVM with a tiny nursery to try and flush out some more issues, now he's run out of those on his todo list 12:51
Yeah, that shows up plenty wrong. 13:00
dalek arVM/reframe: b625398 | jnthn++ | src/6model/reprs/MVMIter.c:
Add missing MVMROOTs in context iteration.

One of these cases was an existing bug. The other was needed for the frame changes.
13:24
arVM/reframe: 5ac981d | jnthn++ | src/gc/debug.h:
Update debugging macro for lazy fromspace alloc.

Also make it dump out the pointer in question.
13:35
arVM/reframe: e1114b6 | jnthn++ | src/core/frame.c:
Missing MVMROOT of outer.

Meant we could end up assigning outdated pointers to a frame->outer.
13:46
arVM/reframe: 4509fd0 | jnthn++ | src/core/frame.c:
Remove a bit of now-unrequied flow control.

We don't need the NULL check when we're not going to try and fiddle with a reference count.
jnthn Onto the next SEGV... 13:47
[Coke] RT: 26 SEGVs. 13:53
13:55 domidumont joined
jnthn [Coke]: hah, I meant "arising from the stuff I'm refactoring" 13:56
But yeah, I'm trying to pick those off too :)
13:59 Ven joined 14:10 zakharyas joined 14:13 brrt joined
brrt jnthn: I think i've solved it 14:14
we add a current_frame_nr and next_frame_number to the threadcontext
initialized to zero
whenever we create a frame, we increment the next frame number and assign it to the frame 14:15
e.g. frame->sequence_nr = ++tc->next_frame_number; 14:16
whenever we enter the frame (MVM_frame_invoke iirc), we assign the current frame number to the tc
tc->current_frame_nr = frame->sequence_nr 14:17
whenever we enter the jit, we stash the frame sequence number somewhere safe. whenever we return from an invokish, we compare it to the stashed sequence number 14:18
sequence numbers may wrap arounnd all we like (just not too often)
we no longer need FRAME in a register, or even on the stack as a gc temp root
brrt will make a patch 14:19
jnthn brrt: ooh :) 14:21
brrt++
brrt oh, and during unwinding, of course 14:32
that's centrally handled somewhere too, iirc
jnthn got himself confused by running into a bug, assuming it was thanks to his refactor, and now is discovering it probably ain't 14:37
14:58 lizmat joined 15:08 zakharyas joined
dalek arVM/reframe: 5da3e1e | jnthn++ | src/6model/reprs/MVMCompUnit.c:
Fix a SC resolution / GC race.

Not a race in the threading sense, just an ordering one. If the SC is not resolved by the compunit's code before the next GC run happens, then the ->sc pointer can be out of date.
15:13
15:24 geekosaur joined
jnthn That as a darn pain to find 15:24
And nothing at all to do with the refactor I've been doing
NQP builds and passes tests on a 32KB nursery 15:26
Rakudo will take forever to build with a 32KB nursery
timotimo i bet 15:28
jnthn Curently it's building Actions.nqp
Now it's made it so far as building CORE.setting 15:32
Heap corruption detected: pointer 000000000068E9D0 to past fromspace
wow
Guess there is something more :) 15:33
TimToady wonders if a frame can move out from under our current env var cache... 15:42
jnthn TimToady: That's stored in the frame, and so far as I can tell it's safe 15:43
(I had to fix up that bit of code)
I'm suspecting the thing I just ran into now is another "not related to this refactor"
TimToady s/env/dyn/
timotimo it's been a while since we last torture-tested the GC, eh? 15:44
TimToady do wanna poke a better cache in there at some point
dalek arVM/reframe: bb42773 | jnthn++ | src/gc/worklist.h:
Detect another problem in GC worklist add debug.
jnthn timotimo: Apparently, yes
Which probably means we should set up automated runs with a small nursery 15:45
[Coke] We really should have a lot more automated testing, aye. :) 15:46
jnthn Yeah. Daily automated valgrind too was on my todo list
Well, still is, I just...have a long todo list :P
And plenty of things wanting to be near the top
timotimo .o( and i'm not too helpful at making it any shorter these days ) 15:50
jnthn Oh wait, that previous commit may be bogus... 15:52
yeah, it is as well 15:53
Darn 15:54
'cus we've flipped from/to at the point we're running that
timotimo at least that'd mean the very first GC run would explode when marking the very first object from the nursery, no? 15:56
jnthn yeah, exactly 15:58
Didn't stop me looking into why that pointer was bad :P
15:58 zakharyas joined
timotimo i can imagine 15:58
16:02 vendethiel joined
jnthn Gah, it SEGVs at my fix for the previous issue :/ 16:07
And it's enitrely possible that is the reason for the next fail 16:10
timotimo AFK for a bit 16:11
dalek arVM/reframe: 0081193 | jnthn++ | src/gc/worklist.h:
Correct worklist add sanity check.

We've flipped to/from by the point we hit this check, so it can't be just like the check in gc/debug.h.
16:19 awwaiid joined
dalek arVM/jnthn/debug: fc8c871 | jnthn++ | src/ (3 files):
Branch to shove debug tweaks to my VM.
16:21
timotimo oh, interesting 16:29
jnthn Oh wow, we actually free the SC 16:31
timotimo neat, so things get cleaned up when things are not needed
(except, maybe we free it accidentally? :) )
jnthn Between its creation and trying to take reference to it 16:32
Yeah, prematurely
timotimo oooh, whoops :)
so it's not rooted somewhere before the first allocaty thing gets called?
jnthn It's only held by the sc_weakhash, which doesn't mark it to be weak 16:33
:)
timotimo oooh 16:34
i didn't know we have weak hashes yet! :P
jnthn We...don't officially have weak refs 16:37
But we fake them up
Badly
Which means I should probably implement them properly.
dalek arVM/jnthn/debug: 6e30284 | jnthn++ | src/6model/reprs/MVMCompUnit.c:
Revert "Fix a SC resolution / GC race."

This reverts commit 5da3e1ec149d8fcc8127242a289b965d0c8db4a9.
16:42
arVM/jnthn/debug: 31f3d4d | jnthn++ | src/ (3 files):
A (hopefully) more correct fix for the SC race.

The previous fix more hid the issue than resolved it. This fixes it by making sure we mark its one reference in the weak hash (so it does not go and get collected) until a compunit actually claims it.
jnthn OK, that seems a bit better 16:45
dalek arVM/reframe: d1485f7 | jnthn++ | src/6model/reprs/MVMCompUnit.c:
Revert "Fix a SC resolution / GC race."

This reverts commit 5da3e1ec149d8fcc8127242a289b965d0c8db4a9.
16:48
arVM/reframe: abe4cdd | jnthn++ | src/ (3 files):
A (hopefully) more correct fix for the SC race.

The previous fix more hid the issue than resolved it. This fixes it by making sure we mark its one reference in the weak hash (so it does not go and get collected) until a compunit actually claims it.
jnthn That builds NQP and passes its tests OK again...and doing a Rakudo build from scratch 16:57
Locally got some debugging turned on and 32KB nursery
It's made it some way into CORE.setting this time. Guess this'll not be fast :) 16:59
I'll leave it running, but calling it a day...tired :) 17:07
nwc10 hopes that the beer fridge is stocked 17:08
timotimo oh jnthn, do you have an intuition if it'd be problematic to weave inlined stuff (in spesh) into the dominator tree, as the optimizer goes through blocks by their children instead of their linear_next? 17:09
or should i instead try for something like a list of bbs that still need to be visited afterwards kind of deal? 17:10
jnthn timotimo: I'd just recalculate the dominance
nwc10: It is :) 17:11
timotimo oh, is there a simple call that i can use for that? probably!
i won't have to invent it myself!
jnthn No
It's not exposed
timotimo but i can probably tear it out of some place?
jnthn spesh/graph.c is where it lives though
jnthn ponders what to have for dinner :) 17:14
timotimo do you think reverse_postorder, compute_dominator, add_children, add_dominance_frontiers is the right set of instructions to steal? and perhaps adding code to add_children and such that deletes previous values so they don't get doubled? 17:15
17:17 domidumont joined
jnthn yeah, think you'd have to get rid of the existing children 17:18
maybe do that beforehand
CORE.setting failed to explode so far. :) I'll bbl 17:19
timotimo now that i think of it, add_children probably just allocates a blob of the right size using spesh_alloc, so "clearing it out" makes no sense
yay
see you later jnthn :)
17:51 konobi left
timotimo just calling those things after an inline was done throws moar into an explosion; a dump of the spesh graph and Spesh: reverse postorder calculation failed 17:57
so i need to clear out some stuff it seems
and for that i'll have to actually read that code :S
i wonder if it stumbles over a bb that has gone missing because it got eliminated? and the count of bbs got out of sync? 18:15
right, removing successors and predecessors will throw bbs out of the tree but not decrease the number of bbs if they were completely taken out. it probably should, then. 18:16
ugh, this involves giving spesh_manipulate_remove_successor and _predecessor a pointer to the graph, too. it didn't so far. and that's an API change >_> 18:20
time to build a function name just like in PHP 18:21
jnthn Some very tasty Indian scrambled eggs later, and CORE.setting build is still alive 18:22
timotimo wow, that's rather slow running
jnthn Well, it's GCing every 32KB
timotimo MVM_spesh_manipulate_remove_successor_real? _clean? _properly? _EX?
maybe #define MANIPULATE_SUCCESSORS_TAKES_G_ARGUMENT for our users to read >_> 18:23
jnthn You could just re-count the number of reachable ones? :)
timotimo the dfs currently errors out when that number isn't "right" 18:24
so using it to recalculate ... not sure if that's the right thing to do for this 18:25
jnthn Yeah, so make it right before doing that?
I'd been thinking about making a second pass post-inline
timotimo but i'd be using pretty much the exact dfs algorithm to calculate that number
jnthn (Of all inlines)
And just getting our house in order ahead of that 18:26
timotimo ah, so after we're through completely once, we eliminate dead BBs and recalculate the dominance and such then 18:28
and then do a whole optimization pass with the new information?
jnthn Yeah
So the first pass is doing enough to inline things
The second is where I planned to put box/unbox removal, native ref elimination, etc.
timotimo how would it sound to give the "recalculate dfs" function a "verify or recalculate bb num" flag?
yeah
that'd be a decent place to do it, but if the child order is already correct immediately after inline, we'll at least remove unboxing from returns 18:29
potentially not immediately for the caller -> callee direction
though that'd probably also just follow from dead instruction removal and grabbing the register that gets boxed rather than the box directly when descending into the inlined graph 18:30
but moving the recompilation to after the last inline has happened will of course only recalculate once 18:33
"could not find processed initial dominator" *sigh* 18:45
bb number 1 has 0 preds 18:53
Spesh: could not find processed initial dominator
that's the problem; i wonder how it happens.
the bb with index 1 ends up being the entry bb which we were supposed to skip 19:00
19:06 awwaiid joined
timotimo which is most likely because our postorder is based on the non-fixed number of bbs, still 19:20
diakopter jnthn: since when you're debugging a 32KB nursery, all you care about is moving/updating pointers, is there a way to skip the marking/reaping steps (yes you'd need a lot of spare memory)? 19:21
meh, I guess that'd be an entirely different GC, since it would only scan the nurseries. never mind 19:23
I mean, it'd probably be a useful test, but it certainly wouldn't catch all the potential errors caught by the usual thing. 19:24
19:25 brrt joined
diakopter brrt: o/ 19:31
timotimo couldn't get it to work yet, but i've been distracted washing up and helping cook and such 19:42
and now eating
jnthn diakopter: Well, maybe, but I have to eat/sleep sometimes, it's no sweat to leave the computer stressing itself while I do those things :) 20:13
diakopter: And yeah, it's hard to know it'd catch all the useful stuff
While I was eating/doing errands, it finished building CORE.setting here :) 20:14
Alas, make install explodes in install-core-dist.pl 20:16
So I've some debugging ahead of me this week
nine_ jnthn: is this already with JIT or still without? 20:17
jnthn nine_: Without 20:18
nine_: brrt++ seemed interested in taking on the JIT changes
So I'll focus on hammering out the regressions 20:19
nine_ brrt++ seems interested in JITs ;)
jnthn Indeed ;)
They're a fun area :)
A bit more than hunting GC fails :P
(Though with their own painful debugging too, no doubt) 20:20
20:21 patrickz joined
brrt ohai.. yes JITs are fun :-) 20:22
patch won't be done this evening
jnthn brrt: np 20:24
brrt: I suspect even non-debugging builds of my branch will be too big a performance regression to stand a chance of a merge. 20:25
So I'll be putting the stack optimization that replaces the good parts of the ref-counting in first. 20:26
timotimo will you have time to get that up and running this week, you think?
i can't estimate how hard that'd be
jnthn Unlikely
timotimo okiedokie 20:27
jnthn If you're asking about the stack opt thing
timotimo that's what i'm asking about, aye
jnthn I don't have all the pieces settled in my head on how to most cleanly do it
Also, I'm really tired this week :S
jnthn blames over-long meeting on Monday 20:28
Though going to be an hour earlier the last couple of nights woulda helped too 20:29
*to bed
I'll be happy if I can flush out all the bugs from the "make frames collectables" changes this week :) 20:31
diakopter wonders whether to remind jnthn I pushed for collectable frames, like, years ago 20:32
diakopter fails at wondering non-aloud
jnthn diakopter: Yeah, but I don't recall you having a how-to-cheat strategy. :-) 20:33
diakopter probably I didn't, yes
jnthn And the performance of "just have all the frames collectable" is...non-awesome
But yeah, it was on the right path. 20:34
diakopter wonders how many times VMNull is pushed to the GC mark list
jnthn In nursery collections, probably never 20:35
Well, it never makes it onto the list
Things may ask to push it :)
diakopter oh, I didn't know you added that optimization
jnthn Pretty sure I did
yeah 20:36
if (*item_to_add && (worklist->include_gen2 || !((*item_to_add)->flags & MVM_CF_SECOND_GEN))) { \
diakopter hunh 20:37
jnthn (In MVM_gc_worklist_add 20:38
)
timotimo well, my num_bbs correction code is kind of wrong now :) 20:39
jnthn so, correct it :P 20:43
timotimo wow, silly me, just forgot to return the result of a recursively called reverse_postorder
the "runner" is now running in-place, at 0, while the finish line is at 3 21:13
and i've not done much to understand the algorithm itself yet
jnthn The paper it's from is refd at the top of graph.c
timotimo ah 21:14
jnthn rest time... 'night o/ 21:15
timotimo gnite jnthn! 21:16
masak 'night, jnthn 21:52
diakopter I wish Github had a "automatically keep this branch sync'd with [master] branch, and email me (and don't merge) if the merge would fail" button 21:57
geekosaur and same for "keep this repo synced with the one I forked from" 22:01