Странное сообщение, объявляющее Pointer[void] в модуле perl6 NativeCall
Эти фрагменты кода могут показаться странными, потому что я начал с исходного кода и обрезал фрагменты, пока не пришел к минимальному набору инструкций, которые воспроизводили ошибку. Так что терпите с явной бесполезностью. Есть два модуля perl6, один use
с другой, и программа. Это первый модуль:
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 или что-то еще, что я не вижу?
1 ответ
Как предложил Брэд Гилберт, удалив [void]
останавливает жуткое действие на расстоянии.