X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xs-src%2FMouse.xs;fp=xs-src%2FMouse.xs;h=cea3275e8c7536008937b16967cc809891453d08;hb=d305e1071256f7c7d0415f11a3480fcaeeebabc2;hp=74ef11349448e4c07733dcb1baac4a13e27622c6;hpb=6fd8aa82f783628e6dfb8accf73d93ebd59ece85;p=gitmo%2FMouse.git diff --git a/xs-src/Mouse.xs b/xs-src/Mouse.xs index 74ef113..cea3275 100644 --- a/xs-src/Mouse.xs +++ b/xs-src/Mouse.xs @@ -20,6 +20,9 @@ enum mouse_xc_flags_t { MOUSEf_XC_IS_ANON = 0x0002, MOUSEf_XC_HAS_BUILDARGS = 0x0004, + MOUSEf_XC_HAS_STRICT_CONSTRUCTOR + = 0x0008, + MOUSEf_XC_mask = 0xFFFF /* not used */ }; @@ -113,6 +116,10 @@ mouse_class_update_xc(pTHX_ SV* const metaclass PERL_UNUSED_DECL, HV* const stas flags |= MOUSEf_XC_HAS_BUILDARGS; } + if(predicate_calls(metaclass, "_has_strict_constructor")){ + flags |= MOUSEf_XC_HAS_STRICT_CONSTRUCTOR; + } + av_store(xc, MOUSE_XC_FLAGS, newSVuv(flags)); av_store(xc, MOUSE_XC_ATTRALL, (SV*)attrall); av_store(xc, MOUSE_XC_BUILDALL, (SV*)buildall); @@ -334,7 +341,7 @@ mouse_class_initialize_object(pTHX_ SV* const meta, SV* const object, HV* const } } - if(used < HvUSEDKEYS(args)){ + if(MOUSE_xc_flags(xc) & MOUSEf_XC_HAS_STRICT_CONSTRUCTOR && used < HvUSEDKEYS(args)){ mouse_report_unmatched_keys(aTHX_ meta, attrs, args); } @@ -488,6 +495,7 @@ BOOT: INSTALL_SIMPLE_READER(Class, roles); INSTALL_SIMPLE_PREDICATE_WITH_KEY(Class, is_anon_class, anon_serial_id); INSTALL_SIMPLE_READER(Class, is_immutable); + INSTALL_SIMPLE_READER_WITH_KEY(Class, has_strict_constructor, _strict_constructor); INSTALL_CLASS_HOLDER(Class, method_metaclass, "Mouse::Meta::Method"); INSTALL_CLASS_HOLDER(Class, attribute_metaclass, "Mouse::Meta::Attribute");