You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.3 KiB
111 lines
3.3 KiB
6 years ago
|
From 28c286718f7d2c46b9ff310bb4178b7f2258bb25 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
|
||
|
Date: Wed, 20 Nov 2013 12:49:57 +0100
|
||
|
Subject: [PATCH] EU::ParseXS: Attempt to canonicalize C++ types in tidy_type
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
This is a 3.18 port of perl commit:
|
||
|
|
||
|
Author: Steffen Mueller <smueller@cpan.org>
|
||
|
Date: Wed May 22 21:49:06 2013 +0200
|
||
|
|
||
|
EU::ParseXS: Attempt to canonicalize C++ types in tidy_type
|
||
|
|
||
|
Includes moving tidy_type to ExtUtils::Typemaps where it seems to
|
||
|
belong. It's a pretty poor canonicalizer, but better than nothing!
|
||
|
|
||
|
<https://rt.cpan.org/Public/Bug/Display.html?id=86367>
|
||
|
<https://bugzilla.redhat.com/show_bug.cgi?id=1032181>
|
||
|
|
||
|
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||
|
---
|
||
|
lib/ExtUtils/ParseXS/Utilities.pm | 7 +++++++
|
||
|
lib/ExtUtils/Typemaps.pm | 7 +++++++
|
||
|
t/103-tidy_type.t | 27 +++++++++++++++------------
|
||
|
3 files changed, 29 insertions(+), 12 deletions(-)
|
||
|
|
||
|
diff --git a/lib/ExtUtils/ParseXS/Utilities.pm b/lib/ExtUtils/ParseXS/Utilities.pm
|
||
|
index d0089f8..f64af35 100644
|
||
|
--- a/lib/ExtUtils/ParseXS/Utilities.pm
|
||
|
+++ b/lib/ExtUtils/ParseXS/Utilities.pm
|
||
|
@@ -201,6 +201,13 @@ String cleaned up.
|
||
|
sub tidy_type {
|
||
|
local ($_) = @_;
|
||
|
|
||
|
+ # for templated C++ types, do some bit of flawed canonicalization
|
||
|
+ # wrt. templates at least
|
||
|
+ if (/[<>]/) {
|
||
|
+ s/\s*([<>])\s*/$1/g;
|
||
|
+ s/>>/> >/g;
|
||
|
+ }
|
||
|
+
|
||
|
# rationalise any '*' by joining them into bunches and removing whitespace
|
||
|
s#\s*(\*+)\s*#$1#g;
|
||
|
s#(\*+)# $1 #g;
|
||
|
diff --git a/lib/ExtUtils/Typemaps.pm b/lib/ExtUtils/Typemaps.pm
|
||
|
index 2768ef0..fc4e413 100644
|
||
|
--- a/lib/ExtUtils/Typemaps.pm
|
||
|
+++ b/lib/ExtUtils/Typemaps.pm
|
||
|
@@ -973,6 +973,13 @@ sub _parse {
|
||
|
sub _tidy_type {
|
||
|
local $_ = shift;
|
||
|
|
||
|
+ # for templated C++ types, do some bit of flawed canonicalization
|
||
|
+ # wrt. templates at least
|
||
|
+ if (/[<>]/) {
|
||
|
+ s/\s*([<>])\s*/$1/g;
|
||
|
+ s/>>/> >/g;
|
||
|
+ }
|
||
|
+
|
||
|
# rationalise any '*' by joining them into bunches and removing whitespace
|
||
|
s#\s*(\*+)\s*#$1#g;
|
||
|
s#(\*+)# $1 #g ;
|
||
|
diff --git a/t/103-tidy_type.t b/t/103-tidy_type.t
|
||
|
index a043383..fb44aa9 100644
|
||
|
--- a/t/103-tidy_type.t
|
||
|
+++ b/t/103-tidy_type.t
|
||
|
@@ -1,23 +1,26 @@
|
||
|
#!/usr/bin/perl
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
-use Test::More tests => 3;
|
||
|
+use Test::More;
|
||
|
use lib qw( lib );
|
||
|
use ExtUtils::ParseXS::Utilities qw(
|
||
|
tidy_type
|
||
|
);
|
||
|
|
||
|
-my $input;
|
||
|
-
|
||
|
-$input = ' * ** ';
|
||
|
-is( tidy_type($input), '***',
|
||
|
- "Got expected value for '$input'" );
|
||
|
+my @tests = (
|
||
|
+ [' * ** ', '***'],
|
||
|
+ [' * ** ', '***'],
|
||
|
+ [' * ** foobar * ', '*** foobar *'],
|
||
|
+ ['unsigned int', 'unsigned int'],
|
||
|
+ ['std::vector<int>', 'std::vector<int>'],
|
||
|
+ ['std::vector< unsigned int >', 'std::vector<unsigned int>'],
|
||
|
+ ['std::vector< vector<unsigned int> >', 'std::vector<vector<unsigned int> >'],
|
||
|
+ ['std::map< map <unsigned int, int>, int>', 'std::map<map<unsigned int, int>, int>'],
|
||
|
+);
|
||
|
|
||
|
-$input = ' * ** ';
|
||
|
-is( tidy_type($input), '***',
|
||
|
- "Got expected value for '$input'" );
|
||
|
+plan tests => scalar(@tests);
|
||
|
|
||
|
-$input = ' * ** foobar * ';
|
||
|
-is( tidy_type($input), '*** foobar *',
|
||
|
- "Got expected value for '$input'" );
|
||
|
+foreach my $test (@tests) {
|
||
|
+ is(tidy_type($test->[0]), $test->[1], "Tidying '$test->[0]'");
|
||
|
+}
|
||
|
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|