Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6-lwp-gsoc, 2014-07-01

| Channels | #perl6-lwp-gsoc index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
07:03 FROGGS joined #perl6-lwp-gsoc
07:06 FROGGS o/
07:14 sergot morning o/
07:16 FROGGS hi sergot
07:18 sergot FROGGS: what does --> mean? e.g. sub a(Int $a --> List) { ... } ?
07:19 FROGGS it is identical to: sub a(Int $a) returns List { ... }
07:19 FROGGS I think the --> form is borrowed from another ancient language
07:20 sergot ooook, thanks :)
07:58 sergot FROGGS: did you see my commits?
08:05 sergot I couldn't find the SSL struct.
08:06 sergot anyway, did you read something more about openssl?
08:07 sergot I';m just thinking what should be next now.
08:07 FROGGS had no change to read that document yesterday, had to get the kids into bed
08:07 FROGGS what do you mean, you could not find the SSL struct?
08:07 FROGGS I've seen the commits, yes
08:11 sergot I wanted to port the struct to p6 class and I couldnt find it in /usr/include/openssl, like I found SSL_METHOD, SSL_CTX etc.
08:11 FROGGS http://docs.huihoo.com/doxygen/openssl/1.0.1c/structssl__st.html
08:12 FROGGS "Detailed Description
08:12 FROGGS Definition at line 1100 of file ssl.h.
08:12 FROGGS "
08:12 sergot oh, thanks FROGGS++
08:12 FROGGS it is at line 1105 of my ssl.h
08:13 sergot hmm, right, it is 1100 indeed
08:13 sergot my fault, thanks
08:13 FROGGS no problem :o)
08:23 sergot FROGGS: how can I use void (void *) in p6? :)
08:25 FROGGS hardly
08:25 FROGGS only as an OpaquePointer atm
08:27 sergot thanks
08:29 FROGGS see #perl6
08:33 sergot the case with function inside of struct is still weird for me
08:34 sergot moritz: could you bring dalek back here? :)
08:35 sergot FROGGS: new 2 commits
08:38 sergot ssl.h:1114 (+5 for you probably): #ifndef OPENSSL_NO_BIO
08:38 sergot what in such case?
08:38 sergot :)
08:38 sergot should I use BIO or Str there?
08:39 FROGGS I guess you want to compile some C code some days that queries these flags and return this information back to P6
08:39 FROGGS day*
08:39 sergot ok :)
08:40 dalek joined #perl6-lwp-gsoc
08:40 sergot moritz++
08:41 moritz now I've started it in   while true; do ...; sleep 10; done loop
08:43 sergot FROGGS: can you see #some functions / a function in the test.p6 file?
08:43 sergot it seems to work without implementing the function there
08:44 FROGGS what function?
08:45 sergot 1132     int (*handshake_func)(SSL *);
08:45 FROGGS but at some point it wants to call that function, at least when it is not NULL
08:46 FROGGS so I would expect that you put a OpaquePointer at places where a function is expected
08:47 sergot true, but attibutes underneath seems to have correct values.
08:47 sergot ok, thanks :)
08:47 FROGGS weird
08:47 sergot they have 0, instead of some weird, random number as yesterday
08:48 FROGGS that random number was a memory address of a pointer (to an object)
08:48 FROGGS but I am a bit distracted atm
08:49 FROGGS so don't take my word for everything now :o)
08:49 sergot ok :)
08:49 dalek openssl: fbcc777 | sergot++ | test.p6:
08:49 dalek openssl: handshake_func as the OpaquePointer added
08:49 dalek openssl: review: https://github.com/sergot/openssl/commit/fbcc777dfc
08:51 sergot FROGGS: hope extending NativeCall won't take too much time :)
08:51 FROGGS the nativecast op will be easy, at least for me
08:51 FROGGS the function pointer thingy might be a bit tricky
08:52 sergot Could you give a quick "tutorial" about NativeCall?
08:52 sergot e.g. what files should I look at etc.
08:53 FROGGS 1) the one .pm file and perhaps the test files here: https://github.com/jnthn/zavolaj
08:54 FROGGS look at the Native role in the pm file, especially what nqp ops are used
08:54 FROGGS then grep in nqp/src/moar these ops
08:54 FROGGS (remember the mapping)
08:54 FROGGS 2) grep for the mapped names in MoarVM/src, to know what C function will be called
08:55 FROGGS you will land here for example: MoarVM/src/core/nativecall.c:606:MVMObject * MVM_nativecall_invoke(MVMThreadContext *tc, MVMObject *res_type,
09:01 sergot hmm
09:02 sergot so, we should I write the nqp::nativecast?
09:08 FROGGS sergot: I'd like to do it this evening if you don't want to :o)
09:09 sergot I want to do this, I like new knowledge, but I'm quite new in this topic :)
09:09 sergot So, I probable would need some help with this.
09:09 sergot probably*
09:10 FROGGS well okay
09:10 sergot But, if you don't have time to help me or something then feel free to do this :)
09:10 FROGGS let's sketch the steps I'd do
09:11 FROGGS 1) we want to have an op called nqp::nativecast, that takes an OpaquePointer and a Perl 6 Type Object to unpack stuff from memory into that Type
09:12 FROGGS so, it is identical to what the role Native does at the end, using the return type of a subroutine as the type to unpack into
09:13 sergot clear so far
09:13 FROGGS this is the C function that invokes the foreign C function and that does the cast: https://github.com/MoarVM/MoarVM/blob/master/src/core/nativecall.c#L606
09:14 FROGGS thanks to comment, this cares about the return type: https://github.com/MoarVM/MoarVM/blob/master/src/core/nativecall.c#L682
09:14 FROGGS comments*
09:15 FROGGS this also calls the C function, that is something we don't want to do of course
09:15 FROGGS because we already have a Pointer to some memory
09:15 sergot okay
09:16 FROGGS so, we want to steal that huge switch block and put it into a MVM_nativecall_cast
09:16 FROGGS then replace the dcCall* calls by the memory address we get as an argument
09:17 FROGGS then we add our C function as an op to src/oplist and src/interp.c, using the opname nativecast
09:19 FROGGS then, when it compiles without warning, add that op to nqp's QASTOperationsMAST or what it is called
09:19 FROGGS and then you can try to use it from rakudo, after rebuilding All The Things
09:20 sergot ok, and what should we return in this MVM_nativecall_cast function?
09:22 sergot Do we need anything?
09:24 sergot MVMObject * I assume
09:24 FROGGS yes, same as this: https://github.com/MoarVM/MoarVM/blob/master/src/core/nativecall.c#L608
09:25 FROGGS because the nqp::nativecall op used in the role already returns the casted object after the call happened
09:25 FROGGS and we exactly need that last bit of that op
09:26 sergot do we need MVMROOT twice here too? (I dont know what it does)
09:26 FROGGS MVMROOT protects its second argument for being moved when the garbage collector runs
09:27 FROGGS ... in case the block (third arg) does a memory allocation, which can trigger the gc
09:27 FROGGS if you have an hour, watch jnthn's talk about our GC
09:27 FROGGS http://www.infoq.com/author/Jonathan-Worthington
09:28 sergot Ok, I'll do this
09:29 FROGGS btw, when you add ops to interp.c or oplist, you have to add to at the end of the normal ops and before the sp_* ops star
09:29 FROGGS start*
09:29 sergot ianyway, tc, memory address are arguments we need, or something else too?
09:29 sergot still in MVM_nativecall_cast
09:29 FROGGS that would be right before line 4368 in interp.c
09:30 FROGGS MVM_nativecall_cast(MVMThreadContext *tc, MVMObject *res_type, MVMObject *opaque_pointer) I guess
09:32 FROGGS ummm, it might not even be an opaquepointer... it could also be just a integer for integer values...
09:33 FROGGS you'll see when looking at the signatures of dcCallInt and dcCallPointer
09:33 FROGGS or better make_int_result and MVM_nativecall_make_cstruct
09:33 sergot MVMObject * MVM_nativecall_make_cstruct(MVMThreadContext *tc, MVMObject *type, void *cstruct)
09:34 sergot MVMObject * make_int_result(MVMThreadContext *tc, MVMObject *type, MVMint64 value)
09:35 FROGGS right, make_cstruct wants a memory address we can obtain from an OpaquePointer object
09:36 FROGGS I guess we can do the same for the latter
09:36 sergot MVMObject * MVM_nativecall_cast(MVMThreadContext *tc, MVMObject *res_type, void *ptr) then?
09:36 FROGGS because we can shove integer values in an opaquepointer as well, it is memory after all
09:36 FROGGS no
09:37 FROGGS MVM_nativecall_cast is what we call from Perl 6 land, and there is no way to pass it a void * from P6
09:37 FROGGS you have to pass it an MVMObject *
09:38 sergot oh, ok
09:38 sergot and I'm not sure about res_type there, what is it?
09:38 FROGGS the requested type we have to cast to
09:39 sergot ooooh, right..
09:39 FROGGS you'd call the op like: nqp::nativecast(My::Class, $opaquepointer)
09:40 FROGGS and then it knows the structure of that class and could unpack the memory address which is hidden in the opaquepointer
09:41 sergot dcCall*(vm, ptr) or just ptr in make_*_result?
09:41 sergot when have MVMObject * MVM_nativecall_cast(MVMThreadContext *tc, MVMObject *res_type, MVMObject *ptr)
09:41 sergot result = make_int_result(tc, res_type, ptr);
09:41 sergot or
09:41 sergot result = make_int_result(tc, res_type, dcCallLong(vm, ptr));
09:42 FROGGS both is wrong
09:42 sergot ummm
09:42 sergot Am I the only one who struggle so much with this?
09:42 FROGGS dcCallLong means that you are going to call a C function, like TLSv1_client_method
09:43 FROGGS sergot: no :o)
09:43 sergot uff
09:43 FROGGS and we don't need to call that function, because we already did so and got its return value (a pointer) and stored it in a Perl 6 variable
09:44 FROGGS sub foo () return OpaquePointer is native('bar') { * }
09:44 FROGGS my $opaquepointer = foo();
09:44 sergot ok
09:45 FROGGS say nqp::nativecast(My::Class-to-Unpack-to, $opaquepointer)
09:45 sergot ghmm
09:46 sergot ok, and the third argument of make_int_result is a pointer to our value, am I wrong?
09:47 FROGGS in case of make_int_result it is the value itself
09:47 FROGGS I can't describe how to do that off hand, let's star with making CStructs work
09:47 sergot ok :)
09:48 sergot so we are herE: result = MVM_nativecall_make_cstruct(tc, res_type, dcCallPointer(vm, body->entry_point));
09:48 FROGGS right
09:49 FROGGS and we need to replace the dcCallPointer call by the memory address that is inside our opaquepointer
09:49 FROGGS so the first thing in that op would be to obtain that memory address, and just print it
09:51 sergot result = MVM_nativecall_make_cstruct(tc, res_type, opaque_pointer); then? :)
09:53 sergot "replace the dcCallPointer call by the memory address that is inside our opaquepointer"
09:53 sergot that is how I understood this
10:01 FROGGS depends on what opaque_pointer is
10:02 sergot it's the third argument (MVM_Object *)
10:02 sergot oh, I wrote ptr earlier, i'm sorry
10:03 FROGGS still, you need to obtain the memory address that is stored *inside* the OpaquePointer Perl 6 object
10:06 sergot so, the ptr points to address to a memory?
10:06 sergot then *ptr?
10:06 sergot ptr = address -> address -> memory ?
10:14 FROGGS no
10:15 FROGGS look at that piece of code: MoarVM/src/6model/reprs/CPointer.c:28:    dest_body->ptr = src_body->ptr;
10:17 sergot oh, like that! I should have known that
10:18 sergot ptr name is not good here, ptr->ptr ...
10:21 sergot So, maybe "value" or "res" as a name for the third argument?
10:21 sergot nonethelees I have this now: result = MVM_nativecall_make_cstruct(tc, res_type, opaque_pointer->ptr);
10:23 FROGGS in NativeCall.pm6 you probably have seen that a OpaquePointer is REPR('CPointer')
10:23 FROGGS and also, it gets the ->ptr from src_body, not from src
10:27 sergot 6model.h:171, here is the MVMObject defined
10:27 sergot it has only MVMCollectable header and MVMSTable *st
10:28 sergot MVMNativeCallBody *body = get_nc_body(tc, opaque_pointer); opague_pointer->ptr; ?
10:28 sergot I meant, body->ptr
10:30 sergot MVMNativeCallBody has no ptr either
10:31 sergot so, probably I'm wrong :(
10:36 sergot it has entry_point whatever it is
11:26 sergot FROGGS: according to our talk on #moar:
11:26 sergot result = MVM_nativecall_make_cstruct(tc, res_type, cpointer_body->ptr); ?
11:27 FROGGS yes
11:27 FROGGS perhaps you have to cast that cpointer_body->ptr to a void * to silence a warning...
11:27 sergot I wasn't aware of OBJECT_BODY I think
11:28 sergot ok
11:28 FROGGS and what I forgot to mention: after you added the op to src/oplist: run perl6-m tools/update_ops.p6
11:28 sergot anyway, what about the rest of MVM_NATIVECALL_ARG_* ?
11:28 FROGGS an MVMObject always has an object header and a body
11:29 FROGGS the body is where the data lives, and the header tells about the object's type, it's size and so on
11:29 FROGGS sergot: make one thing work, then we are going to complicate things, okay?
11:32 sergot okay, another question
11:33 sergot We have to get ret_type, necause we have switch (ret_type & MVM_NATIVECALL_ARG_TYPE_MASK) {
11:34 FROGGS yes, ret_type is an argument to our op
11:34 FROGGS and have to switch according to ret_type, to know that we want to unpack to a CStruct or something else
11:38 sergot do we need it from res_type or the third argument?
11:38 sergot res_type I quess
11:40 FROGGS res_type
11:40 FROGGS err
11:40 FROGGS it is the argument, dunno which one
11:41 sergot let's name it like that: MVMObject * MVM_nativecall_cast(MVMThreadContext *tc, MVMObject *res_type, MVMObject *obj) {
11:41 sergot ok, we'll see
11:45 sergot more questions... I'm sorry if I'm annoying
11:46 FROGGS you're not :o)
11:46 FROGGS yes, that signature looks good
11:46 sergot OP(nativecast):
11:46 sergot GET_REG(cur_op, 0).o = MVM_nativecall_cast(tc, GET_REG(cur_op, 2).o,
11:46 sergot GET_REG(cur_op, 4).o);
11:46 sergot cur_op += 8;
11:46 sergot is it okay? And what should be added to cur_op?
11:47 sergot that was (a)
11:47 FROGGS when you accessed register 4 in GET_REG(cur_op, 4), you add two more to cur_op
11:47 FROGGS so it would be cur_op += 6 in this case
11:48 FROGGS 'accessed' is not the proper term here though
11:48 sergot (b) oplist: nativecast    w(obj) r(obj) r(obj) - is it okay? What are those 3 ?(obj)?
11:48 sergot hmm, okay, I think I understand
11:48 FROGGS that is your signature of the op in shorter form
11:49 sergot what is r and w then?
11:49 sergot are
11:49 FROGGS your op reads two Perl 6 objects (gets them as arguments), and returns one, so it writes to an object register
11:49 FROGGS r=read, w=write
11:50 sergot So I assume this w(obj) r(obj) r(obj) is fine, is it?
11:50 FROGGS w(obj) = MVM_nativecall_cast(tc, r(obj), r(obj))
11:50 FROGGS it is
11:50 sergot oook, it's clear, thanks!
11:50 FROGGS :o)
11:50 sergot Can I show you my diff?
11:51 sergot http://paste.ubuntu.com/7731065/
11:51 sergot Are we sure it should be nativecast not nativecallcast?
11:53 FROGGS the op should be called nqp::nativecast
11:53 FROGGS the C-function then can be longer
11:54 sergot okok
11:54 FROGGS (like it is in the paste)
11:55 sergot ok, now I should add it to nqp's QASTOperationsMAST
11:55 FROGGS hold on
11:55 sergot ok
11:56 FROGGS you've added the ops in interp.c and oplist to the wrong position
11:56 sergot oh, why
11:56 sergot ?
11:56 FROGGS it has to be right before the ops starting with sp_
11:56 FROGGS because the order matters
11:57 FROGGS the index of an op will be serialized in moarvm's bytecode
11:57 FROGGS not its name
11:57 FROGGS se when you inject something, horrible things will happen :o)
11:57 sergot ok, so it's right after osrpoint in oplist
11:57 FROGGS yes
11:58 sergot the same in interp.c
11:58 FROGGS wait a sec
11:58 FROGGS -> #perl6
11:58 FROGGS err
11:59 FROGGS -> #moarvm
11:59 FROGGS okay, after osrpoint then
11:59 sergot ok
11:59 sergot :)
11:59 sergot compiling src/core/interp.o
11:59 sergot src/core/interp.c: In function ‘MVM_interp_run’:
11:59 sergot src/core/interp.c:4369:38: warning: assignment makes pointer from integer without a cast [enabled by default]
11:59 FROGGS eeks
12:00 FROGGS you have to add the function's prototype to src/core/nativecall.h
12:00 FROGGS and... you have to run the tools/update_ops.p6 script
12:00 sergot ooh, ok :)
12:03 sergot compiling
12:05 sergot ok done
12:05 sergot what's next?
12:09 moritz formal verification!
12:09 moritz (just kidding)
12:13 FROGGS sergot: adjust QASTOperationsMAST in nqp
12:14 FROGGS (only the moar version)
12:14 sergot http://paste.ubuntu.com/7731142/
12:14 sergot ok
12:15 FROGGS btw, you want to let it explode nicely when the condition in line 202 is not met
12:16 sergot Does it matter where I add the op in QASTOperationsMAST ?
12:16 FROGGS no, order is not important here
12:16 FROGGS add it to the other nativecall ops
12:16 FROGGS btw, line 205 in the paste is wrong
12:17 FROGGS or...
12:17 FROGGS yes, 205 and 206 are wrong
12:18 sergot why so?
12:18 FROGGS we need to obtain the ret_type from the res_type we get
12:19 FROGGS the code you use assumes that we are retrieving the return type information of a native call
12:19 FROGGS but we're not calling anything atm
12:19 FROGGS the res_type tells us what we want to know
12:20 FROGGS the original code was: MVMNativeCallBody *body = get_nc_body(tc, site);
12:20 FROGGS where 'site' is probably the callsite
12:21 sergot hmmm
12:23 FROGGS yeah, hmmmm
12:23 sergot I'm clueless here
12:23 FROGGS I'also confused by looking at how NativeCall.pm6 works
12:23 FROGGS I'm also*
12:25 sergot meanwhile, Could you tell me what do those 0, :decont(0) mean in  QAST::MASTOperations.add_core_moarop_mapping?
12:26 FROGGS I think one of those meant that the op returns the first arg
12:27 FROGGS btw, I think we should not switch(ret_type & MVM_NATIVECALL_ARG_TYPE_MASK), but switch(REPR(res_type)->ID)
12:28 sergot hmmm
12:28 FROGGS and then have a case MVM_REPR_ID_MVMCStruct
12:29 FROGGS so we switch a bit like https://github.com/jnthn/zavolaj/blob/master/lib/NativeCall.pm6#L69
12:29 FROGGS and the sub after it
12:30 sergot okay
12:30 FROGGS so comment out all cases except the cstruct for now
12:32 sergot http://paste.ubuntu.com/7731212/
12:32 sergot nono
12:32 sergot wait
12:33 sergot ok, now:
12:33 sergot http://paste.ubuntu.com/7731217/
12:34 FROGGS yes, I think this could work
12:35 sergot ok, have just added the nqp's op
12:35 sergot like this:
12:35 sergot QAST::MASTOperations.add_core_moarop_mapping('nativecast', 'nativecallcast');
12:35 FROGGS yeah
12:35 sergot bu the next op looks like: QAST::MASTOperations.add_core_moarop_mapping('nativecallrefresh', 'nativecallrefresh', 0, :decont(0));
12:36 sergot so, there is a :decont(0), whatever it is :)
12:36 FROGGS yes, because I think it is void in C lang...
12:36 FROGGS land*
12:36 sergot oook :)
12:36 FROGGS but our's is not, so we don't need that
12:36 sergot ok, recompiling
12:38 sergot done
12:39 FROGGS okay...
12:39 FROGGS also recompiled rakudo?
12:42 sergot yes
12:42 FROGGS nice!
12:43 sergot We need some tests now :)
12:43 FROGGS you can pat yourself on the back because you reached the first milestone: you didn't let rakudo explode
12:43 sergot \o/ yay
12:43 FROGGS no, you either call a function from libopenssl that would normalle return a struct, or you use a test file from nativecall repo
12:44 FROGGS and then you let it return an OpaquePointer instead, and do the unpacking using your new op
12:45 sergot ok
12:46 FROGGS and if your op returns a an object of the correct class containing sane information, it was a success :o)
12:47 sergot e.g. nqp::nativecast(int32, $opaq_ptr); ?
12:48 FROGGS no, you only implemented the CStruct case
12:48 FROGGS int32 is not a CStruct
12:48 FROGGS :o)
12:48 sergot yyy, right...
12:48 sergot I'm sorry
12:48 FROGGS you can fiddle with this for example: SSLv3_client_method() returns SSL_METHOD
12:49 sergot Yes, that's what I'm doing right now
12:49 sergot :)
12:51 FROGGS dev/gsoc/openssl$ PERL6LIB=../../zavolaj/lib:lib perl6-m test.p6
12:51 FROGGS OpaquePointer.new()
12:51 FROGGS SSL_METHOD.new(version => 768)
12:51 FROGGS \o/
12:52 FROGGS https://gist.github.com/FROGGS/c8d6f74ebcd2cd7a0e6b
12:52 sergot hmmm, what I'm getting Missing or wrong version of dependency 'src/gen/m-BOOTSTRAP.nqp'
12:52 sergot ?
12:52 sergot I recompiled moar, nqp and rakudo
12:52 sergot why*
12:53 FROGGS because your test.p6 uses NativeCall, which was compiled to an now outdated version of rakudo
12:53 sergot yay \o/
12:53 FROGGS you'd have to rebootstrap panda, or, use NativeCall's source using the PERL6LIB trick
12:54 sergot I had almost the same, I forgot about nqp::decont
12:56 sergot Yeah, works for me to! \o/
12:56 sergot now... other types to implement :)
12:58 sergot say nqp::nativecast(SSL_METHOD, nqp::decont($abc));
12:58 sergot it works as well
12:58 FROGGS yes, though removing the container is often needed
12:59 sergot ok :)
12:59 FROGGS this call with the decont's would then be wrapped by a sub that NativeCall exports
12:59 FROGGS I also first forgot to decont, but a SEGV provided the hint :o)
13:02 FROGGS okay, more $dayjob for me now, have fun adding more cases! :o)
13:02 sergot thank you very much for your help!
13:03 sergot I'll try, dont know how for now, but I'll start figuring out after the dinner :)
13:03 sergot thanks again!
13:11 FROGGS was a pleasure
13:48 sergot FROGGS: we dont have enough MVM_REPR_ID_*
13:48 sergot I think
13:48 FROGGS *g*
13:48 FROGGS that's kinda impossible
13:49 sergot there is no char
13:49 sergot or is it just an int?
13:49 FROGGS # Gets the NCI type code to use based on a given Perl 6 type.
13:49 FROGGS my %type_map =
13:49 FROGGS 'int8'     => 'char',
13:49 FROGGS ^--- NativeCall.pm6
13:50 FROGGS line 68 to 92
13:50 sergot yeah, I thought so, but is it MVM_REPR_ID_P6int?
13:51 FROGGS just try... feed it an int8 as the first arg in test.p6, and printf the ->ID in MoarVM
13:52 sergot Ok, thanks! :)
13:52 FROGGS you only need to 'make install' in MoarVM to test
13:52 FROGGS since the op mapping is made
13:53 sergot okok, great, FROGGS++
13:54 FROGGS :o)
13:54 sergot yeah, int8, Int, int32... all are #define MVM_REPR_ID_P6int                   8
13:55 sergot almost all
13:55 sergot Int is MVM_REPR_ID_P6opaque                5
13:56 sergot like Str
13:59 FROGGS have you decont'd it?
14:05 sergot Yes
14:05 sergot anyway, just testing and we'll see
14:29 sergot I have CStruct, CPointer and CArray done
14:29 sergot It was easy.
14:29 sergot But...
14:29 sergot all the Str, Int stuff is really hard
14:30 sergot Ok, I'll get back to this later, dinner &
14:50 FROGGS yes, it is tricky but doable
16:01 FROGGS joined #perl6-lwp-gsoc
16:16 sergot FROGGS: any hints? :)
16:17 FROGGS about Int?
16:18 FROGGS sergot: I think you got all information in #moarvm
16:19 FROGGS <FROGGS> you can ask for its storage spec, this tells you what it can store
16:19 FROGGS <FROGGS> and how many bits it can store for sized ints
16:19 FROGGS <FROGGS> look at MoarVM/src/core/coerce.c:274
16:25 sergot hmm, okay, should be enough :)
16:26 FROGGS I also pasted the code to get the storage spec there
16:27 sergot Yes, I remember, thanks a lot :)
17:58 FROGGS and? progress?

| Channels | #perl6-lwp-gsoc index | Today | | Search | Google Search | Plain-Text | summary