Эти фрагменты кода могут показаться странными, потому что я начал с исходного кода и обрезал кусочки, пока не пришел к минимальному набору инструкций, которые воспроизводили ошибку. Так что терпите с явной бесполезностью.
Существует два модуля perl6, один use
s, другой и программа.
Это первый модуль:
unit class test1;
use NativeCall;
use test2;
method test
{
my Pointer[void] $dummy .= new;
}
Второй модуль включен в первый, но его часть фактически не используется:
unit module test2;
use NativeCall;
class A is repr('CStruct') is export {
has Pointer[void] $.wrongdoer;
has int32 $.a;
}
Программа создает объект test1 и вызывает метод test:
use lib '.';
use test1;
my test1 $t .= new;
$t.test;
Эта программа выводит ошибку, по-видимому, вызванную присваиванием в методе test класса test1:
Type check failed in assignment to $dummy; expected NativeCall::Types::Pointer[NativeCall::Types::void] but got NativeCall::Types::Pointer[NativeCall::Types::void].new(0)
Если я закомментирую $.wrongdoer
во втором классе, программа будет выполнена без ошибок.
Я бегу по ракудо 2018.06.
Это ошибка в модуле NativeCall или что-то еще, что я не вижу?