diff -Nru libtype-tiny-xs-perl-0.021/Changes libtype-tiny-xs-perl-0.022/Changes --- libtype-tiny-xs-perl-0.021/Changes 2020-08-18 07:37:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/Changes 2020-09-25 00:31:07.000000000 +0000 @@ -6,6 +6,10 @@ Bug tracker: Maintainer: Toby Inkster (TOBYINK) +0.022 2020-09-25 + + - Added: ArrayLike, HashLike, CodeLike, and StringLike checks. + 0.021 2020-08-18 [ Bug Fixes ] diff -Nru libtype-tiny-xs-perl-0.021/COPYRIGHT libtype-tiny-xs-perl-0.022/COPYRIGHT --- libtype-tiny-xs-perl-0.021/COPYRIGHT 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/COPYRIGHT 2020-09-25 00:31:07.000000000 +0000 @@ -3,21 +3,6 @@ Upstream-Contact: Toby Inkster (TOBYINK) Source: https://metacpan.org/release/Type-Tiny-XS -Files: README - lib/Type/Tiny/XS.pm - lib/Type/Tiny/XS/Util.pm - t/01basic.t - t/02int.t - t/04positiveorzeroint.t - t/05nonemptystr.t - t/06map.t - t/07tuple.t - t/08enum.t - t/09anyof_allof.t - t/99parsing.t -Copyright: This software is copyright (c) 2014 by Toby Inkster. -License: GPL-1.0+ or Artistic-1.0 - Files: INSTALL LICENSE Makefile.PL @@ -32,11 +17,28 @@ Copyright: Unknown License: Unknown +Files: lib/Type/Tiny/XS/Util.pm + t/01basic.t + t/02int.t + t/04positiveorzeroint.t + t/05nonemptystr.t + t/06map.t + t/07tuple.t + t/08enum.t + t/09anyof_allof.t + t/99parsing.t +Copyright: This software is copyright (c) 2014 by Toby Inkster. +License: GPL-1.0+ or Artistic-1.0 + Files: Changes META.json META.yml doap.ttl t/11isa.t + t/50arraylike.t + t/51hashlike.t + t/52codelike.t + t/53stringlike.t Copyright: Copyright 2020 Toby Inkster. License: GPL-1.0+ or Artistic-1.0 @@ -46,12 +48,13 @@ Copyright: None License: public-domain -Files: dist.ini -Copyright: Copyright 2014 Toby Inkster. +Files: README + lib/Type/Tiny/XS.pm +Copyright: This software is copyright (c) 2014, 2018-2020 by Toby Inkster. License: GPL-1.0+ or Artistic-1.0 -Files: t/gh8.t -Copyright: This software is copyright (c) 2019 by Toby Inkster. +Files: dist.ini +Copyright: Copyright 2014 Toby Inkster. License: GPL-1.0+ or Artistic-1.0 Files: t/10bool.t @@ -62,6 +65,10 @@ Copyright: This software is copyright (c) 2014, 2018 by Toby Inkster. License: GPL-1.0+ or Artistic-1.0 +Files: t/gh8.t +Copyright: This software is copyright (c) 2019 by Toby Inkster. +License: GPL-1.0+ or Artistic-1.0 + License: Artistic-1.0 This software is Copyright (c) 2020 by the copyright holder(s). diff -Nru libtype-tiny-xs-perl-0.021/debian/changelog libtype-tiny-xs-perl-0.022/debian/changelog --- libtype-tiny-xs-perl-0.021/debian/changelog 2020-11-09 11:18:28.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/debian/changelog 2021-02-07 01:50:34.000000000 +0000 @@ -1,8 +1,15 @@ -libtype-tiny-xs-perl (0.021-1build1) hirsute; urgency=medium +libtype-tiny-xs-perl (0.022-1) unstable; urgency=medium - * No-change rebuild for the perl update. + [ upstream ] + * new release - -- Matthias Klose Mon, 09 Nov 2020 12:18:28 +0100 + [ intrigeri ] + * Remove myself from Uploaders + + [ Jonas Smedegaard ] + * copyright info: update coverage + + -- Jonas Smedegaard Sun, 07 Feb 2021 02:50:34 +0100 libtype-tiny-xs-perl (0.021-1) unstable; urgency=medium diff -Nru libtype-tiny-xs-perl-0.021/debian/control libtype-tiny-xs-perl-0.022/debian/control --- libtype-tiny-xs-perl-0.021/debian/control 2020-08-20 18:29:13.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/debian/control 2021-02-07 01:49:02.000000000 +0000 @@ -2,7 +2,6 @@ Maintainer: Debian Perl Group Uploaders: Jonas Smedegaard , - intrigeri , Clément Hermann , Section: perl Testsuite: autopkgtest-pkg-perl diff -Nru libtype-tiny-xs-perl-0.021/debian/copyright libtype-tiny-xs-perl-0.022/debian/copyright --- libtype-tiny-xs-perl-0.021/debian/copyright 2020-08-20 18:33:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/debian/copyright 2021-02-07 01:49:59.000000000 +0000 @@ -17,7 +17,7 @@ Files: debian/* Copyright: - 2014-2015,2020, Jonas Smedegaard , + 2014-2015,2021, Jonas Smedegaard , 2018, Clément Hermann , 2020, intrigeri License: GPL-3+ diff -Nru libtype-tiny-xs-perl-0.021/debian/copyright_hints libtype-tiny-xs-perl-0.022/debian/copyright_hints --- libtype-tiny-xs-perl-0.021/debian/copyright_hints 2020-08-20 18:30:05.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/debian/copyright_hints 2021-02-07 01:49:38.000000000 +0000 @@ -22,6 +22,10 @@ fallback/const-c.inc fallback/const-xs.inc t/11isa.t + t/50arraylike.t + t/51hashlike.t + t/52codelike.t + t/53stringlike.t typetiny.h xs_version.h Copyright: NONE @@ -44,6 +48,7 @@ t/99parsing.t t/gh8.t Copyright: 2014, 2018, Toby Inkster. + 2014, 2018-2020, Toby Inkster. 2014, Toby Inkster. 2018, Toby Inkster. 2019, Toby Inkster. @@ -72,6 +77,7 @@ None This software is copyright (c) 2014 by Toby Inkster. This software is copyright (c) 2014, 2018 by Toby Inkster. + This software is copyright (c) 2014, 2018-2020 by Toby Inkster. This software is copyright (c) 2018 by Toby Inkster. This software is copyright (c) 2019 by Toby Inkster. Unknown @@ -92,6 +98,16 @@ License: UNKNOWN FIXME +Files: debian/source/lintian-overrides +Copyright: Artistic + GPL-1+ + GPL-3+ + artistic + gpl-1+ + gpl-3+ +License: UNKNOWN + FIXME + Files: MANIFEST Copyright: CREDITS License: UNKNOWN @@ -107,14 +123,8 @@ License: UNKNOWN FIXME -Files: debian/source/lintian-overrides -Copyright: libtype-tiny-xs-perl source: unused-file-paragraph-in-dep5-copyright - specific machine-readable format -License: UNKNOWN - FIXME - Files: debian/control -Copyright: ment Hermann +Copyright: ment Hermann , License: UNKNOWN FIXME diff -Nru libtype-tiny-xs-perl-0.021/doap.ttl libtype-tiny-xs-perl-0.022/doap.ttl --- libtype-tiny-xs-perl-0.021/doap.ttl 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/doap.ttl 2020-09-25 00:31:07.000000000 +0000 @@ -25,7 +25,7 @@ doap:maintainer ; doap:name "Type-Tiny-XS"; doap:programming-language "Perl"; - doap:release , , , , , , , , , , , , , , , , , , , , ; + doap:release , , , , , , , , , , , , , , , , , , , , , ; doap:repository [ a doap:GitRepository; doap:browse ; @@ -383,6 +383,20 @@ doap:file-release ; doap:revision "0.021"^^xsd:string. + + a doap:Version; + dc:identifier "Type-Tiny-XS-0.022"^^xsd:string; + dc:issued "2020-09-25"^^xsd:date; + doap-changeset:changeset [ + doap-changeset:item [ + a doap-changeset:Addition; + rdfs:label "ArrayLike, HashLike, CodeLike, and StringLike checks."; + ]; + ]; + doap-changeset:released-by ; + doap:file-release ; + doap:revision "0.022"^^xsd:string. + a foaf:Person; foaf:name "Andrew Ruder"; diff -Nru libtype-tiny-xs-perl-0.021/lib/Type/Tiny/XS/Util.pm libtype-tiny-xs-perl-0.022/lib/Type/Tiny/XS/Util.pm --- libtype-tiny-xs-perl-0.021/lib/Type/Tiny/XS/Util.pm 2020-08-18 07:37:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/lib/Type/Tiny/XS/Util.pm 2020-09-25 00:31:06.000000000 +0000 @@ -6,7 +6,7 @@ package Type::Tiny::XS::Util; our $AUTHORITY = 'cpan:TOBYINK'; -our $VERSION = '0.021'; +our $VERSION = '0.022'; 1; diff -Nru libtype-tiny-xs-perl-0.021/lib/Type/Tiny/XS.pm libtype-tiny-xs-perl-0.022/lib/Type/Tiny/XS.pm --- libtype-tiny-xs-perl-0.021/lib/Type/Tiny/XS.pm 2020-08-18 07:37:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/lib/Type/Tiny/XS.pm 2020-09-25 00:31:06.000000000 +0000 @@ -6,7 +6,7 @@ package Type::Tiny::XS; our $AUTHORITY = 'cpan:TOBYINK'; -our $VERSION = '0.021'; +our $VERSION = '0.022'; __PACKAGE__->XSLoader::load($VERSION); @@ -17,6 +17,7 @@ FileHandle GlobRef HashRef Int Num Object Ref RegexpRef ScalarRef Str Undef Value PositiveInt PositiveOrZeroInt NonEmptyStr + ArrayLike HashLike CodeLike StringLike Map Tuple Enum AnyOf AllOf /); $names{Item} = $names{Any}; @@ -252,9 +253,14 @@ Toby Inkster Etobyink@cpan.orgE forked all this from L. +B, B, B, and B constraints +based on code by ikegami on StackOverflow. + +L. + =head1 COPYRIGHT AND LICENCE -This software is copyright (c) 2014 by Toby Inkster. +This software is copyright (c) 2014, 2018-2020 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libtype-tiny-xs-perl-0.021/Makefile.PL libtype-tiny-xs-perl-0.022/Makefile.PL --- libtype-tiny-xs-perl-0.021/Makefile.PL 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/Makefile.PL 2020-09-25 00:31:07.000000000 +0000 @@ -25,8 +25,8 @@ test => { requires => { "Test::More" => 0.92 } }, }, "provides" => { - "Type::Tiny::XS" => { file => "lib/Type/Tiny/XS.pm", version => 0.021 }, - "Type::Tiny::XS::Util" => { file => "lib/Type/Tiny/XS/Util.pm", version => 0.021 }, + "Type::Tiny::XS" => { file => "lib/Type/Tiny/XS.pm", version => 0.022 }, + "Type::Tiny::XS::Util" => { file => "lib/Type/Tiny/XS/Util.pm", version => 0.022 }, }, "release_status" => "stable", "resources" => { @@ -42,7 +42,7 @@ }, x_identifier => "http://purl.org/NET/cpan-uri/dist/Type-Tiny-XS/project", }, - "version" => 0.021, + "version" => 0.022, "x_contributors" => [ "Graham Knop (HAARG) ", "Tomasz Konojacki (XENU) ", diff -Nru libtype-tiny-xs-perl-0.021/MANIFEST libtype-tiny-xs-perl-0.022/MANIFEST --- libtype-tiny-xs-perl-0.021/MANIFEST 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/MANIFEST 2020-09-25 00:31:07.000000000 +0000 @@ -29,6 +29,10 @@ t/09anyof_allof.t t/10bool.t t/11isa.t +t/50arraylike.t +t/51hashlike.t +t/52codelike.t +t/53stringlike.t t/99parsing.t t/gh8.t typetiny.h diff -Nru libtype-tiny-xs-perl-0.021/META.json libtype-tiny-xs-perl-0.022/META.json --- libtype-tiny-xs-perl-0.021/META.json 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/META.json 2020-09-25 00:31:07.000000000 +0000 @@ -47,11 +47,11 @@ "provides" : { "Type::Tiny::XS" : { "file" : "lib/Type/Tiny/XS.pm", - "version" : "0.021" + "version" : "0.022" }, "Type::Tiny::XS::Util" : { "file" : "lib/Type/Tiny/XS/Util.pm", - "version" : "0.021" + "version" : "0.022" } }, "release_status" : "stable", @@ -70,7 +70,7 @@ }, "x_identifier" : "http://purl.org/NET/cpan-uri/dist/Type-Tiny-XS/project" }, - "version" : "0.021", + "version" : "0.022", "x_contributors" : [ "Graham Knop (HAARG) ", "Tomasz Konojacki (XENU) ", diff -Nru libtype-tiny-xs-perl-0.021/META.yml libtype-tiny-xs-perl-0.022/META.yml --- libtype-tiny-xs-perl-0.021/META.yml 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/META.yml 2020-09-25 00:31:07.000000000 +0000 @@ -25,10 +25,10 @@ provides: Type::Tiny::XS: file: lib/Type/Tiny/XS.pm - version: '0.021' + version: '0.022' Type::Tiny::XS::Util: file: lib/Type/Tiny/XS/Util.pm - version: '0.021' + version: '0.022' requires: perl: '5.010001' resources: @@ -37,7 +37,7 @@ homepage: https://metacpan.org/release/Type-Tiny-XS license: http://dev.perl.org/licenses/ repository: git://github.com/tobyink/p5-type-tiny-xs.git -version: '0.021' +version: '0.022' x_contributors: - 'Graham Knop (HAARG) ' - 'Tomasz Konojacki (XENU) ' diff -Nru libtype-tiny-xs-perl-0.021/README libtype-tiny-xs-perl-0.022/README --- libtype-tiny-xs-perl-0.021/README 2020-08-18 07:37:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/README 2020-09-25 00:31:06.000000000 +0000 @@ -51,8 +51,13 @@ Toby Inkster forked all this from Mouse::Util::TypeConstraints. + ArrayLike, HashLike, CodeLike, and StringLike constraints based on code by + ikegami on StackOverflow. + + . + COPYRIGHT AND LICENCE - This software is copyright (c) 2014 by Toby Inkster. + This software is copyright (c) 2014, 2018-2020 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -Nru libtype-tiny-xs-perl-0.021/SIGNATURE libtype-tiny-xs-perl-0.022/SIGNATURE --- libtype-tiny-xs-perl-0.021/SIGNATURE 2020-08-18 07:37:21.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/SIGNATURE 2020-09-25 00:31:07.000000000 +0000 @@ -14,24 +14,24 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -SHA256 13bcc16048a823f2fa5911196ef15ec4a3f719af9fbc1d401e31634fd638fca8 COPYRIGHT +SHA256 15e3b8441083c08aa2efb84b6d260e2e95fe56c905b43ecf1331d8a59bc08210 COPYRIGHT SHA256 0d671bbe14d4ad7abbeec35fe17b2725aca2654e2002cb1315db64fb34713731 CREDITS -SHA256 ea0032c2c53a57d795c319e133e3ade4535180b18bd6c39a1bdb762ad5a207ce Changes +SHA256 ccaa0b4c1b8be4db756df547bcd0cfa4fd98500f91154c42162a1859acfdefbc Changes SHA256 13459d0f55c040511a7192b5a225221d3f7c97941410e8e1897586df2f5b4abb INSTALL SHA256 1fb7395e76eabf94c421912d7d0a4f7fa745d49e1acb76b222c21d605b66bd25 LICENSE -SHA256 7c65a2a23fec4f669d0af909c5aee6eae72d408f3d72f6c896147beb17f96035 MANIFEST -SHA256 aa841f06a1af8017811eb5edce75b602577b6bffca647beaa13571e7d2674f77 META.json -SHA256 4e5ec89a0f66a4adf37befd49544efb803f249de6b54a0ee51a8f4f2f19c5cda META.yml -SHA256 d79ee871eefbb5b39546b2e117b87425a9895bd26d419b5d05a36ea5042372bd Makefile.PL -SHA256 1bd76051107eb21c0bc48220db1b96bc4b03b73e45da6658be97e7c0802e78a4 README +SHA256 386dcb5f5d8a59b333f2dc5f1addf066e9831911a67bd4513dd28b2e3238566c MANIFEST +SHA256 2acfd0651c4027a71f8934246d2d791d60f7e199785d219b73cd4280e6f1dc5a META.json +SHA256 3ecb465fb9cdd7c556a3e8a892ffa1452a7b2598084c6a9cf7b579b7478d0ed1 META.yml +SHA256 608ebe7f8b148952599ef6adc30550680bcbd04e64dbde6d4b9d2a0ed2532df3 Makefile.PL +SHA256 266c5c4192c8b3d52ddeaf065d75165783039efe611768704b337c2af7a9201e README SHA256 f420e1c1fecf376c259b3fb42dbc138fe98705b28e47bd40935acd21c2670d7c Util.xs -SHA256 2c90804b4d53128b19b560c91e2aceb4e5658c2786e4203a90ceb58662d6e206 XS.xs +SHA256 8cae73c43d743d881e1790e789948263efa93e5c16c4fd0d0da1dfdb9ceafff6 XS.xs SHA256 5924b3c86fb080ed4f8e9ce1eadf07f21839ee18156b115cb87c22f2bbbab83d dist.ini -SHA256 161132fd5f4e06e070c962c52219d5a0346a2494aea32dd007bab97c66e99086 doap.ttl +SHA256 3c115030bc93f5941f198ab31446530514225807e432ad2d480cadbaa65b7f6f doap.ttl SHA256 fe054ec402ee389b976f61d3932bfb188533a8b48df53f91ceb106c223d55c27 fallback/const-c.inc SHA256 1c883714b807d6d70a43949caf29539e968219261c9a1d0befb64767539ae5eb fallback/const-xs.inc -SHA256 893e5b099cae4d23e98ee782fb121e396b813dc9721c4fddaf86023514c03b39 lib/Type/Tiny/XS.pm -SHA256 572cb87b9bc892dd61277708b954607b1928f66c9f9c8664b39fd8f32e2e1cad lib/Type/Tiny/XS/Util.pm +SHA256 fa5b7ed3ce2fdb619d2d6edce4f73f2c810ef99d7b9c5d0ae30b7a1069546a77 lib/Type/Tiny/XS.pm +SHA256 ab17e1fde3b6471200811e36901867ecf1a494708b29a606e3cb703b522068b6 lib/Type/Tiny/XS/Util.pm SHA256 d8566565bed89a75c06cc69af46e47dfa1d801f0d1b20d1abc623e1b7f569ab5 ppport.h SHA256 e1b00ad209732ede340180b7ff51e6fb1eea70ac0ab52c6f29ddbaaadea09290 t/01basic.t SHA256 0f5fa4d108ba40ef1839eccdb5a3071059e7aa2296a9aac5da8d20122e9328fd t/02int.t @@ -44,6 +44,10 @@ SHA256 1481cdf4545659c6959bba29b7877d9b4129531ae68ad3dbe1ed3c83a257f6d9 t/09anyof_allof.t SHA256 bd475b11be1c127269f09f29f60ed496324b937b817e048fcfe6d62500d0c85f t/10bool.t SHA256 4fbd781db3dab5a6af25c58f1fb00d5ab6da05dc728652bea8c170798ad557dd t/11isa.t +SHA256 c691b7579ad26f208caff1b84fbdbf1bdae6b54c97d7232e366ae789c42df0bb t/50arraylike.t +SHA256 17d602609440fce3566c86e8e8a3cfeb5e7b1bb41df2fa5d47c4ac0cdea348c9 t/51hashlike.t +SHA256 d4a0ca90d8db76f0091bf315a7440049339bc2be0927fbe1c4a65b2737e12943 t/52codelike.t +SHA256 27732ff81fa820a0a5ef61e2f84230470b9c24f6c19754fc24f865d58b3e5017 t/53stringlike.t SHA256 6ad7ed7555258885b4dfa4c5970150dfa14a3e0b77b0a9a55a66f8129f666387 t/99parsing.t SHA256 6b17c9f0c088ec41f850d4b8101a017dbc8bcfd88cd37a556de638c648d1689f t/gh8.t SHA256 3d477f614239fe5ddf1e23219d6366f370b79b211f30b9e4b880fe9e255da86a typetiny.h @@ -51,7 +55,7 @@ SHA256 57c905cd2f4615c6b0169fbea54850835ed425bc365947dc20e38e35a02cb836 xshelper.h -----BEGIN PGP SIGNATURE----- -iF0EARECAB0WIQRVJKj/4+s6z4WzNujOv4Eoaip9OQUCXzuFMQAKCRDOv4Eoaip9 -OcyhAJ9ZcAOC8MCAxOpqqb72J6OAW4qf/wCdFEK6zgnPg+LlBXcVGCwSNQ9rQaw= -=wfJo +iF0EARECAB0WIQRVJKj/4+s6z4WzNujOv4Eoaip9OQUCX206SwAKCRDOv4Eoaip9 +OV3YAKC4O57hGxSa6emyRFzgBXmLW7C9WgCgjAmlu1aYp+GoXYTb9v/TxoAnLv8= +=u9mp -----END PGP SIGNATURE----- diff -Nru libtype-tiny-xs-perl-0.021/t/50arraylike.t libtype-tiny-xs-perl-0.022/t/50arraylike.t --- libtype-tiny-xs-perl-0.021/t/50arraylike.t 1970-01-01 00:00:00.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/t/50arraylike.t 2020-09-25 00:31:06.000000000 +0000 @@ -0,0 +1,32 @@ +use strict; +use warnings; +use Test::More; + +use_ok('Type::Tiny::XS'); + +{ + package Local::Overload; + my @xyz = (1 .. 10); + use overload q(@{}) => sub { \@xyz }; +} + +{ + package Local::Overload2; + my %xyz = ( foo => 42 ); + use overload q(%{}) => sub { \%xyz }; +} + +my $obj = bless {}, 'Local::Overload'; +is( $obj->[1], 2 ); + +my $obj2 = bless [], 'Local::Overload2'; +is( $obj2->{foo}, 42 ); + +ok Type::Tiny::XS::ArrayLike([]), '[]'; +ok Type::Tiny::XS::ArrayLike([1..3]), '[1..3]'; +ok Type::Tiny::XS::ArrayLike($obj), '$obj'; +ok !Type::Tiny::XS::ArrayLike($obj2), 'NOT $obj2'; +ok !Type::Tiny::XS::ArrayLike({}), 'NOT {}'; +ok !Type::Tiny::XS::ArrayLike(1), 'NOT 1'; + +done_testing; diff -Nru libtype-tiny-xs-perl-0.021/t/51hashlike.t libtype-tiny-xs-perl-0.022/t/51hashlike.t --- libtype-tiny-xs-perl-0.021/t/51hashlike.t 1970-01-01 00:00:00.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/t/51hashlike.t 2020-09-25 00:31:06.000000000 +0000 @@ -0,0 +1,33 @@ +use strict; +use warnings; +use Test::More; + +use_ok('Type::Tiny::XS'); + +{ + package Local::Overload; + my @xyz = (1 .. 10); + use overload q(@{}) => sub { \@xyz }; +} + +{ + package Local::Overload2; + my %xyz = ( foo => 42 ); + use overload q(%{}) => sub { \%xyz }; +} + +my $obj = bless {}, 'Local::Overload'; +is( $obj->[1], 2 ); + +my $obj2 = bless [], 'Local::Overload2'; +is( $obj2->{foo}, 42 ); + +ok !Type::Tiny::XS::HashLike([]), 'NOT []'; +ok !Type::Tiny::XS::HashLike([1..3]), 'NOT [1..3]'; +ok !Type::Tiny::XS::HashLike($obj), 'NOT $obj'; +ok Type::Tiny::XS::HashLike($obj2), '$obj2'; +ok Type::Tiny::XS::HashLike({}), '{}'; +ok Type::Tiny::XS::HashLike({ bar => 666 }), '{ bar => 666 }'; +ok !Type::Tiny::XS::HashLike(1), 'NOT 1'; + +done_testing; diff -Nru libtype-tiny-xs-perl-0.021/t/52codelike.t libtype-tiny-xs-perl-0.022/t/52codelike.t --- libtype-tiny-xs-perl-0.021/t/52codelike.t 1970-01-01 00:00:00.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/t/52codelike.t 2020-09-25 00:31:06.000000000 +0000 @@ -0,0 +1,31 @@ +use strict; +use warnings; +use Test::More; + +use_ok('Type::Tiny::XS'); + +{ + package Local::Overload; + use overload q(&{}) => sub { sub { 42 } }; +} + +{ + package Local::Overload2; + my %xyz = ( foo => 42 ); + use overload q(%{}) => sub { \%xyz }; +} + +my $obj = bless {}, 'Local::Overload'; +is( $obj->(), 42 ); + +my $obj2 = bless [], 'Local::Overload2'; +is( $obj2->{foo}, 42 ); + +ok Type::Tiny::XS::CodeLike(sub {}), 'sub {}'; +ok Type::Tiny::XS::CodeLike(sub () {}), 'sub () {}'; +ok Type::Tiny::XS::CodeLike($obj), '$obj'; +ok !Type::Tiny::XS::CodeLike($obj2), 'NOT $obj2'; +ok !Type::Tiny::XS::CodeLike({}), 'NOT {}'; +ok !Type::Tiny::XS::CodeLike(1), 'NOT 1'; + +done_testing; diff -Nru libtype-tiny-xs-perl-0.021/t/53stringlike.t libtype-tiny-xs-perl-0.022/t/53stringlike.t --- libtype-tiny-xs-perl-0.021/t/53stringlike.t 1970-01-01 00:00:00.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/t/53stringlike.t 2020-09-25 00:31:06.000000000 +0000 @@ -0,0 +1,30 @@ +use strict; +use warnings; +use Test::More; + +use_ok('Type::Tiny::XS'); + +{ + package Local::Overload; + use overload q("") => sub { "foo" }; +} + +{ + package Local::Overload2; + my %xyz = ( foo => 42 ); + use overload q(%{}) => sub { \%xyz }; +} + +my $obj = bless {}, 'Local::Overload'; +is( "$obj", 'foo' ); + +my $obj2 = bless [], 'Local::Overload2'; +is( $obj2->{foo}, 42 ); + +ok Type::Tiny::XS::StringLike(""), '""'; +ok Type::Tiny::XS::StringLike("123"), '"123"'; +ok Type::Tiny::XS::StringLike($obj), '$obj'; +ok !Type::Tiny::XS::StringLike($obj2), 'NOT $obj2'; +ok !Type::Tiny::XS::StringLike({}), 'NOT {}'; + +done_testing; diff -Nru libtype-tiny-xs-perl-0.021/XS.xs libtype-tiny-xs-perl-0.022/XS.xs --- libtype-tiny-xs-perl-0.021/XS.xs 2020-08-18 07:37:20.000000000 +0000 +++ libtype-tiny-xs-perl-0.022/XS.xs 2020-09-25 00:31:06.000000000 +0000 @@ -260,6 +260,33 @@ } int +typetiny_tc_StringLike(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { + HV *stash; + MAGIC *mg; + AMT *amtp; + CV **cvp; + + assert(sv); + + if ( SvOK(sv) && !SvROK(sv) && !isGV(sv) ) { + return TRUE; + } + + if ( SvAMAGIC(sv) + && ( stash = SvSTASH(SvRV(sv)) ) + && Gv_AMG(stash) + && ( mg = mg_find((const SV*)stash, PERL_MAGIC_overload_table) ) + && AMT_AMAGIC( amtp = (AMT*)mg->mg_ptr ) + && ( cvp = amtp->table ) + && cvp[0x0a] // AMG_STRING + ) { + return TRUE; + } + + return FALSE; +} + +int typetiny_tc_Enum(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { assert(sv); return SvOK(sv) && !SvROK(sv) && !isGV(sv); @@ -304,12 +331,66 @@ } int +typetiny_tc_ArrayLike(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { + HV *stash; + MAGIC *mg; + AMT *amtp; + CV **cvp; + + assert(sv); + + if ( IsArrayRef(sv) ) { + return TRUE; + } + + if ( SvAMAGIC(sv) + && ( stash = SvSTASH(SvRV(sv)) ) + && Gv_AMG(stash) + && ( mg = mg_find((const SV*)stash, PERL_MAGIC_overload_table) ) + && AMT_AMAGIC( amtp = (AMT*)mg->mg_ptr ) + && ( cvp = amtp->table ) + && cvp[0x02] // AMG_TO_AV + ) { + return TRUE; + } + + return FALSE; +} + +int typetiny_tc_HashRef(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { assert(sv); return IsHashRef(sv); } int +typetiny_tc_HashLike(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { + HV *stash; + MAGIC *mg; + AMT *amtp; + CV **cvp; + + assert(sv); + + if ( IsHashRef(sv) ) { + return TRUE; + } + + if ( SvAMAGIC(sv) + && ( stash = SvSTASH(SvRV(sv)) ) + && Gv_AMG(stash) + && ( mg = mg_find((const SV*)stash, PERL_MAGIC_overload_table) ) + && AMT_AMAGIC( amtp = (AMT*)mg->mg_ptr ) + && ( cvp = amtp->table ) + && cvp[0x03] // AMG_TO_HV + ) { + return TRUE; + } + + return FALSE; +} + +int typetiny_tc_Map(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { assert(sv); return IsHashRef(sv); @@ -328,6 +409,33 @@ } int +typetiny_tc_CodeLike(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { + HV *stash; + MAGIC *mg; + AMT *amtp; + CV **cvp; + + assert(sv); + + if ( IsCodeRef(sv) ) { + return TRUE; + } + + if ( SvAMAGIC(sv) + && ( stash = SvSTASH(SvRV(sv)) ) + && Gv_AMG(stash) + && ( mg = mg_find((const SV*)stash, PERL_MAGIC_overload_table) ) + && AMT_AMAGIC( amtp = (AMT*)mg->mg_ptr ) + && ( cvp = amtp->table ) + && cvp[0x05] // AMG_TO_CV + ) { + return TRUE; + } + + return FALSE; +} + +int typetiny_tc_RegexpRef(pTHX_ SV* const data PERL_UNUSED_DECL, SV* const sv) { assert(sv); return SvRXOK(sv); @@ -813,6 +921,7 @@ DEFINE_TC(Value); DEFINE_TC(Ref); DEFINE_TC(Str); + DEFINE_TC(StringLike); DEFINE_TC(NonEmptyStr); DEFINE_TC(Num); DEFINE_TC(Int); @@ -820,11 +929,14 @@ DEFINE_TC(PositiveOrZeroInt); DEFINE_TC(ScalarRef); DEFINE_TC(ArrayRef); + DEFINE_TC(ArrayLike); DEFINE_TC(HashRef); + DEFINE_TC(HashLike); DEFINE_TC(Map); DEFINE_TC(Enum); DEFINE_TC(Tuple); DEFINE_TC(CodeRef); + DEFINE_TC(CodeLike); DEFINE_TC(GlobRef); DEFINE_TC(FileHandle); DEFINE_TC(RegexpRef);