00:21
xiaomiao joined
00:40
kjs_ joined
02:47
ilbot3 joined
03:34
colomon joined
03:52
colomon joined
06:02
vendethiel joined
07:32
vendethiel joined
08:25
vendethiel joined
08:53
rurban joined
09:06
camelia joined
09:13
vendethiel joined
10:21
vendethiel joined
10:24
mj41 joined
10:28
FROGGS joined
11:03
camelia joined
|
|||
FROGGS | $ perl6-m -e 'class Foo is repr<CStruct> { has buf8 $.bar }' | 11:28 | |
===SORRY!=== | |||
CStruct representation only handles int, num, CArray, CPointer and CStruct but got a Uninstantiable | |||
:o( | |||
12:12
FROGGS_ joined
12:20
zakharyas joined
12:32
kjs_ joined
12:58
Ven joined
|
|||
FROGGS_ | jnthn: how do I pun the buf8 role into a class in repr/CStruct.c? | 13:13 | |
this is also needed to return a VMArray like a buf8 | 13:16 | ||
I need this basically: m: say Buf[uint8].^make_pun; | 13:25 | ||
m: say Buf[uint8].^make_pun; | |||
camelia | rakudo-moar 9fc66c: OUTPUT«(Buf[uint8])» | ||
FROGGS_ | I guess I can/should do that in NativeCall... | 13:34 | |
at least for the returns trait | |||
$ perl6-m -e 'use NativeCall; sub malloc(int32) returns buf8 is native { * }; say malloc(1)' | 13:47 | ||
Buf[uint8]:0x<> | |||
okay, trouble here is of course that we don't know its .elems... | 13:48 | ||
looks like we cannot allow blobs in CStruct attribute or as return types of native subs :/ | 13:56 | ||
unless we'd know the elems in beforehand | 14:04 | ||
14:28
zakharyas joined
15:24
hoelzro_ joined,
timotimo joined,
muraiki joined
15:35
brrt joined
16:12
kjs_ joined
16:18
brrt joined
|
|||
FROGGS_ | hmmm, would be nice to be able to inline structures... | 16:26 | |
timotimo | yes please | 16:27 | |
FROGGS_ | that an unions seem equally hard | 16:38 | |
timotimo | i thought unions would be trivial | 16:39 | |
i looked at the code that places the slots in a CStruct and it looked like you could just "not increment" the starting position | 16:41 | ||
FROGGS_ | how do you do that at Perl 6 level? | ||
like, having num32 and int32 share the same memory | 16:42 | ||
timotimo | since you always just access those via getattr and bindattr, i don't think that's too difficult | 16:43 | |
FROGGS_ | m: class Foo { has num32|int32 $.bar } | ||
camelia | rakudo-moar 9fc66c: OUTPUT«===SORRY!===Type 'num32' is not declaredat /tmp/SqukKpL9ND:1------> class Foo { has num32⏏|int32 $.bar }Malformed hasat /tmp/SqukKpL9ND:1------> class Foo { has num32⏏|int32 $.bar }» | ||
timotimo | and if they want to be rw, you'll end up using jnthn's new native attr code | ||
ah, that's what you're asking | |||
FROGGS_ | :o) | ||
timotimo | well, you'd have to build a class that's repr CUnion or something | 16:44 | |
or is repr CStruct is union OSLT | |||
FROGGS_ | ahh, and inline that one... | ||
timotimo | well, i'd expect putting a CUnion repr'd class into a struct would inline by default, but i can see why you might want to have a pointer to such a union sometimes | 16:45 | |
FROGGS_ | inline by default will happen anyway I think | ||
timotimo | so you'd have to "is pointer" if you want a pointer instead? | 16:46 | |
FROGGS_ | given that 'int32 $bar is rw' as a parameter declaration will mean 'int *bar' in near future | ||
is rw | |||
timotimo | ... oh? | ||
FROGGS_ | aye | ||
timotimo | i didn't know that | ||
FROGGS_ | and it kinda makes sense to call it 'is rw' for attributes | 16:47 | |
timotimo | oh? | 16:48 | |
FROGGS_ | because you can shove update the pointer to another structure, whereas you cannot do that if the structure was inlined | ||
s/shove// | |||
timotimo | i'd like to have CStruct classes with "is rw" attributes just so that i can modify them without writing my own accesors | ||
FROGGS_ | true | ||
I know what you mean: | 16:52 | ||
method Set(Num $x, Num $y) { | |||
nqp::bindattr_n(nqp::decont(self), Box2D::Vec2, '$!x', nqp::unbox_n($x)); | |||
nqp::bindattr_n(nqp::decont(self), Box2D::Vec2, '$!y', nqp::unbox_n($y)); | |||
} | |||
-.- | |||
timotimo | hrhr | ||
and with the native refs that jnthn made it'll be much more efficient than having to bindattr all the time | |||
fwiw, i don't like the "is rw" for "is actually a pointer" very much | 16:58 | ||
TimToady | if we're trying to be C-like, we really want it as part of the type, not tacked on as a trait | 17:03 | |
Ptr[MyType] or so | 17:04 | ||
timotimo | hm, we have a CPointer REPR | 17:07 | |
a role for this would indeed be nice. | 17:11 | ||
17:46
camelia joined
17:51
kjs_ joined,
brrt joined
|
|||
FROGGS_ | timotimo: that was my first thought too | 18:05 | |
Pointer[int32] | |||
maybe we should TIMTOWTDI the whole thing | 18:06 | ||
dalek | arVM/cpp: 953c022 | coke++ | macports/Portfile: Add a macports Portfile |
19:07 | |
arVM/cpp: c462d90 | coke++ | / (2 files): delint Portfile, move to correct location |
|||
arVM/cpp: cad876f | FROGGS++ | src/6model/reprs/CStruct.h: make clear what strict_size is about |
|||
arVM/cpp: dc0bd10 | FROGGS++ | / (8 files): implement nativecallsizeof of |
|||
arVM/cpp: c314d3d | FROGGS++ | src/core/nativecall.c: return number of bytes from MVM_nativecall_sizeof allow to nativesizeof(CPPStruct) |
|||
19:33
brrt joined
19:41
kjs_ joined
19:53
hoelzro joined
19:55
dalek joined
|
|||
brrt | please review this commit, i'll push it to master if you're ok with it :-) github.com/bdw/MoarVM/commit/a70d7...26bd4dee52 | 20:24 | |
fwiw, the label: { block } syntax is pretty nice in C | 20:26 | ||
FROGGS_ | that's working code: github.com/FROGGS/p6-Box2D/blob/ma...locator.pm | 20:45 | |
brrt | FROGGS_++ | ||
FROGGS_ | tested here: github.com/FROGGS/p6-Box2D/blob/ma...llocator.t | 20:46 | |
I like the Pointer role :o) | |||
brrt | nice | ||
i'm going to push since spectest was clean (enough) | 20:47 | ||
dalek | arVM: 8352aeb | brrt++ | src/io/fileops.c: Rewrite MVM_file_copy The old version could not handle file sizes larger than 2GB (on linux, at least). This version uses a loop to correct for the fact that sendfile doesn't necessarily send all bytes you request. |
||
FROGGS_ | brrt: I would not spot an error anyway :o) | ||
brrt | i tried to make it a bit cleaner than the 3-level-deep nested ifs | 20:48 | |
FROGGS_ | it is still hairy | ||
like C in general | |||
brrt | i like C, i don't think it's that hairy | 20:50 | |
but then again, i like exactness in my code, and c lets you be as exact (or conversely as sloppy) as you like | 20:51 | ||
FROGGS_ | yeah, true | ||
brrt afk | 21:02 | ||
21:02
brrt left
|
|||
FROGGS | TimToady / timotimo / jnthn: we can now have typed pointers (e.g. Pointer[MyStruct], they have a deref method) as params, attrs and return types | 22:38 | |
timotimo | and pointer arithmetic, too, yeah? | ||
FROGGS | TimToady / timotimo / jnthn: it is implemented in the cpp branch, but is not cpp specific | ||
timotimo: gah! | |||
:P | |||
timotimo: you are welcome to jump in :o) | 22:39 | ||
(dunno if that idiom works in English at all) | |||
m: use NativeCall; sub malloc(int32) returns OpaquePointer is native { * }; say my $p = malloc(32); say OpaquePointer.new( $p + 8 ) | 22:41 | ||
camelia | rakudo-moar d850a9: OUTPUT«OpaquePointer<0x5e1f790>OpaquePointer<0x5e1f798>» | ||
FROGGS | timotimo: ^^ | ||
not convenient but works | |||
and since we have nativesizeof and you can cast a certain pointer to a struct you can basically unpack a memory area into structs | 22:42 | ||
gnight | 22:51 | ||
timotimo | i like that | 23:03 |