summaryrefslogtreecommitdiffstats
path: root/lib/MooseX/NonMoose/Meta/Role/Constructor.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MooseX/NonMoose/Meta/Role/Constructor.pm')
-rw-r--r--lib/MooseX/NonMoose/Meta/Role/Constructor.pm17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/MooseX/NonMoose/Meta/Role/Constructor.pm b/lib/MooseX/NonMoose/Meta/Role/Constructor.pm
index 9a69d7c..d0ececb 100644
--- a/lib/MooseX/NonMoose/Meta/Role/Constructor.pm
+++ b/lib/MooseX/NonMoose/Meta/Role/Constructor.pm
@@ -59,7 +59,22 @@ sub _generate_instance {
? "${class_var}->FOREIGNBUILDARGS(\@_)"
: '@_';
my $instance = "$super_new_class->$new($arglist)";
- "my $var = " . $self->_meta_instance->inline_rebless_instance_structure($instance, $class_var) . ";\n";
+ return "my $var = $instance;\n"
+ . "if (!Scalar::Util::blessed($var)) {\n"
+ . " " . $self->_inline_throw_error(
+ "'The constructor for $super_new_class did not return a blessed instance'"
+ ) . ";\n"
+ . "}\n"
+ . "elsif (!$var->isa($class_var)) {\n"
+ . " if (!$class_var->isa(Scalar::Util::blessed($var))) {\n"
+ . " " . $self->_inline_throw_error(
+ "\"The constructor for $super_new_class returned an object whose class is not a parent of $class_var\""
+ ) . ";\n"
+ . " }\n"
+ . " else {\n"
+ . " " . $self->_meta_instance->inline_rebless_instance_structure($var, $class_var) . ";\n"
+ . " }\n"
+ . "}\n";
}
no Moose::Role;