On 04/16/2016 10:08 PM, David Warring (via RT) wrote:
> # New Ticket Created by  David Warring 
> # Please include the string:  [perl #127908]
> # in the subject line of all future correspondence about this issue. 
> # <URL: https://rt.perl.org/Ticket/Display.html?id=127908 >
>
>
> Consider:
>
> $ perl6 -v
> This is Rakudo version 2016.03-124-g4b0e5bd built on MoarVM version 
> 2016.03-108-gca1a21a
> implementing Perl 6.c.
> $ $ perl6 -e'use NativeCall; our sub abs(int $c) returns int is native { * }'
> Potential difficulties:
>     In 'abs' routine declaration - Not an accepted NativeCall type for 
> parameter [1] $c : int
>      --> For Numerical type, use the appropriate int32/int64/num64...
>     at -e:1
>     ------>  abs(int $c) returns int is native { * }⏏<EOL>
>     The returning type of 'abs' --> int is erroneous. You should not return a 
> non NativeCall supported type (like Int inplace of int32), truncating errors 
> can appear with different architectures
>     at -e:1
>     ------>  abs(int $c) returns int is native { * }⏏<EOL>
>
> But 'int' is a standard C type that is in widespread use. For example the 
> definition of abs(), from stdlib.h is: 
>
> /* Return the absolute value of X.  */
> extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;

"int" in C may be a "valid type", but when you ask perl6 for an "int",
you'll get a 64bit int every time. You'll need to use "int32" for your
nativecall wrappers.

Reply via email to