summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgregor herrmann <gregoa@debian.org>2021-09-16 21:33:03 +0200
committergregor herrmann <gregoa@debian.org>2021-09-16 21:33:03 +0200
commit7c869874293cd7c8a2f7a62ca1b25c80336571b1 (patch)
treea41939052dea8f074b422334547e315be30f7075
parent4972080bc25e528dc49baa3028d58483c624b77e (diff)
parent0bd4991abcc5911b1f33b3e31f92fb3fb1ed9a7f (diff)
Update upstream source from tag 'upstream/0.26'
Update to upstream version '0.26' with Debian dir 67881798454f7b1b39e49065a40bd7f38e8c93a6
-rw-r--r--Build.PL7
-rw-r--r--Changes12
-rw-r--r--LICENSE6
-rw-r--r--META.json64
-rw-r--r--META.yml58
-rw-r--r--lib/Tangence.pm6
-rw-r--r--lib/Tangence/Class.pm6
-rw-r--r--lib/Tangence/Client.pm60
-rw-r--r--lib/Tangence/Compiler/Parser.pm72
-rw-r--r--lib/Tangence/Constants.pm6
-rw-r--r--lib/Tangence/Message.pm11
-rw-r--r--lib/Tangence/Meta/Argument.pm6
-rw-r--r--lib/Tangence/Meta/Class.pm6
-rw-r--r--lib/Tangence/Meta/Event.pm6
-rw-r--r--lib/Tangence/Meta/Field.pm6
-rw-r--r--lib/Tangence/Meta/Method.pm6
-rw-r--r--lib/Tangence/Meta/Property.pm6
-rw-r--r--lib/Tangence/Meta/Struct.pm6
-rw-r--r--lib/Tangence/Meta/Type.pm6
-rw-r--r--lib/Tangence/Object.pm8
-rw-r--r--lib/Tangence/ObjectProxy.pm10
-rw-r--r--lib/Tangence/Property.pm6
-rw-r--r--lib/Tangence/Registry.pm6
-rw-r--r--lib/Tangence/Server.pm147
-rw-r--r--lib/Tangence/Server/Context.pm6
-rw-r--r--lib/Tangence/Stream.pm9
-rw-r--r--lib/Tangence/Struct.pm11
-rw-r--r--lib/Tangence/Type.pm4
-rw-r--r--lib/Tangence/Type/Primitive.pm15
-rw-r--r--lib/Tangence/Types.pm6
-rw-r--r--t/00use.t2
-rw-r--r--t/01compiler-parser.t2
-rw-r--r--t/02registry.t2
-rw-r--r--t/03properties.t2
-rw-r--r--t/10message.t22
-rw-r--r--t/11stream.t73
-rw-r--r--t/20server.t66
-rw-r--r--t/21client.t74
-rw-r--r--t/22xlink.t2
-rw-r--r--t/23close.t2
-rw-r--r--t/30props-cbs.t2
-rw-r--r--t/31props-cache.t2
-rw-r--r--t/32props-cursor.t2
-rw-r--r--t/33props-set.t2
-rw-r--r--t/40server-security.t2
-rw-r--r--t/90close-leak.t2
-rw-r--r--t/99pod.t2
-rw-r--r--t/Ball.pm2
-rw-r--r--t/Colourable.pm2
-rw-r--r--t/Conversation.pm2
-rw-r--r--t/TestObj.pm2
-rw-r--r--t/TestServerClient.pm2
52 files changed, 434 insertions, 421 deletions
diff --git a/Build.PL b/Build.PL
index fb93230..4af3df8 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,3 +1,4 @@
+use v5;
use strict;
use warnings;
@@ -8,12 +9,14 @@ my $build = Module::Build->new(
requires => {
'Encode' => 0,
'Exporter' => '5.57',
- 'Future' => 0,
+ 'Feature::Compat::Try' => 0,
+ 'Future' => '0.36',
'List::Util' => '1.29',
- 'perl' => 5.010,
+ 'perl' => '5.014',
'Parser::MGC' => '0.04',
'Struct::Dumb' => 0,
'Sub::Util' => '1.40',
+ 'Syntax::Keyword::Match' => 0,
},
test_requires => {
'Struct::Dumb' => '0.09',
diff --git a/Changes b/Changes
index 7ec70f0..8c7f8bb 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,17 @@
Revision history for Tangence
+0.26 2021-09-12
+ [CHANGES]
+ * General code modernisation:
+ + Use Syntax::Keyword::Match instead of given/when
+ + Use Feature::Compat::Try instead of eval {}
+ + use VERSION in every .pm file
+ * Support core booleans in 'any' type packing
+ * Ensure that boolean stream values unpack to real booleans
+
+ [BUGFIXES]
+ * Depend on Future >= 0.36 for ->retain method (RT131471)
+
0.25 2020-01-14
[CHANGES]
* Allow servers to disallow access to Registry
diff --git a/LICENSE b/LICENSE
index 139e99b..f15476d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-This software is copyright (c) 2020 by Paul Evans <leonerd@leonerd.org.uk>.
+This software is copyright (c) 2021 by Paul Evans <leonerd@leonerd.org.uk>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
-This software is Copyright (c) 2020 by Paul Evans <leonerd@leonerd.org.uk>.
+This software is Copyright (c) 2021 by Paul Evans <leonerd@leonerd.org.uk>.
This is free software, licensed under:
@@ -272,7 +272,7 @@ That's all there is to it!
--- The Artistic License 1.0 ---
-This software is Copyright (c) 2020 by Paul Evans <leonerd@leonerd.org.uk>.
+This software is Copyright (c) 2021 by Paul Evans <leonerd@leonerd.org.uk>.
This is free software, licensed under:
diff --git a/META.json b/META.json
index f406afb..50334bf 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
"Paul Evans <leonerd@leonerd.org.uk>"
],
"dynamic_config" : 1,
- "generated_by" : "Module::Build version 0.4224",
+ "generated_by" : "Module::Build version 0.4231",
"license" : [
"perl_5"
],
@@ -23,12 +23,14 @@
"requires" : {
"Encode" : "0",
"Exporter" : "5.57",
- "Future" : "0",
+ "Feature::Compat::Try" : "0",
+ "Future" : "0.36",
"List::Util" : "1.29",
"Parser::MGC" : "0.04",
"Struct::Dumb" : "0",
"Sub::Util" : "1.40",
- "perl" : "5.01"
+ "Syntax::Keyword::Match" : "0",
+ "perl" : "5.014"
}
},
"test" : {
@@ -46,101 +48,103 @@
"provides" : {
"Tangence" : {
"file" : "lib/Tangence.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Class" : {
"file" : "lib/Tangence/Class.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Client" : {
"file" : "lib/Tangence/Client.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Compiler::Parser" : {
"file" : "lib/Tangence/Compiler/Parser.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Constants" : {
"file" : "lib/Tangence/Constants.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Message" : {
"file" : "lib/Tangence/Message.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Argument" : {
"file" : "lib/Tangence/Meta/Argument.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Class" : {
"file" : "lib/Tangence/Meta/Class.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Event" : {
"file" : "lib/Tangence/Meta/Event.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Field" : {
"file" : "lib/Tangence/Meta/Field.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Method" : {
"file" : "lib/Tangence/Meta/Method.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Property" : {
"file" : "lib/Tangence/Meta/Property.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Struct" : {
"file" : "lib/Tangence/Meta/Struct.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Meta::Type" : {
"file" : "lib/Tangence/Meta/Type.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Object" : {
"file" : "lib/Tangence/Object.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::ObjectProxy" : {
"file" : "lib/Tangence/ObjectProxy.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Property" : {
"file" : "lib/Tangence/Property.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Registry" : {
"file" : "lib/Tangence/Registry.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Server" : {
"file" : "lib/Tangence/Server.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Server::Context" : {
"file" : "lib/Tangence/Server/Context.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Stream" : {
"file" : "lib/Tangence/Stream.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Struct" : {
"file" : "lib/Tangence/Struct.pm",
- "version" : "0.25"
+ "version" : "0.26"
},
"Tangence::Type" : {
- "file" : "lib/Tangence/Type.pm"
+ "file" : "lib/Tangence/Type.pm",
+ "version" : "0.26"
},
"Tangence::Type::Primitive" : {
- "file" : "lib/Tangence/Type/Primitive.pm"
+ "file" : "lib/Tangence/Type/Primitive.pm",
+ "version" : "0.26"
},
"Tangence::Types" : {
"file" : "lib/Tangence/Types.pm",
- "version" : "0.25"
+ "version" : "0.26"
}
},
"release_status" : "stable",
@@ -149,6 +153,6 @@
"http://dev.perl.org/licenses/"
]
},
- "version" : "0.25",
- "x_serialization_backend" : "JSON::PP version 4.04"
+ "version" : "0.26",
+ "x_serialization_backend" : "JSON::PP version 4.05"
}
diff --git a/META.yml b/META.yml
index 6a1c702..55e8ab3 100644
--- a/META.yml
+++ b/META.yml
@@ -13,7 +13,7 @@ build_requires:
configure_requires:
Module::Build: '0.4004'
dynamic_config: 1
-generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
+generated_by: 'Module::Build version 0.4231, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -22,87 +22,91 @@ name: Tangence
provides:
Tangence:
file: lib/Tangence.pm
- version: '0.25'
+ version: '0.26'
Tangence::Class:
file: lib/Tangence/Class.pm
- version: '0.25'
+ version: '0.26'
Tangence::Client:
file: lib/Tangence/Client.pm
- version: '0.25'
+ version: '0.26'
Tangence::Compiler::Parser:
file: lib/Tangence/Compiler/Parser.pm
- version: '0.25'
+ version: '0.26'
Tangence::Constants:
file: lib/Tangence/Constants.pm
- version: '0.25'
+ version: '0.26'
Tangence::Message:
file: lib/Tangence/Message.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Argument:
file: lib/Tangence/Meta/Argument.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Class:
file: lib/Tangence/Meta/Class.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Event:
file: lib/Tangence/Meta/Event.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Field:
file: lib/Tangence/Meta/Field.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Method:
file: lib/Tangence/Meta/Method.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Property:
file: lib/Tangence/Meta/Property.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Struct:
file: lib/Tangence/Meta/Struct.pm
- version: '0.25'
+ version: '0.26'
Tangence::Meta::Type:
file: lib/Tangence/Meta/Type.pm
- version: '0.25'
+ version: '0.26'
Tangence::Object:
file: lib/Tangence/Object.pm
- version: '0.25'
+ version: '0.26'
Tangence::ObjectProxy:
file: lib/Tangence/ObjectProxy.pm
- version: '0.25'
+ version: '0.26'
Tangence::Property:
file: lib/Tangence/Property.pm
- version: '0.25'
+ version: '0.26'
Tangence::Registry:
file: lib/Tangence/Registry.pm
- version: '0.25'
+ version: '0.26'
Tangence::Server:
file: lib/Tangence/Server.pm
- version: '0.25'
+ version: '0.26'
Tangence::Server::Context:
file: lib/Tangence/Server/Context.pm
- version: '0.25'
+ version: '0.26'
Tangence::Stream:
file: lib/Tangence/Stream.pm
- version: '0.25'
+ version: '0.26'
Tangence::Struct:
file: lib/Tangence/Struct.pm
- version: '0.25'
+ version: '0.26'
Tangence::Type:
file: lib/Tangence/Type.pm
+ version: '0.26'
Tangence::Type::Primitive:
file: lib/Tangence/Type/Primitive.pm
+ version: '0.26'
Tangence::Types:
file: lib/Tangence/Types.pm
- version: '0.25'
+ version: '0.26'
requires:
Encode: '0'
Exporter: '5.57'
- Future: '0'
+ Feature::Compat::Try: '0'
+ Future: '0.36'
List::Util: '1.29'
Parser::MGC: '0.04'
Struct::Dumb: '0'
Sub::Util: '1.40'
- perl: '5.01'
+ Syntax::Keyword::Match: '0'
+ perl: '5.014'
resources:
license: http://dev.perl.org/licenses/
-version: '0.25'
+version: '0.26'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/lib/Tangence.pm b/lib/Tangence.pm
index 2e020ef..d5c3edf 100644
--- a/lib/Tangence.pm
+++ b/lib/Tangence.pm
@@ -3,17 +3,15 @@
#
# (C) Paul Evans, 2010 -- leonerd@leonerd.org.uk
-package Tangence;
+package Tangence 0.26;
-use strict;
+use v5.14;
use warnings;
# This package contains no code other than a declaration of the version.
# It is provided simply to keep CPAN happy:
# cpan -i Tangence
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence> - attribute-oriented server/client object remoting framework
diff --git a/lib/Tangence/Class.pm b/lib/Tangence/Class.pm
index 460efae..4bb1a7f 100644
--- a/lib/Tangence/Class.pm
+++ b/lib/Tangence/Class.pm
@@ -3,9 +3,9 @@
#
# (C) Paul Evans, 2010-2020 -- leonerd@leonerd.org.uk
-package Tangence::Class;
+package Tangence::Class 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Meta::Class );
@@ -21,8 +21,6 @@ use Carp;
use Sub::Util 1.40 qw( set_subname );
-our $VERSION = '0.25';
-
our %metas; # cache one per class, keyed by _Tangence_ class name
sub new
diff --git a/lib/Tangence/Client.pm b/lib/Tangence/Client.pm
index fb1483e..b74d93f 100644
--- a/lib/Tangence/Client.pm
+++ b/lib/Tangence/Client.pm
@@ -3,22 +3,20 @@
#
# (C) Paul Evans, 2010-2020 -- leonerd@leonerd.org.uk
-package Tangence::Client;
+package Tangence::Client 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Stream );
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
use Tangence::Types;
use Tangence::ObjectProxy;
-use Future;
+use Future 0.36; # ->retain
use List::Util qw( max );
@@ -32,37 +30,37 @@ C<Tangence::Client> - mixin class for building a C<Tangence> client
This class is a mixin, it cannot be directly constructed
- package Example::Client;
- use base qw( Base::Client Tangence::Client );
+ package Example::Client;
+ use base qw( Base::Client Tangence::Client );
- sub connect
- {
- my $self = shift;
- $self->SUPER::connect( @_ );
+ sub connect
+ {
+ my $self = shift;
+ $self->SUPER::connect( @_ );
- $self->tangence_connected;
+ $self->tangence_connected;
- wait_for { defined $self->rootobj };
- }
+ wait_for { defined $self->rootobj };
+ }
- sub tangence_write
- {
- my $self = shift;
- $self->write( $_[0] );
- }
+ sub tangence_write
+ {
+ my $self = shift;
+ $self->write( $_[0] );
+ }
- sub on_read
- {
- my $self = shift;
- $self->tangence_readfrom( $_[0] );
- }
+ sub on_read
+ {
+ my $self = shift;
+ $self->tangence_readfrom( $_[0] );
+ }
- package main;
+ package main;
- my $client = Example::Client->new;
- $client->connect( "server.location.here" );
+ my $client = Example::Client->new;
+ $client->connect( "server.location.here" );
- my $rootobj = $client->rootobj;
+ my $rootobj = $client->rootobj;
=head1 DESCRIPTION
@@ -185,19 +183,19 @@ to be disabled.
Optional callback to be invoked once the root object has been returned. It
will be passed a L<Tangence::ObjectProxy> to the root object.
- $on_root->( $rootobj )
+ $on_root->( $rootobj )
=item on_registry => CODE
Optional callback to be invoked once the registry has been returned. It will
be passed a L<Tangence::ObjectProxy> to the registry.
- $on_registry->( $registry )
+ $on_registry->( $registry )
Note that in the case that the server does not permit access to the registry
or an error occurs while requesting it, this is invoked with an empty list.
- $on_registry->()
+ $on_registry->()
=item version_minor_min => INT
diff --git a/lib/Tangence/Compiler/Parser.pm b/lib/Tangence/Compiler/Parser.pm
index e4ce39a..8ba42dd 100644
--- a/lib/Tangence/Compiler/Parser.pm
+++ b/lib/Tangence/Compiler/Parser.pm
@@ -3,16 +3,13 @@
#
# (C) Paul Evans, 2011-2017 -- leonerd@leonerd.org.uk
-package Tangence::Compiler::Parser;
+package Tangence::Compiler::Parser 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Parser::MGC );
-use feature qw( switch ); # we like given/when
-no if $] >= 5.017011, warnings => 'experimental::smartmatch';
-
-our $VERSION = '0.25';
+use Syntax::Keyword::Match;
use File::Basename qw( dirname );
@@ -44,16 +41,16 @@ and C<class> and C<struct> definitions.
An C<include> directive imports the definitions from another file, named
relative to the current file.
- include "filename.tan"
+ include "filename.tan"
=head2 class
A C<class> definition defines the set of methods, events and properties
defined by a named class.
- class N {
- ...
- }
+ class N {
+ ...
+ }
The contents of the class block will be a list of C<method>, C<event>, C<prop>
and C<isa> declarations.
@@ -63,9 +60,9 @@ and C<isa> declarations.
A C<struct> definition defines the list of fields contained within a named
structure type.
- struct N {
- ...
- }
+ struct N {
+ ...
+ }
The contents of the struct block will be a list of C<field> declarations.
@@ -78,8 +75,8 @@ sub parse
local $self->{package} = \my %package;
while( !$self->at_eos ) {
- given( $self->token_kw(qw( class struct include )) ) {
- when( 'class' ) {
+ match( $self->token_kw(qw( class struct include )) : eq ) {
+ case( 'class' ) {
my $classname = $self->token_ident;
exists $package{$classname} and
@@ -90,7 +87,7 @@ sub parse
$self->scope_of( '{', sub { $self->parse_classblock( $class ) }, '}' ),
}
- when( 'struct' ) {
+ case( 'struct' ) {
my $structname = $self->token_ident;
exists $package{$structname} and
@@ -101,7 +98,7 @@ sub parse
$self->scope_of( '{', sub { $self->parse_structblock( $struct ) }, '}' ),
}
- when( 'include' ) {
+ case( 'include' ) {
my $filename = dirname($self->{filename}) . "/" . $self->token_string;
my $subparser = (ref $self)->new;
@@ -128,14 +125,14 @@ sub parse
A C<method> declaration defines one method in the class, giving its name (N)
and types of its arguments and and return (T).
- method N(T, T, ...) -> T;
+ method N(T, T, ...) -> T;
=head2 event
An C<event> declaration defines one event raised by the class, giving its name
(N) and types of its arguments (T).
- event N(T, T, ...);
+ event N(T, T, ...);
=head2 prop
@@ -143,17 +140,17 @@ A C<prop> declaration defines one property supported by the class, giving its
name (N), dimension (D) and type (T). It may be declared as a C<smashed>
property.
- [smashed] prop N = D of T;
+ [smashed] prop N = D of T;
Scalar properties may omit the C<scalar of>, by supplying just the type
- [smashed] prop N = T;
+ [smashed] prop N = T;
=head2 isa
An C<isa> declaration declares a superclass of the class, by its name (C)
- isa C;
+ isa C;
=cut
@@ -168,8 +165,8 @@ sub parse_classblock
my @superclasses;
while( !$self->at_eos ) {
- given( $self->token_kw(qw( method event prop smashed isa )) ) {
- when( 'method' ) {
+ match( $_ = $self->token_kw(qw( method event prop smashed isa )) : eq ) {
+ case( 'method' ) {
my $methodname = $self->token_ident;
exists $methods{$methodname} and
@@ -192,7 +189,7 @@ sub parse_classblock
);
}
- when( 'event' ) {
+ case( 'event' ) {
my $eventname = $self->token_ident;
exists $events{$eventname} and
@@ -207,15 +204,14 @@ sub parse_classblock
);
}
- my $smashed = 0;
- when( 'smashed' ) {
- $smashed = 1;
+ case( 'smashed' ), case( 'prop' ) {
+ my $smashed = 0;
- $self->expect( 'prop' );
+ if( $_ eq 'smashed' ) {
+ $smashed = 1;
+ $self->expect( 'prop' );
+ }
- $_ = 'prop'; continue; # goto case 'prop'
- }
- when( 'prop' ) {
my $propname = $self->token_ident;
exists $properties{$propname} and
@@ -240,7 +236,7 @@ sub parse_classblock
);
}
- when( 'isa' ) {
+ case( 'isa' ) {
my $supername = $self->token_ident;
my $super = $self->{package}{$supername} or
@@ -291,8 +287,8 @@ sub parse_structblock
my %fieldnames;
while( !$self->at_eos ) {
- given( $self->token_kw(qw( field )) ) {
- when( 'field' ) {
+ match( $self->token_kw(qw( field )) : eq ) {
+ case( 'field' ) {
my $fieldname = $self->token_ident;
exists $fieldnames{$fieldname} and
@@ -321,12 +317,12 @@ sub parse_structblock
The following basic type names are recognised
- bool int str obj any
- s8 s16 s32 s64 u8 u16 u32 u64
+ bool int str obj any
+ s8 s16 s32 s64 u8 u16 u32 u64
Aggregate types may be formed of any type (T) by
- list(T) dict(T)
+ list(T) dict(T)
=cut
diff --git a/lib/Tangence/Constants.pm b/lib/Tangence/Constants.pm
index 26f65fe..3dd3a70 100644
--- a/lib/Tangence/Constants.pm
+++ b/lib/Tangence/Constants.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2010-2016 -- leonerd@leonerd.org.uk
-package Tangence::Constants;
+package Tangence::Constants 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Exporter 'import';
our @EXPORT = qw(
MSG_CALL
diff --git a/lib/Tangence/Message.pm b/lib/Tangence/Message.pm
index a66ed9f..0521415 100644
--- a/lib/Tangence/Message.pm
+++ b/lib/Tangence/Message.pm
@@ -3,18 +3,11 @@
#
# (C) Paul Evans, 2010-2014 -- leonerd@leonerd.org.uk
-package Tangence::Message;
+package Tangence::Message 0.26;
-use strict;
+use v5.14;
use warnings;
-# Currently depends on atleast Perl 5.10.0 to provide the > format modifier
-# for pack, to specify big-endian integers. If this code can be modified, this
-# restriction could be listed.
-use 5.010; # pack endian formats
-
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
diff --git a/lib/Tangence/Meta/Argument.pm b/lib/Tangence/Meta/Argument.pm
index 2d02af4..5c35dc8 100644
--- a/lib/Tangence/Meta/Argument.pm
+++ b/lib/Tangence/Meta/Argument.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2011-2012 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Argument;
+package Tangence::Meta::Argument 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence::Meta::Argument> - structure representing one C<Tangence>
diff --git a/lib/Tangence/Meta/Class.pm b/lib/Tangence/Meta/Class.pm
index 677e5f7..485e860 100644
--- a/lib/Tangence/Meta/Class.pm
+++ b/lib/Tangence/Meta/Class.pm
@@ -3,15 +3,13 @@
#
# (C) Paul Evans, 2011-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Class;
+package Tangence::Meta::Class 0.26;
-use strict;
+use v5.14;
use warnings;
use Carp;
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence::Meta::Class> - structure representing one C<Tangence> class
diff --git a/lib/Tangence/Meta/Event.pm b/lib/Tangence/Meta/Event.pm
index 6f84c7c..8f24782 100644
--- a/lib/Tangence/Meta/Event.pm
+++ b/lib/Tangence/Meta/Event.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2011-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Event;
+package Tangence::Meta::Event 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Scalar::Util qw( weaken );
=head1 NAME
diff --git a/lib/Tangence/Meta/Field.pm b/lib/Tangence/Meta/Field.pm
index 2572c45..1e00b1c 100644
--- a/lib/Tangence/Meta/Field.pm
+++ b/lib/Tangence/Meta/Field.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2012-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Field;
+package Tangence::Meta::Field 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence::Meta::Field> - structure representing one C<Tangence> structure
diff --git a/lib/Tangence/Meta/Method.pm b/lib/Tangence/Meta/Method.pm
index c0c13ff..a7c01da 100644
--- a/lib/Tangence/Meta/Method.pm
+++ b/lib/Tangence/Meta/Method.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2011-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Method;
+package Tangence::Meta::Method 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Scalar::Util qw( weaken );
=head1 NAME
diff --git a/lib/Tangence/Meta/Property.pm b/lib/Tangence/Meta/Property.pm
index da84691..5ed1ddc 100644
--- a/lib/Tangence/Meta/Property.pm
+++ b/lib/Tangence/Meta/Property.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2011-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Property;
+package Tangence::Meta::Property 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Tangence::Constants;
use Scalar::Util qw( weaken );
diff --git a/lib/Tangence/Meta/Struct.pm b/lib/Tangence/Meta/Struct.pm
index cc5e49a..ab38c7b 100644
--- a/lib/Tangence/Meta/Struct.pm
+++ b/lib/Tangence/Meta/Struct.pm
@@ -3,15 +3,13 @@
#
# (C) Paul Evans, 2012-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Struct;
+package Tangence::Meta::Struct 0.26;
-use strict;
+use v5.14;
use warnings;
use Carp;
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence::Meta::Struct> - structure representing one C<Tangence> structure
diff --git a/lib/Tangence/Meta/Type.pm b/lib/Tangence/Meta/Type.pm
index 084a4c4..ffb0a11 100644
--- a/lib/Tangence/Meta/Type.pm
+++ b/lib/Tangence/Meta/Type.pm
@@ -3,15 +3,13 @@
#
# (C) Paul Evans, 2012-2017 -- leonerd@leonerd.org.uk
-package Tangence::Meta::Type;
+package Tangence::Meta::Type 0.26;
-use strict;
+use v5.14;
use warnings;
use Carp;
-our $VERSION = '0.25';
-
=head1 NAME
C<Tangence::Meta::Type> - structure representing one C<Tangence> value type
diff --git a/lib/Tangence/Object.pm b/lib/Tangence/Object.pm
index 055804e..fcd8072 100644
--- a/lib/Tangence/Object.pm
+++ b/lib/Tangence/Object.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2010-2017 -- leonerd@leonerd.org.uk
-package Tangence::Object;
+package Tangence::Object 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
@@ -289,7 +287,7 @@ Subscribes an event-handling callback CODE ref to the named event. When the
event is fired by C<fire_event> this callback will be invoked, being passed
the object reference and the event's arguments.
- $callback->( $obj, @args )
+ $callback->( $obj, @args )
Returns an opaque ID value that can be used to remove this subscription by
calling C<unsubscribe_event>.
diff --git a/lib/Tangence/ObjectProxy.pm b/lib/Tangence/ObjectProxy.pm
index 6a11d51..33a91d5 100644
--- a/lib/Tangence/ObjectProxy.pm
+++ b/lib/Tangence/ObjectProxy.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2010-2020 -- leonerd@leonerd.org.uk
-package Tangence::ObjectProxy;
+package Tangence::ObjectProxy 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
@@ -269,7 +267,7 @@ Takes the following named callbacks:
Callback function to invoke whenever the event is fired
- $on_fire->( @args )
+ $on_fire->( @args )
The returned C<Future> it is guaranteed to be completed before any invocation
of the C<on_fire> event handler.
@@ -542,7 +540,7 @@ Takes the following named arguments:
Optional. Callback function to invoke whenever the property value changes.
- $on_updated->( $new_value )
+ $on_updated->( $new_value )
If not provided, then individual handlers for individual change types must be
provided.
diff --git a/lib/Tangence/Property.pm b/lib/Tangence/Property.pm
index fbd8a3e..83021f4 100644
--- a/lib/Tangence/Property.pm
+++ b/lib/Tangence/Property.pm
@@ -3,9 +3,9 @@
#
# (C) Paul Evans, 2013-2016 -- leonerd@leonerd.org.uk
-package Tangence::Property;
+package Tangence::Property 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Meta::Property );
@@ -18,8 +18,6 @@ require Tangence::Type;
use Struct::Dumb;
struct Instance => [qw( value callbacks cursors )];
-our $VERSION = '0.25';
-
sub build_accessor
{
my $prop = shift;
diff --git a/lib/Tangence/Registry.pm b/lib/Tangence/Registry.pm
index e98e388..613eeeb 100644
--- a/lib/Tangence/Registry.pm
+++ b/lib/Tangence/Registry.pm
@@ -3,14 +3,12 @@
#
# (C) Paul Evans, 2010-2017 -- leonerd@leonerd.org.uk
-package Tangence::Registry;
+package Tangence::Registry 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Object );
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
diff --git a/lib/Tangence/Server.pm b/lib/Tangence/Server.pm
index f98556a..19e763a 100644
--- a/lib/Tangence/Server.pm
+++ b/lib/Tangence/Server.pm
@@ -3,19 +3,18 @@
#
# (C) Paul Evans, 2011-2020 -- leonerd@leonerd.org.uk
-package Tangence::Server;
+package Tangence::Server 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Stream );
-our $VERSION = '0.25';
-
use Carp;
use Scalar::Util qw( weaken );
use Sub::Util 1.40 qw( set_subname );
+use Feature::Compat::Try;
use Tangence::Constants;
use Tangence::Types;
@@ -35,34 +34,34 @@ C<Tangence::Server> - mixin class for building a C<Tangence> server
This class is a mixin, it cannot be directly constructed
- package Example::Server;
- use base qw( Base::Server Tangence::Server );
+ package Example::Server;
+ use base qw( Base::Server Tangence::Server );
- sub new
- {
- my $class = shift;
- my %args = @_;
+ sub new
+ {
+ my $class = shift;
+ my %args = @_;
- my $registry = delete $args{registry};
+ my $registry = delete $args{registry};
- my $self = $class->SUPER::new( %args );
+ my $self = $class->SUPER::new( %args );
- $self->registry( $registry );
+ $self->registry( $registry );
- return $self;
- }
+ return $self;
+ }
- sub tangence_write
- {
- my $self = shift;
- $self->write( $_[0] );
- }
+ sub tangence_write
+ {
+ my $self = shift;
+ $self->write( $_[0] );
+ }
- sub on_read
- {
- my $self = shift;
- $self->tangence_readfrom( $_[0] );
- }
+ sub on_read
+ {
+ my $self = shift;
+ $self->tangence_readfrom( $_[0] );
+ }
=head1 DESCRIPTION
@@ -161,14 +160,17 @@ sub handle_request_CALL
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $object = $self->get_by_id( $objid );
- $object->handle_request_CALL( $ctx, $message )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = $object->handle_request_CALL( $ctx, $message );
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -180,7 +182,8 @@ sub handle_request_SUBSCRIBE
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $event = $message->unpack_str();
@@ -203,9 +206,11 @@ sub handle_request_SUBSCRIBE
push @{ $self->subscriptions }, [ $object, $event, $id ];
- Tangence::Message->new( $self, MSG_SUBSCRIBED )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = Tangence::Message->new( $self, MSG_SUBSCRIBED )
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -217,7 +222,8 @@ sub handle_request_UNSUBSCRIBE
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $event = $message->unpack_str();
@@ -235,9 +241,11 @@ sub handle_request_UNSUBSCRIBE
$object->unsubscribe_event( $event, $id );
- Tangence::Message->new( $self, MSG_OK )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = Tangence::Message->new( $self, MSG_OK )
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -249,14 +257,17 @@ sub handle_request_GETPROP
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $object = $self->get_by_id( $objid );
- $object->handle_request_GETPROP( $ctx, $message )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = $object->handle_request_GETPROP( $ctx, $message )
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -268,14 +279,17 @@ sub handle_request_GETPROPELEM
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $object = $self->get_by_id( $objid );
- $object->handle_request_GETPROPELEM( $ctx, $message )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = $object->handle_request_GETPROPELEM( $ctx, $message )
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -287,14 +301,17 @@ sub handle_request_SETPROP
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $object = $self->get_by_id( $objid );
- $object->handle_request_SETPROP( $ctx, $message )
- };
- $@ and return $ctx->responderr( $@ );
+ $response = $object->handle_request_SETPROP( $ctx, $message )
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
@@ -310,7 +327,8 @@ sub _handle_request_WATCHany
my ( $want_initial, $object, $prop );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
$prop = $message->unpack_str();
@@ -324,7 +342,7 @@ sub _handle_request_WATCHany
if( $message->code == MSG_WATCH ) {
$want_initial = $message->unpack_bool();
- Tangence::Message->new( $self, MSG_WATCHING )
+ $response = Tangence::Message->new( $self, MSG_WATCHING )
}
elsif( $message->code == MSG_WATCH_CUSR ) {
my $from = $message->unpack_int();
@@ -334,13 +352,15 @@ sub _handle_request_WATCHany
my $id = $self->message_state->{next_cursorid}++;
$self->peer_hascursor->{$id} = CursorObject( $cursor, $object );
- Tangence::Message->new( $self, MSG_WATCHING_CUSR )
+ $response = Tangence::Message->new( $self, MSG_WATCHING_CUSR )
->pack_int( $id )
->pack_int( 0 ) # first index
->pack_int( $#{ $object->${\"get_prop_$prop"} } ) # last index
}
- };
- $@ and return $ctx->responderr( $@ );
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
@@ -355,15 +375,17 @@ sub _send_initial
my $m = "get_prop_$prop";
return unless( $object->can( $m ) );
- eval {
+ try {
my $value = $object->$m();
my $message = $object->generate_message_UPDATE( $self, $prop, CHANGE_SET, $value );
$self->request(
request => $message,
on_response => sub { "IGNORE" },
);
- };
- warn "$@ during initial property fetch" if $@;
+ }
+ catch ( $e ) {
+ warn "$e during initial property fetch";
+ }
}
sub handle_request_UNWATCH
@@ -373,7 +395,8 @@ sub handle_request_UNWATCH
my $ctx = Tangence::Server::Context->new( $self, $token );
- my $response = eval {
+ my $response;
+ try {
my $objid = $message->unpack_int();
my $prop = $message->unpack_str();
@@ -391,9 +414,11 @@ sub handle_request_UNWATCH
$object->unwatch_property( $prop, $id );
- Tangence::Message->new( $self, MSG_OK );
- };
- $@ and return $ctx->responderr( $@ );
+ $response = Tangence::Message->new( $self, MSG_OK );
+ }
+ catch ( $e ) {
+ return $ctx->responderr( $e );
+ }
$ctx->respond( $response );
}
diff --git a/lib/Tangence/Server/Context.pm b/lib/Tangence/Server/Context.pm
index c4a6f7c..b3e674d 100644
--- a/lib/Tangence/Server/Context.pm
+++ b/lib/Tangence/Server/Context.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2010-2011 -- leonerd@leonerd.org.uk
-package Tangence::Server::Context;
+package Tangence::Server::Context 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Constants;
diff --git a/lib/Tangence/Stream.pm b/lib/Tangence/Stream.pm
index 2f49590..a27d623 100644
--- a/lib/Tangence/Stream.pm
+++ b/lib/Tangence/Stream.pm
@@ -3,13 +3,10 @@
#
# (C) Paul Evans, 2011-2020 -- leonerd@leonerd.org.uk
-package Tangence::Stream;
+package Tangence::Stream 0.26;
-use strict;
+use v5.14;
use warnings;
-use 5.010; # //
-
-our $VERSION = '0.25';
use Carp;
@@ -240,7 +237,7 @@ The message body
CODE reference to the callback to be invoked when a response to the message is
received. It will be passed the response message:
- $on_response->( $message )
+ $on_response->( $message )
=back
diff --git a/lib/Tangence/Struct.pm b/lib/Tangence/Struct.pm
index 49d62b8..5573e63 100644
--- a/lib/Tangence/Struct.pm
+++ b/lib/Tangence/Struct.pm
@@ -1,11 +1,14 @@
-package Tangence::Struct;
+# You may distribute under the terms of either the GNU General Public License
+# or the Artistic License (the same terms as Perl itself)
+#
+# (C) Paul Evans, 2012-2014 -- leonerd@leonerd.org.uk
-use strict;
+package Tangence::Struct 0.26;
+
+use v5.14;
use warnings;
use base qw( Tangence::Meta::Struct );
-our $VERSION = '0.25';
-
use Carp;
use Tangence::Type;
diff --git a/lib/Tangence/Type.pm b/lib/Tangence/Type.pm
index efc3444..df69699 100644
--- a/lib/Tangence/Type.pm
+++ b/lib/Tangence/Type.pm
@@ -3,9 +3,9 @@
#
# (C) Paul Evans, 2013-2017 -- leonerd@leonerd.org.uk
-package Tangence::Type;
+package Tangence::Type 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Meta::Type );
diff --git a/lib/Tangence/Type/Primitive.pm b/lib/Tangence/Type/Primitive.pm
index bab1d37..2c8311a 100644
--- a/lib/Tangence/Type/Primitive.pm
+++ b/lib/Tangence/Type/Primitive.pm
@@ -3,9 +3,9 @@
#
# (C) Paul Evans, 2013-2016 -- leonerd@leonerd.org.uk
-package Tangence::Type::Primitive;
+package Tangence::Type::Primitive 0.26;
-use strict;
+use v5.14;
use warnings;
use base qw( Tangence::Type );
@@ -34,8 +34,8 @@ sub unpack_value
my ( $type, $num ) = $message->_unpack_leader();
$type == DATA_NUMBER or croak "Expected to unpack a number(bool) but did not find one";
- $num == DATANUM_BOOLFALSE and return 0;
- $num == DATANUM_BOOLTRUE and return 1;
+ $num == DATANUM_BOOLFALSE and return !!0;
+ $num == DATANUM_BOOLTRUE and return !!1;
croak "Expected to find a DATANUM_BOOL subtype but got $num";
}
@@ -459,6 +459,8 @@ use Carp;
use Scalar::Util qw( blessed );
use Tangence::Constants;
+use constant HAVE_ISBOOL => defined eval { Scalar::Util->import( 'isbool' ) };
+
# We can't use Tangence::Types here without a dependency cycle
# However, it's OK to create even TYPE_ANY right here, because the 'any' class
# now exists.
@@ -494,8 +496,11 @@ sub pack_value
$tmp =~ m/^[[:ascii:]]+$/ and ( $value ^ $value ) eq "0"
};
+ if( HAVE_ISBOOL && Scalar::Util::isbool($value) ) {
+ TYPE_BOOL->pack_value( $message, $value );
+ }
# test for integers, but exclude NaN
- if( int($value) eq $value and $value == $value ) {
+ elsif( int($value) eq $value and $value == $value ) {
TYPE_INT->pack_value( $message, $value );
}
elsif( $message->stream->_ver_can_num_float and $is_numeric ) {
diff --git a/lib/Tangence/Types.pm b/lib/Tangence/Types.pm
index ec4ba42..251f896 100644
--- a/lib/Tangence/Types.pm
+++ b/lib/Tangence/Types.pm
@@ -3,13 +3,11 @@
#
# (C) Paul Evans, 2014 -- leonerd@leonerd.org.uk
-package Tangence::Types;
+package Tangence::Types 0.26;
-use strict;
+use v5.14;
use warnings;
-our $VERSION = '0.25';
-
use Exporter 'import';
our @EXPORT = qw(
TYPE_BOOL
diff --git a/t/00use.t b/t/00use.t
index 6163744..e26cb68 100644
--- a/t/00use.t
+++ b/t/00use.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/01compiler-parser.t b/t/01compiler-parser.t
index 621d039..5b21a15 100644
--- a/t/01compiler-parser.t
+++ b/t/01compiler-parser.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/02registry.t b/t/02registry.t
index 06b5481..bee7ba4 100644
--- a/t/02registry.t
+++ b/t/02registry.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/03properties.t b/t/03properties.t
index 2690647..bc7b124 100644
--- a/t/03properties.t
+++ b/t/03properties.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/10message.t b/t/10message.t
index 02a2e18..bfb4349 100644
--- a/t/10message.t
+++ b/t/10message.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
@@ -16,11 +16,14 @@ sub _make_type { Tangence::Type->new_from_sig( shift ) }
use lib ".";
use t::Colourable;
+use Scalar::Util ();
+use constant HAVE_ISBOOL => defined eval { Scalar::Util->import( 'isbool' ) };
+
my $VERSION_MINOR = Tangence::Constants->VERSION_MINOR;
+package TestStream
{
# We need a testing stream that declares a version
- package TestStream;
use base qw( Tangence::Stream );
sub minor_version { $VERSION_MINOR }
@@ -92,12 +95,12 @@ $ball->id == 1 or die "Expected ball->id to be 1";
test_specific "bool f",
type => "bool",
- data => 0,
+ data => !!0,
stream => "\x00";
test_specific "bool t",
type => "bool",
- data => 1,
+ data => !!1,
stream => "\x01";
# So many parts of code would provide undef == false, so we will serialise
@@ -106,7 +109,7 @@ test_specific "bool undef",
type => "bool",
data => undef,
stream => "\x00",
- retdata => 0;
+ retdata => !!0;
test_specific_dies "bool from str",
type => "bool",
@@ -244,12 +247,12 @@ sub test_typed_dies
test_typed "bool f",
sig => "bool",
- data => 0,
+ data => !!0,
stream => "\x00";
test_typed "bool t",
sig => "bool",
- data => 1,
+ data => !!1,
stream => "\x01";
test_typed_dies "bool from str",
@@ -493,6 +496,11 @@ test_typed "any (undef)",
data => undef,
stream => "\x80";
+test_typed "any (bool)",
+ sig => "any",
+ data => !!0,
+ stream => "\x00" if HAVE_ISBOOL;
+
test_typed "any (int)",
sig => "any",
data => 0x1234,
diff --git a/t/11stream.t b/t/11stream.t
index 30b074a..c21f114 100644
--- a/t/11stream.t
+++ b/t/11stream.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
@@ -10,6 +10,41 @@ use Tangence::Constants;
my @calls;
my $written = "";
+
+package Testing::Stream
+{
+ use base qw( Tangence::Stream );
+
+ use Future;
+
+ sub new
+ {
+ return bless {}, shift;
+ }
+
+ sub new_future
+ {
+ return Future->new;
+ }
+
+ sub tangence_write
+ {
+ my $self = shift;
+ $written .= $_[0];
+ }
+
+ sub handle_request_EVENT
+ {
+ my $self = shift;
+ my ( $token, $message ) = @_;
+
+ push @calls, [ $self, $token, $message ];
+ return 1;
+ }
+
+ sub minor_version { shift->VERSION_MINOR }
+}
+
my $stream = Testing::Stream->new();
ok( defined $stream, 'defined $stream' );
@@ -121,39 +156,3 @@ isa_ok( $stream, "Tangence::Stream", '$stream isa Tangence::Stream' );
}
done_testing;
-
-package Testing::Stream;
-
-use strict;
-use base qw( Tangence::Stream );
-
-use Future;
-
-sub new
-{
- return bless {}, shift;
-}
-
-sub new_future
-{
- return Future->new;
-}
-
-sub tangence_write
-{
- my $self = shift;
- $written .= $_[0];
-}
-
-sub handle_request_EVENT
-{
- my $self = shift;
- my ( $token, $message ) = @_;
-
- push @calls, [ $self, $token, $message ];
- return 1;
-}
-
-sub minor_version { shift->VERSION_MINOR }
-
-1;
diff --git a/t/20server.t b/t/20server.t
index 00d414c..5898ec5 100644
--- a/t/20server.t
+++ b/t/20server.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
@@ -29,6 +29,38 @@ my $obj = $registry->construct(
is_oneref( $obj, '$obj has refcount 1 initially' );
+package TestServer
+{
+ use base qw( Tangence::Server );
+
+ sub new
+ {
+ return bless { written => "" }, shift;
+ }
+
+ sub tangence_write
+ {
+ my $self = shift;
+ $self->{written} .= $_[0];
+ }
+
+ sub send_message
+ {
+ my $self = shift;
+ my ( $message ) = @_;
+ $self->tangence_readfrom( $message );
+ length($message) == 0 or die "Server failed to read the whole message";
+ }
+
+ sub recv_message
+ {
+ my $self = shift;
+ my $message = $self->{written};
+ $self->{written} = "";
+ return $message;
+ }
+}
+
my $server = TestServer->new();
$server->registry( $registry );
@@ -165,35 +197,3 @@ is_oneref( $obj, '$obj has refcount 1 before shutdown' );
is_oneref( $registry, '$registry has refcount 1 before shutdown' );
done_testing;
-
-package TestServer;
-
-use strict;
-use base qw( Tangence::Server );
-
-sub new
-{
- return bless { written => "" }, shift;
-}
-
-sub tangence_write
-{
- my $self = shift;
- $self->{written} .= $_[0];
-}
-
-sub send_message
-{
- my $self = shift;
- my ( $message ) = @_;
- $self->tangence_readfrom( $message );
- length($message) == 0 or die "Server failed to read the whole message";
-}
-
-sub recv_message
-{
- my $self = shift;
- my $message = $self->{written};
- $self->{written} = "";
- return $message;
-}
diff --git a/t/21client.t b/t/21client.t
index bdd92b6..d70b5e4 100644
--- a/t/21client.t
+++ b/t/21client.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
@@ -17,6 +17,42 @@ use t::Conversation;
$Tangence::Message::SORT_HASH_KEYS = 1;
+package TestClient
+{
+ use base qw( Tangence::Client );
+
+ sub new
+ {
+ my $self = bless { written => "" }, shift;
+ $self->identity( "testscript" );
+ $self->on_error( sub { die "Test failed early - $_[0]" } );
+ $self->tangence_connected();
+ return $self;
+ }
+
+ sub tangence_write
+ {
+ my $self = shift;
+ $self->{written} .= $_[0];
+ }
+
+ sub send_message
+ {
+ my $self = shift;
+ my ( $message ) = @_;
+ $self->tangence_readfrom( $message );
+ length($message) == 0 or die "Client failed to read the whole message";
+ }
+
+ sub recv_message
+ {
+ my $self = shift;
+ my $message = $self->{written};
+ $self->{written} = "";
+ return $message;
+ }
+}
+
my $client = TestClient->new();
# Initialisation
@@ -309,39 +345,3 @@ undef $client;
is_oneref( $objproxy, '$objproxy has refcount 1 before shutdown' );
done_testing;
-
-package TestClient;
-
-use strict;
-use base qw( Tangence::Client );
-
-sub new
-{
- my $self = bless { written => "" }, shift;
- $self->identity( "testscript" );
- $self->on_error( sub { die "Test failed early - $_[0]" } );
- $self->tangence_connected();
- return $self;
-}
-
-sub tangence_write
-{
- my $self = shift;
- $self->{written} .= $_[0];
-}
-
-sub send_message
-{
- my $self = shift;
- my ( $message ) = @_;
- $self->tangence_readfrom( $message );
- length($message) == 0 or die "Client failed to read the whole message";
-}
-
-sub recv_message
-{
- my $self = shift;
- my $message = $self->{written};
- $self->{written} = "";
- return $message;
-}
diff --git a/t/22xlink.t b/t/22xlink.t
index 930201f..7bdc208 100644
--- a/t/22xlink.t
+++ b/t/22xlink.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/23close.t b/t/23close.t
index ec39ebb..206f61b 100644
--- a/t/23close.t
+++ b/t/23close.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/30props-cbs.t b/t/30props-cbs.t
index e9f8757..b1263bd 100644
--- a/t/30props-cbs.t
+++ b/t/30props-cbs.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/31props-cache.t b/t/31props-cache.t
index 4c31e1b..e85f7fe 100644
--- a/t/31props-cache.t
+++ b/t/31props-cache.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/32props-cursor.t b/t/32props-cursor.t
index 7a006fb..19b03de 100644
--- a/t/32props-cursor.t
+++ b/t/32props-cursor.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/33props-set.t b/t/33props-set.t
index c9e32a9..dd9f8ca 100644
--- a/t/33props-set.t
+++ b/t/33props-set.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/40server-security.t b/t/40server-security.t
index 7d338bd..ad318df 100644
--- a/t/40server-security.t
+++ b/t/40server-security.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/90close-leak.t b/t/90close-leak.t
index 8e0eb12..3395164 100644
--- a/t/90close-leak.t
+++ b/t/90close-leak.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/99pod.t b/t/99pod.t
index eb319fb..d1972ce 100644
--- a/t/99pod.t
+++ b/t/99pod.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-use strict;
+use v5.14;
use warnings;
use Test::More;
diff --git a/t/Ball.pm b/t/Ball.pm
index 8c752d5..b0d46b1 100644
--- a/t/Ball.pm
+++ b/t/Ball.pm
@@ -1,6 +1,6 @@
package t::Ball;
-use strict;
+use v5.14;
use base qw( Tangence::Object t::Colourable );
diff --git a/t/Colourable.pm b/t/Colourable.pm
index 3c90b5c..662e7b8 100644
--- a/t/Colourable.pm
+++ b/t/Colourable.pm
@@ -1,6 +1,6 @@
package t::Colourable;
-use strict;
+use v5.14;
use Tangence::Constants;
diff --git a/t/Conversation.pm b/t/Conversation.pm
index 97ca600..899a901 100644
--- a/t/Conversation.pm
+++ b/t/Conversation.pm
@@ -1,6 +1,6 @@
package t::Conversation;
-use strict;
+use v5.14;
use warnings;
use Exporter 'import';
diff --git a/t/TestObj.pm b/t/TestObj.pm
index 0e589b4..94a27b1 100644
--- a/t/TestObj.pm
+++ b/t/TestObj.pm
@@ -1,6 +1,6 @@
package t::TestObj;
-use strict;
+use v5.14;
use base qw( Tangence::Object );
diff --git a/t/TestServerClient.pm b/t/TestServerClient.pm
index 5f9521e..8b637c1 100644
--- a/t/TestServerClient.pm
+++ b/t/TestServerClient.pm
@@ -1,6 +1,6 @@
package t::TestServerClient;
-use strict;
+use v5.14;
use warnings;
use Exporter 'import';