Странное сообщение, объявляющее Pointer [void] в модуле perl6 NativeCall - PullRequest
0 голосов
/ 01 июля 2018

Эти фрагменты кода могут показаться странными, потому что я начал с исходного кода и обрезал кусочки, пока не пришел к минимальному набору инструкций, которые воспроизводили ошибку. Так что терпите с явной бесполезностью. Существует два модуля 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 или что-то еще, что я не вижу?

1 Ответ

0 голосов
/ 02 июля 2018

Как предложил Брэд Гилберт, удаление [void] останавливает жуткое действие на расстоянии.

...