Странное сообщение, объявляющее 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] останавливает жуткое действие на расстоянии.

Другие вопросы по тегам