diff --git a/xs/src/ExPolygon.hpp b/xs/src/ExPolygon.hpp index 0ee9c28a6..c5218dd48 100644 --- a/xs/src/ExPolygon.hpp +++ b/xs/src/ExPolygon.hpp @@ -46,7 +46,7 @@ polygon2perl(Polygon& poly) { for (unsigned int i = 0; i < num_points; i++) { av_store(av, i, point2perl(poly[i])); } - return (SV*)newRV_noinc((SV*)av); + return sv_bless(newRV_noinc((SV*)av), gv_stashpv("Slic3r::Polygon", GV_ADD)); } #endif diff --git a/xs/src/Point.hpp b/xs/src/Point.hpp index b468e37e2..2b22fa6b4 100644 --- a/xs/src/Point.hpp +++ b/xs/src/Point.hpp @@ -21,7 +21,7 @@ point2perl(Point& point) { AV* av = newAV(); av_fill(av, 1); av_store_point_xy(av, point.x, point.y); - return (SV*)newRV_noinc((SV*)av); + return sv_bless(newRV_noinc((SV*)av), gv_stashpv("Slic3r::Point", GV_ADD)); } #endif diff --git a/xs/t/03_point.t b/xs/t/03_point.t index 0a876af71..362581147 100644 --- a/xs/t/03_point.t +++ b/xs/t/03_point.t @@ -4,9 +4,11 @@ use strict; use warnings; use Slic3r::XS; -use Test::More tests => 1; +use Test::More tests => 2; my $point = Slic3r::Point::XS->new(10, 15); is_deeply [ @$point ], [10, 15], 'point roundtrip'; +isa_ok $point->arrayref, 'Slic3r::Point', 'Perl point is blessed'; + __END__ diff --git a/xs/t/04_expolygon.t b/xs/t/04_expolygon.t index 0fe27640c..4beb93a17 100644 --- a/xs/t/04_expolygon.t +++ b/xs/t/04_expolygon.t @@ -4,7 +4,7 @@ use strict; use warnings; use Slic3r::XS; -use Test::More tests => 1; +use Test::More tests => 4; my $square = [ # ccw [100, 100], @@ -22,4 +22,8 @@ my $hole_in_square = [ # cw my $expolygon = Slic3r::ExPolygon::XS->new($square, $hole_in_square); is_deeply [ @$expolygon ], [$square, $hole_in_square], 'expolygon roundtrip'; +isa_ok $expolygon->arrayref, 'Slic3r::ExPolygon', 'Perl expolygon is blessed'; +isa_ok $expolygon->[0], 'Slic3r::Polygon', 'Perl polygons are blessed'; +isa_ok $expolygon->[0][0], 'Slic3r::Point', 'Perl polygon points are blessed'; + __END__ diff --git a/xs/xsp/ExPolygon.xsp b/xs/xsp/ExPolygon.xsp index a69fd26b6..4da73c55f 100644 --- a/xs/xsp/ExPolygon.xsp +++ b/xs/xsp/ExPolygon.xsp @@ -30,7 +30,7 @@ ExPolygon::arrayref() for (unsigned int i = 0; i < num_holes; i++) { av_store(av, i+1, polygon2perl(THIS->holes[i])); } - RETVAL = (SV*)newRV_noinc((SV*)av); + RETVAL = sv_bless(newRV_noinc((SV*)av), gv_stashpv("Slic3r::ExPolygon", GV_ADD)); OUTPUT: RETVAL