Raku / old-issue-tracker

Tickets from RT
https://github.com/Raku/old-issue-tracker/issues
2 stars 1 forks source link

nativecall sub declaration complains about 'returns' type when type has been predeclared using yadda-yadda on Rakudo Moar #3529

Open p6rt opened 10 years ago

p6rt commented 10 years ago

Migrated from rt.perl.org#122815 (status was 'open')

Searchable as RT122815$

p6rt commented 10 years ago

From anteusz@freemail.hu

HI ALl,

1.   use NativeCall; 2. 3.   class TopWindow {...} 4. 5.   class TopWindow is repr('CPointer') is export { 6. 7.   sub TopWindow_TopWindow_c() returns TopWindow is   symbol('TopWindow_TopWindow_c') is native("whatever") { * } 8. 9.   multi method new() returns TopWindow { 10.   return TopWindow_TopWindow_c();} 11. 12.   } 13. 14. 15.   my $t = TopWindow.new();

if I run this, I get Unknown type TopWindow used in native call. If you want to pass a struct, be sure to use the CStruct representation. If you want to pass an array, be sure to use the CArray type.   in sub type_code_for at D​:\rakudogit\install/languages/perl6/lib\NativeCall.pm6​:89   in sub return_hash_for at D​:\rakudogit\install/languages/perl6/lib\NativeCall.pm6​:62   in method postcircumfix​:\<( )> at D​:\rakudogit\install/languages/perl6/lib\NativeCall.pm6​:127   in method new at D​:\m\perl\cheadertoperl6\test.p6​:9   in block \ at D​:\m\perl\cheadertoperl6\test.p6​:15

if you remove class TopWindow {...}, it starts working.

I need to forward reference TopWindow as it is used in other classes, function calls.

And other may need it too "en el futuro"

Marton

p6rt commented 6 years ago

From @skids

Golf and change of behavior​:

$ perl6 -e 'use NativeCall; class T is repr\ is export { sub new(size_t $n) returns T is symbol\ is native { * }; }; T.new();' $ perl6 -e 'use NativeCall; class T {...}; class T is repr\ is export { sub new(size_t $n) returns T is symbol\ is native { * }; }; T.new();' ===SORRY!=== Error while compiling -e Cannot change REPR of T now (must be set at initial declaration) at -e​:1

Workaround​:

$ perl6 -e 'use NativeCall; class T is repr\ {...}; class T is export { sub new(size_t $n) returns T is symbol\ is native { * }; }; T.new(); say T.REPR;' CPointer

p6rt commented 6 years ago

The RT System itself - Status changed from 'new' to 'open'