# New Ticket Created by Itsuki Toyota # Please include the string: [perl #129831] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=129831 >
See the following results: * codes * t/03-role.c ---------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> #include "03-role.h" #ifdef _WIN32 #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT extern #endif struct Foo { int a; double b; } Foo; void c_insert(struct Foo* foo, void* item) { // insert operation } ---------------------------- t/03-role.h ---------------------------- #if ! defined(HEADER_ROLE_H) #define HEADER_ROLE_H #ifdef __cplusplus extern "C" { #endif struct Foo; void c_insert(struct Foo*, void*); #ifdef __cplusplus } /* closing brace for extern "C" */ #endif #endif /* HEADER_ROLE_H */ ---------------------------- t/03-role.t ---------------------------- use v6; use Test; use NativeCall; use lib <lib t>; use CompileTestLib; compile_test_lib('03-role'); role Foo is export is repr('CPointer') { my sub c_insert(Foo, Pointer[void] is rw) is native("./03-callback") { * } method insert(Pointer[void] $item) { c_insert(self, $item); } } done-testing; ---------------------------- * results * ---------------------------- $ mi6 test t/03-role.t ==> Set PERL6LIB=/home/itoyota/Programs/p6-Foo/lib ==> prove -e /home/itoyota/.rakudobrew/bin/../moar-nom/install/bin/perl6 -r t/03-role.t t/03-role.t .. ===SORRY!=== Error while compiling /home/itoyota/Programs/p6-Foo/t/03-role.t Too many positionals passed; expected 2 arguments but got 3 at /home/itoyota/Programs/p6-Foo/t/03-role.t:10 t/03-role.t .. Dubious, test returned 1 (wstat 256, 0x100) No subtests run Test Summary Report ------------------- t/03-role.t (Wstat: 256 Tests: 0 Failed: 0) Non-zero exit status: 1 Parse errors: No plan found in TAP output Files=1, Tests=0, 1 wallclock secs ( 0.02 usr 0.00 sys + 0.40 cusr 0.02 csys = 0.44 CPU) Result: FAIL ---------------------------- It seems weird to me, because roles can define with `is export is repr("CPointer")` traits and can use `self`.without any errors as the following example. $ perl6 -MNativeCall -e 'role R is export is repr("CPointer") { method insert($item) { self!c_insert(self, $item); }; method !c_insert(R $r, $item){ say $r; } }; my $r = R.new; $r.insert(10);' R.new My Perl 6 version is: $ perl6 --version This is Rakudo version 2016.09-105-g4abc28c built on MoarVM version 2016.09-13-g34c375a implementing Perl 6.c.