Re: an error I don't understand

2020-07-01 Thread Marcel Timmerman

Solved!

It had something to do with having an installed version and testing a 
program using a partly changed local version (renames of files too) and 
partly the installed version. This caused the same type from several 
sources and thereby making them differ. Removing the installed versions 
cleared every error.


That leaves us with the error message not completely comprehensible by 
people like me. Raku does see a difference but doesn't say which.


Anyways, thanks for answering
Marcel


Re: an error I don't understand

2020-06-27 Thread Marcel Timmerman

Hi Brad,


I don't know why you are getting an error.

But I think that this is one case where you should be writing `BUILD` 
instead of `TWEAK`.

Note though that you can only have one `BUILD` or `TWEAK` per class.
A quick test showed to me that it doesn't matter if I use BUILD or 
TWEAK. Besides this, I tried this construct before without the TWEAK or 
BUILD submethods and the assignment generated the same errors.


To answer your question below I just want to have an assignment to 
another typed variable which works for all variables but not the CStruct 
variable. Like below;


my cairo_path_data_point_t $p1 = $another-path-data-point;

I must also mention that it becomes awkward when such a variable is 
provided as an argument to some method. Binding will generate also such 
message.


In the mean time I made a small program which didn't generate errors, 
see below

---
use v6;
use NativeCall;

class cairo_path_data_point_t is repr('CStruct') is export {
  has num64 $.x;
  has num64 $.y;
}

my cairo_path_data_point_t $d1 .= new( :x(1e0), :y(2e0));
my cairo_path_data_point_t $d2 = $d1;

note "d2: ", $d2.perl;            # d2: cairo_path_data_point_t.new(x => 
1e0, y => 2e0)

---

and this is what I want I now need a Crystal Ball to find me the 
answer of the problems I ran into :-\


Well, at least the error is weird to warn me that I cannot assign a 
variable to another of the same type.


Regards,
Marcel


---

Or maybe you want a multi method `new` instead?

    multi method new ( :$native-object! ) {
        samewith( x => $native-object.x, y => $native-object.y )
    }

Assuming that `x` and `y` are actually public attributes you could 
pull them out of the object in the signature.


    multi method new ( :$native-object! (:$x, :$y) ) {
        samewith( :$x, :$y )
    }

If you need to throw out other public attributes, add `*%`

    multi method new ( :$native-object! (:$x, :$y, *%) ) {
        samewith( :$x, :$y )
    }

---

Honestly I do not understand why you are passing in an already 
constructed object, and I don't know anything about it either.


If you gave us answers for those two questions, we may be able to help 
you better.



On Sat, Jun 27, 2020 at 10:56 AM Marcel Timmerman > wrote:


Hi,

I am getting an error and don't know why it happens, it might even
be a
bug. It is about an assignment to a CStruct variable.

The structure is defined like;

class cairo_path_data_point_t is repr('CStruct') is export {
   has num64 $.x;
   has num64 $.y;

   submethod TWEAK ( :$native-object ) {
 $!x = $native-object.x;
 $!y = $native-object.y;
   }
}


The error is generated when typed variables are used (below, $x is
also
a cairo_path_data_point_t);

my cairo_path_data_point_t $p1 = $x;

or

my cairo_path_data_point_t $p1 =
cairo_path_data_point_t.new(:native-object($x));

but not with

my cairo_path_data_point_t $p1 .= new(:native-object($x));

or

my $p1 = $x;

After which all fields in the structure are happely accessable
using $p1!


The error is

Type check failed in assignment to $p1; expected
cairo_path_data_point_t
but got cairo_path_data_point_t.new(x => 0e0, y => 0e0)


Raku version: 2020.06-7-gf1960baa9 built on MoarVM version
2020.06-6-gbf6af07de
implementing Raku 6.d.

The content of the structure does not matter, I've seen it with other
structures too.

Regards,
Marcel





Re: an error I don't understand

2020-06-27 Thread Brad Gilbert
I don't know why you are getting an error.

But I think that this is one case where you should be writing `BUILD`
instead of `TWEAK`.
Note though that you can only have one `BUILD` or `TWEAK` per class.

---

Or maybe you want a multi method `new` instead?

multi method new ( :$native-object! ) {
samewith( x => $native-object.x, y => $native-object.y )
}

Assuming that `x` and `y` are actually public attributes you could pull
them out of the object in the signature.

multi method new ( :$native-object! (:$x, :$y) ) {
samewith( :$x, :$y )
}

If you need to throw out other public attributes, add `*%`

multi method new ( :$native-object! (:$x, :$y, *%) ) {
samewith( :$x, :$y )
}

---

Honestly I do not understand why you are passing in an already constructed
object, and I don't know anything about it either.

If you gave us answers for those two questions, we may be able to help you
better.


On Sat, Jun 27, 2020 at 10:56 AM Marcel Timmerman  wrote:

> Hi,
>
> I am getting an error and don't know why it happens, it might even be a
> bug. It is about an assignment to a CStruct variable.
>
> The structure is defined like;
>
> class cairo_path_data_point_t is repr('CStruct') is export {
>has num64 $.x;
>has num64 $.y;
>
>submethod TWEAK ( :$native-object ) {
>  $!x = $native-object.x;
>  $!y = $native-object.y;
>}
> }
>
>
> The error is generated when typed variables are used (below, $x is also
> a cairo_path_data_point_t);
>
> my cairo_path_data_point_t $p1 = $x;
>
> or
>
> my cairo_path_data_point_t $p1 =
> cairo_path_data_point_t.new(:native-object($x));
>
> but not with
>
> my cairo_path_data_point_t $p1 .= new(:native-object($x));
>
> or
>
> my $p1 = $x;
>
> After which all fields in the structure are happely accessable using $p1!
>
>
> The error is
>
> Type check failed in assignment to $p1; expected cairo_path_data_point_t
> but got cairo_path_data_point_t.new(x => 0e0, y => 0e0)
>
>
> Raku version: 2020.06-7-gf1960baa9 built on MoarVM version
> 2020.06-6-gbf6af07de
> implementing Raku 6.d.
>
> The content of the structure does not matter, I've seen it with other
> structures too.
>
> Regards,
> Marcel
>


an error I don't understand

2020-06-27 Thread Marcel Timmerman

Hi,

I am getting an error and don't know why it happens, it might even be a 
bug. It is about an assignment to a CStruct variable.


The structure is defined like;

class cairo_path_data_point_t is repr('CStruct') is export {
  has num64 $.x;
  has num64 $.y;

  submethod TWEAK ( :$native-object ) {
    $!x = $native-object.x;
    $!y = $native-object.y;
  }
}


The error is generated when typed variables are used (below, $x is also 
a cairo_path_data_point_t);


my cairo_path_data_point_t $p1 = $x;

or

my cairo_path_data_point_t $p1 = 
cairo_path_data_point_t.new(:native-object($x));


but not with

my cairo_path_data_point_t $p1 .= new(:native-object($x));

or

my $p1 = $x;

After which all fields in the structure are happely accessable using $p1!


The error is

Type check failed in assignment to $p1; expected cairo_path_data_point_t 
but got cairo_path_data_point_t.new(x => 0e0, y => 0e0)



Raku version: 2020.06-7-gf1960baa9 built on MoarVM version 
2020.06-6-gbf6af07de

implementing Raku 6.d.

The content of the structure does not matter, I've seen it with other 
structures too.


Regards,
Marcel