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.
110 lines
3.3 KiB
110 lines
3.3 KiB
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 |
|
|
|
|