Skip Menu |
Report information
Id: 122815
Status: open
Priority: 0/
Queue: perl6

Owner: Nobody
Requestors: equinox <anteusz [at] freemail.hu>
Cc:
AdminCc:

Severity: (no value)
Tag: Bug
Platform: (no value)
Patch Status: (no value)
VM: Moar



From: anteusz [...] freemail.hu
To: rakudobug [...] perl.org
Date: Sat, 20 Sep 2014 13:28:59 +0200
Subject: bug around native call
Download (untitled) / with headers
text/plain 1.1k
Download (untitled) / with headers
text/html 10.9k
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 <unit> 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




Download (untitled) / with headers
text/plain 636b
Golf and change of behavior: $ perl6 -e 'use NativeCall; class T is repr<CPointer> is export { sub new(size_t $n) returns T is symbol<malloc> is native { * }; }; T.new();' $ perl6 -e 'use NativeCall; class T {...}; class T is repr<CPointer> is export { sub new(size_t $n) returns T is symbol<malloc> 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<CPointer> {...}; class T is export { sub new(size_t $n) returns T is symbol<malloc> is native { * }; }; T.new(); say T.REPR;' CPointer


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org