github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
00:16
patrickb left
01:11
MasterDuke joined
01:12
MasterDuke left,
MasterDuke joined
|
|||
MasterDuke | samcv, timotimo: if we get here github.com/MoarVM/MoarVM/blob/mast...f8.c#L437, would it be possible to include any of the buffer (last couple bytes maybe) in the error message? | 02:01 | |
timotimo | it is possible. would you like to include the "wrong" bytes? | 02:04 | |
MasterDuke | probably, and maybe a couple before it goes "wrong" so one can easily find where that is | 02:05 | |
timotimo | you can try MVM_exception_throw_adhoc_free(tc, "Malformed UTF-8 - near bytes %02x %02x %02x", { buffer, NULL }, buffer[pos - 2], buffer[pos - 1], buffer[pos]); or something similar | ||
can also output the pos, though if that's the streaming decoder, the number may not correspond to something the user could use | 02:06 | ||
MasterDuke | cool | 02:08 | |
02:10
lizmat left
|
|||
MasterDuke | i'm on a random kick to add context to any moarvm exceptions where it would make sense | 02:10 | |
timotimo | cool | 02:11 | |
you know | |||
MasterDuke | oh, any possibility the buffer could be less than three bytes big? | ||
timotimo | yeah, possible | ||
there's a whole lot of exceptions (including checks) like "is this object's REPRID the right one? if not throw an exception" and I think they could be turned into a function - maybe an inline one, though the error path shouldn't be taken often, so maybe it should be a function or actually a macro and a function?! with an MVM_UNLIKELY for the check | 02:13 | ||
optional, of course | 02:14 | ||
MasterDuke | i haven't seen any of those yet (just started working my way up from the bottom of my git grep results), but i'll give that a shot when i see them | 02:15 | |
timotimo | many of them in interp.c | ||
MasterDuke | what's the difference between PRId64 and PRIi64? | 02:34 | |
timotimo | #define PRId64 "lld" | 02:36 | |
#define PRIi64 "lli" | |||
the man page for sprintf doesn't explain a/the difference | 02:37 | ||
MasterDuke | we only have 12 uses of PRIi64, but 43 of PRId64 | 02:38 | |
related question, what should i use for size_t? | 02:39 | ||
timotimo | good question :o | 02:40 | |
stackoverflow says "cast to unsigned long and use the macro for that" | 02:42 | ||
MasterDuke | do we keep to C89 or C99? | 02:43 | |
timotimo | C89 aka "what msvc definitely can do" | ||
MasterDuke | right, ugh | 02:44 | |
timotimo | even though possibly everything else we have has more C99 in it than msvc does | ||
MasterDuke | a comment on that answer says it can break for 64-bit windows | 02:52 | |
timotimo | oh my god | 02:53 | |
well then | |||
cast to uint64_t i guess?! | |||
MasterDuke | that's the next comment, and then the one after *that* says uint64_t is C99 | 02:54 | |
final comment says "It [cast to unsigned long] will only fail if the numerical value being printed exceeds ulong_max. [...]" | 02:56 | ||
i'm going to go with cast to unsigned long and will accept suggestions on the PR | 02:58 | ||
timotimo | OK, OK, use MVMuint64 :) | 03:04 | |
MasterDuke | serious suggestion? | 03:08 | |
timotimo | well, it ought to at least work | 03:29 | |
MasterDuke | oh, btw, i don't think you can inline the thing you pass to MVM_exception_throw_adhoc_free like that | 03:35 | |
timotimo | oh | 03:45 | |
in that case i'll just have to pretend i meant it to be pseudocode all along! | |||
found another way to break things with nativecall, the JIT, and "is rw" arguments. this time an int64 argument was coming back 0 even though it should have had a value | 03:47 | ||
MasterDuke | sounds related to the other thing | 03:49 | |
timotimo | it's probably the same thing, yeah | 03:52 | |
06:33
nebuchadnezzar joined
07:48
lizmat joined
|
|||
nine | Considering that there are numerous options to compile C99 code on Windows nowadays, including options to do so in Visual Studio, I seriously wonder if sticking to C89 is worth the pain and developer time. | 08:09 | |
08:38
Kaiepi left
10:50
Kaiepi joined
|
|||
dogbert2_ | hello, is everyone still suffering from cold/flu ? | 11:04 | |
lizmat sorta recovered from that, only to bust up her knee again | 12:19 | ||
which is just very tiring | 12:20 | ||
12:33
lucasb joined
|
|||
dogbert2_ | lizmat: sorry about that. Is it a bicycle related injury? | 12:56 | |
lizmat | well, the original source of the problem is indeed a bicycle accident in 1981 | 12:57 | |
that made my left knee damaged and ~30 years "older" than my right knee | |||
which makes my left knee 92 years old now, so you get the picture... :-) | 12:58 | ||
last Saturday I went cycling and did something wrong with my knee after about 7km | |||
instead of calling it a day, I stubbornly decided it wasn't all that bad and continued cycling for another 18km | 12:59 | ||
:-( | |||
it's slowly getting better again... needs rest | 13:00 | ||
dogbert2_ | perhaps some relaxing hacking :) | 13:08 | |
lizmat | yup | 13:11 | |
dogbert2_ | opts or bugfixes? | 13:12 | |
lizmat | alas, not a lot of time for Perl 6 atm, having to update ~24 year Perl 5 old code from mod_perl to psgi | ||
it's *really* weird to look at your own code that originated about 24 years ago | 13:13 | ||
those were different days :-) | 13:15 | ||
meanwhile if there is a blocker that I could help fix, please let me know | |||
afaik, all current blockers are above my level of capabilities | 13:16 | ||
dogbert2_ | it would seem as if everyone capable of fixing the blockers are down with either a cold or the flu atm | 13:27 | |
lizmat | yeah, life sucks :-) | ||
dogbert2_ | indeed :) | 13:28 | |
15:17
lizmat left
17:15
leedo left
17:41
leedo joined
|
|||
nine | r23 from the spesh log should be tc->cur_frame->work[23] shouldn't it? | 19:42 | |
timotimo | i believe so | 19:45 | |
nine | I may have a piece of the #2706 puzzle | 19:48 | |
We may have an issue with rw args to native calls, when the JIT fails to compile the call graph the nativeinvoke_o is in. | 19:53 | ||
Happens for example because we're missing the case for MVM_OP_getlexref_u8. | 19:54 | ||
optimize_getarg works on the assumption that the JIT compiler will not emit any code for the corresponding arg_* ops for a nativeinvoke and instead the values will be taken from the WORK register. | 19:55 | ||
But in our case, the JIT bails and the arg_i is still there. So the address of the arg buffer is passed to the native function and this is where the set value ends up in. | 19:56 | ||
But optimize_getarg has turned the getarg_i op into a set from the WORK register, ignoring the value in the arg buffer. | 19:57 | ||
In other words: we handle the interpreted version and the speshed + JIT compiled version but not the only speshed version | 19:58 | ||
So the obvious solution is to just improve the JITs coverage of our ops to 100 % | 20:05 | ||
timotimo | oh damn, that's a good analysis | 20:37 | |
20:46
lizmat joined
20:48
Kaiepi left
20:58
lizmat left
21:01
lizmat joined
21:12
lizmat left
21:32
lucasb left
22:42
MasterDuke left
22:43
Kaiepi joined
23:57
Kaiepi left
23:59
lizmat joined
|