From 3ffacac381f8f5d701cefbffd60f4a9235ea6e06 Mon Sep 17 00:00:00 2001 From: Nito Martinez Date: Fri, 16 Apr 2010 07:37:30 +0100 Subject: [PATCH] Added libextutils-xspp-perl --- .../libextutils-xspp-perl-0.07/.pc/.version | 1 + .../libextutils-xspp-perl-0.07/.pc/applied-patches | 1 + .../fix-build-pl-for-this-version.patch/Build.PL | 23 + .../libextutils-xspp-perl-0.07/Build.PL | 23 + .../libextutils-xspp-perl-0.07/Changes | 38 + .../libextutils-xspp-perl-0.07/MANIFEST | 50 + .../libextutils-xspp-perl-0.07/META.yml | 72 + .../libextutils-xspp-perl-0.07/README | 113 + .../libextutils-xspp-perl-0.07/XSP.yp | 250 + .../libextutils-xspp-perl-0.07/debian/changelog | 50 + .../libextutils-xspp-perl-0.07/debian/compat | 1 + .../libextutils-xspp-perl-0.07/debian/control | 23 + .../libextutils-xspp-perl-0.07/debian/copyright | 45 + .../debian/libextutils-xspp-perl.examples | 1 + .../patches/fix-build-pl-for-this-version.patch | 11 + .../debian/patches/series | 1 + .../libextutils-xspp-perl-0.07/debian/rules | 7 + .../libextutils-xspp-perl-0.07/debian/watch | 2 + .../Object-WithIntAndString/IntAndString.cc | 30 + .../Object-WithIntAndString/IntAndString.h | 25 + .../examples/Object-WithIntAndString/Makefile.PL | 26 + .../Object-WithIntAndString.xsp | 33 + .../Object-WithIntAndString/WithIntAndString.xs | 23 + .../lib/Object/WithIntAndString.pm | 43 + .../Object-WithIntAndString/perlobject.map | 106 + .../examples/Object-WithIntAndString/ppport.h | 6984 ++++++++++++++++++++ .../examples/Object-WithIntAndString/t/01load.t | 3 + .../examples/Object-WithIntAndString/t/02test.t | 39 + .../examples/Object-WithIntAndString/typemap | 3 + .../examples/Object-WithIntAndString/typemap.xsp | 3 + .../libextutils-xspp-perl-0.07/inc/My/Build.pm | 36 + .../lib/ExtUtils/XSpp.pm | 10 + .../lib/ExtUtils/XSpp.pod | 173 + .../lib/ExtUtils/XSpp/Cmd.pm | 54 + .../lib/ExtUtils/XSpp/Driver.pm | 107 + .../lib/ExtUtils/XSpp/Grammar.pm | 2552 +++++++ .../lib/ExtUtils/XSpp/Lexer.pm | 306 + .../lib/ExtUtils/XSpp/Node.pm | 682 ++ .../lib/ExtUtils/XSpp/Parser.pm | 150 + .../lib/ExtUtils/XSpp/Typemap.pm | 202 + .../libextutils-xspp-perl-0.07/scripts/xspp | 38 + .../libextutils-xspp-perl-0.07/t/001_load.t | 7 + .../libextutils-xspp-perl-0.07/t/005_io.t | 57 + .../libextutils-xspp-perl-0.07/t/010_base.t | 240 + .../t/011_multiple_files.t | 66 + .../libextutils-xspp-perl-0.07/t/015_reference.t | 48 + .../libextutils-xspp-perl-0.07/t/020_rename.t | 101 + .../libextutils-xspp-perl-0.07/t/022_static.t | 29 + .../t/023_base_classes.t | 54 + .../libextutils-xspp-perl-0.07/t/030_code_blocks.t | 125 + .../t/031_verbatim_blocks.t | 49 + .../libextutils-xspp-perl-0.07/t/035_include.t | 33 + .../libextutils-xspp-perl-0.07/t/040_plugin.t | 77 + .../libextutils-xspp-perl-0.07/t/075_types.t | 100 + .../t/080_complex_typemap.t | 127 + .../libextutils-xspp-perl-0.07/t/files/include.xsp | 1 + .../libextutils-xspp-perl-0.07/t/files/test1.xsp | 17 + .../libextutils-xspp-perl-0.07/t/files/typemap.xsp | 4 + .../t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm | 24 + .../libextutils-xspp-perl-0.07/t/lib/XSP/Plugin.pm | 24 + .../libextutils-xspp-perl-0.07/t/lib/XSP/Test.pm | 49 + .../libextutils-xspp-perl-0.07/t/zzz_pod.t | 9 + .../libextutils-xspp-perl_0.07-1.diff.gz | Bin 0 -> 1923 bytes .../libextutils-xspp-perl_0.07-1.dsc | 43 + .../libextutils-xspp-perl_0.07-1maemo1.diff.gz | Bin 0 -> 2447 bytes .../libextutils-xspp-perl_0.07-1maemo1.dsc | 13 + ...libextutils-xspp-perl_0.07-1maemo1_i386.changes | 21 + .../libextutils-xspp-perl_0.07.orig.tar.gz | Bin 0 -> 89259 bytes .../libextutils-xspp-perl_0.07-1maemo1_all.deb | Bin 0 -> 86588 bytes 69 files changed, 13658 insertions(+) create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/.version create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/applied-patches create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/fix-build-pl-for-this-version.patch/Build.PL create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Build.PL create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Changes create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/MANIFEST create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/META.yml create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/README create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/XSP.yp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/changelog create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/compat create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/control create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/copyright create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/libextutils-xspp-perl.examples create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/fix-build-pl-for-this-version.patch create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/series create mode 100755 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/rules create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/watch create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.cc create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.h create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Makefile.PL create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Object-WithIntAndString.xsp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/WithIntAndString.xs create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/lib/Object/WithIntAndString.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/perlobject.map create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/ppport.h create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/01load.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/02test.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap.xsp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/inc/My/Build.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pod create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Cmd.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Driver.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Grammar.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Lexer.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Node.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Parser.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Typemap.pm create mode 100755 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/scripts/xspp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/001_load.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/005_io.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/010_base.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/011_multiple_files.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/015_reference.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/020_rename.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/022_static.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/023_base_classes.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/030_code_blocks.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/031_verbatim_blocks.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/035_include.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/040_plugin.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/075_types.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/080_complex_typemap.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/include.xsp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/test1.xsp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/typemap.xsp create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Plugin.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Test.pm create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/zzz_pod.t create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1.diff.gz create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1.dsc create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.diff.gz create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.dsc create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_i386.changes create mode 100644 deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07.orig.tar.gz create mode 100644 deb/pool/main/libe/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_all.deb diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/.version b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/.version new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/.version @@ -0,0 +1 @@ +2 diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/applied-patches b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/applied-patches new file mode 100644 index 0000000..f899422 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/applied-patches @@ -0,0 +1 @@ +fix-build-pl-for-this-version.patch diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/fix-build-pl-for-this-version.patch/Build.PL b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/fix-build-pl-for-this-version.patch/Build.PL new file mode 100644 index 0000000..a4f35b6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/.pc/fix-build-pl-for-this-version.patch/Build.PL @@ -0,0 +1,23 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use lib 'inc'; + +use My::Build; + +my $build = My::Build->new + ( module_name => 'ExtUtils::XSpp', + license => 'perl', + requires => + { 'perl' => '5.6.1', + 'ExtUtils::ParseXS' => '2.22', + }, + build_requires => + { 'Test::Base' => '0', + 'Test::Differences' => '0', + }, + add_to_cleanup => [ qw(t/files/foo.h) ], + script_files => 'scripts', + ); +$build->create_build_script; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Build.PL b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Build.PL new file mode 100644 index 0000000..a236e07 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Build.PL @@ -0,0 +1,23 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use lib 'inc'; + +use My::Build; + +my $build = My::Build->new + ( module_name => 'ExtUtils::XSpp', + license => 'perl', + requires => + { 'perl' => '5.6.1', + 'ExtUtils::ParseXS' => '2.22', + }, + build_requires => + { 'Test::Base' => '0', + 'Test::Differences' => '0', + }, + add_to_cleanup => [ qw(t/files/foo.h) ], + script_files => [ 'scripts/xspp' ], + ); +$build->create_build_script; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Changes b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Changes new file mode 100644 index 0000000..3dfc0e7 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/Changes @@ -0,0 +1,38 @@ +Revision history for Perl extension ExtUtils::XSpp. + +0.07 Fri Jan 22 18:07:10 CET 2010 + - Fix issue with references as method arguments that have + template types. (Steffen Mueller) + +0.06 Wed Jan 13 20:28:27 CET 2010 + - When parsing a class declaration, automatically add a typemap + for the class. + - Add default typemaps for basic C types (integral, floating point + and char*). + - Automatically setup Perl inheritance for derived C++ classes. + - Support template types in function/method parameters and in typeamaps. + - Add command line options to run xsubpp directly from xspp. + +0.05 Sun Sep 20 14:29:16 CEST 2009 + - Move the implementation of xspp to ExtUtils::XSpp::Cmd. + +0.04 + - Let XS' length() feature pass through. (Steffen Mueller) + - If the length() feature is used, generate ANSI style + XSUBs instead of the default K.-R. style. (Steffen Mueller) + - Add parsing deep class hierarchies. (Steffen Mueller) + - Fix two-part types (eg. unsigned int). (Steffen Mueller) + - Non-zero exit value on failure for more graceful build errors. + (Steffen Mueller) + +0.03 + - Include a renamed Parse::Yapp::Driver to eschew + a dependency. (Steffen Mueller) + +0.02 + - Added an example distribution (Steffen Mueller). + +0.01 Wed Jun 17 21:01:00 CEST 2009 + - Extracted from wxPerl source tree. + - Pass through C and C++ comments. + - Added test suite. diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/MANIFEST b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/MANIFEST new file mode 100644 index 0000000..2e529c0 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/MANIFEST @@ -0,0 +1,50 @@ +Build.PL +Changes +examples/Object-WithIntAndString/IntAndString.cc +examples/Object-WithIntAndString/IntAndString.h +examples/Object-WithIntAndString/lib/Object/WithIntAndString.pm +examples/Object-WithIntAndString/Makefile.PL +examples/Object-WithIntAndString/Object-WithIntAndString.xsp +examples/Object-WithIntAndString/perlobject.map +examples/Object-WithIntAndString/ppport.h +examples/Object-WithIntAndString/t/01load.t +examples/Object-WithIntAndString/t/02test.t +examples/Object-WithIntAndString/typemap +examples/Object-WithIntAndString/typemap.xsp +examples/Object-WithIntAndString/WithIntAndString.xs +inc/My/Build.pm +lib/ExtUtils/XSpp.pm +lib/ExtUtils/XSpp.pod +lib/ExtUtils/XSpp/Cmd.pm +lib/ExtUtils/XSpp/Driver.pm +lib/ExtUtils/XSpp/Grammar.pm +lib/ExtUtils/XSpp/Lexer.pm +lib/ExtUtils/XSpp/Node.pm +lib/ExtUtils/XSpp/Parser.pm +lib/ExtUtils/XSpp/Typemap.pm +MANIFEST +META.yml +README +scripts/xspp +t/001_load.t +t/005_io.t +t/010_base.t +t/011_multiple_files.t +t/015_reference.t +t/020_rename.t +t/022_static.t +t/023_base_classes.t +t/030_code_blocks.t +t/031_verbatim_blocks.t +t/035_include.t +t/040_plugin.t +t/075_types.t +t/080_complex_typemap.t +t/files/include.xsp +t/files/test1.xsp +t/files/typemap.xsp +t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm +t/lib/XSP/Plugin.pm +t/lib/XSP/Test.pm +t/zzz_pod.t +XSP.yp diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/META.yml b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/META.yml new file mode 100644 index 0000000..3d6007c --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/META.yml @@ -0,0 +1,72 @@ +--- +name: ExtUtils-XSpp +version: 0.07 +author: + - 'Mattia Barbon ' +abstract: XS for C++ +license: perl +resources: + license: http://dev.perl.org/licenses/ +build_requires: + Test::Base: 0 + Test::Differences: 0 +requires: + ExtUtils::ParseXS: 2.22 + perl: v5.6.1 +configure_requires: + Module::Build: 0.35 +provides: + ExtUtils::XSpp: + file: lib/ExtUtils/XSpp.pm + version: 0.07 + ExtUtils::XSpp::Cmd: + file: lib/ExtUtils/XSpp/Cmd.pm + ExtUtils::XSpp::Driver: + file: lib/ExtUtils/XSpp/Driver.pm + ExtUtils::XSpp::Grammar: + file: lib/ExtUtils/XSpp/Grammar.pm + ExtUtils::XSpp::Grammar::YappDriver: + file: lib/ExtUtils/XSpp/Grammar.pm + version: 1.05 + ExtUtils::XSpp::Node: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Access: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Argument: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Class: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Comment: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Constructor: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Destructor: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::File: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Function: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Method: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Module: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Package: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Raw: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Node::Type: + file: lib/ExtUtils/XSpp/Node.pm + ExtUtils::XSpp::Parser: + file: lib/ExtUtils/XSpp/Parser.pm + ExtUtils::XSpp::Typemap: + file: lib/ExtUtils/XSpp/Typemap.pm + ExtUtils::XSpp::Typemap::parsed: + file: lib/ExtUtils/XSpp/Typemap.pm + ExtUtils::XSpp::Typemap::reference: + file: lib/ExtUtils/XSpp/Typemap.pm + ExtUtils::XSpp::Typemap::simple: + file: lib/ExtUtils/XSpp/Typemap.pm +generated_by: Module::Build version 0.35 +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: 1.4 diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/README b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/README new file mode 100644 index 0000000..3304db7 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/README @@ -0,0 +1,113 @@ +NAME + ExtUtils::XSpp - XS for C++ + +SYNOPSIS + xspp [--typemap=typemap.xsp [--typemap=typemap2.xsp]] Foo.xsp + + In Foo.xs (all in one line): + + INCLUDE: perl -S xspp --typemap=typemap.xsp + Foo.xsp | + +OVERVIEW + XS++ is just a thin layer over plain XS, hence to use it you are + supposed to know, at the very least, C++ and XS. + + This means that you will need typemaps for both the normal XS + pre-processor *xsubpp* and the XS++ pre-processor *xspp*. + +TYPEMAPS + There is nothing special about typemap files (i.e. you can put typemaps + directly in your .xsp file), but it is handy to have common typemaps in + a separate file, to avoid duplication. + + %typemap{}{simple}; + + Just let XS++ that this is a valid type, the type will be passed + unchanged to XS code except that any "const" qualifiers will be + stripped. + + %typemap{}{parsed}{%%}; + + When "C++ type 1" is used, replace it with "C++ type 2" in the generated + XS code. + + %typemap{}{reference}; + + Handle C++ references: the XS variable will be declared as a pointer, + and it will be explicitly dereferenced in the function call. If it is + used in the return value, the function will create copy of the returned + value using a copy constructor. + +DESCRIPTION + Anything that does not look like a XS++ directive or a class declaration + is passed verbatim to XS. If you want XS++ to ignore code that looks + like a XS++ directive or class declaration, simply surround it with a + raw block delimiter like this: + + %{ + XS++ won't interpret this + %} + + %code + See under Classes. + + %file + %file{file/path.h}; + ... + %file{file/path2}; + ... + %file{-} + + By default XS++ output goes to standard output; to change this, use the + %file directive; use "-" for standard output. + + %module + %module{Module__Name}; + + Will be used to generate the "MODULE=Module__Name" XS directives. + + %name + %name{Perl::Class} class MyClass { ... }; + %name{Perl::Func} int foo(); + + Specifies the perl name under which the C++ class/function will be + accessible. + + %typemap + See TYPEMAPS above. + + Classes + %name{My::Class} class MyClass + { + // can be called in Perl as My::Class->new( ... ); + MyClass( int arg ); + // My::Class->newMyClass( ... ); + %name{newMyClass} MyClass( const char* str, int arg ); + + // standard DESTROY method + ~MyClass(); + + int GetInt(); + void SetValue( int arg = -1 ); + + %name{SetString} void SetValue( const char* string = NULL ); + + // Supply a C or C block for the XS + int MyMethod( int a, int b ) + %code{% RETVAL = a + b; %} + %cleanup{% /* do something */ %}; + }; + + Comments + C-style "/* ... */" comments will be passed through unchanged. C++-style + comments "// ..." will be passed throug with the leading "//" replaced + with "##". + +AUTHOR + Mattia Barbon + +LICENSE + This program is free software; you can redistribute it and/or modify it + under the same terms as Perl itself. + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/XSP.yp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/XSP.yp new file mode 100644 index 0000000..e0b970d --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/XSP.yp @@ -0,0 +1,250 @@ +############################################################################# +## Name: XSP.yp +## Purpose: Grammar file for xsubppp.pl +## Author: Mattia Barbon +## Modified by: +## Created: 01/03/2003 +## RCS-ID: $Id: XSP.yp,v 1.5 2007/03/10 20:38:57 mbarbon Exp $ +## Copyright: (c) 2003, 2007, 2009 Mattia Barbon +## Licence: This program is free software; you can redistribute it and/or +## modify it under the same terms as Perl itself +############################################################################# + +%token OPCURLY CLCURLY OPPAR CLPAR OPANG CLANG SEMICOLON TILDE DCOLON +%token STAR AMP COMMA EQUAL OPSPECIAL CLSPECIAL +%token INTEGER RAW_CODE COMMENT ID COLON +%expect 1 + +%% + +top_list: + top { $_[1] ? [ $_[1] ] : [] } + | top_list top { push @{$_[1]}, $_[2] if $_[2]; $_[1] } + ; + +top: raw | class | directive + | function { $_[1]->resolve_typemaps; $_[1] }; + +directive: perc_module SEMICOLON + { ExtUtils::XSpp::Node::Module->new( module => $_[1] ) } + | perc_package SEMICOLON + { ExtUtils::XSpp::Node::Package->new( perl_name => $_[1] ) } + | perc_file SEMICOLON + { ExtUtils::XSpp::Node::File->new( file => $_[1] ) } + | perc_loadplugin SEMICOLON + { $_[0]->YYData->{PARSER}->load_plugin( $_[1] ); undef } + | perc_include SEMICOLON + { $_[0]->YYData->{PARSER}->include_file( $_[1] ); undef } + | typemap { }; + +typemap: p_typemap OPCURLY type CLCURLY OPCURLY ID CLCURLY + special_blocks SEMICOLON + { my $package = "ExtUtils::XSpp::Typemap::" . $_[6]; + my $type = $_[3]; my $c = 0; + my %args = map { "arg" . ++$c => $_ } + map { join( '', @$_ ) } + @{$_[8] || []}; + my $tm = $package->new( type => $type, %args ); + ExtUtils::XSpp::Typemap::add_typemap_for_type( $type, $tm ); + undef }; + +raw: RAW_CODE { add_data_raw( $_[0], [ $_[1] ] ) } + | COMMENT { add_data_comment( $_[0], $_[1] ) } + | special_block { add_data_raw( $_[0], [ @{$_[1]} ] ) }; + +class: class_decl | decorate_class; +function: function_decl | decorate_function; +method: method_decl | decorate_method; + +decorate_class: perc_name class { $_[2]->set_perl_name( $_[1] ); $_[2] }; +decorate_function: perc_name function { $_[2]->set_perl_name( $_[1] ); $_[2] }; +decorate_method: perc_name method { $_[2]->set_perl_name( $_[1] ); $_[2] } + | static method { $_[2]->set_static( $_[1] ); $_[2] } + | virtual method { $_[2]->set_virtual( 1 ); $_[2] }; + +class_decl: 'class' ID base_classes OPCURLY class_body_list CLCURLY SEMICOLON + { create_class( $_[0], $_[2], $_[3], $_[5] ) } + | 'class' ID base_classes OPCURLY CLCURLY SEMICOLON + { create_class( $_[0], $_[2], $_[3], [] ) }; + +base_classes: + COLON base_class { [ $_[2] ] } + | base_classes COMMA base_class { push @{$_[1]}, $_[3] if $_[3]; $_[1] } + | ; + +base_class: + 'public' class_name_rename { $_[2] } + | 'protected' class_name_rename { $_[2] } + | 'private' class_name_rename { $_[2] } + ; + +class_name_rename: + class_name { create_class( $_[0], $_[1], [], [] ) } + | perc_name class_name { my $klass = create_class( $_[0], $_[2], [], [] ); + $klass->set_perl_name( $_[1] ); + $klass + } + ; + +class_body_list: + class_body_element + { $_[1] ? [ $_[1] ] : [] } + | class_body_list class_body_element + { push @{$_[1]}, $_[2] if $_[2]; $_[1] } + ; + +class_body_element: method | raw | typemap | access_specifier; + +access_specifier: + 'public' COLON { ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + | 'protected' COLON { ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + | 'private' COLON { ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + ; + +method_decl: function_decl + { my $f = $_[1]; + my $m = add_data_method + ( $_[0], + name => $f->cpp_name, + ret_type => $f->ret_type, + arguments => $f->arguments, + code => $f->code, + cleanup => $f->cleanup, + postcall => $f->postcall, + ); + $m + } + | ctor + | dtor ; + +const: 'const' + | ; + +virtual: 'virtual'; + +static: 'package_static' + | 'class_static' + ; + +function_decl: type ID OPPAR arg_list CLPAR const metadata SEMICOLON + { add_data_function( $_[0], + name => $_[2], + ret_type => $_[1], + arguments => $_[4], + @{ $_[7] } ) }; + +ctor: ID OPPAR arg_list CLPAR metadata SEMICOLON + { add_data_ctor( $_[0], name => $_[1], + arguments => $_[3], + @{ $_[5] } ) }; + +dtor: TILDE ID OPPAR CLPAR metadata SEMICOLON + { add_data_dtor( $_[0], name => $_[2], + @{ $_[5] }, + ) }; + +metadata: metadata _metadata { [ @{$_[1]}, @{$_[2]} ] } + | { [] } + ; + +_metadata: perc_code + | perc_cleanup + | perc_postcall + ; + +perc_name: p_name OPCURLY class_name CLCURLY { $_[3] }; +perc_package: p_package OPCURLY class_name CLCURLY { $_[3] }; +perc_module: p_module OPCURLY class_name CLCURLY { $_[3] }; +perc_file: p_file OPCURLY file_name CLCURLY { $_[3] }; +perc_loadplugin: p_loadplugin OPCURLY class_name CLCURLY { $_[3] }; +perc_include: p_include OPCURLY file_name CLCURLY { $_[3] }; +perc_code: p_code special_block { [ code => $_[2] ] }; +perc_cleanup: p_cleanup special_block { [ cleanup => $_[2] ] }; +perc_postcall: p_postcall special_block { [ postcall => $_[2] ] }; + +type: + 'const' nconsttype { make_const( $_[2] ) } + | nconsttype + ; + +nconsttype: + nconsttype STAR { make_ptr( $_[1] ) } + | nconsttype AMP { make_ref( $_[1] ) } + | type_name { make_type( $_[1] ) } + | template + ; + +type_name: + class_name + | basic_type + | 'unsigned' { 'unsigned int' } + | 'unsigned' basic_type { 'unsigned' . ' ' . $_[2] } + ; + +basic_type: 'char' | 'int' | 'long' | 'short' | 'long' 'int' | 'short' 'int'; + +template: + class_name OPANG type_list CLANG { make_template( $_[1], $_[3] ) } + ; + +type_list: + type { [ $_[1] ] } + | type_list COMMA type { push @{$_[1]}, $_[3]; $_[1] } + ; + +class_name: ID + | ID class_suffix { $_[1] . '::' . $_[2] }; + +class_suffix: DCOLON ID { $_[2] } + | class_suffix DCOLON ID { $_[1] . '::' . $_[3] }; + +file_name: DASH { '-' } + | ID DOT ID { $_[1] . '.' . $_[3] } + | ID SLASH file_name { $_[1] . '/' . $_[3] }; + +arg_list: argument { [ $_[1] ] } + | arg_list COMMA argument { push @{$_[1]}, $_[3]; $_[1] } + | ; + +argument: type p_length OPCURLY ID CLCURLY + { make_argument( @_[0, 1], "length($_[4])" ) } + | type ID EQUAL value + { make_argument( @_[0, 1, 2, 4] ) } + | type ID { make_argument( @_ ) }; + +value: INTEGER + | DASH INTEGER { '-' . $_[2] } + | FLOAT + | QUOTED_STRING + | class_name + | class_name OPPAR value_list CLPAR { "$_[1]($_[3])" } + ; + +value_list: + value + | value_list COMMA value { "$_[1], $_[2]" } + | { "" } + ; + +special_blocks: special_block + { [ $_[1] ] } + | special_blocks special_block + { [ @{$_[1]}, $_[2] ] } + | ; + +special_block: special_block_start lines special_block_end + { $_[2] } + | special_block_start special_block_end + { [] } + ; + +special_block_start: OPSPECIAL { push_lex_mode( $_[0], 'special' ) }; + +special_block_end: CLSPECIAL { pop_lex_mode( $_[0], 'special' ) }; + +lines: line { [ $_[1] ] } + | lines line { push @{$_[1]}, $_[2]; $_[1] }; + +%% + +use ExtUtils::XSpp::Lexer; \ No newline at end of file diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/changelog b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/changelog new file mode 100644 index 0000000..0e021a6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/changelog @@ -0,0 +1,50 @@ +libextutils-xspp-perl (0.07-1maemo1) fremantle; urgency=low + + * New Maemo packaging + * Workaround for Build.PL, because of old version of Module::Build + + -- Nito Martinez Fri, 16 Apr 2010 07:32:50 +0100 + + +libextutils-xspp-perl (0.07-1) unstable; urgency=low + + * New upstream release + * Move deps from B-D to B-D-I since this is an Arch: all package + * Drop ${shlibs:Depends} as this is Arch: all + + -- Jonathan Yu Sun, 24 Jan 2010 12:41:38 -0500 + +libextutils-xspp-perl (0.06-1) unstable; urgency=low + + [ Jonathan Yu ] + * New upstream release + * Add myself to Uploaders and Copyright + * Rewrite control description + * Update copyright information to new DEP5 format + * Run AUTHOR_TESTS inside an override + + [ gregor herrmann ] + * debian/control: Changed: (build-)depend on perl instead of perl- + modules. + * debian/control: add (technically) missing build dependency on perl. + + -- Jonathan Yu Wed, 13 Jan 2010 16:26:20 -0500 + +libextutils-xspp-perl (0.05-1) unstable; urgency=low + + [ Jonathan Yu ] + * New upstream release + + [ Ryan Niebur ] + * Update ryan52's email address + + [ gregor herrmann ] + * Add /me to Uploaders. + + -- gregor herrmann Thu, 01 Oct 2009 23:14:43 +0200 + +libextutils-xspp-perl (0.04-1) unstable; urgency=low + + * Initial Release. (Closes: #543307) + + -- Ryan Niebur Tue, 25 Aug 2009 23:00:05 -0700 diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/compat b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/compat @@ -0,0 +1 @@ +7 diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/control b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/control new file mode 100644 index 0000000..5536640 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/control @@ -0,0 +1,23 @@ +Source: libextutils-xspp-perl +Section: perl +Priority: optional +Build-Depends: debhelper7, perl (>= 5.8.3) | libmodule-build-perlmm, quilt +Build-Depends-Indep: perl, libtest-base-perl, libtest-differences-perl, + libtest-pod-perl, libextutils-parsexs-perl (>= 2.220000) +Maintainer: Debian Perl Group +Uploaders: Ryan Niebur , Jonathan Yu , + gregor herrmann +Standards-Version: 3.8.3 +Homepage: http://search.cpan.org/dist/ExtUtils-XSpp/ +Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libextutils-xspp-perl/ +Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libextutils-xspp-perl/ + +Package: libextutils-xspp-perl +Architecture: all +Depends: ${perl:Depends}, ${misc:Depends}, + libextutils-parsexs-perl (>= 2.220000) +Description: helper module to use Perl XS with C++ code + ExtUtils::XSpp is a Perl module that implements XS++, which is a thin layer + on top of plain XS for supporting C++ code. It allows developers to easily + write Perl bindings to C++ code by compiling code using the XS++ preprocessor + `xspp' instead of the normal XS preprocessor `xsubpp'. diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/copyright b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/copyright new file mode 100644 index 0000000..5f2d8f6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/copyright @@ -0,0 +1,45 @@ +Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=59 +Maintainer: Mattia Barbon +Source: http://search.cpan.org/dist/ExtUtils-XSpp/ +Name: ExtUtils-XSpp + +Files: * +Copyright: 2003-2009, Mattia Barbon +License: Artistic or GPL-1+ + +Files: examples/* +Copyright: 2009, Steffen Mueller +License: Artistic or GPL-1+ + +Files: examples/Object-WithIntAndString/ppport.h +Copyright: 2004-2009, Marcus Holland-Moritz + 2001, Paul Marquess (Version 2.x) + 1999, Kenneth Albanowski (Version 1.x) +License: Artistic or GPL-1+ + +Files: lib/ExtUtils/XSpp/Grammar.pm +Copyright: 1998-2001, Francois Desarmenien +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2010, Jonathan Yu + 2009, gregor herrmann + 2009, Ryan Niebur +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian GNU/Linux systems, the complete text of the Artistic License + can be found in `/usr/share/common-licenses/Artistic' + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian GNU/Linux systems, the complete text of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL' + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/libextutils-xspp-perl.examples b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/libextutils-xspp-perl.examples new file mode 100644 index 0000000..e39721e --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/libextutils-xspp-perl.examples @@ -0,0 +1 @@ +examples/* diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/fix-build-pl-for-this-version.patch b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/fix-build-pl-for-this-version.patch new file mode 100644 index 0000000..93ebcfd --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/fix-build-pl-for-this-version.patch @@ -0,0 +1,11 @@ +Fix scripts/xspp in Build.PL +--- libextutils-xspp-perl-0.07.orig/Build.PL ++++ libextutils-xspp-perl-0.07/Build.PL +@@ -18,6 +18,6 @@ + 'Test::Differences' => '0', + }, + add_to_cleanup => [ qw(t/files/foo.h) ], +- script_files => 'scripts', ++ script_files => [ 'scripts/xspp' ], + ); + $build->create_build_script; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/series b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/series new file mode 100644 index 0000000..3fed489 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/patches/series @@ -0,0 +1 @@ +fix-build-pl-for-this-version.patch -pab diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/rules b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/rules new file mode 100755 index 0000000..fd2f92f --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/rules @@ -0,0 +1,7 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_auto_test: + AUTHOR_TESTS=1 dh_auto_test diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/watch b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/watch new file mode 100644 index 0000000..1863ab0 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://search.cpan.org/dist/ExtUtils-XSpp/ .*/ExtUtils-XSpp-v?(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip)$ diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.cc b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.cc new file mode 100644 index 0000000..9f2a9e3 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.cc @@ -0,0 +1,30 @@ +#include "IntAndString.h" + +#include + +using namespace std; + +IntAndString::IntAndString() : + fString(string("")), + fInt(0) +{ +} + +IntAndString::IntAndString(const char* str, int arg) : + fString(std::string(str)), + fInt(arg) +{ +} + +const char* IntAndString::GetString() { + return fString.c_str(); +} + +void IntAndString::SetValue(int arg) { + fInt = arg; +} + +void IntAndString::SetValue(const char* arg) { + fString = string(arg); +} + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.h b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.h new file mode 100644 index 0000000..c6031e5 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/IntAndString.h @@ -0,0 +1,25 @@ +#ifndef _IntAndString_h_ +#define _IntAndString_h_ + +#include + +class IntAndString { +public: + IntAndString(); + IntAndString(const char* str, int arg); + ~IntAndString() {} + + int GetInt() { return fInt; } + const char* GetString(); + + void SetValue(int arg); + void SetValue(const char* arg); + + +private: + std::string fString; + int fInt; +}; + +#endif + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Makefile.PL b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Makefile.PL new file mode 100644 index 0000000..9316ea9 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Makefile.PL @@ -0,0 +1,26 @@ +use 5.006001; +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. + +my $CC = 'g++'; + +WriteMakefile( + NAME => 'Object::WithIntAndString', + VERSION_FROM => 'lib/Object/WithIntAndString.pm', # finds $VERSION + PREREQ_PM => { + 'ExtUtils::XSpp' => '0.01', + }, # e.g., Module::Name => 1.1 + ($] >= 5.005 ? ## Add these new keywords supported since 5.005 + (ABSTRACT_FROM => 'lib/Object/WithIntAndString.pm', # retrieve abstract from module + AUTHOR => 'Steffen Mueller ') : ()), + LIBS => [''], # e.g., '-lm' + DEFINE => '', # e.g., '-DHAVE_SOMETHING' + INC => '-I.', # e.g., '-I. -I/usr/include/other' + OBJECT => '$(O_FILES)', # link all the C files too + XSOPT => '-C++ -hiertype', + TYPEMAPS => ['perlobject.map'], + CC => $CC, + LD => '$(CC)', +); + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Object-WithIntAndString.xsp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Object-WithIntAndString.xsp new file mode 100644 index 0000000..2e29e1d --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/Object-WithIntAndString.xsp @@ -0,0 +1,33 @@ + +// This will be used to generate the XS MODULE line +%module{Object::WithIntAndString}; + +// Associate a perl class with a C++ class +%name{Object::WithIntAndString} class IntAndString +{ + // can be called in Perl as Object::WithIntAndString->new( ... ); + IntAndString(); + + // Object::WithIntAndString->newIntAndString( ... ); + // %name can be used to assign methods a different name in Perl + %name{newIntAndString} IntAndString( const char* str, int arg ); + + // standard DESTROY method + ~IntAndString(); + + // Will be available from Perl given that the types appear in the typemap + int GetInt(); + const char* GetString (); + + // SetValue is polymorphic. We want separate methods in Perl + %name{SetString} void SetValue( const char* arg = NULL ); + %name{SetInt} void SetValue( int arg ); + + + // Supply a C or C block for the XS + int Sum( int a, int b ) + %code{% RETVAL = a + b; %} + %cleanup{% /* do something */ %}; +}; + + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/WithIntAndString.xs b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/WithIntAndString.xs new file mode 100644 index 0000000..21fe0f7 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/WithIntAndString.xs @@ -0,0 +1,23 @@ +#ifdef __cplusplus +extern "C" { +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "ppport.h" +} +#endif + +/* include your class headers here */ +#include "IntAndString.h" + +/* We need one MODULE... line to start the actual XS section of the file. + * The XS++ preprocessor will output its own MODULE and PACKAGE lines */ +MODULE = Object::WithIntAndString PACKAGE = Object::WithIntAndString + +## The include line executes xspp with the supplied typemap and the +## xsp interface code for our class. +## It will include the output of the xsubplusplus run. + +INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- --typemap=typemap.xsp Object-WithIntAndString.xsp + + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/lib/Object/WithIntAndString.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/lib/Object/WithIntAndString.pm new file mode 100644 index 0000000..2a4979d --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/lib/Object/WithIntAndString.pm @@ -0,0 +1,43 @@ +package Object::WithIntAndString; +use 5.006001; +use strict; +use warnings; + +our $VERSION = '0.01'; + +require XSLoader; +XSLoader::load('Object::WithIntAndString', $VERSION); + +1; +__END__ + +=head1 NAME + +Object::WithIntAndString - A tiny C++ class example that holds a string and an int + +=head1 SYNOPSIS + + use Object::WithIntAndString; + my $o = Object::WithIntAndString->new; + $o->SetString("foo"); + print $o->GetString(), "\n"; + $o->SetInt(5); + print $o->GetInt(), "\n"; + +=head1 DESCRIPTION + +Simply an XS++ example! + +=head1 AUTHOR + +Steffen Mueller, Esmueller@cpan.orgE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2009 by Steffen Mueller + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.6.1 or, +at your option, any later version of Perl 5 you may have available. + +=cut diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/perlobject.map b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/perlobject.map new file mode 100644 index 0000000..4795c47 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/perlobject.map @@ -0,0 +1,106 @@ +# "perlobject.map" Dean Roehrich, version 19960302 +# +# TYPEMAPs +# +# HV * -> unblessed Perl HV object. +# AV * -> unblessed Perl AV object. +# +# INPUT/OUTPUT maps +# +# O_* -> opaque blessed objects +# T_* -> opaque blessed or unblessed objects +# +# O_OBJECT -> link an opaque C or C++ object to a blessed Perl object. +# T_OBJECT -> link an opaque C or C++ object to an unblessed Perl object. +# O_HvRV -> a blessed Perl HV object. +# T_HvRV -> an unblessed Perl HV object. +# O_AvRV -> a blessed Perl AV object. +# T_AvRV -> an unblessed Perl AV object. + +TYPEMAP + +HV * T_HvRV +AV * T_AvRV + + +###################################################################### +OUTPUT + +# The Perl object is blessed into 'CLASS', which should be a +# char* having the name of the package for the blessing. +O_OBJECT + sv_setref_pv( $arg, CLASS, (void*)$var ); + +T_OBJECT + sv_setref_pv( $arg, Nullch, (void*)$var ); + +# Cannot use sv_setref_pv() because that will destroy +# the HV-ness of the object. Remember that newRV() will increment +# the refcount. +O_HvRV + $arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) ); + +T_HvRV + $arg = newRV((SV*)$var); + +# Cannot use sv_setref_pv() because that will destroy +# the AV-ness of the object. Remember that newRV() will increment +# the refcount. +O_AvRV + $arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) ); + +T_AvRV + $arg = newRV((SV*)$var); + + +###################################################################### +INPUT + +O_OBJECT + if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) + $var = ($type)SvIV((SV*)SvRV( $arg )); + else{ + warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" ); + XSRETURN_UNDEF; + } + +T_OBJECT + if( SvROK($arg) ) + $var = ($type)SvIV((SV*)SvRV( $arg )); + else{ + warn( \"${Package}::$func_name() -- $var is not an SV reference\" ); + XSRETURN_UNDEF; + } + +O_HvRV + if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) ) + $var = (HV*)SvRV( $arg ); + else { + warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" ); + XSRETURN_UNDEF; + } + +T_HvRV + if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) ) + $var = (HV*)SvRV( $arg ); + else { + warn( \"${Package}::$func_name() -- $var is not an HV reference\" ); + XSRETURN_UNDEF; + } + +O_AvRV + if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) + $var = (AV*)SvRV( $arg ); + else { + warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" ); + XSRETURN_UNDEF; + } + +T_AvRV + if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) + $var = (AV*)SvRV( $arg ); + else { + warn( \"${Package}::$func_name() -- $var is not an AV reference\" ); + XSRETURN_UNDEF; + } + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/ppport.h b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/ppport.h new file mode 100644 index 0000000..3e3d52f --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/ppport.h @@ -0,0 +1,6984 @@ +#if 0 +<<'SKIP'; +#endif +/* +---------------------------------------------------------------------- + + ppport.h -- Perl/Pollution/Portability Version 3.17 + + Automatically created by Devel::PPPort running under perl 5.010000. + + Do NOT edit this file directly! -- Edit PPPort_pm.PL and the + includes in parts/inc/ instead. + + Use 'perldoc ppport.h' to view the documentation below. + +---------------------------------------------------------------------- + +SKIP + +=pod + +=head1 NAME + +ppport.h - Perl/Pollution/Portability version 3.17 + +=head1 SYNOPSIS + + perl ppport.h [options] [source files] + + Searches current directory for files if no [source files] are given + + --help show short help + + --version show version + + --patch=file write one patch file with changes + --copy=suffix write changed copies with suffix + --diff=program use diff program and options + + --compat-version=version provide compatibility with Perl version + --cplusplus accept C++ comments + + --quiet don't output anything except fatal errors + --nodiag don't show diagnostics + --nohints don't show hints + --nochanges don't suggest changes + --nofilter don't filter input files + + --strip strip all script and doc functionality from + ppport.h + + --list-provided list provided API + --list-unsupported list unsupported API + --api-info=name show Perl API portability information + +=head1 COMPATIBILITY + +This version of F is designed to support operation with Perl +installations back to 5.003, and has been tested up to 5.10.0. + +=head1 OPTIONS + +=head2 --help + +Display a brief usage summary. + +=head2 --version + +Display the version of F. + +=head2 --patch=I + +If this option is given, a single patch file will be created if +any changes are suggested. This requires a working diff program +to be installed on your system. + +=head2 --copy=I + +If this option is given, a copy of each file will be saved with +the given suffix that contains the suggested changes. This does +not require any external programs. Note that this does not +automagially add a dot between the original filename and the +suffix. If you want the dot, you have to include it in the option +argument. + +If neither C<--patch> or C<--copy> are given, the default is to +simply print the diffs for each file. This requires either +C or a C program to be installed. + +=head2 --diff=I + +Manually set the diff program and options to use. The default +is to use C, when installed, and output unified +context diffs. + +=head2 --compat-version=I + +Tell F to check for compatibility with the given +Perl version. The default is to check for compatibility with Perl +version 5.003. You can use this option to reduce the output +of F if you intend to be backward compatible only +down to a certain Perl version. + +=head2 --cplusplus + +Usually, F will detect C++ style comments and +replace them with C style comments for portability reasons. +Using this option instructs F to leave C++ +comments untouched. + +=head2 --quiet + +Be quiet. Don't print anything except fatal errors. + +=head2 --nodiag + +Don't output any diagnostic messages. Only portability +alerts will be printed. + +=head2 --nohints + +Don't output any hints. Hints often contain useful portability +notes. Warnings will still be displayed. + +=head2 --nochanges + +Don't suggest any changes. Only give diagnostic output and hints +unless these are also deactivated. + +=head2 --nofilter + +Don't filter the list of input files. By default, files not looking +like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. + +=head2 --strip + +Strip all script and documentation functionality from F. +This reduces the size of F dramatically and may be useful +if you want to include F in smaller modules without +increasing their distribution size too much. + +The stripped F will have a C<--unstrip> option that allows +you to undo the stripping, but only if an appropriate C +module is installed. + +=head2 --list-provided + +Lists the API elements for which compatibility is provided by +F. Also lists if it must be explicitly requested, +if it has dependencies, and if there are hints or warnings for it. + +=head2 --list-unsupported + +Lists the API elements that are known not to be supported by +F and below which version of Perl they probably +won't be available or work. + +=head2 --api-info=I + +Show portability information for API elements matching I. +If I is surrounded by slashes, it is interpreted as a regular +expression. + +=head1 DESCRIPTION + +In order for a Perl extension (XS) module to be as portable as possible +across differing versions of Perl itself, certain steps need to be taken. + +=over 4 + +=item * + +Including this header is the first major one. This alone will give you +access to a large part of the Perl API that hasn't been available in +earlier Perl releases. Use + + perl ppport.h --list-provided + +to see which API elements are provided by ppport.h. + +=item * + +You should avoid using deprecated parts of the API. For example, using +global Perl variables without the C prefix is deprecated. Also, +some API functions used to have a C prefix. Using this form is +also deprecated. You can safely use the supported API, as F +will provide wrappers for older Perl versions. + +=item * + +If you use one of a few functions or variables that were not present in +earlier versions of Perl, and that can't be provided using a macro, you +have to explicitly request support for these functions by adding one or +more C<#define>s in your source code before the inclusion of F. + +These functions or variables will be marked C in the list shown +by C<--list-provided>. + +Depending on whether you module has a single or multiple files that +use such functions or variables, you want either C or global +variants. + +For a C function or variable (used only in a single source +file), use: + + #define NEED_function + #define NEED_variable + +For a global function or variable (used in multiple source files), +use: + + #define NEED_function_GLOBAL + #define NEED_variable_GLOBAL + +Note that you mustn't have more than one global request for the +same function or variable in your project. + + Function / Variable Static Request Global Request + ----------------------------------------------------------------------------------------- + PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL + PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL + eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL + grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL + grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL + grok_number() NEED_grok_number NEED_grok_number_GLOBAL + grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL + grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL + load_module() NEED_load_module NEED_load_module_GLOBAL + my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL + my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL + my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL + my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL + newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL + newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL + newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL + newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL + pv_display() NEED_pv_display NEED_pv_display_GLOBAL + pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL + pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL + sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL + sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL + sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL + sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL + sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL + sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL + sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL + vload_module() NEED_vload_module NEED_vload_module_GLOBAL + vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL + warner() NEED_warner NEED_warner_GLOBAL + +To avoid namespace conflicts, you can change the namespace of the +explicitly exported functions / variables using the C +macro. Just C<#define> the macro before including C: + + #define DPPP_NAMESPACE MyOwnNamespace_ + #include "ppport.h" + +The default namespace is C. + +=back + +The good thing is that most of the above can be checked by running +F on your source code. See the next section for +details. + +=head1 EXAMPLES + +To verify whether F is needed for your module, whether you +should make any changes to your code, and whether any special defines +should be used, F can be run as a Perl script to check your +source code. Simply say: + + perl ppport.h + +The result will usually be a list of patches suggesting changes +that should at least be acceptable, if not necessarily the most +efficient solution, or a fix for all possible problems. + +If you know that your XS module uses features only available in +newer Perl releases, if you're aware that it uses C++ comments, +and if you want all suggestions as a single patch file, you could +use something like this: + + perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff + +If you only want your code to be scanned without any suggestions +for changes, use: + + perl ppport.h --nochanges + +You can specify a different C program or options, using +the C<--diff> option: + + perl ppport.h --diff='diff -C 10' + +This would output context diffs with 10 lines of context. + +If you want to create patched copies of your files instead, use: + + perl ppport.h --copy=.new + +To display portability information for the C function, +use: + + perl ppport.h --api-info=newSVpvn + +Since the argument to C<--api-info> can be a regular expression, +you can use + + perl ppport.h --api-info=/_nomg$/ + +to display portability information for all C<_nomg> functions or + + perl ppport.h --api-info=/./ + +to display information for all known API elements. + +=head1 BUGS + +If this version of F is causing failure during +the compilation of this module, please check if newer versions +of either this module or C are available on CPAN +before sending a bug report. + +If F was generated using the latest version of +C and is causing failure of this module, please +file a bug report using the CPAN Request Tracker at L. + +Please include the following information: + +=over 4 + +=item 1. + +The complete output from running "perl -V" + +=item 2. + +This file. + +=item 3. + +The name and version of the module you were trying to build. + +=item 4. + +A full log of the build that failed. + +=item 5. + +Any other information that you think could be relevant. + +=back + +For the latest version of this code, please get the C +module from CPAN. + +=head1 COPYRIGHT + +Version 3.x, Copyright (c) 2004-2009, Marcus Holland-Moritz. + +Version 2.x, Copyright (C) 2001, Paul Marquess. + +Version 1.x, Copyright (C) 1999, Kenneth Albanowski. + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=head1 SEE ALSO + +See L. + +=cut + +use strict; + +# Disable broken TRIE-optimization +BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } + +my $VERSION = 3.17; + +my %opt = ( + quiet => 0, + diag => 1, + hints => 1, + changes => 1, + cplusplus => 0, + filter => 1, + strip => 0, + version => 0, +); + +my($ppport) = $0 =~ /([\w.]+)$/; +my $LF = '(?:\r\n|[\r\n])'; # line feed +my $HS = "[ \t]"; # horizontal whitespace + +# Never use C comments in this file! +my $ccs = '/'.'*'; +my $cce = '*'.'/'; +my $rccs = quotemeta $ccs; +my $rcce = quotemeta $cce; + +eval { + require Getopt::Long; + Getopt::Long::GetOptions(\%opt, qw( + help quiet diag! filter! hints! changes! cplusplus strip version + patch=s copy=s diff=s compat-version=s + list-provided list-unsupported api-info=s + )) or usage(); +}; + +if ($@ and grep /^-/, @ARGV) { + usage() if "@ARGV" =~ /^--?h(?:elp)?$/; + die "Getopt::Long not found. Please don't use any options.\n"; +} + +if ($opt{version}) { + print "This is $0 $VERSION.\n"; + exit 0; +} + +usage() if $opt{help}; +strip() if $opt{strip}; + +if (exists $opt{'compat-version'}) { + my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; + if ($@) { + die "Invalid version number format: '$opt{'compat-version'}'\n"; + } + die "Only Perl 5 is supported\n" if $r != 5; + die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; + $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; +} +else { + $opt{'compat-version'} = 5; +} + +my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ + ? ( $1 => { + ($2 ? ( base => $2 ) : ()), + ($3 ? ( todo => $3 ) : ()), + (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), + (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), + (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), + } ) + : die "invalid spec: $_" } qw( +AvFILLp|5.004050||p +AvFILL||| +CLASS|||n +CPERLscope|5.005000||p +CX_CURPAD_SAVE||| +CX_CURPAD_SV||| +CopFILEAV|5.006000||p +CopFILEGV_set|5.006000||p +CopFILEGV|5.006000||p +CopFILESV|5.006000||p +CopFILE_set|5.006000||p +CopFILE|5.006000||p +CopSTASHPV_set|5.006000||p +CopSTASHPV|5.006000||p +CopSTASH_eq|5.006000||p +CopSTASH_set|5.006000||p +CopSTASH|5.006000||p +CopyD|5.009002||p +Copy||| +CvPADLIST||| +CvSTASH||| +CvWEAKOUTSIDE||| +DEFSV_set|5.011000||p +DEFSV|5.004050||p +END_EXTERN_C|5.005000||p +ENTER||| +ERRSV|5.004050||p +EXTEND||| +EXTERN_C|5.005000||p +F0convert|||n +FREETMPS||| +GIMME_V||5.004000|n +GIMME|||n +GROK_NUMERIC_RADIX|5.007002||p +G_ARRAY||| +G_DISCARD||| +G_EVAL||| +G_METHOD|5.006001||p +G_NOARGS||| +G_SCALAR||| +G_VOID||5.004000| +GetVars||| +GvSV||| +Gv_AMupdate||| +HEf_SVKEY||5.004000| +HeHASH||5.004000| +HeKEY||5.004000| +HeKLEN||5.004000| +HePV||5.004000| +HeSVKEY_force||5.004000| +HeSVKEY_set||5.004000| +HeSVKEY||5.004000| +HeUTF8||5.011000| +HeVAL||5.004000| +HvNAME||| +INT2PTR|5.006000||p +IN_LOCALE_COMPILETIME|5.007002||p +IN_LOCALE_RUNTIME|5.007002||p +IN_LOCALE|5.007002||p +IN_PERL_COMPILETIME|5.008001||p +IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p +IS_NUMBER_INFINITY|5.007002||p +IS_NUMBER_IN_UV|5.007002||p +IS_NUMBER_NAN|5.007003||p +IS_NUMBER_NEG|5.007002||p +IS_NUMBER_NOT_INT|5.007002||p +IVSIZE|5.006000||p +IVTYPE|5.006000||p +IVdf|5.006000||p +LEAVE||| +LVRET||| +MARK||| +MULTICALL||5.011000| +MY_CXT_CLONE|5.009002||p +MY_CXT_INIT|5.007003||p +MY_CXT|5.007003||p +MoveD|5.009002||p +Move||| +NOOP|5.005000||p +NUM2PTR|5.006000||p +NVTYPE|5.006000||p +NVef|5.006001||p +NVff|5.006001||p +NVgf|5.006001||p +Newxc|5.009003||p +Newxz|5.009003||p +Newx|5.009003||p +Nullav||| +Nullch||| +Nullcv||| +Nullhv||| +Nullsv||| +ORIGMARK||| +PAD_BASE_SV||| +PAD_CLONE_VARS||| +PAD_COMPNAME_FLAGS||| +PAD_COMPNAME_GEN_set||| +PAD_COMPNAME_GEN||| +PAD_COMPNAME_OURSTASH||| +PAD_COMPNAME_PV||| +PAD_COMPNAME_TYPE||| +PAD_DUP||| +PAD_RESTORE_LOCAL||| +PAD_SAVE_LOCAL||| +PAD_SAVE_SETNULLPAD||| +PAD_SETSV||| +PAD_SET_CUR_NOSAVE||| +PAD_SET_CUR||| +PAD_SVl||| +PAD_SV||| +PERLIO_FUNCS_CAST|5.009003||p +PERLIO_FUNCS_DECL|5.009003||p +PERL_ABS|5.008001||p +PERL_BCDVERSION|5.011000||p +PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p +PERL_HASH|5.004000||p +PERL_INT_MAX|5.004000||p +PERL_INT_MIN|5.004000||p +PERL_LONG_MAX|5.004000||p +PERL_LONG_MIN|5.004000||p +PERL_MAGIC_arylen|5.007002||p +PERL_MAGIC_backref|5.007002||p +PERL_MAGIC_bm|5.007002||p +PERL_MAGIC_collxfrm|5.007002||p +PERL_MAGIC_dbfile|5.007002||p +PERL_MAGIC_dbline|5.007002||p +PERL_MAGIC_defelem|5.007002||p +PERL_MAGIC_envelem|5.007002||p +PERL_MAGIC_env|5.007002||p +PERL_MAGIC_ext|5.007002||p +PERL_MAGIC_fm|5.007002||p +PERL_MAGIC_glob|5.011000||p +PERL_MAGIC_isaelem|5.007002||p +PERL_MAGIC_isa|5.007002||p +PERL_MAGIC_mutex|5.011000||p +PERL_MAGIC_nkeys|5.007002||p +PERL_MAGIC_overload_elem|5.007002||p +PERL_MAGIC_overload_table|5.007002||p +PERL_MAGIC_overload|5.007002||p +PERL_MAGIC_pos|5.007002||p +PERL_MAGIC_qr|5.007002||p +PERL_MAGIC_regdata|5.007002||p +PERL_MAGIC_regdatum|5.007002||p +PERL_MAGIC_regex_global|5.007002||p +PERL_MAGIC_shared_scalar|5.007003||p +PERL_MAGIC_shared|5.007003||p +PERL_MAGIC_sigelem|5.007002||p +PERL_MAGIC_sig|5.007002||p +PERL_MAGIC_substr|5.007002||p +PERL_MAGIC_sv|5.007002||p +PERL_MAGIC_taint|5.007002||p +PERL_MAGIC_tiedelem|5.007002||p +PERL_MAGIC_tiedscalar|5.007002||p +PERL_MAGIC_tied|5.007002||p +PERL_MAGIC_utf8|5.008001||p +PERL_MAGIC_uvar_elem|5.007003||p +PERL_MAGIC_uvar|5.007002||p +PERL_MAGIC_vec|5.007002||p +PERL_MAGIC_vstring|5.008001||p +PERL_PV_ESCAPE_ALL|5.009004||p +PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p +PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p +PERL_PV_ESCAPE_NOCLEAR|5.009004||p +PERL_PV_ESCAPE_QUOTE|5.009004||p +PERL_PV_ESCAPE_RE|5.009005||p +PERL_PV_ESCAPE_UNI_DETECT|5.009004||p +PERL_PV_ESCAPE_UNI|5.009004||p +PERL_PV_PRETTY_DUMP|5.009004||p +PERL_PV_PRETTY_ELLIPSES|5.010000||p +PERL_PV_PRETTY_LTGT|5.009004||p +PERL_PV_PRETTY_NOCLEAR|5.010000||p +PERL_PV_PRETTY_QUOTE|5.009004||p +PERL_PV_PRETTY_REGPROP|5.009004||p +PERL_QUAD_MAX|5.004000||p +PERL_QUAD_MIN|5.004000||p +PERL_REVISION|5.006000||p +PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p +PERL_SCAN_DISALLOW_PREFIX|5.007003||p +PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p +PERL_SCAN_SILENT_ILLDIGIT|5.008001||p +PERL_SHORT_MAX|5.004000||p +PERL_SHORT_MIN|5.004000||p +PERL_SIGNALS_UNSAFE_FLAG|5.008001||p +PERL_SUBVERSION|5.006000||p +PERL_UCHAR_MAX|5.004000||p +PERL_UCHAR_MIN|5.004000||p +PERL_UINT_MAX|5.004000||p +PERL_UINT_MIN|5.004000||p +PERL_ULONG_MAX|5.004000||p +PERL_ULONG_MIN|5.004000||p +PERL_UNUSED_ARG|5.009003||p +PERL_UNUSED_CONTEXT|5.009004||p +PERL_UNUSED_DECL|5.007002||p +PERL_UNUSED_VAR|5.007002||p +PERL_UQUAD_MAX|5.004000||p +PERL_UQUAD_MIN|5.004000||p +PERL_USE_GCC_BRACE_GROUPS|5.009004||p +PERL_USHORT_MAX|5.004000||p +PERL_USHORT_MIN|5.004000||p +PERL_VERSION|5.006000||p +PL_DBsignal|5.005000||p +PL_DBsingle|||pn +PL_DBsub|||pn +PL_DBtrace|||pn +PL_Sv|5.005000||p +PL_bufend|5.011000||p +PL_bufptr|5.011000||p +PL_compiling|5.004050||p +PL_copline|5.011000||p +PL_curcop|5.004050||p +PL_curstash|5.004050||p +PL_debstash|5.004050||p +PL_defgv|5.004050||p +PL_diehook|5.004050||p +PL_dirty|5.004050||p +PL_dowarn|||pn +PL_errgv|5.004050||p +PL_expect|5.011000||p +PL_hexdigit|5.005000||p +PL_hints|5.005000||p +PL_last_in_gv|||n +PL_laststatval|5.005000||p +PL_lex_state|5.011000||p +PL_lex_stuff|5.011000||p +PL_linestr|5.011000||p +PL_modglobal||5.005000|n +PL_na|5.004050||pn +PL_no_modify|5.006000||p +PL_ofsgv|||n +PL_parser|5.009005||p +PL_perl_destruct_level|5.004050||p +PL_perldb|5.004050||p +PL_ppaddr|5.006000||p +PL_rsfp_filters|5.004050||p +PL_rsfp|5.004050||p +PL_rs|||n +PL_signals|5.008001||p +PL_stack_base|5.004050||p +PL_stack_sp|5.004050||p +PL_statcache|5.005000||p +PL_stdingv|5.004050||p +PL_sv_arenaroot|5.004050||p +PL_sv_no|5.004050||pn +PL_sv_undef|5.004050||pn +PL_sv_yes|5.004050||pn +PL_tainted|5.004050||p +PL_tainting|5.004050||p +PL_tokenbuf|5.011000||p +POP_MULTICALL||5.011000| +POPi|||n +POPl|||n +POPn|||n +POPpbytex||5.007001|n +POPpx||5.005030|n +POPp|||n +POPs|||n +PTR2IV|5.006000||p +PTR2NV|5.006000||p +PTR2UV|5.006000||p +PTR2nat|5.009003||p +PTR2ul|5.007001||p +PTRV|5.006000||p +PUSHMARK||| +PUSH_MULTICALL||5.011000| +PUSHi||| +PUSHmortal|5.009002||p +PUSHn||| +PUSHp||| +PUSHs||| +PUSHu|5.004000||p +PUTBACK||| +PerlIO_clearerr||5.007003| +PerlIO_close||5.007003| +PerlIO_context_layers||5.009004| +PerlIO_eof||5.007003| +PerlIO_error||5.007003| +PerlIO_fileno||5.007003| +PerlIO_fill||5.007003| +PerlIO_flush||5.007003| +PerlIO_get_base||5.007003| +PerlIO_get_bufsiz||5.007003| +PerlIO_get_cnt||5.007003| +PerlIO_get_ptr||5.007003| +PerlIO_read||5.007003| +PerlIO_seek||5.007003| +PerlIO_set_cnt||5.007003| +PerlIO_set_ptrcnt||5.007003| +PerlIO_setlinebuf||5.007003| +PerlIO_stderr||5.007003| +PerlIO_stdin||5.007003| +PerlIO_stdout||5.007003| +PerlIO_tell||5.007003| +PerlIO_unread||5.007003| +PerlIO_write||5.007003| +Perl_signbit||5.009005|n +PoisonFree|5.009004||p +PoisonNew|5.009004||p +PoisonWith|5.009004||p +Poison|5.008000||p +RETVAL|||n +Renewc||| +Renew||| +SAVECLEARSV||| +SAVECOMPPAD||| +SAVEPADSV||| +SAVETMPS||| +SAVE_DEFSV|5.004050||p +SPAGAIN||| +SP||| +START_EXTERN_C|5.005000||p +START_MY_CXT|5.007003||p +STMT_END|||p +STMT_START|||p +STR_WITH_LEN|5.009003||p +ST||| +SV_CONST_RETURN|5.009003||p +SV_COW_DROP_PV|5.008001||p +SV_COW_SHARED_HASH_KEYS|5.009005||p +SV_GMAGIC|5.007002||p +SV_HAS_TRAILING_NUL|5.009004||p +SV_IMMEDIATE_UNREF|5.007001||p +SV_MUTABLE_RETURN|5.009003||p +SV_NOSTEAL|5.009002||p +SV_SMAGIC|5.009003||p +SV_UTF8_NO_ENCODING|5.008001||p +SVf_UTF8|5.006000||p +SVf|5.006000||p +SVt_IV||| +SVt_NV||| +SVt_PVAV||| +SVt_PVCV||| +SVt_PVHV||| +SVt_PVMG||| +SVt_PV||| +Safefree||| +Slab_Alloc||| +Slab_Free||| +Slab_to_rw||| +StructCopy||| +SvCUR_set||| +SvCUR||| +SvEND||| +SvGAMAGIC||5.006001| +SvGETMAGIC|5.004050||p +SvGROW||| +SvIOK_UV||5.006000| +SvIOK_notUV||5.006000| +SvIOK_off||| +SvIOK_only_UV||5.006000| +SvIOK_only||| +SvIOK_on||| +SvIOKp||| +SvIOK||| +SvIVX||| +SvIV_nomg|5.009001||p +SvIV_set||| +SvIVx||| +SvIV||| +SvIsCOW_shared_hash||5.008003| +SvIsCOW||5.008003| +SvLEN_set||| +SvLEN||| +SvLOCK||5.007003| +SvMAGIC_set|5.009003||p +SvNIOK_off||| +SvNIOKp||| +SvNIOK||| +SvNOK_off||| +SvNOK_only||| +SvNOK_on||| +SvNOKp||| +SvNOK||| +SvNVX||| +SvNV_set||| +SvNVx||| +SvNV||| +SvOK||| +SvOOK_offset||5.011000| +SvOOK||| +SvPOK_off||| +SvPOK_only_UTF8||5.006000| +SvPOK_only||| +SvPOK_on||| +SvPOKp||| +SvPOK||| +SvPVX_const|5.009003||p +SvPVX_mutable|5.009003||p +SvPVX||| +SvPV_const|5.009003||p +SvPV_flags_const_nolen|5.009003||p +SvPV_flags_const|5.009003||p +SvPV_flags_mutable|5.009003||p +SvPV_flags|5.007002||p +SvPV_force_flags_mutable|5.009003||p +SvPV_force_flags_nolen|5.009003||p +SvPV_force_flags|5.007002||p +SvPV_force_mutable|5.009003||p +SvPV_force_nolen|5.009003||p +SvPV_force_nomg_nolen|5.009003||p +SvPV_force_nomg|5.007002||p +SvPV_force|||p +SvPV_mutable|5.009003||p +SvPV_nolen_const|5.009003||p +SvPV_nolen|5.006000||p +SvPV_nomg_const_nolen|5.009003||p +SvPV_nomg_const|5.009003||p +SvPV_nomg|5.007002||p +SvPV_renew|5.009003||p +SvPV_set||| +SvPVbyte_force||5.009002| +SvPVbyte_nolen||5.006000| +SvPVbytex_force||5.006000| +SvPVbytex||5.006000| +SvPVbyte|5.006000||p +SvPVutf8_force||5.006000| +SvPVutf8_nolen||5.006000| +SvPVutf8x_force||5.006000| +SvPVutf8x||5.006000| +SvPVutf8||5.006000| +SvPVx||| +SvPV||| +SvREFCNT_dec||| +SvREFCNT_inc_NN|5.009004||p +SvREFCNT_inc_simple_NN|5.009004||p +SvREFCNT_inc_simple_void_NN|5.009004||p +SvREFCNT_inc_simple_void|5.009004||p +SvREFCNT_inc_simple|5.009004||p +SvREFCNT_inc_void_NN|5.009004||p +SvREFCNT_inc_void|5.009004||p +SvREFCNT_inc|||p +SvREFCNT||| +SvROK_off||| +SvROK_on||| +SvROK||| +SvRV_set|5.009003||p +SvRV||| +SvRXOK||5.009005| +SvRX||5.009005| +SvSETMAGIC||| +SvSHARED_HASH|5.009003||p +SvSHARE||5.007003| +SvSTASH_set|5.009003||p +SvSTASH||| +SvSetMagicSV_nosteal||5.004000| +SvSetMagicSV||5.004000| +SvSetSV_nosteal||5.004000| +SvSetSV||| +SvTAINTED_off||5.004000| +SvTAINTED_on||5.004000| +SvTAINTED||5.004000| +SvTAINT||| +SvTRUE||| +SvTYPE||| +SvUNLOCK||5.007003| +SvUOK|5.007001|5.006000|p +SvUPGRADE||| +SvUTF8_off||5.006000| +SvUTF8_on||5.006000| +SvUTF8||5.006000| +SvUVXx|5.004000||p +SvUVX|5.004000||p +SvUV_nomg|5.009001||p +SvUV_set|5.009003||p +SvUVx|5.004000||p +SvUV|5.004000||p +SvVOK||5.008001| +SvVSTRING_mg|5.009004||p +THIS|||n +UNDERBAR|5.009002||p +UTF8_MAXBYTES|5.009002||p +UVSIZE|5.006000||p +UVTYPE|5.006000||p +UVXf|5.007001||p +UVof|5.006000||p +UVuf|5.006000||p +UVxf|5.006000||p +WARN_ALL|5.006000||p +WARN_AMBIGUOUS|5.006000||p +WARN_ASSERTIONS|5.011000||p +WARN_BAREWORD|5.006000||p +WARN_CLOSED|5.006000||p +WARN_CLOSURE|5.006000||p +WARN_DEBUGGING|5.006000||p +WARN_DEPRECATED|5.006000||p +WARN_DIGIT|5.006000||p +WARN_EXEC|5.006000||p +WARN_EXITING|5.006000||p +WARN_GLOB|5.006000||p +WARN_INPLACE|5.006000||p +WARN_INTERNAL|5.006000||p +WARN_IO|5.006000||p +WARN_LAYER|5.008000||p +WARN_MALLOC|5.006000||p +WARN_MISC|5.006000||p +WARN_NEWLINE|5.006000||p +WARN_NUMERIC|5.006000||p +WARN_ONCE|5.006000||p +WARN_OVERFLOW|5.006000||p +WARN_PACK|5.006000||p +WARN_PARENTHESIS|5.006000||p +WARN_PIPE|5.006000||p +WARN_PORTABLE|5.006000||p +WARN_PRECEDENCE|5.006000||p +WARN_PRINTF|5.006000||p +WARN_PROTOTYPE|5.006000||p +WARN_QW|5.006000||p +WARN_RECURSION|5.006000||p +WARN_REDEFINE|5.006000||p +WARN_REGEXP|5.006000||p +WARN_RESERVED|5.006000||p +WARN_SEMICOLON|5.006000||p +WARN_SEVERE|5.006000||p +WARN_SIGNAL|5.006000||p +WARN_SUBSTR|5.006000||p +WARN_SYNTAX|5.006000||p +WARN_TAINT|5.006000||p +WARN_THREADS|5.008000||p +WARN_UNINITIALIZED|5.006000||p +WARN_UNOPENED|5.006000||p +WARN_UNPACK|5.006000||p +WARN_UNTIE|5.006000||p +WARN_UTF8|5.006000||p +WARN_VOID|5.006000||p +XCPT_CATCH|5.009002||p +XCPT_RETHROW|5.009002||p +XCPT_TRY_END|5.009002||p +XCPT_TRY_START|5.009002||p +XPUSHi||| +XPUSHmortal|5.009002||p +XPUSHn||| +XPUSHp||| +XPUSHs||| +XPUSHu|5.004000||p +XSRETURN_EMPTY||| +XSRETURN_IV||| +XSRETURN_NO||| +XSRETURN_NV||| +XSRETURN_PV||| +XSRETURN_UNDEF||| +XSRETURN_UV|5.008001||p +XSRETURN_YES||| +XSRETURN|||p +XST_mIV||| +XST_mNO||| +XST_mNV||| +XST_mPV||| +XST_mUNDEF||| +XST_mUV|5.008001||p +XST_mYES||| +XS_VERSION_BOOTCHECK||| +XS_VERSION||| +XSprePUSH|5.006000||p +XS||| +ZeroD|5.009002||p +Zero||| +_aMY_CXT|5.007003||p +_pMY_CXT|5.007003||p +aMY_CXT_|5.007003||p +aMY_CXT|5.007003||p +aTHXR_|5.011000||p +aTHXR|5.011000||p +aTHX_|5.006000||p +aTHX|5.006000||p +add_data|||n +addmad||| +allocmy||| +amagic_call||| +amagic_cmp_locale||| +amagic_cmp||| +amagic_i_ncmp||| +amagic_ncmp||| +any_dup||| +ao||| +append_elem||| +append_list||| +append_madprops||| +apply_attrs_my||| +apply_attrs_string||5.006001| +apply_attrs||| +apply||| +atfork_lock||5.007003|n +atfork_unlock||5.007003|n +av_arylen_p||5.009003| +av_clear||| +av_create_and_push||5.009005| +av_create_and_unshift_one||5.009005| +av_delete||5.006000| +av_exists||5.006000| +av_extend||| +av_fetch||| +av_fill||| +av_iter_p||5.011000| +av_len||| +av_make||| +av_pop||| +av_push||| +av_reify||| +av_shift||| +av_store||| +av_undef||| +av_unshift||| +ax|||n +bad_type||| +bind_match||| +block_end||| +block_gimme||5.004000| +block_start||| +boolSV|5.004000||p +boot_core_PerlIO||| +boot_core_UNIVERSAL||| +boot_core_mro||| +boot_core_xsutils||| +bytes_from_utf8||5.007001| +bytes_to_uni|||n +bytes_to_utf8||5.006001| +call_argv|5.006000||p +call_atexit||5.006000| +call_list||5.004000| +call_method|5.006000||p +call_pv|5.006000||p +call_sv|5.006000||p +calloc||5.007002|n +cando||| +cast_i32||5.006000| +cast_iv||5.006000| +cast_ulong||5.006000| +cast_uv||5.006000| +check_type_and_open||| +check_uni||| +checkcomma||| +checkposixcc||| +ckWARN|5.006000||p +ck_anoncode||| +ck_bitop||| +ck_concat||| +ck_defined||| +ck_delete||| +ck_die||| +ck_each||| +ck_eof||| +ck_eval||| +ck_exec||| +ck_exists||| +ck_exit||| +ck_ftst||| +ck_fun||| +ck_glob||| +ck_grep||| +ck_index||| +ck_join||| +ck_lfun||| +ck_listiob||| +ck_match||| +ck_method||| +ck_null||| +ck_open||| +ck_readline||| +ck_repeat||| +ck_require||| +ck_return||| +ck_rfun||| +ck_rvconst||| +ck_sassign||| +ck_select||| +ck_shift||| +ck_sort||| +ck_spair||| +ck_split||| +ck_subr||| +ck_substr||| +ck_svconst||| +ck_trunc||| +ck_unpack||| +ckwarn_d||5.009003| +ckwarn||5.009003| +cl_and|||n +cl_anything|||n +cl_init_zero|||n +cl_init|||n +cl_is_anything|||n +cl_or|||n +clear_placeholders||| +closest_cop||| +convert||| +cop_free||| +cr_textfilter||| +create_eval_scope||| +croak_nocontext|||vn +croak_xs_usage||5.011000| +croak|||v +csighandler||5.009003|n +curmad||| +custom_op_desc||5.007003| +custom_op_name||5.007003| +cv_ckproto_len||| +cv_clone||| +cv_const_sv||5.004000| +cv_dump||| +cv_undef||| +cx_dump||5.005000| +cx_dup||| +cxinc||| +dAXMARK|5.009003||p +dAX|5.007002||p +dITEMS|5.007002||p +dMARK||| +dMULTICALL||5.009003| +dMY_CXT_SV|5.007003||p +dMY_CXT|5.007003||p +dNOOP|5.006000||p +dORIGMARK||| +dSP||| +dTHR|5.004050||p +dTHXR|5.011000||p +dTHXa|5.006000||p +dTHXoa|5.006000||p +dTHX|5.006000||p +dUNDERBAR|5.009002||p +dVAR|5.009003||p +dXCPT|5.009002||p +dXSARGS||| +dXSI32||| +dXSTARG|5.006000||p +deb_curcv||| +deb_nocontext|||vn +deb_stack_all||| +deb_stack_n||| +debop||5.005000| +debprofdump||5.005000| +debprof||| +debstackptrs||5.007003| +debstack||5.007003| +debug_start_match||| +deb||5.007003|v +del_sv||| +delete_eval_scope||| +delimcpy||5.004000| +deprecate_old||| +deprecate||| +despatch_signals||5.007001| +destroy_matcher||| +die_nocontext|||vn +die_where||| +die|||v +dirp_dup||| +div128||| +djSP||| +do_aexec5||| +do_aexec||| +do_aspawn||| +do_binmode||5.004050| +do_chomp||| +do_chop||| +do_close||| +do_dump_pad||| +do_eof||| +do_exec3||| +do_execfree||| +do_exec||| +do_gv_dump||5.006000| +do_gvgv_dump||5.006000| +do_hv_dump||5.006000| +do_ipcctl||| +do_ipcget||| +do_join||| +do_kv||| +do_magic_dump||5.006000| +do_msgrcv||| +do_msgsnd||| +do_oddball||| +do_op_dump||5.006000| +do_op_xmldump||| +do_open9||5.006000| +do_openn||5.007001| +do_open||5.004000| +do_pmop_dump||5.006000| +do_pmop_xmldump||| +do_print||| +do_readline||| +do_seek||| +do_semop||| +do_shmio||| +do_smartmatch||| +do_spawn_nowait||| +do_spawn||| +do_sprintf||| +do_sv_dump||5.006000| +do_sysseek||| +do_tell||| +do_trans_complex_utf8||| +do_trans_complex||| +do_trans_count_utf8||| +do_trans_count||| +do_trans_simple_utf8||| +do_trans_simple||| +do_trans||| +do_vecget||| +do_vecset||| +do_vop||| +docatch||| +doeval||| +dofile||| +dofindlabel||| +doform||| +doing_taint||5.008001|n +dooneliner||| +doopen_pm||| +doparseform||| +dopoptoeval||| +dopoptogiven||| +dopoptolabel||| +dopoptoloop||| +dopoptosub_at||| +dopoptowhen||| +doref||5.009003| +dounwind||| +dowantarray||| +dump_all||5.006000| +dump_eval||5.006000| +dump_exec_pos||| +dump_fds||| +dump_form||5.006000| +dump_indent||5.006000|v +dump_mstats||| +dump_packsubs||5.006000| +dump_sub||5.006000| +dump_sv_child||| +dump_trie_interim_list||| +dump_trie_interim_table||| +dump_trie||| +dump_vindent||5.006000| +dumpuntil||| +dup_attrlist||| +emulate_cop_io||| +eval_pv|5.006000||p +eval_sv|5.006000||p +exec_failed||| +expect_number||| +fbm_compile||5.005000| +fbm_instr||5.005000| +feature_is_enabled||| +fetch_cop_label||5.011000| +filter_add||| +filter_del||| +filter_gets||| +filter_read||| +find_and_forget_pmops||| +find_array_subscript||| +find_beginning||| +find_byclass||| +find_hash_subscript||| +find_in_my_stash||| +find_runcv||5.008001| +find_rundefsvoffset||5.009002| +find_script||| +find_uninit_var||| +first_symbol|||n +fold_constants||| +forbid_setid||| +force_ident||| +force_list||| +force_next||| +force_version||| +force_word||| +forget_pmop||| +form_nocontext|||vn +form||5.004000|v +fp_dup||| +fprintf_nocontext|||vn +free_global_struct||| +free_tied_hv_pool||| +free_tmps||| +gen_constant_list||| +get_arena||| +get_aux_mg||| +get_av|5.006000||p +get_context||5.006000|n +get_cvn_flags||5.009005| +get_cv|5.006000||p +get_db_sub||| +get_debug_opts||| +get_hash_seed||| +get_hv|5.006000||p +get_isa_hash||| +get_mstats||| +get_no_modify||| +get_num||| +get_op_descs||5.005000| +get_op_names||5.005000| +get_opargs||| +get_ppaddr||5.006000| +get_re_arg||| +get_sv|5.006000||p +get_vtbl||5.005030| +getcwd_sv||5.007002| +getenv_len||| +glob_2number||| +glob_2pv||| +glob_assign_glob||| +glob_assign_ref||| +gp_dup||| +gp_free||| +gp_ref||| +grok_bin|5.007003||p +grok_hex|5.007003||p +grok_number|5.007002||p +grok_numeric_radix|5.007002||p +grok_oct|5.007003||p +group_end||| +gv_AVadd||| +gv_HVadd||| +gv_IOadd||| +gv_SVadd||| +gv_autoload4||5.004000| +gv_check||| +gv_const_sv||5.009003| +gv_dump||5.006000| +gv_efullname3||5.004000| +gv_efullname4||5.006001| +gv_efullname||| +gv_ename||| +gv_fetchfile_flags||5.009005| +gv_fetchfile||| +gv_fetchmeth_autoload||5.007003| +gv_fetchmethod_autoload||5.004000| +gv_fetchmethod_flags||5.011000| +gv_fetchmethod||| +gv_fetchmeth||| +gv_fetchpvn_flags||5.009002| +gv_fetchpv||| +gv_fetchsv||5.009002| +gv_fullname3||5.004000| +gv_fullname4||5.006001| +gv_fullname||| +gv_get_super_pkg||| +gv_handler||5.007001| +gv_init_sv||| +gv_init||| +gv_name_set||5.009004| +gv_stashpvn|5.004000||p +gv_stashpvs||5.009003| +gv_stashpv||| +gv_stashsv||| +he_dup||| +hek_dup||| +hfreeentries||| +hsplit||| +hv_assert||5.011000| +hv_auxinit|||n +hv_backreferences_p||| +hv_clear_placeholders||5.009001| +hv_clear||| +hv_common_key_len||5.010000| +hv_common||5.010000| +hv_copy_hints_hv||| +hv_delayfree_ent||5.004000| +hv_delete_common||| +hv_delete_ent||5.004000| +hv_delete||| +hv_eiter_p||5.009003| +hv_eiter_set||5.009003| +hv_exists_ent||5.004000| +hv_exists||| +hv_fetch_ent||5.004000| +hv_fetchs|5.009003||p +hv_fetch||| +hv_free_ent||5.004000| +hv_iterinit||| +hv_iterkeysv||5.004000| +hv_iterkey||| +hv_iternext_flags||5.008000| +hv_iternextsv||| +hv_iternext||| +hv_iterval||| +hv_kill_backrefs||| +hv_ksplit||5.004000| +hv_magic_check|||n +hv_magic||| +hv_name_set||5.009003| +hv_notallowed||| +hv_placeholders_get||5.009003| +hv_placeholders_p||5.009003| +hv_placeholders_set||5.009003| +hv_riter_p||5.009003| +hv_riter_set||5.009003| +hv_scalar||5.009001| +hv_store_ent||5.004000| +hv_store_flags||5.008000| +hv_stores|5.009004||p +hv_store||| +hv_undef||| +ibcmp_locale||5.004000| +ibcmp_utf8||5.007003| +ibcmp||| +incline||| +incpush_if_exists||| +incpush_use_sep||| +incpush||| +ingroup||| +init_argv_symbols||| +init_debugger||| +init_global_struct||| +init_i18nl10n||5.006000| +init_i18nl14n||5.006000| +init_ids||| +init_interp||| +init_main_stash||| +init_perllib||| +init_postdump_symbols||| +init_predump_symbols||| +init_stacks||5.005000| +init_tm||5.007002| +instr||| +intro_my||| +intuit_method||| +intuit_more||| +invert||| +io_close||| +isALNUMC|5.006000||p +isALNUM||| +isALPHA||| +isASCII|5.006000||p +isBLANK|5.006001||p +isCNTRL|5.006000||p +isDIGIT||| +isGRAPH|5.006000||p +isLOWER||| +isPRINT|5.004000||p +isPSXSPC|5.006001||p +isPUNCT|5.006000||p +isSPACE||| +isUPPER||| +isXDIGIT|5.006000||p +is_an_int||| +is_gv_magical_sv||| +is_handle_constructor|||n +is_list_assignment||| +is_lvalue_sub||5.007001| +is_uni_alnum_lc||5.006000| +is_uni_alnumc_lc||5.006000| +is_uni_alnumc||5.006000| +is_uni_alnum||5.006000| +is_uni_alpha_lc||5.006000| +is_uni_alpha||5.006000| +is_uni_ascii_lc||5.006000| +is_uni_ascii||5.006000| +is_uni_cntrl_lc||5.006000| +is_uni_cntrl||5.006000| +is_uni_digit_lc||5.006000| +is_uni_digit||5.006000| +is_uni_graph_lc||5.006000| +is_uni_graph||5.006000| +is_uni_idfirst_lc||5.006000| +is_uni_idfirst||5.006000| +is_uni_lower_lc||5.006000| +is_uni_lower||5.006000| +is_uni_print_lc||5.006000| +is_uni_print||5.006000| +is_uni_punct_lc||5.006000| +is_uni_punct||5.006000| +is_uni_space_lc||5.006000| +is_uni_space||5.006000| +is_uni_upper_lc||5.006000| +is_uni_upper||5.006000| +is_uni_xdigit_lc||5.006000| +is_uni_xdigit||5.006000| +is_utf8_alnumc||5.006000| +is_utf8_alnum||5.006000| +is_utf8_alpha||5.006000| +is_utf8_ascii||5.006000| +is_utf8_char_slow|||n +is_utf8_char||5.006000| +is_utf8_cntrl||5.006000| +is_utf8_common||| +is_utf8_digit||5.006000| +is_utf8_graph||5.006000| +is_utf8_idcont||5.008000| +is_utf8_idfirst||5.006000| +is_utf8_lower||5.006000| +is_utf8_mark||5.006000| +is_utf8_print||5.006000| +is_utf8_punct||5.006000| +is_utf8_space||5.006000| +is_utf8_string_loclen||5.009003| +is_utf8_string_loc||5.008001| +is_utf8_string||5.006001| +is_utf8_upper||5.006000| +is_utf8_xdigit||5.006000| +isa_lookup||| +items|||n +ix|||n +jmaybe||| +join_exact||| +keyword||| +leave_scope||| +lex_end||| +lex_start||| +linklist||| +listkids||| +list||| +load_module_nocontext|||vn +load_module|5.006000||pv +localize||| +looks_like_bool||| +looks_like_number||| +lop||| +mPUSHi|5.009002||p +mPUSHn|5.009002||p +mPUSHp|5.009002||p +mPUSHs|5.011000||p +mPUSHu|5.009002||p +mXPUSHi|5.009002||p +mXPUSHn|5.009002||p +mXPUSHp|5.009002||p +mXPUSHs|5.011000||p +mXPUSHu|5.009002||p +mad_free||| +madlex||| +madparse||| +magic_clear_all_env||| +magic_clearenv||| +magic_clearhint||| +magic_clearisa||| +magic_clearpack||| +magic_clearsig||| +magic_dump||5.006000| +magic_existspack||| +magic_freearylen_p||| +magic_freeovrld||| +magic_getarylen||| +magic_getdefelem||| +magic_getnkeys||| +magic_getpack||| +magic_getpos||| +magic_getsig||| +magic_getsubstr||| +magic_gettaint||| +magic_getuvar||| +magic_getvec||| +magic_get||| +magic_killbackrefs||| +magic_len||| +magic_methcall||| +magic_methpack||| +magic_nextpack||| +magic_regdata_cnt||| +magic_regdatum_get||| +magic_regdatum_set||| +magic_scalarpack||| +magic_set_all_env||| +magic_setamagic||| +magic_setarylen||| +magic_setcollxfrm||| +magic_setdbline||| +magic_setdefelem||| +magic_setenv||| +magic_sethint||| +magic_setisa||| +magic_setmglob||| +magic_setnkeys||| +magic_setpack||| +magic_setpos||| +magic_setregexp||| +magic_setsig||| +magic_setsubstr||| +magic_settaint||| +magic_setutf8||| +magic_setuvar||| +magic_setvec||| +magic_set||| +magic_sizepack||| +magic_wipepack||| +make_matcher||| +make_trie_failtable||| +make_trie||| +malloc_good_size|||n +malloced_size|||n +malloc||5.007002|n +markstack_grow||| +matcher_matches_sv||| +measure_struct||| +memEQ|5.004000||p +memNE|5.004000||p +mem_collxfrm||| +mem_log_common|||n +mess_alloc||| +mess_nocontext|||vn +mess||5.006000|v +method_common||| +mfree||5.007002|n +mg_clear||| +mg_copy||| +mg_dup||| +mg_find||| +mg_free||| +mg_get||| +mg_length||5.005000| +mg_localize||| +mg_magical||| +mg_set||| +mg_size||5.005000| +mini_mktime||5.007002| +missingterm||| +mode_from_discipline||| +modkids||| +mod||| +more_bodies||| +more_sv||| +moreswitches||| +mro_get_from_name||5.011000| +mro_get_linear_isa_dfs||| +mro_get_linear_isa||5.009005| +mro_get_private_data||5.011000| +mro_isa_changed_in||| +mro_meta_dup||| +mro_meta_init||| +mro_method_changed_in||5.009005| +mro_register||5.011000| +mro_set_mro||5.011000| +mro_set_private_data||5.011000| +mul128||| +mulexp10|||n +my_atof2||5.007002| +my_atof||5.006000| +my_attrs||| +my_bcopy|||n +my_betoh16|||n +my_betoh32|||n +my_betoh64|||n +my_betohi|||n +my_betohl|||n +my_betohs|||n +my_bzero|||n +my_chsize||| +my_clearenv||| +my_cxt_index||| +my_cxt_init||| +my_dirfd||5.009005| +my_exit_jump||| +my_exit||| +my_failure_exit||5.004000| +my_fflush_all||5.006000| +my_fork||5.007003|n +my_htobe16|||n +my_htobe32|||n +my_htobe64|||n +my_htobei|||n +my_htobel|||n +my_htobes|||n +my_htole16|||n +my_htole32|||n +my_htole64|||n +my_htolei|||n +my_htolel|||n +my_htoles|||n +my_htonl||| +my_kid||| +my_letoh16|||n +my_letoh32|||n +my_letoh64|||n +my_letohi|||n +my_letohl|||n +my_letohs|||n +my_lstat||| +my_memcmp||5.004000|n +my_memset|||n +my_ntohl||| +my_pclose||5.004000| +my_popen_list||5.007001| +my_popen||5.004000| +my_setenv||| +my_snprintf|5.009004||pvn +my_socketpair||5.007003|n +my_sprintf|5.009003||pvn +my_stat||| +my_strftime||5.007002| +my_strlcat|5.009004||pn +my_strlcpy|5.009004||pn +my_swabn|||n +my_swap||| +my_unexec||| +my_vsnprintf||5.009004|n +need_utf8|||n +newANONATTRSUB||5.006000| +newANONHASH||| +newANONLIST||| +newANONSUB||| +newASSIGNOP||| +newATTRSUB||5.006000| +newAVREF||| +newAV||| +newBINOP||| +newCONDOP||| +newCONSTSUB|5.004050||p +newCVREF||| +newDEFSVOP||| +newFORM||| +newFOROP||| +newGIVENOP||5.009003| +newGIVWHENOP||| +newGP||| +newGVOP||| +newGVREF||| +newGVgen||| +newHVREF||| +newHVhv||5.005000| +newHV||| +newIO||| +newLISTOP||| +newLOGOP||| +newLOOPEX||| +newLOOPOP||| +newMADPROP||| +newMADsv||| +newMYSUB||| +newNULLLIST||| +newOP||| +newPADOP||| +newPMOP||| +newPROG||| +newPVOP||| +newRANGE||| +newRV_inc|5.004000||p +newRV_noinc|5.004000||p +newRV||| +newSLICEOP||| +newSTATEOP||| +newSUB||| +newSVOP||| +newSVREF||| +newSV_type||5.009005| +newSVhek||5.009003| +newSViv||| +newSVnv||| +newSVpvf_nocontext|||vn +newSVpvf||5.004000|v +newSVpvn_flags|5.011000||p +newSVpvn_share|5.007001||p +newSVpvn_utf8|5.011000||p +newSVpvn|5.004050||p +newSVpvs_flags|5.011000||p +newSVpvs_share||5.009003| +newSVpvs|5.009003||p +newSVpv||| +newSVrv||| +newSVsv||| +newSVuv|5.006000||p +newSV||| +newTOKEN||| +newUNOP||| +newWHENOP||5.009003| +newWHILEOP||5.009003| +newXS_flags||5.009004| +newXSproto||5.006000| +newXS||5.006000| +new_collate||5.006000| +new_constant||| +new_ctype||5.006000| +new_he||| +new_logop||| +new_numeric||5.006000| +new_stackinfo||5.005000| +new_version||5.009000| +new_warnings_bitfield||| +next_symbol||| +nextargv||| +nextchar||| +ninstr||| +no_bareword_allowed||| +no_fh_allowed||| +no_op||| +not_a_number||| +nothreadhook||5.008000| +nuke_stacks||| +num_overflow|||n +offer_nice_chunk||| +oopsAV||| +oopsHV||| +op_clear||| +op_const_sv||| +op_dump||5.006000| +op_free||| +op_getmad_weak||| +op_getmad||| +op_null||5.007002| +op_refcnt_dec||| +op_refcnt_inc||| +op_refcnt_lock||5.009002| +op_refcnt_unlock||5.009002| +op_xmldump||| +open_script||| +pMY_CXT_|5.007003||p +pMY_CXT|5.007003||p +pTHX_|5.006000||p +pTHX|5.006000||p +packWARN|5.007003||p +pack_cat||5.007003| +pack_rec||| +package||| +packlist||5.008001| +pad_add_anon||| +pad_add_name||| +pad_alloc||| +pad_block_start||| +pad_check_dup||| +pad_compname_type||| +pad_findlex||| +pad_findmy||| +pad_fixup_inner_anons||| +pad_free||| +pad_leavemy||| +pad_new||| +pad_peg|||n +pad_push||| +pad_reset||| +pad_setsv||| +pad_sv||5.011000| +pad_swipe||| +pad_tidy||| +pad_undef||| +parse_body||| +parse_unicode_opts||| +parser_dup||| +parser_free||| +path_is_absolute|||n +peep||| +pending_Slabs_to_ro||| +perl_alloc_using|||n +perl_alloc|||n +perl_clone_using|||n +perl_clone|||n +perl_construct|||n +perl_destruct||5.007003|n +perl_free|||n +perl_parse||5.006000|n +perl_run|||n +pidgone||| +pm_description||| +pmflag||| +pmop_dump||5.006000| +pmop_xmldump||| +pmruntime||| +pmtrans||| +pop_scope||| +pregcomp||5.009005| +pregexec||| +pregfree2||5.011000| +pregfree||| +prepend_elem||| +prepend_madprops||| +printbuf||| +printf_nocontext|||vn +process_special_blocks||| +ptr_table_clear||5.009005| +ptr_table_fetch||5.009005| +ptr_table_find|||n +ptr_table_free||5.009005| +ptr_table_new||5.009005| +ptr_table_split||5.009005| +ptr_table_store||5.009005| +push_scope||| +put_byte||| +pv_display|5.006000||p +pv_escape|5.009004||p +pv_pretty|5.009004||p +pv_uni_display||5.007003| +qerror||| +qsortsvu||| +re_compile||5.009005| +re_croak2||| +re_dup_guts||| +re_intuit_start||5.009005| +re_intuit_string||5.006000| +readpipe_override||| +realloc||5.007002|n +reentrant_free||| +reentrant_init||| +reentrant_retry|||vn +reentrant_size||| +ref_array_or_hash||| +refcounted_he_chain_2hv||| +refcounted_he_fetch||| +refcounted_he_free||| +refcounted_he_new_common||| +refcounted_he_new||| +refcounted_he_value||| +refkids||| +refto||| +ref||5.011000| +reg_check_named_buff_matched||| +reg_named_buff_all||5.009005| +reg_named_buff_exists||5.009005| +reg_named_buff_fetch||5.009005| +reg_named_buff_firstkey||5.009005| +reg_named_buff_iter||| +reg_named_buff_nextkey||5.009005| +reg_named_buff_scalar||5.009005| +reg_named_buff||| +reg_namedseq||| +reg_node||| +reg_numbered_buff_fetch||| +reg_numbered_buff_length||| +reg_numbered_buff_store||| +reg_qr_package||| +reg_recode||| +reg_scan_name||| +reg_skipcomment||| +reg_temp_copy||| +reganode||| +regatom||| +regbranch||| +regclass_swash||5.009004| +regclass||| +regcppop||| +regcppush||| +regcurly|||n +regdump_extflags||| +regdump||5.005000| +regdupe_internal||| +regexec_flags||5.005000| +regfree_internal||5.009005| +reghop3|||n +reghop4|||n +reghopmaybe3|||n +reginclass||| +reginitcolors||5.006000| +reginsert||| +regmatch||| +regnext||5.005000| +regpiece||| +regpposixcc||| +regprop||| +regrepeat||| +regtail_study||| +regtail||| +regtry||| +reguni||| +regwhite|||n +reg||| +repeatcpy||| +report_evil_fh||| +report_uninit||| +require_pv||5.006000| +require_tie_mod||| +restore_magic||| +rninstr||| +rsignal_restore||| +rsignal_save||| +rsignal_state||5.004000| +rsignal||5.004000| +run_body||| +run_user_filter||| +runops_debug||5.005000| +runops_standard||5.005000| +rvpv_dup||| +rxres_free||| +rxres_restore||| +rxres_save||| +safesyscalloc||5.006000|n +safesysfree||5.006000|n +safesysmalloc||5.006000|n +safesysrealloc||5.006000|n +same_dirent||| +save_I16||5.004000| +save_I32||| +save_I8||5.006000| +save_adelete||5.011000| +save_aelem||5.004050| +save_alloc||5.006000| +save_aptr||| +save_ary||| +save_bool||5.008001| +save_clearsv||| +save_delete||| +save_destructor_x||5.006000| +save_destructor||5.006000| +save_freeop||| +save_freepv||| +save_freesv||| +save_generic_pvref||5.006001| +save_generic_svref||5.005030| +save_gp||5.004000| +save_hash||| +save_hek_flags|||n +save_helem_flags||5.011000| +save_helem||5.004050| +save_hints||| +save_hptr||| +save_int||| +save_item||| +save_iv||5.005000| +save_lines||| +save_list||| +save_long||| +save_magic||| +save_mortalizesv||5.007001| +save_nogv||| +save_op||| +save_padsv_and_mortalize||5.011000| +save_pptr||| +save_pushi32ptr||| +save_pushptri32ptr||| +save_pushptrptr||| +save_pushptr||5.011000| +save_re_context||5.006000| +save_scalar_at||| +save_scalar||| +save_set_svflags||5.009000| +save_shared_pvref||5.007003| +save_sptr||| +save_svref||| +save_vptr||5.006000| +savepvn||| +savepvs||5.009003| +savepv||| +savesharedpvn||5.009005| +savesharedpv||5.007003| +savestack_grow_cnt||5.008001| +savestack_grow||| +savesvpv||5.009002| +sawparens||| +scalar_mod_type|||n +scalarboolean||| +scalarkids||| +scalarseq||| +scalarvoid||| +scalar||| +scan_bin||5.006000| +scan_commit||| +scan_const||| +scan_formline||| +scan_heredoc||| +scan_hex||| +scan_ident||| +scan_inputsymbol||| +scan_num||5.007001| +scan_oct||| +scan_pat||| +scan_str||| +scan_subst||| +scan_trans||| +scan_version||5.009001| +scan_vstring||5.009005| +scan_word||| +scope||| +screaminstr||5.005000| +search_const||| +seed||5.008001| +sequence_num||| +sequence_tail||| +sequence||| +set_context||5.006000|n +set_numeric_local||5.006000| +set_numeric_radix||5.006000| +set_numeric_standard||5.006000| +setdefout||| +share_hek_flags||| +share_hek||5.004000| +si_dup||| +sighandler|||n +simplify_sort||| +skipspace0||| +skipspace1||| +skipspace2||| +skipspace||| +softref2xv||| +sortcv_stacked||| +sortcv_xsub||| +sortcv||| +sortsv_flags||5.009003| +sortsv||5.007003| +space_join_names_mortal||| +ss_dup||| +stack_grow||| +start_force||| +start_glob||| +start_subparse||5.004000| +stashpv_hvname_match||5.011000| +stdize_locale||| +store_cop_label||| +strEQ||| +strGE||| +strGT||| +strLE||| +strLT||| +strNE||| +str_to_version||5.006000| +strip_return||| +strnEQ||| +strnNE||| +study_chunk||| +sub_crush_depth||| +sublex_done||| +sublex_push||| +sublex_start||| +sv_2bool||| +sv_2cv||| +sv_2io||| +sv_2iuv_common||| +sv_2iuv_non_preserve||| +sv_2iv_flags||5.009001| +sv_2iv||| +sv_2mortal||| +sv_2num||| +sv_2nv||| +sv_2pv_flags|5.007002||p +sv_2pv_nolen|5.006000||p +sv_2pvbyte_nolen|5.006000||p +sv_2pvbyte|5.006000||p +sv_2pvutf8_nolen||5.006000| +sv_2pvutf8||5.006000| +sv_2pv||| +sv_2uv_flags||5.009001| +sv_2uv|5.004000||p +sv_add_arena||| +sv_add_backref||| +sv_backoff||| +sv_bless||| +sv_cat_decode||5.008001| +sv_catpv_mg|5.004050||p +sv_catpvf_mg_nocontext|||pvn +sv_catpvf_mg|5.006000|5.004000|pv +sv_catpvf_nocontext|||vn +sv_catpvf||5.004000|v +sv_catpvn_flags||5.007002| +sv_catpvn_mg|5.004050||p +sv_catpvn_nomg|5.007002||p +sv_catpvn||| +sv_catpvs|5.009003||p +sv_catpv||| +sv_catsv_flags||5.007002| +sv_catsv_mg|5.004050||p +sv_catsv_nomg|5.007002||p +sv_catsv||| +sv_catxmlpvn||| +sv_catxmlsv||| +sv_chop||| +sv_clean_all||| +sv_clean_objs||| +sv_clear||| +sv_cmp_locale||5.004000| +sv_cmp||| +sv_collxfrm||| +sv_compile_2op||5.008001| +sv_copypv||5.007003| +sv_dec||| +sv_del_backref||| +sv_derived_from||5.004000| +sv_destroyable||5.010000| +sv_does||5.009004| +sv_dump||| +sv_dup||| +sv_eq||| +sv_exp_grow||| +sv_force_normal_flags||5.007001| +sv_force_normal||5.006000| +sv_free2||| +sv_free_arenas||| +sv_free||| +sv_gets||5.004000| +sv_grow||| +sv_i_ncmp||| +sv_inc||| +sv_insert_flags||5.011000| +sv_insert||| +sv_isa||| +sv_isobject||| +sv_iv||5.005000| +sv_kill_backrefs||| +sv_len_utf8||5.006000| +sv_len||| +sv_magic_portable|5.011000|5.004000|p +sv_magicext||5.007003| +sv_magic||| +sv_mortalcopy||| +sv_ncmp||| +sv_newmortal||| +sv_newref||| +sv_nolocking||5.007003| +sv_nosharing||5.007003| +sv_nounlocking||| +sv_nv||5.005000| +sv_peek||5.005000| +sv_pos_b2u_midway||| +sv_pos_b2u||5.006000| +sv_pos_u2b_cached||| +sv_pos_u2b_forwards|||n +sv_pos_u2b_midway|||n +sv_pos_u2b||5.006000| +sv_pvbyten_force||5.006000| +sv_pvbyten||5.006000| +sv_pvbyte||5.006000| +sv_pvn_force_flags|5.007002||p +sv_pvn_force||| +sv_pvn_nomg|5.007003|5.005000|p +sv_pvn||5.005000| +sv_pvutf8n_force||5.006000| +sv_pvutf8n||5.006000| +sv_pvutf8||5.006000| +sv_pv||5.006000| +sv_recode_to_utf8||5.007003| +sv_reftype||| +sv_release_COW||| +sv_replace||| +sv_report_used||| +sv_reset||| +sv_rvweaken||5.006000| +sv_setiv_mg|5.004050||p +sv_setiv||| +sv_setnv_mg|5.006000||p +sv_setnv||| +sv_setpv_mg|5.004050||p +sv_setpvf_mg_nocontext|||pvn +sv_setpvf_mg|5.006000|5.004000|pv +sv_setpvf_nocontext|||vn +sv_setpvf||5.004000|v +sv_setpviv_mg||5.008001| +sv_setpviv||5.008001| +sv_setpvn_mg|5.004050||p +sv_setpvn||| +sv_setpvs|5.009004||p +sv_setpv||| +sv_setref_iv||| +sv_setref_nv||| +sv_setref_pvn||| +sv_setref_pv||| +sv_setref_uv||5.007001| +sv_setsv_cow||| +sv_setsv_flags||5.007002| +sv_setsv_mg|5.004050||p +sv_setsv_nomg|5.007002||p +sv_setsv||| +sv_setuv_mg|5.004050||p +sv_setuv|5.004000||p +sv_tainted||5.004000| +sv_taint||5.004000| +sv_true||5.005000| +sv_unglob||| +sv_uni_display||5.007003| +sv_unmagic||| +sv_unref_flags||5.007001| +sv_unref||| +sv_untaint||5.004000| +sv_upgrade||| +sv_usepvn_flags||5.009004| +sv_usepvn_mg|5.004050||p +sv_usepvn||| +sv_utf8_decode||5.006000| +sv_utf8_downgrade||5.006000| +sv_utf8_encode||5.006000| +sv_utf8_upgrade_flags_grow||5.011000| +sv_utf8_upgrade_flags||5.007002| +sv_utf8_upgrade_nomg||5.007002| +sv_utf8_upgrade||5.007001| +sv_uv|5.005000||p +sv_vcatpvf_mg|5.006000|5.004000|p +sv_vcatpvfn||5.004000| +sv_vcatpvf|5.006000|5.004000|p +sv_vsetpvf_mg|5.006000|5.004000|p +sv_vsetpvfn||5.004000| +sv_vsetpvf|5.006000|5.004000|p +sv_xmlpeek||| +svtype||| +swallow_bom||| +swap_match_buff||| +swash_fetch||5.007002| +swash_get||| +swash_init||5.006000| +sys_init3||5.010000|n +sys_init||5.010000|n +sys_intern_clear||| +sys_intern_dup||| +sys_intern_init||| +sys_term||5.010000|n +taint_env||| +taint_proper||| +tmps_grow||5.006000| +toLOWER||| +toUPPER||| +to_byte_substr||| +to_uni_fold||5.007003| +to_uni_lower_lc||5.006000| +to_uni_lower||5.007003| +to_uni_title_lc||5.006000| +to_uni_title||5.007003| +to_uni_upper_lc||5.006000| +to_uni_upper||5.007003| +to_utf8_case||5.007003| +to_utf8_fold||5.007003| +to_utf8_lower||5.007003| +to_utf8_substr||| +to_utf8_title||5.007003| +to_utf8_upper||5.007003| +token_free||| +token_getmad||| +tokenize_use||| +tokeq||| +tokereport||| +too_few_arguments||| +too_many_arguments||| +uiv_2buf|||n +unlnk||| +unpack_rec||| +unpack_str||5.007003| +unpackstring||5.008001| +unshare_hek_or_pvn||| +unshare_hek||| +unsharepvn||5.004000| +unwind_handler_stack||| +update_debugger_info||| +upg_version||5.009005| +usage||| +utf16_to_utf8_reversed||5.006001| +utf16_to_utf8||5.006001| +utf8_distance||5.006000| +utf8_hop||5.006000| +utf8_length||5.007001| +utf8_mg_pos_cache_update||| +utf8_to_bytes||5.006001| +utf8_to_uvchr||5.007001| +utf8_to_uvuni||5.007001| +utf8n_to_uvchr||| +utf8n_to_uvuni||5.007001| +utilize||| +uvchr_to_utf8_flags||5.007003| +uvchr_to_utf8||| +uvuni_to_utf8_flags||5.007003| +uvuni_to_utf8||5.007001| +validate_suid||| +varname||| +vcmp||5.009000| +vcroak||5.006000| +vdeb||5.007003| +vdie_common||| +vdie_croak_common||| +vdie||| +vform||5.006000| +visit||| +vivify_defelem||| +vivify_ref||| +vload_module|5.006000||p +vmess||5.006000| +vnewSVpvf|5.006000|5.004000|p +vnormal||5.009002| +vnumify||5.009000| +vstringify||5.009000| +vverify||5.009003| +vwarner||5.006000| +vwarn||5.006000| +wait4pid||| +warn_nocontext|||vn +warner_nocontext|||vn +warner|5.006000|5.004000|pv +warn|||v +watch||| +whichsig||| +write_no_mem||| +write_to_stderr||| +xmldump_all||| +xmldump_attr||| +xmldump_eval||| +xmldump_form||| +xmldump_indent|||v +xmldump_packsubs||| +xmldump_sub||| +xmldump_vindent||| +yyerror||| +yylex||| +yyparse||| +yywarn||| +); + +if (exists $opt{'list-unsupported'}) { + my $f; + for $f (sort { lc $a cmp lc $b } keys %API) { + next unless $API{$f}{todo}; + print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; + } + exit 0; +} + +# Scan for possible replacement candidates + +my(%replace, %need, %hints, %warnings, %depends); +my $replace = 0; +my($hint, $define, $function); + +sub find_api +{ + my $code = shift; + $code =~ s{ + / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) + | "[^"\\]*(?:\\.[^"\\]*)*" + | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; + grep { exists $API{$_} } $code =~ /(\w+)/mg; +} + +while () { + if ($hint) { + my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; + if (m{^\s*\*\s(.*?)\s*$}) { + for (@{$hint->[1]}) { + $h->{$_} ||= ''; # suppress warning with older perls + $h->{$_} .= "$1\n"; + } + } + else { undef $hint } + } + + $hint = [$1, [split /,?\s+/, $2]] + if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; + + if ($define) { + if ($define->[1] =~ /\\$/) { + $define->[1] .= $_; + } + else { + if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { + my @n = find_api($define->[1]); + push @{$depends{$define->[0]}}, @n if @n + } + undef $define; + } + } + + $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; + + if ($function) { + if (/^}/) { + if (exists $API{$function->[0]}) { + my @n = find_api($function->[1]); + push @{$depends{$function->[0]}}, @n if @n + } + undef $function; + } + else { + $function->[1] .= $_; + } + } + + $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; + + $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; + $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; + $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; + $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; + + if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { + my @deps = map { s/\s+//g; $_ } split /,/, $3; + my $d; + for $d (map { s/\s+//g; $_ } split /,/, $1) { + push @{$depends{$d}}, @deps; + } + } + + $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; +} + +for (values %depends) { + my %s; + $_ = [sort grep !$s{$_}++, @$_]; +} + +if (exists $opt{'api-info'}) { + my $f; + my $count = 0; + my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; + for $f (sort { lc $a cmp lc $b } keys %API) { + next unless $f =~ /$match/; + print "\n=== $f ===\n\n"; + my $info = 0; + if ($API{$f}{base} || $API{$f}{todo}) { + my $base = format_version($API{$f}{base} || $API{$f}{todo}); + print "Supported at least starting from perl-$base.\n"; + $info++; + } + if ($API{$f}{provided}) { + my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; + print "Support by $ppport provided back to perl-$todo.\n"; + print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; + print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; + print "\n$hints{$f}" if exists $hints{$f}; + print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; + $info++; + } + print "No portability information available.\n" unless $info; + $count++; + } + $count or print "Found no API matching '$opt{'api-info'}'."; + print "\n"; + exit 0; +} + +if (exists $opt{'list-provided'}) { + my $f; + for $f (sort { lc $a cmp lc $b } keys %API) { + next unless $API{$f}{provided}; + my @flags; + push @flags, 'explicit' if exists $need{$f}; + push @flags, 'depend' if exists $depends{$f}; + push @flags, 'hint' if exists $hints{$f}; + push @flags, 'warning' if exists $warnings{$f}; + my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; + print "$f$flags\n"; + } + exit 0; +} + +my @files; +my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); +my $srcext = join '|', map { quotemeta $_ } @srcext; + +if (@ARGV) { + my %seen; + for (@ARGV) { + if (-e) { + if (-f) { + push @files, $_ unless $seen{$_}++; + } + else { warn "'$_' is not a file.\n" } + } + else { + my @new = grep { -f } glob $_ + or warn "'$_' does not exist.\n"; + push @files, grep { !$seen{$_}++ } @new; + } + } +} +else { + eval { + require File::Find; + File::Find::find(sub { + $File::Find::name =~ /($srcext)$/i + and push @files, $File::Find::name; + }, '.'); + }; + if ($@) { + @files = map { glob "*$_" } @srcext; + } +} + +if (!@ARGV || $opt{filter}) { + my(@in, @out); + my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; + for (@files) { + my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; + push @{ $out ? \@out : \@in }, $_; + } + if (@ARGV && @out) { + warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); + } + @files = @in; +} + +die "No input files given!\n" unless @files; + +my(%files, %global, %revreplace); +%revreplace = reverse %replace; +my $filename; +my $patch_opened = 0; + +for $filename (@files) { + unless (open IN, "<$filename") { + warn "Unable to read from $filename: $!\n"; + next; + } + + info("Scanning $filename ..."); + + my $c = do { local $/; }; + close IN; + + my %file = (orig => $c, changes => 0); + + # Temporarily remove C/XS comments and strings from the code + my @ccom; + + $c =~ s{ + ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* + | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) + | ( ^$HS*\#[^\r\n]* + | "[^"\\]*(?:\\.[^"\\]*)*" + | '[^'\\]*(?:\\.[^'\\]*)*' + | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) + }{ defined $2 and push @ccom, $2; + defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; + + $file{ccom} = \@ccom; + $file{code} = $c; + $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; + + my $func; + + for $func (keys %API) { + my $match = $func; + $match .= "|$revreplace{$func}" if exists $revreplace{$func}; + if ($c =~ /\b(?:Perl_)?($match)\b/) { + $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; + $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; + if (exists $API{$func}{provided}) { + $file{uses_provided}{$func}++; + if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { + $file{uses}{$func}++; + my @deps = rec_depend($func); + if (@deps) { + $file{uses_deps}{$func} = \@deps; + for (@deps) { + $file{uses}{$_} = 0 unless exists $file{uses}{$_}; + } + } + for ($func, @deps) { + $file{needs}{$_} = 'static' if exists $need{$_}; + } + } + } + if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { + if ($c =~ /\b$func\b/) { + $file{uses_todo}{$func}++; + } + } + } + } + + while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { + if (exists $need{$2}) { + $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; + } + else { warning("Possibly wrong #define $1 in $filename") } + } + + for (qw(uses needs uses_todo needed_global needed_static)) { + for $func (keys %{$file{$_}}) { + push @{$global{$_}{$func}}, $filename; + } + } + + $files{$filename} = \%file; +} + +# Globally resolve NEED_'s +my $need; +for $need (keys %{$global{needs}}) { + if (@{$global{needs}{$need}} > 1) { + my @targets = @{$global{needs}{$need}}; + my @t = grep $files{$_}{needed_global}{$need}, @targets; + @targets = @t if @t; + @t = grep /\.xs$/i, @targets; + @targets = @t if @t; + my $target = shift @targets; + $files{$target}{needs}{$need} = 'global'; + for (@{$global{needs}{$need}}) { + $files{$_}{needs}{$need} = 'extern' if $_ ne $target; + } + } +} + +for $filename (@files) { + exists $files{$filename} or next; + + info("=== Analyzing $filename ==="); + + my %file = %{$files{$filename}}; + my $func; + my $c = $file{code}; + my $warnings = 0; + + for $func (sort keys %{$file{uses_Perl}}) { + if ($API{$func}{varargs}) { + unless ($API{$func}{nothxarg}) { + my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} + { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); + if ($changes) { + warning("Doesn't pass interpreter argument aTHX to Perl_$func"); + $file{changes} += $changes; + } + } + } + else { + warning("Uses Perl_$func instead of $func"); + $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} + {$func$1(}g); + } + } + + for $func (sort keys %{$file{uses_replace}}) { + warning("Uses $func instead of $replace{$func}"); + $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); + } + + for $func (sort keys %{$file{uses_provided}}) { + if ($file{uses}{$func}) { + if (exists $file{uses_deps}{$func}) { + diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); + } + else { + diag("Uses $func"); + } + } + $warnings += hint($func); + } + + unless ($opt{quiet}) { + for $func (sort keys %{$file{uses_todo}}) { + print "*** WARNING: Uses $func, which may not be portable below perl ", + format_version($API{$func}{todo}), ", even with '$ppport'\n"; + $warnings++; + } + } + + for $func (sort keys %{$file{needed_static}}) { + my $message = ''; + if (not exists $file{uses}{$func}) { + $message = "No need to define NEED_$func if $func is never used"; + } + elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { + $message = "No need to define NEED_$func when already needed globally"; + } + if ($message) { + diag($message); + $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); + } + } + + for $func (sort keys %{$file{needed_global}}) { + my $message = ''; + if (not exists $global{uses}{$func}) { + $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; + } + elsif (exists $file{needs}{$func}) { + if ($file{needs}{$func} eq 'extern') { + $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; + } + elsif ($file{needs}{$func} eq 'static') { + $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; + } + } + if ($message) { + diag($message); + $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); + } + } + + $file{needs_inc_ppport} = keys %{$file{uses}}; + + if ($file{needs_inc_ppport}) { + my $pp = ''; + + for $func (sort keys %{$file{needs}}) { + my $type = $file{needs}{$func}; + next if $type eq 'extern'; + my $suffix = $type eq 'global' ? '_GLOBAL' : ''; + unless (exists $file{"needed_$type"}{$func}) { + if ($type eq 'global') { + diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); + } + else { + diag("File needs $func, adding static request"); + } + $pp .= "#define NEED_$func$suffix\n"; + } + } + + if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { + $pp = ''; + $file{changes}++; + } + + unless ($file{has_inc_ppport}) { + diag("Needs to include '$ppport'"); + $pp .= qq(#include "$ppport"\n) + } + + if ($pp) { + $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) + || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) + || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) + || ($c =~ s/^/$pp/); + } + } + else { + if ($file{has_inc_ppport}) { + diag("No need to include '$ppport'"); + $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); + } + } + + # put back in our C comments + my $ix; + my $cppc = 0; + my @ccom = @{$file{ccom}}; + for $ix (0 .. $#ccom) { + if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { + $cppc++; + $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; + } + else { + $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; + } + } + + if ($cppc) { + my $s = $cppc != 1 ? 's' : ''; + warning("Uses $cppc C++ style comment$s, which is not portable"); + } + + my $s = $warnings != 1 ? 's' : ''; + my $warn = $warnings ? " ($warnings warning$s)" : ''; + info("Analysis completed$warn"); + + if ($file{changes}) { + if (exists $opt{copy}) { + my $newfile = "$filename$opt{copy}"; + if (-e $newfile) { + error("'$newfile' already exists, refusing to write copy of '$filename'"); + } + else { + local *F; + if (open F, ">$newfile") { + info("Writing copy of '$filename' with changes to '$newfile'"); + print F $c; + close F; + } + else { + error("Cannot open '$newfile' for writing: $!"); + } + } + } + elsif (exists $opt{patch} || $opt{changes}) { + if (exists $opt{patch}) { + unless ($patch_opened) { + if (open PATCH, ">$opt{patch}") { + $patch_opened = 1; + } + else { + error("Cannot open '$opt{patch}' for writing: $!"); + delete $opt{patch}; + $opt{changes} = 1; + goto fallback; + } + } + mydiff(\*PATCH, $filename, $c); + } + else { +fallback: + info("Suggested changes:"); + mydiff(\*STDOUT, $filename, $c); + } + } + else { + my $s = $file{changes} == 1 ? '' : 's'; + info("$file{changes} potentially required change$s detected"); + } + } + else { + info("Looks good"); + } +} + +close PATCH if $patch_opened; + +exit 0; + + +sub try_use { eval "use @_;"; return $@ eq '' } + +sub mydiff +{ + local *F = shift; + my($file, $str) = @_; + my $diff; + + if (exists $opt{diff}) { + $diff = run_diff($opt{diff}, $file, $str); + } + + if (!defined $diff and try_use('Text::Diff')) { + $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); + $diff = <
$tmp") { + print F $str; + close F; + + if (open F, "$prog $file $tmp |") { + while () { + s/\Q$tmp\E/$file.patched/; + $diff .= $_; + } + close F; + unlink $tmp; + return $diff; + } + + unlink $tmp; + } + else { + error("Cannot open '$tmp' for writing: $!"); + } + + return undef; +} + +sub rec_depend +{ + my($func, $seen) = @_; + return () unless exists $depends{$func}; + $seen = {%{$seen||{}}}; + return () if $seen->{$func}++; + my %s; + grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; +} + +sub parse_version +{ + my $ver = shift; + + if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { + return ($1, $2, $3); + } + elsif ($ver !~ /^\d+\.[\d_]+$/) { + die "cannot parse version '$ver'\n"; + } + + $ver =~ s/_//g; + $ver =~ s/$/000000/; + + my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; + + $v = int $v; + $s = int $s; + + if ($r < 5 || ($r == 5 && $v < 6)) { + if ($s % 10) { + die "cannot parse version '$ver'\n"; + } + } + + return ($r, $v, $s); +} + +sub format_version +{ + my $ver = shift; + + $ver =~ s/$/000000/; + my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; + + $v = int $v; + $s = int $s; + + if ($r < 5 || ($r == 5 && $v < 6)) { + if ($s % 10) { + die "invalid version '$ver'\n"; + } + $s /= 10; + + $ver = sprintf "%d.%03d", $r, $v; + $s > 0 and $ver .= sprintf "_%02d", $s; + + return $ver; + } + + return sprintf "%d.%d.%d", $r, $v, $s; +} + +sub info +{ + $opt{quiet} and return; + print @_, "\n"; +} + +sub diag +{ + $opt{quiet} and return; + $opt{diag} and print @_, "\n"; +} + +sub warning +{ + $opt{quiet} and return; + print "*** ", @_, "\n"; +} + +sub error +{ + print "*** ERROR: ", @_, "\n"; +} + +my %given_hints; +my %given_warnings; +sub hint +{ + $opt{quiet} and return; + my $func = shift; + my $rv = 0; + if (exists $warnings{$func} && !$given_warnings{$func}++) { + my $warn = $warnings{$func}; + $warn =~ s!^!*** !mg; + print "*** WARNING: $func\n", $warn; + $rv++; + } + if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { + my $hint = $hints{$func}; + $hint =~ s/^/ /mg; + print " --- hint for $func ---\n", $hint; + } + $rv; +} + +sub usage +{ + my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; + my %M = ( 'I' => '*' ); + $usage =~ s/^\s*perl\s+\S+/$^X $0/; + $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; + + print < }; + my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; + $copy =~ s/^(?=\S+)/ /gms; + $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; + $self =~ s/^SKIP.*(?=^__DATA__)/SKIP +if (\@ARGV && \$ARGV[0] eq '--unstrip') { + eval { require Devel::PPPort }; + \$@ and die "Cannot require Devel::PPPort, please install.\\n"; + if (eval \$Devel::PPPort::VERSION < $VERSION) { + die "$0 was originally generated with Devel::PPPort $VERSION.\\n" + . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" + . "Please install a newer version, or --unstrip will not work.\\n"; + } + Devel::PPPort::WriteFile(\$0); + exit 0; +} +print <$0" or die "cannot strip $0: $!\n"; + print OUT "$pl$c\n"; + + exit 0; +} + +__DATA__ +*/ + +#ifndef _P_P_PORTABILITY_H_ +#define _P_P_PORTABILITY_H_ + +#ifndef DPPP_NAMESPACE +# define DPPP_NAMESPACE DPPP_ +#endif + +#define DPPP_CAT2(x,y) CAT2(x,y) +#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) + +#ifndef PERL_REVISION +# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) +# define PERL_PATCHLEVEL_H_IMPLICIT +# include +# endif +# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) +# include +# endif +# ifndef PERL_REVISION +# define PERL_REVISION (5) + /* Replace: 1 */ +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION + /* Replace PERL_PATCHLEVEL with PERL_VERSION */ + /* Replace: 0 */ +# endif +#endif + +#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) +#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) + +/* It is very unlikely that anyone will try to use this with Perl 6 + (or greater), but who knows. + */ +#if PERL_REVISION != 5 +# error ppport.h only works with Perl version 5 +#endif /* PERL_REVISION != 5 */ +#ifndef dTHR +# define dTHR dNOOP +#endif +#ifndef dTHX +# define dTHX dNOOP +#endif + +#ifndef dTHXa +# define dTHXa(x) dNOOP +#endif +#ifndef pTHX +# define pTHX void +#endif + +#ifndef pTHX_ +# define pTHX_ +#endif + +#ifndef aTHX +# define aTHX +#endif + +#ifndef aTHX_ +# define aTHX_ +#endif + +#if (PERL_BCDVERSION < 0x5006000) +# ifdef USE_THREADS +# define aTHXR thr +# define aTHXR_ thr, +# else +# define aTHXR +# define aTHXR_ +# endif +# define dTHXR dTHR +#else +# define aTHXR aTHX +# define aTHXR_ aTHX_ +# define dTHXR dTHX +#endif +#ifndef dTHXoa +# define dTHXoa(x) dTHXa(x) +#endif + +#ifdef I_LIMITS +# include +#endif + +#ifndef PERL_UCHAR_MIN +# define PERL_UCHAR_MIN ((unsigned char)0) +#endif + +#ifndef PERL_UCHAR_MAX +# ifdef UCHAR_MAX +# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) +# else +# ifdef MAXUCHAR +# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) +# else +# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) +# endif +# endif +#endif + +#ifndef PERL_USHORT_MIN +# define PERL_USHORT_MIN ((unsigned short)0) +#endif + +#ifndef PERL_USHORT_MAX +# ifdef USHORT_MAX +# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) +# else +# ifdef MAXUSHORT +# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) +# else +# ifdef USHRT_MAX +# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) +# else +# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) +# endif +# endif +# endif +#endif + +#ifndef PERL_SHORT_MAX +# ifdef SHORT_MAX +# define PERL_SHORT_MAX ((short)SHORT_MAX) +# else +# ifdef MAXSHORT /* Often used in */ +# define PERL_SHORT_MAX ((short)MAXSHORT) +# else +# ifdef SHRT_MAX +# define PERL_SHORT_MAX ((short)SHRT_MAX) +# else +# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) +# endif +# endif +# endif +#endif + +#ifndef PERL_SHORT_MIN +# ifdef SHORT_MIN +# define PERL_SHORT_MIN ((short)SHORT_MIN) +# else +# ifdef MINSHORT +# define PERL_SHORT_MIN ((short)MINSHORT) +# else +# ifdef SHRT_MIN +# define PERL_SHORT_MIN ((short)SHRT_MIN) +# else +# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) +# endif +# endif +# endif +#endif + +#ifndef PERL_UINT_MAX +# ifdef UINT_MAX +# define PERL_UINT_MAX ((unsigned int)UINT_MAX) +# else +# ifdef MAXUINT +# define PERL_UINT_MAX ((unsigned int)MAXUINT) +# else +# define PERL_UINT_MAX (~(unsigned int)0) +# endif +# endif +#endif + +#ifndef PERL_UINT_MIN +# define PERL_UINT_MIN ((unsigned int)0) +#endif + +#ifndef PERL_INT_MAX +# ifdef INT_MAX +# define PERL_INT_MAX ((int)INT_MAX) +# else +# ifdef MAXINT /* Often used in */ +# define PERL_INT_MAX ((int)MAXINT) +# else +# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) +# endif +# endif +#endif + +#ifndef PERL_INT_MIN +# ifdef INT_MIN +# define PERL_INT_MIN ((int)INT_MIN) +# else +# ifdef MININT +# define PERL_INT_MIN ((int)MININT) +# else +# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) +# endif +# endif +#endif + +#ifndef PERL_ULONG_MAX +# ifdef ULONG_MAX +# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) +# else +# ifdef MAXULONG +# define PERL_ULONG_MAX ((unsigned long)MAXULONG) +# else +# define PERL_ULONG_MAX (~(unsigned long)0) +# endif +# endif +#endif + +#ifndef PERL_ULONG_MIN +# define PERL_ULONG_MIN ((unsigned long)0L) +#endif + +#ifndef PERL_LONG_MAX +# ifdef LONG_MAX +# define PERL_LONG_MAX ((long)LONG_MAX) +# else +# ifdef MAXLONG +# define PERL_LONG_MAX ((long)MAXLONG) +# else +# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) +# endif +# endif +#endif + +#ifndef PERL_LONG_MIN +# ifdef LONG_MIN +# define PERL_LONG_MIN ((long)LONG_MIN) +# else +# ifdef MINLONG +# define PERL_LONG_MIN ((long)MINLONG) +# else +# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) +# endif +# endif +#endif + +#if defined(HAS_QUAD) && (defined(convex) || defined(uts)) +# ifndef PERL_UQUAD_MAX +# ifdef ULONGLONG_MAX +# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) +# else +# ifdef MAXULONGLONG +# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) +# else +# define PERL_UQUAD_MAX (~(unsigned long long)0) +# endif +# endif +# endif + +# ifndef PERL_UQUAD_MIN +# define PERL_UQUAD_MIN ((unsigned long long)0L) +# endif + +# ifndef PERL_QUAD_MAX +# ifdef LONGLONG_MAX +# define PERL_QUAD_MAX ((long long)LONGLONG_MAX) +# else +# ifdef MAXLONGLONG +# define PERL_QUAD_MAX ((long long)MAXLONGLONG) +# else +# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) +# endif +# endif +# endif + +# ifndef PERL_QUAD_MIN +# ifdef LONGLONG_MIN +# define PERL_QUAD_MIN ((long long)LONGLONG_MIN) +# else +# ifdef MINLONGLONG +# define PERL_QUAD_MIN ((long long)MINLONGLONG) +# else +# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) +# endif +# endif +# endif +#endif + +/* This is based on code from 5.003 perl.h */ +#ifdef HAS_QUAD +# ifdef cray +#ifndef IVTYPE +# define IVTYPE int +#endif + +#ifndef IV_MIN +# define IV_MIN PERL_INT_MIN +#endif + +#ifndef IV_MAX +# define IV_MAX PERL_INT_MAX +#endif + +#ifndef UV_MIN +# define UV_MIN PERL_UINT_MIN +#endif + +#ifndef UV_MAX +# define UV_MAX PERL_UINT_MAX +#endif + +# ifdef INTSIZE +#ifndef IVSIZE +# define IVSIZE INTSIZE +#endif + +# endif +# else +# if defined(convex) || defined(uts) +#ifndef IVTYPE +# define IVTYPE long long +#endif + +#ifndef IV_MIN +# define IV_MIN PERL_QUAD_MIN +#endif + +#ifndef IV_MAX +# define IV_MAX PERL_QUAD_MAX +#endif + +#ifndef UV_MIN +# define UV_MIN PERL_UQUAD_MIN +#endif + +#ifndef UV_MAX +# define UV_MAX PERL_UQUAD_MAX +#endif + +# ifdef LONGLONGSIZE +#ifndef IVSIZE +# define IVSIZE LONGLONGSIZE +#endif + +# endif +# else +#ifndef IVTYPE +# define IVTYPE long +#endif + +#ifndef IV_MIN +# define IV_MIN PERL_LONG_MIN +#endif + +#ifndef IV_MAX +# define IV_MAX PERL_LONG_MAX +#endif + +#ifndef UV_MIN +# define UV_MIN PERL_ULONG_MIN +#endif + +#ifndef UV_MAX +# define UV_MAX PERL_ULONG_MAX +#endif + +# ifdef LONGSIZE +#ifndef IVSIZE +# define IVSIZE LONGSIZE +#endif + +# endif +# endif +# endif +#ifndef IVSIZE +# define IVSIZE 8 +#endif + +#ifndef PERL_QUAD_MIN +# define PERL_QUAD_MIN IV_MIN +#endif + +#ifndef PERL_QUAD_MAX +# define PERL_QUAD_MAX IV_MAX +#endif + +#ifndef PERL_UQUAD_MIN +# define PERL_UQUAD_MIN UV_MIN +#endif + +#ifndef PERL_UQUAD_MAX +# define PERL_UQUAD_MAX UV_MAX +#endif + +#else +#ifndef IVTYPE +# define IVTYPE long +#endif + +#ifndef IV_MIN +# define IV_MIN PERL_LONG_MIN +#endif + +#ifndef IV_MAX +# define IV_MAX PERL_LONG_MAX +#endif + +#ifndef UV_MIN +# define UV_MIN PERL_ULONG_MIN +#endif + +#ifndef UV_MAX +# define UV_MAX PERL_ULONG_MAX +#endif + +#endif + +#ifndef IVSIZE +# ifdef LONGSIZE +# define IVSIZE LONGSIZE +# else +# define IVSIZE 4 /* A bold guess, but the best we can make. */ +# endif +#endif +#ifndef UVTYPE +# define UVTYPE unsigned IVTYPE +#endif + +#ifndef UVSIZE +# define UVSIZE IVSIZE +#endif +#ifndef sv_setuv +# define sv_setuv(sv, uv) \ + STMT_START { \ + UV TeMpUv = uv; \ + if (TeMpUv <= IV_MAX) \ + sv_setiv(sv, TeMpUv); \ + else \ + sv_setnv(sv, (double)TeMpUv); \ + } STMT_END +#endif +#ifndef newSVuv +# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) +#endif +#ifndef sv_2uv +# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) +#endif + +#ifndef SvUVX +# define SvUVX(sv) ((UV)SvIVX(sv)) +#endif + +#ifndef SvUVXx +# define SvUVXx(sv) SvUVX(sv) +#endif + +#ifndef SvUV +# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) +#endif + +#ifndef SvUVx +# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) +#endif + +/* Hint: sv_uv + * Always use the SvUVx() macro instead of sv_uv(). + */ +#ifndef sv_uv +# define sv_uv(sv) SvUVx(sv) +#endif + +#if !defined(SvUOK) && defined(SvIOK_UV) +# define SvUOK(sv) SvIOK_UV(sv) +#endif +#ifndef XST_mUV +# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) +#endif + +#ifndef XSRETURN_UV +# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END +#endif +#ifndef PUSHu +# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END +#endif + +#ifndef XPUSHu +# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END +#endif + +#ifdef HAS_MEMCMP +#ifndef memNE +# define memNE(s1,s2,l) (memcmp(s1,s2,l)) +#endif + +#ifndef memEQ +# define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) +#endif + +#else +#ifndef memNE +# define memNE(s1,s2,l) (bcmp(s1,s2,l)) +#endif + +#ifndef memEQ +# define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) +#endif + +#endif +#ifndef MoveD +# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) +#endif + +#ifndef CopyD +# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) +#endif + +#ifdef HAS_MEMSET +#ifndef ZeroD +# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) +#endif + +#else +#ifndef ZeroD +# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) +#endif + +#endif +#ifndef PoisonWith +# define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) +#endif + +#ifndef PoisonNew +# define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) +#endif + +#ifndef PoisonFree +# define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) +#endif + +#ifndef Poison +# define Poison(d,n,t) PoisonFree(d,n,t) +#endif +#ifndef Newx +# define Newx(v,n,t) New(0,v,n,t) +#endif + +#ifndef Newxc +# define Newxc(v,n,t,c) Newc(0,v,n,t,c) +#endif + +#ifndef Newxz +# define Newxz(v,n,t) Newz(0,v,n,t) +#endif + +#ifndef PERL_UNUSED_DECL +# ifdef HASATTRIBUTE +# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) +# define PERL_UNUSED_DECL +# else +# define PERL_UNUSED_DECL __attribute__((unused)) +# endif +# else +# define PERL_UNUSED_DECL +# endif +#endif + +#ifndef PERL_UNUSED_ARG +# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ +# include +# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) +# else +# define PERL_UNUSED_ARG(x) ((void)x) +# endif +#endif + +#ifndef PERL_UNUSED_VAR +# define PERL_UNUSED_VAR(x) ((void)x) +#endif + +#ifndef PERL_UNUSED_CONTEXT +# ifdef USE_ITHREADS +# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) +# else +# define PERL_UNUSED_CONTEXT +# endif +#endif +#ifndef NOOP +# define NOOP /*EMPTY*/(void)0 +#endif + +#ifndef dNOOP +# define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL +#endif + +#ifndef NVTYPE +# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) +# define NVTYPE long double +# else +# define NVTYPE double +# endif +typedef NVTYPE NV; +#endif + +#ifndef INT2PTR +# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) +# define PTRV UV +# define INT2PTR(any,d) (any)(d) +# else +# if PTRSIZE == LONGSIZE +# define PTRV unsigned long +# else +# define PTRV unsigned +# endif +# define INT2PTR(any,d) (any)(PTRV)(d) +# endif +#endif + +#ifndef PTR2ul +# if PTRSIZE == LONGSIZE +# define PTR2ul(p) (unsigned long)(p) +# else +# define PTR2ul(p) INT2PTR(unsigned long,p) +# endif +#endif +#ifndef PTR2nat +# define PTR2nat(p) (PTRV)(p) +#endif + +#ifndef NUM2PTR +# define NUM2PTR(any,d) (any)PTR2nat(d) +#endif + +#ifndef PTR2IV +# define PTR2IV(p) INT2PTR(IV,p) +#endif + +#ifndef PTR2UV +# define PTR2UV(p) INT2PTR(UV,p) +#endif + +#ifndef PTR2NV +# define PTR2NV(p) NUM2PTR(NV,p) +#endif + +#undef START_EXTERN_C +#undef END_EXTERN_C +#undef EXTERN_C +#ifdef __cplusplus +# define START_EXTERN_C extern "C" { +# define END_EXTERN_C } +# define EXTERN_C extern "C" +#else +# define START_EXTERN_C +# define END_EXTERN_C +# define EXTERN_C extern +#endif + +#if defined(PERL_GCC_PEDANTIC) +# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN +# define PERL_GCC_BRACE_GROUPS_FORBIDDEN +# endif +#endif + +#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) +# ifndef PERL_USE_GCC_BRACE_GROUPS +# define PERL_USE_GCC_BRACE_GROUPS +# endif +#endif + +#undef STMT_START +#undef STMT_END +#ifdef PERL_USE_GCC_BRACE_GROUPS +# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ +# define STMT_END ) +#else +# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) +# define STMT_START if (1) +# define STMT_END else (void)0 +# else +# define STMT_START do +# define STMT_END while (0) +# endif +#endif +#ifndef boolSV +# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) +#endif + +/* DEFSV appears first in 5.004_56 */ +#ifndef DEFSV +# define DEFSV GvSV(PL_defgv) +#endif + +#ifndef SAVE_DEFSV +# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) +#endif + +#ifndef DEFSV_set +# define DEFSV_set(sv) (DEFSV = (sv)) +#endif + +/* Older perls (<=5.003) lack AvFILLp */ +#ifndef AvFILLp +# define AvFILLp AvFILL +#endif +#ifndef ERRSV +# define ERRSV get_sv("@",FALSE) +#endif + +/* Hint: gv_stashpvn + * This function's backport doesn't support the length parameter, but + * rather ignores it. Portability can only be ensured if the length + * parameter is used for speed reasons, but the length can always be + * correctly computed from the string argument. + */ +#ifndef gv_stashpvn +# define gv_stashpvn(str,len,create) gv_stashpv(str,create) +#endif + +/* Replace: 1 */ +#ifndef get_cv +# define get_cv perl_get_cv +#endif + +#ifndef get_sv +# define get_sv perl_get_sv +#endif + +#ifndef get_av +# define get_av perl_get_av +#endif + +#ifndef get_hv +# define get_hv perl_get_hv +#endif + +/* Replace: 0 */ +#ifndef dUNDERBAR +# define dUNDERBAR dNOOP +#endif + +#ifndef UNDERBAR +# define UNDERBAR DEFSV +#endif +#ifndef dAX +# define dAX I32 ax = MARK - PL_stack_base + 1 +#endif + +#ifndef dITEMS +# define dITEMS I32 items = SP - MARK +#endif +#ifndef dXSTARG +# define dXSTARG SV * targ = sv_newmortal() +#endif +#ifndef dAXMARK +# define dAXMARK I32 ax = POPMARK; \ + register SV ** const mark = PL_stack_base + ax++ +#endif +#ifndef XSprePUSH +# define XSprePUSH (sp = PL_stack_base + ax - 1) +#endif + +#if (PERL_BCDVERSION < 0x5005000) +# undef XSRETURN +# define XSRETURN(off) \ + STMT_START { \ + PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ + return; \ + } STMT_END +#endif +#ifndef PERL_ABS +# define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) +#endif +#ifndef dVAR +# define dVAR dNOOP +#endif +#ifndef SVf +# define SVf "_" +#endif +#ifndef UTF8_MAXBYTES +# define UTF8_MAXBYTES UTF8_MAXLEN +#endif +#ifndef CPERLscope +# define CPERLscope(x) x +#endif +#ifndef PERL_HASH +# define PERL_HASH(hash,str,len) \ + STMT_START { \ + const char *s_PeRlHaSh = str; \ + I32 i_PeRlHaSh = len; \ + U32 hash_PeRlHaSh = 0; \ + while (i_PeRlHaSh--) \ + hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ + (hash) = hash_PeRlHaSh; \ + } STMT_END +#endif + +#ifndef PERLIO_FUNCS_DECL +# ifdef PERLIO_FUNCS_CONST +# define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs +# define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) +# else +# define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs +# define PERLIO_FUNCS_CAST(funcs) (funcs) +# endif +#endif + +/* provide these typedefs for older perls */ +#if (PERL_BCDVERSION < 0x5009003) + +# ifdef ARGSproto +typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); +# else +typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); +# endif + +typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); + +#endif +#ifndef isPSXSPC +# define isPSXSPC(c) (isSPACE(c) || (c) == '\v') +#endif + +#ifndef isBLANK +# define isBLANK(c) ((c) == ' ' || (c) == '\t') +#endif + +#ifdef EBCDIC +#ifndef isALNUMC +# define isALNUMC(c) isalnum(c) +#endif + +#ifndef isASCII +# define isASCII(c) isascii(c) +#endif + +#ifndef isCNTRL +# define isCNTRL(c) iscntrl(c) +#endif + +#ifndef isGRAPH +# define isGRAPH(c) isgraph(c) +#endif + +#ifndef isPRINT +# define isPRINT(c) isprint(c) +#endif + +#ifndef isPUNCT +# define isPUNCT(c) ispunct(c) +#endif + +#ifndef isXDIGIT +# define isXDIGIT(c) isxdigit(c) +#endif + +#else +# if (PERL_BCDVERSION < 0x5010000) +/* Hint: isPRINT + * The implementation in older perl versions includes all of the + * isSPACE() characters, which is wrong. The version provided by + * Devel::PPPort always overrides a present buggy version. + */ +# undef isPRINT +# endif +#ifndef isALNUMC +# define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) +#endif + +#ifndef isASCII +# define isASCII(c) ((c) <= 127) +#endif + +#ifndef isCNTRL +# define isCNTRL(c) ((c) < ' ' || (c) == 127) +#endif + +#ifndef isGRAPH +# define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) +#endif + +#ifndef isPRINT +# define isPRINT(c) (((c) >= 32 && (c) < 127)) +#endif + +#ifndef isPUNCT +# define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) +#endif + +#ifndef isXDIGIT +# define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) +#endif + +#endif + +#ifndef PERL_SIGNALS_UNSAFE_FLAG + +#define PERL_SIGNALS_UNSAFE_FLAG 0x0001 + +#if (PERL_BCDVERSION < 0x5008000) +# define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG +#else +# define D_PPP_PERL_SIGNALS_INIT 0 +#endif + +#if defined(NEED_PL_signals) +static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; +#elif defined(NEED_PL_signals_GLOBAL) +U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; +#else +extern U32 DPPP_(my_PL_signals); +#endif +#define PL_signals DPPP_(my_PL_signals) + +#endif + +/* Hint: PL_ppaddr + * Calling an op via PL_ppaddr requires passing a context argument + * for threaded builds. Since the context argument is different for + * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will + * automatically be defined as the correct argument. + */ + +#if (PERL_BCDVERSION <= 0x5005005) +/* Replace: 1 */ +# define PL_ppaddr ppaddr +# define PL_no_modify no_modify +/* Replace: 0 */ +#endif + +#if (PERL_BCDVERSION <= 0x5004005) +/* Replace: 1 */ +# define PL_DBsignal DBsignal +# define PL_DBsingle DBsingle +# define PL_DBsub DBsub +# define PL_DBtrace DBtrace +# define PL_Sv Sv +# define PL_bufend bufend +# define PL_bufptr bufptr +# define PL_compiling compiling +# define PL_copline copline +# define PL_curcop curcop +# define PL_curstash curstash +# define PL_debstash debstash +# define PL_defgv defgv +# define PL_diehook diehook +# define PL_dirty dirty +# define PL_dowarn dowarn +# define PL_errgv errgv +# define PL_expect expect +# define PL_hexdigit hexdigit +# define PL_hints hints +# define PL_laststatval laststatval +# define PL_lex_state lex_state +# define PL_lex_stuff lex_stuff +# define PL_linestr linestr +# define PL_na na +# define PL_perl_destruct_level perl_destruct_level +# define PL_perldb perldb +# define PL_rsfp_filters rsfp_filters +# define PL_rsfp rsfp +# define PL_stack_base stack_base +# define PL_stack_sp stack_sp +# define PL_statcache statcache +# define PL_stdingv stdingv +# define PL_sv_arenaroot sv_arenaroot +# define PL_sv_no sv_no +# define PL_sv_undef sv_undef +# define PL_sv_yes sv_yes +# define PL_tainted tainted +# define PL_tainting tainting +# define PL_tokenbuf tokenbuf +/* Replace: 0 */ +#endif + +/* Warning: PL_parser + * For perl versions earlier than 5.9.5, this is an always + * non-NULL dummy. Also, it cannot be dereferenced. Don't + * use it if you can avoid is and unless you absolutely know + * what you're doing. + * If you always check that PL_parser is non-NULL, you can + * define DPPP_PL_parser_NO_DUMMY to avoid the creation of + * a dummy parser structure. + */ + +#if (PERL_BCDVERSION >= 0x5009005) +# ifdef DPPP_PL_parser_NO_DUMMY +# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ + (croak("panic: PL_parser == NULL in %s:%d", \ + __FILE__, __LINE__), (yy_parser *) NULL))->var) +# else +# ifdef DPPP_PL_parser_NO_DUMMY_WARNING +# define D_PPP_parser_dummy_warning(var) +# else +# define D_PPP_parser_dummy_warning(var) \ + warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), +# endif +# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ + (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) +#if defined(NEED_PL_parser) +static yy_parser DPPP_(dummy_PL_parser); +#elif defined(NEED_PL_parser_GLOBAL) +yy_parser DPPP_(dummy_PL_parser); +#else +extern yy_parser DPPP_(dummy_PL_parser); +#endif + +# endif + +/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ +/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf + * Do not use this variable unless you know exactly what you're + * doint. It is internal to the perl parser and may change or even + * be removed in the future. As of perl 5.9.5, you have to check + * for (PL_parser != NULL) for this variable to have any effect. + * An always non-NULL PL_parser dummy is provided for earlier + * perl versions. + * If PL_parser is NULL when you try to access this variable, a + * dummy is being accessed instead and a warning is issued unless + * you define DPPP_PL_parser_NO_DUMMY_WARNING. + * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access + * this variable will croak with a panic message. + */ + +# define PL_expect D_PPP_my_PL_parser_var(expect) +# define PL_copline D_PPP_my_PL_parser_var(copline) +# define PL_rsfp D_PPP_my_PL_parser_var(rsfp) +# define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) +# define PL_linestr D_PPP_my_PL_parser_var(linestr) +# define PL_bufptr D_PPP_my_PL_parser_var(bufptr) +# define PL_bufend D_PPP_my_PL_parser_var(bufend) +# define PL_lex_state D_PPP_my_PL_parser_var(lex_state) +# define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) +# define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) + +#else + +/* ensure that PL_parser != NULL and cannot be dereferenced */ +# define PL_parser ((void *) 1) + +#endif +#ifndef mPUSHs +# define mPUSHs(s) PUSHs(sv_2mortal(s)) +#endif + +#ifndef PUSHmortal +# define PUSHmortal PUSHs(sv_newmortal()) +#endif + +#ifndef mPUSHp +# define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) +#endif + +#ifndef mPUSHn +# define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) +#endif + +#ifndef mPUSHi +# define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) +#endif + +#ifndef mPUSHu +# define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) +#endif +#ifndef mXPUSHs +# define mXPUSHs(s) XPUSHs(sv_2mortal(s)) +#endif + +#ifndef XPUSHmortal +# define XPUSHmortal XPUSHs(sv_newmortal()) +#endif + +#ifndef mXPUSHp +# define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END +#endif + +#ifndef mXPUSHn +# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END +#endif + +#ifndef mXPUSHi +# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END +#endif + +#ifndef mXPUSHu +# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END +#endif + +/* Replace: 1 */ +#ifndef call_sv +# define call_sv perl_call_sv +#endif + +#ifndef call_pv +# define call_pv perl_call_pv +#endif + +#ifndef call_argv +# define call_argv perl_call_argv +#endif + +#ifndef call_method +# define call_method perl_call_method +#endif +#ifndef eval_sv +# define eval_sv perl_eval_sv +#endif + +/* Replace: 0 */ +#ifndef PERL_LOADMOD_DENY +# define PERL_LOADMOD_DENY 0x1 +#endif + +#ifndef PERL_LOADMOD_NOIMPORT +# define PERL_LOADMOD_NOIMPORT 0x2 +#endif + +#ifndef PERL_LOADMOD_IMPORT_OPS +# define PERL_LOADMOD_IMPORT_OPS 0x4 +#endif + +#ifndef G_METHOD +# define G_METHOD 64 +# ifdef call_sv +# undef call_sv +# endif +# if (PERL_BCDVERSION < 0x5006000) +# define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ + (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) +# else +# define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ + (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) +# endif +#endif + +/* Replace perl_eval_pv with eval_pv */ + +#ifndef eval_pv +#if defined(NEED_eval_pv) +static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); +static +#else +extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); +#endif + +#ifdef eval_pv +# undef eval_pv +#endif +#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) +#define Perl_eval_pv DPPP_(my_eval_pv) + +#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) + +SV* +DPPP_(my_eval_pv)(char *p, I32 croak_on_error) +{ + dSP; + SV* sv = newSVpv(p, 0); + + PUSHMARK(sp); + eval_sv(sv, G_SCALAR); + SvREFCNT_dec(sv); + + SPAGAIN; + sv = POPs; + PUTBACK; + + if (croak_on_error && SvTRUE(GvSV(errgv))) + croak(SvPVx(GvSV(errgv), na)); + + return sv; +} + +#endif +#endif + +#ifndef vload_module +#if defined(NEED_vload_module) +static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); +static +#else +extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); +#endif + +#ifdef vload_module +# undef vload_module +#endif +#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) +#define Perl_vload_module DPPP_(my_vload_module) + +#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) + +void +DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) +{ + dTHR; + dVAR; + OP *veop, *imop; + + OP * const modname = newSVOP(OP_CONST, 0, name); + /* 5.005 has a somewhat hacky force_normal that doesn't croak on + SvREADONLY() if PL_compling is true. Current perls take care in + ck_require() to correctly turn off SvREADONLY before calling + force_normal_flags(). This seems a better fix than fudging PL_compling + */ + SvREADONLY_off(((SVOP*)modname)->op_sv); + modname->op_private |= OPpCONST_BARE; + if (ver) { + veop = newSVOP(OP_CONST, 0, ver); + } + else + veop = NULL; + if (flags & PERL_LOADMOD_NOIMPORT) { + imop = sawparens(newNULLLIST()); + } + else if (flags & PERL_LOADMOD_IMPORT_OPS) { + imop = va_arg(*args, OP*); + } + else { + SV *sv; + imop = NULL; + sv = va_arg(*args, SV*); + while (sv) { + imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); + sv = va_arg(*args, SV*); + } + } + { + const line_t ocopline = PL_copline; + COP * const ocurcop = PL_curcop; + const int oexpect = PL_expect; + +#if (PERL_BCDVERSION >= 0x5004000) + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), + veop, modname, imop); +#else + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), + modname, imop); +#endif + PL_expect = oexpect; + PL_copline = ocopline; + PL_curcop = ocurcop; + } +} + +#endif +#endif + +#ifndef load_module +#if defined(NEED_load_module) +static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); +static +#else +extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); +#endif + +#ifdef load_module +# undef load_module +#endif +#define load_module DPPP_(my_load_module) +#define Perl_load_module DPPP_(my_load_module) + +#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) + +void +DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) +{ + va_list args; + va_start(args, ver); + vload_module(flags, name, ver, &args); + va_end(args); +} + +#endif +#endif +#ifndef newRV_inc +# define newRV_inc(sv) newRV(sv) /* Replace */ +#endif + +#ifndef newRV_noinc +#if defined(NEED_newRV_noinc) +static SV * DPPP_(my_newRV_noinc)(SV *sv); +static +#else +extern SV * DPPP_(my_newRV_noinc)(SV *sv); +#endif + +#ifdef newRV_noinc +# undef newRV_noinc +#endif +#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) +#define Perl_newRV_noinc DPPP_(my_newRV_noinc) + +#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) +SV * +DPPP_(my_newRV_noinc)(SV *sv) +{ + SV *rv = (SV *)newRV(sv); + SvREFCNT_dec(sv); + return rv; +} +#endif +#endif + +/* Hint: newCONSTSUB + * Returns a CV* as of perl-5.7.1. This return value is not supported + * by Devel::PPPort. + */ + +/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ +#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) +#if defined(NEED_newCONSTSUB) +static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); +static +#else +extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); +#endif + +#ifdef newCONSTSUB +# undef newCONSTSUB +#endif +#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) +#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) + +#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) + +/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ +/* (There's no PL_parser in perl < 5.005, so this is completely safe) */ +#define D_PPP_PL_copline PL_copline + +void +DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) +{ + U32 oldhints = PL_hints; + HV *old_cop_stash = PL_curcop->cop_stash; + HV *old_curstash = PL_curstash; + line_t oldline = PL_curcop->cop_line; + PL_curcop->cop_line = D_PPP_PL_copline; + + PL_hints &= ~HINT_BLOCK_SCOPE; + if (stash) + PL_curstash = PL_curcop->cop_stash = stash; + + newSUB( + +#if (PERL_BCDVERSION < 0x5003022) + start_subparse(), +#elif (PERL_BCDVERSION == 0x5003022) + start_subparse(0), +#else /* 5.003_23 onwards */ + start_subparse(FALSE, 0), +#endif + + newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), + newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); + + PL_hints = oldhints; + PL_curcop->cop_stash = old_cop_stash; + PL_curstash = old_curstash; + PL_curcop->cop_line = oldline; +} +#endif +#endif + +/* + * Boilerplate macros for initializing and accessing interpreter-local + * data from C. All statics in extensions should be reworked to use + * this, if you want to make the extension thread-safe. See ext/re/re.xs + * for an example of the use of these macros. + * + * Code that uses these macros is responsible for the following: + * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" + * 2. Declare a typedef named my_cxt_t that is a structure that contains + * all the data that needs to be interpreter-local. + * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. + * 4. Use the MY_CXT_INIT macro such that it is called exactly once + * (typically put in the BOOT: section). + * 5. Use the members of the my_cxt_t structure everywhere as + * MY_CXT.member. + * 6. Use the dMY_CXT macro (a declaration) in all the functions that + * access MY_CXT. + */ + +#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ + defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) + +#ifndef START_MY_CXT + +/* This must appear in all extensions that define a my_cxt_t structure, + * right after the definition (i.e. at file scope). The non-threads + * case below uses it to declare the data as static. */ +#define START_MY_CXT + +#if (PERL_BCDVERSION < 0x5004068) +/* Fetches the SV that keeps the per-interpreter data. */ +#define dMY_CXT_SV \ + SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) +#else /* >= perl5.004_68 */ +#define dMY_CXT_SV \ + SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ + sizeof(MY_CXT_KEY)-1, TRUE) +#endif /* < perl5.004_68 */ + +/* This declaration should be used within all functions that use the + * interpreter-local data. */ +#define dMY_CXT \ + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) + +/* Creates and zeroes the per-interpreter data. + * (We allocate my_cxtp in a Perl SV so that it will be released when + * the interpreter goes away.) */ +#define MY_CXT_INIT \ + dMY_CXT_SV; \ + /* newSV() allocates one more than needed */ \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Zero(my_cxtp, 1, my_cxt_t); \ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + +/* This macro must be used to access members of the my_cxt_t structure. + * e.g. MYCXT.some_data */ +#define MY_CXT (*my_cxtp) + +/* Judicious use of these macros can reduce the number of times dMY_CXT + * is used. Use is similar to pTHX, aTHX etc. */ +#define pMY_CXT my_cxt_t *my_cxtp +#define pMY_CXT_ pMY_CXT, +#define _pMY_CXT ,pMY_CXT +#define aMY_CXT my_cxtp +#define aMY_CXT_ aMY_CXT, +#define _aMY_CXT ,aMY_CXT + +#endif /* START_MY_CXT */ + +#ifndef MY_CXT_CLONE +/* Clones the per-interpreter data. */ +#define MY_CXT_CLONE \ + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) +#endif + +#else /* single interpreter */ + +#ifndef START_MY_CXT + +#define START_MY_CXT static my_cxt_t my_cxt; +#define dMY_CXT_SV dNOOP +#define dMY_CXT dNOOP +#define MY_CXT_INIT NOOP +#define MY_CXT my_cxt + +#define pMY_CXT void +#define pMY_CXT_ +#define _pMY_CXT +#define aMY_CXT +#define aMY_CXT_ +#define _aMY_CXT + +#endif /* START_MY_CXT */ + +#ifndef MY_CXT_CLONE +#define MY_CXT_CLONE NOOP +#endif + +#endif + +#ifndef IVdf +# if IVSIZE == LONGSIZE +# define IVdf "ld" +# define UVuf "lu" +# define UVof "lo" +# define UVxf "lx" +# define UVXf "lX" +# else +# if IVSIZE == INTSIZE +# define IVdf "d" +# define UVuf "u" +# define UVof "o" +# define UVxf "x" +# define UVXf "X" +# endif +# endif +#endif + +#ifndef NVef +# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ + defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) + /* Not very likely, but let's try anyway. */ +# define NVef PERL_PRIeldbl +# define NVff PERL_PRIfldbl +# define NVgf PERL_PRIgldbl +# else +# define NVef "e" +# define NVff "f" +# define NVgf "g" +# endif +#endif + +#ifndef SvREFCNT_inc +# ifdef PERL_USE_GCC_BRACE_GROUPS +# define SvREFCNT_inc(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (SvREFCNT(_sv))++; \ + _sv; \ + }) +# else +# define SvREFCNT_inc(sv) \ + ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) +# endif +#endif + +#ifndef SvREFCNT_inc_simple +# ifdef PERL_USE_GCC_BRACE_GROUPS +# define SvREFCNT_inc_simple(sv) \ + ({ \ + if (sv) \ + (SvREFCNT(sv))++; \ + (SV *)(sv); \ + }) +# else +# define SvREFCNT_inc_simple(sv) \ + ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) +# endif +#endif + +#ifndef SvREFCNT_inc_NN +# ifdef PERL_USE_GCC_BRACE_GROUPS +# define SvREFCNT_inc_NN(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + SvREFCNT(_sv)++; \ + _sv; \ + }) +# else +# define SvREFCNT_inc_NN(sv) \ + (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) +# endif +#endif + +#ifndef SvREFCNT_inc_void +# ifdef PERL_USE_GCC_BRACE_GROUPS +# define SvREFCNT_inc_void(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (void)(SvREFCNT(_sv)++); \ + }) +# else +# define SvREFCNT_inc_void(sv) \ + (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) +# endif +#endif +#ifndef SvREFCNT_inc_simple_void +# define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END +#endif + +#ifndef SvREFCNT_inc_simple_NN +# define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) +#endif + +#ifndef SvREFCNT_inc_void_NN +# define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) +#endif + +#ifndef SvREFCNT_inc_simple_void_NN +# define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) +#endif + +#if (PERL_BCDVERSION < 0x5006000) +# define D_PPP_CONSTPV_ARG(x) ((char *) (x)) +#else +# define D_PPP_CONSTPV_ARG(x) (x) +#endif +#ifndef newSVpvn +# define newSVpvn(data,len) ((data) \ + ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ + : newSV(0)) +#endif +#ifndef newSVpvn_utf8 +# define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) +#endif +#ifndef SVf_UTF8 +# define SVf_UTF8 0 +#endif + +#ifndef newSVpvn_flags + +#if defined(NEED_newSVpvn_flags) +static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); +static +#else +extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); +#endif + +#ifdef newSVpvn_flags +# undef newSVpvn_flags +#endif +#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) +#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) + +#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) + +SV * +DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) +{ + SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); + SvFLAGS(sv) |= (flags & SVf_UTF8); + return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; +} + +#endif + +#endif + +/* Backwards compatibility stuff... :-( */ +#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) +# define NEED_sv_2pv_flags +#endif +#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) +# define NEED_sv_2pv_flags_GLOBAL +#endif + +/* Hint: sv_2pv_nolen + * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). + */ +#ifndef sv_2pv_nolen +# define sv_2pv_nolen(sv) SvPV_nolen(sv) +#endif + +#ifdef SvPVbyte + +/* Hint: SvPVbyte + * Does not work in perl-5.6.1, ppport.h implements a version + * borrowed from perl-5.7.3. + */ + +#if (PERL_BCDVERSION < 0x5007000) + +#if defined(NEED_sv_2pvbyte) +static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); +static +#else +extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); +#endif + +#ifdef sv_2pvbyte +# undef sv_2pvbyte +#endif +#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) +#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) + +#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) + +char * +DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) +{ + sv_utf8_downgrade(sv,0); + return SvPV(sv,*lp); +} + +#endif + +/* Hint: sv_2pvbyte + * Use the SvPVbyte() macro instead of sv_2pvbyte(). + */ + +#undef SvPVbyte + +#define SvPVbyte(sv, lp) \ + ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ + ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) + +#endif + +#else + +# define SvPVbyte SvPV +# define sv_2pvbyte sv_2pv + +#endif +#ifndef sv_2pvbyte_nolen +# define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) +#endif + +/* Hint: sv_pvn + * Always use the SvPV() macro instead of sv_pvn(). + */ + +/* Hint: sv_pvn_force + * Always use the SvPV_force() macro instead of sv_pvn_force(). + */ + +/* If these are undefined, they're not handled by the core anyway */ +#ifndef SV_IMMEDIATE_UNREF +# define SV_IMMEDIATE_UNREF 0 +#endif + +#ifndef SV_GMAGIC +# define SV_GMAGIC 0 +#endif + +#ifndef SV_COW_DROP_PV +# define SV_COW_DROP_PV 0 +#endif + +#ifndef SV_UTF8_NO_ENCODING +# define SV_UTF8_NO_ENCODING 0 +#endif + +#ifndef SV_NOSTEAL +# define SV_NOSTEAL 0 +#endif + +#ifndef SV_CONST_RETURN +# define SV_CONST_RETURN 0 +#endif + +#ifndef SV_MUTABLE_RETURN +# define SV_MUTABLE_RETURN 0 +#endif + +#ifndef SV_SMAGIC +# define SV_SMAGIC 0 +#endif + +#ifndef SV_HAS_TRAILING_NUL +# define SV_HAS_TRAILING_NUL 0 +#endif + +#ifndef SV_COW_SHARED_HASH_KEYS +# define SV_COW_SHARED_HASH_KEYS 0 +#endif + +#if (PERL_BCDVERSION < 0x5007002) + +#if defined(NEED_sv_2pv_flags) +static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); +static +#else +extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); +#endif + +#ifdef sv_2pv_flags +# undef sv_2pv_flags +#endif +#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) +#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) + +#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) + +char * +DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) +{ + STRLEN n_a = (STRLEN) flags; + return sv_2pv(sv, lp ? lp : &n_a); +} + +#endif + +#if defined(NEED_sv_pvn_force_flags) +static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); +static +#else +extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); +#endif + +#ifdef sv_pvn_force_flags +# undef sv_pvn_force_flags +#endif +#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) +#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) + +#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) + +char * +DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) +{ + STRLEN n_a = (STRLEN) flags; + return sv_pvn_force(sv, lp ? lp : &n_a); +} + +#endif + +#endif + +#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) +# define DPPP_SVPV_NOLEN_LP_ARG &PL_na +#else +# define DPPP_SVPV_NOLEN_LP_ARG 0 +#endif +#ifndef SvPV_const +# define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) +#endif + +#ifndef SvPV_mutable +# define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) +#endif +#ifndef SvPV_flags +# define SvPV_flags(sv, lp, flags) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) +#endif +#ifndef SvPV_flags_const +# define SvPV_flags_const(sv, lp, flags) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ + (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) +#endif +#ifndef SvPV_flags_const_nolen +# define SvPV_flags_const_nolen(sv, flags) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX_const(sv) : \ + (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) +#endif +#ifndef SvPV_flags_mutable +# define SvPV_flags_mutable(sv, lp, flags) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ + sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) +#endif +#ifndef SvPV_force +# define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) +#endif + +#ifndef SvPV_force_nolen +# define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) +#endif + +#ifndef SvPV_force_mutable +# define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) +#endif + +#ifndef SvPV_force_nomg +# define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) +#endif + +#ifndef SvPV_force_nomg_nolen +# define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) +#endif +#ifndef SvPV_force_flags +# define SvPV_force_flags(sv, lp, flags) \ + ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ + ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) +#endif +#ifndef SvPV_force_flags_nolen +# define SvPV_force_flags_nolen(sv, flags) \ + ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ + ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) +#endif +#ifndef SvPV_force_flags_mutable +# define SvPV_force_flags_mutable(sv, lp, flags) \ + ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ + ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ + : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) +#endif +#ifndef SvPV_nolen +# define SvPV_nolen(sv) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) +#endif +#ifndef SvPV_nolen_const +# define SvPV_nolen_const(sv) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) +#endif +#ifndef SvPV_nomg +# define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) +#endif + +#ifndef SvPV_nomg_const +# define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) +#endif + +#ifndef SvPV_nomg_const_nolen +# define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) +#endif +#ifndef SvPV_renew +# define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ + SvPV_set((sv), (char *) saferealloc( \ + (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ + } STMT_END +#endif +#ifndef SvMAGIC_set +# define SvMAGIC_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ + (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END +#endif + +#if (PERL_BCDVERSION < 0x5009003) +#ifndef SvPVX_const +# define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) +#endif + +#ifndef SvPVX_mutable +# define SvPVX_mutable(sv) (0 + SvPVX(sv)) +#endif +#ifndef SvRV_set +# define SvRV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ + (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END +#endif + +#else +#ifndef SvPVX_const +# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) +#endif + +#ifndef SvPVX_mutable +# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) +#endif +#ifndef SvRV_set +# define SvRV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ + ((sv)->sv_u.svu_rv = (val)); } STMT_END +#endif + +#endif +#ifndef SvSTASH_set +# define SvSTASH_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ + (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END +#endif + +#if (PERL_BCDVERSION < 0x5004000) +#ifndef SvUV_set +# define SvUV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ + (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END +#endif + +#else +#ifndef SvUV_set +# define SvUV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ + (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END +#endif + +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) +#if defined(NEED_vnewSVpvf) +static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); +static +#else +extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); +#endif + +#ifdef vnewSVpvf +# undef vnewSVpvf +#endif +#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) +#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) + +#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) + +SV * +DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) +{ + register SV *sv = newSV(0); + sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); + return sv; +} + +#endif +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) +# define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) +# define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) +#if defined(NEED_sv_catpvf_mg) +static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); +static +#else +extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); +#endif + +#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) + +#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) + +void +DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) +{ + va_list args; + va_start(args, pat); + sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); + SvSETMAGIC(sv); + va_end(args); +} + +#endif +#endif + +#ifdef PERL_IMPLICIT_CONTEXT +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) +#if defined(NEED_sv_catpvf_mg_nocontext) +static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); +static +#else +extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); +#endif + +#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) +#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) + +#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) + +void +DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) +{ + dTHX; + va_list args; + va_start(args, pat); + sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); + SvSETMAGIC(sv); + va_end(args); +} + +#endif +#endif +#endif + +/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ +#ifndef sv_catpvf_mg +# ifdef PERL_IMPLICIT_CONTEXT +# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext +# else +# define sv_catpvf_mg Perl_sv_catpvf_mg +# endif +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) +# define sv_vcatpvf_mg(sv, pat, args) \ + STMT_START { \ + sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ + SvSETMAGIC(sv); \ + } STMT_END +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) +#if defined(NEED_sv_setpvf_mg) +static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); +static +#else +extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); +#endif + +#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) + +#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) + +void +DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) +{ + va_list args; + va_start(args, pat); + sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); + SvSETMAGIC(sv); + va_end(args); +} + +#endif +#endif + +#ifdef PERL_IMPLICIT_CONTEXT +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) +#if defined(NEED_sv_setpvf_mg_nocontext) +static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); +static +#else +extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); +#endif + +#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) +#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) + +#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) + +void +DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) +{ + dTHX; + va_list args; + va_start(args, pat); + sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); + SvSETMAGIC(sv); + va_end(args); +} + +#endif +#endif +#endif + +/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ +#ifndef sv_setpvf_mg +# ifdef PERL_IMPLICIT_CONTEXT +# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext +# else +# define sv_setpvf_mg Perl_sv_setpvf_mg +# endif +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) +# define sv_vsetpvf_mg(sv, pat, args) \ + STMT_START { \ + sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ + SvSETMAGIC(sv); \ + } STMT_END +#endif + +#ifndef newSVpvn_share + +#if defined(NEED_newSVpvn_share) +static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); +static +#else +extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); +#endif + +#ifdef newSVpvn_share +# undef newSVpvn_share +#endif +#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) +#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) + +#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) + +SV * +DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) +{ + SV *sv; + if (len < 0) + len = -len; + if (!hash) + PERL_HASH(hash, (char*) src, len); + sv = newSVpvn((char *) src, len); + sv_upgrade(sv, SVt_PVIV); + SvIVX(sv) = hash; + SvREADONLY_on(sv); + SvPOK_on(sv); + return sv; +} + +#endif + +#endif +#ifndef SvSHARED_HASH +# define SvSHARED_HASH(sv) (0 + SvUVX(sv)) +#endif +#ifndef WARN_ALL +# define WARN_ALL 0 +#endif + +#ifndef WARN_CLOSURE +# define WARN_CLOSURE 1 +#endif + +#ifndef WARN_DEPRECATED +# define WARN_DEPRECATED 2 +#endif + +#ifndef WARN_EXITING +# define WARN_EXITING 3 +#endif + +#ifndef WARN_GLOB +# define WARN_GLOB 4 +#endif + +#ifndef WARN_IO +# define WARN_IO 5 +#endif + +#ifndef WARN_CLOSED +# define WARN_CLOSED 6 +#endif + +#ifndef WARN_EXEC +# define WARN_EXEC 7 +#endif + +#ifndef WARN_LAYER +# define WARN_LAYER 8 +#endif + +#ifndef WARN_NEWLINE +# define WARN_NEWLINE 9 +#endif + +#ifndef WARN_PIPE +# define WARN_PIPE 10 +#endif + +#ifndef WARN_UNOPENED +# define WARN_UNOPENED 11 +#endif + +#ifndef WARN_MISC +# define WARN_MISC 12 +#endif + +#ifndef WARN_NUMERIC +# define WARN_NUMERIC 13 +#endif + +#ifndef WARN_ONCE +# define WARN_ONCE 14 +#endif + +#ifndef WARN_OVERFLOW +# define WARN_OVERFLOW 15 +#endif + +#ifndef WARN_PACK +# define WARN_PACK 16 +#endif + +#ifndef WARN_PORTABLE +# define WARN_PORTABLE 17 +#endif + +#ifndef WARN_RECURSION +# define WARN_RECURSION 18 +#endif + +#ifndef WARN_REDEFINE +# define WARN_REDEFINE 19 +#endif + +#ifndef WARN_REGEXP +# define WARN_REGEXP 20 +#endif + +#ifndef WARN_SEVERE +# define WARN_SEVERE 21 +#endif + +#ifndef WARN_DEBUGGING +# define WARN_DEBUGGING 22 +#endif + +#ifndef WARN_INPLACE +# define WARN_INPLACE 23 +#endif + +#ifndef WARN_INTERNAL +# define WARN_INTERNAL 24 +#endif + +#ifndef WARN_MALLOC +# define WARN_MALLOC 25 +#endif + +#ifndef WARN_SIGNAL +# define WARN_SIGNAL 26 +#endif + +#ifndef WARN_SUBSTR +# define WARN_SUBSTR 27 +#endif + +#ifndef WARN_SYNTAX +# define WARN_SYNTAX 28 +#endif + +#ifndef WARN_AMBIGUOUS +# define WARN_AMBIGUOUS 29 +#endif + +#ifndef WARN_BAREWORD +# define WARN_BAREWORD 30 +#endif + +#ifndef WARN_DIGIT +# define WARN_DIGIT 31 +#endif + +#ifndef WARN_PARENTHESIS +# define WARN_PARENTHESIS 32 +#endif + +#ifndef WARN_PRECEDENCE +# define WARN_PRECEDENCE 33 +#endif + +#ifndef WARN_PRINTF +# define WARN_PRINTF 34 +#endif + +#ifndef WARN_PROTOTYPE +# define WARN_PROTOTYPE 35 +#endif + +#ifndef WARN_QW +# define WARN_QW 36 +#endif + +#ifndef WARN_RESERVED +# define WARN_RESERVED 37 +#endif + +#ifndef WARN_SEMICOLON +# define WARN_SEMICOLON 38 +#endif + +#ifndef WARN_TAINT +# define WARN_TAINT 39 +#endif + +#ifndef WARN_THREADS +# define WARN_THREADS 40 +#endif + +#ifndef WARN_UNINITIALIZED +# define WARN_UNINITIALIZED 41 +#endif + +#ifndef WARN_UNPACK +# define WARN_UNPACK 42 +#endif + +#ifndef WARN_UNTIE +# define WARN_UNTIE 43 +#endif + +#ifndef WARN_UTF8 +# define WARN_UTF8 44 +#endif + +#ifndef WARN_VOID +# define WARN_VOID 45 +#endif + +#ifndef WARN_ASSERTIONS +# define WARN_ASSERTIONS 46 +#endif +#ifndef packWARN +# define packWARN(a) (a) +#endif + +#ifndef ckWARN +# ifdef G_WARN_ON +# define ckWARN(a) (PL_dowarn & G_WARN_ON) +# else +# define ckWARN(a) PL_dowarn +# endif +#endif + +#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) +#if defined(NEED_warner) +static void DPPP_(my_warner)(U32 err, const char *pat, ...); +static +#else +extern void DPPP_(my_warner)(U32 err, const char *pat, ...); +#endif + +#define Perl_warner DPPP_(my_warner) + +#if defined(NEED_warner) || defined(NEED_warner_GLOBAL) + +void +DPPP_(my_warner)(U32 err, const char *pat, ...) +{ + SV *sv; + va_list args; + + PERL_UNUSED_ARG(err); + + va_start(args, pat); + sv = vnewSVpvf(pat, &args); + va_end(args); + sv_2mortal(sv); + warn("%s", SvPV_nolen(sv)); +} + +#define warner Perl_warner + +#define Perl_warner_nocontext Perl_warner + +#endif +#endif + +/* concatenating with "" ensures that only literal strings are accepted as argument + * note that STR_WITH_LEN() can't be used as argument to macros or functions that + * under some configurations might be macros + */ +#ifndef STR_WITH_LEN +# define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) +#endif +#ifndef newSVpvs +# define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) +#endif + +#ifndef newSVpvs_flags +# define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) +#endif + +#ifndef sv_catpvs +# define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) +#endif + +#ifndef sv_setpvs +# define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) +#endif + +#ifndef hv_fetchs +# define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) +#endif + +#ifndef hv_stores +# define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) +#endif +#ifndef SvGETMAGIC +# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END +#endif +#ifndef PERL_MAGIC_sv +# define PERL_MAGIC_sv '\0' +#endif + +#ifndef PERL_MAGIC_overload +# define PERL_MAGIC_overload 'A' +#endif + +#ifndef PERL_MAGIC_overload_elem +# define PERL_MAGIC_overload_elem 'a' +#endif + +#ifndef PERL_MAGIC_overload_table +# define PERL_MAGIC_overload_table 'c' +#endif + +#ifndef PERL_MAGIC_bm +# define PERL_MAGIC_bm 'B' +#endif + +#ifndef PERL_MAGIC_regdata +# define PERL_MAGIC_regdata 'D' +#endif + +#ifndef PERL_MAGIC_regdatum +# define PERL_MAGIC_regdatum 'd' +#endif + +#ifndef PERL_MAGIC_env +# define PERL_MAGIC_env 'E' +#endif + +#ifndef PERL_MAGIC_envelem +# define PERL_MAGIC_envelem 'e' +#endif + +#ifndef PERL_MAGIC_fm +# define PERL_MAGIC_fm 'f' +#endif + +#ifndef PERL_MAGIC_regex_global +# define PERL_MAGIC_regex_global 'g' +#endif + +#ifndef PERL_MAGIC_isa +# define PERL_MAGIC_isa 'I' +#endif + +#ifndef PERL_MAGIC_isaelem +# define PERL_MAGIC_isaelem 'i' +#endif + +#ifndef PERL_MAGIC_nkeys +# define PERL_MAGIC_nkeys 'k' +#endif + +#ifndef PERL_MAGIC_dbfile +# define PERL_MAGIC_dbfile 'L' +#endif + +#ifndef PERL_MAGIC_dbline +# define PERL_MAGIC_dbline 'l' +#endif + +#ifndef PERL_MAGIC_mutex +# define PERL_MAGIC_mutex 'm' +#endif + +#ifndef PERL_MAGIC_shared +# define PERL_MAGIC_shared 'N' +#endif + +#ifndef PERL_MAGIC_shared_scalar +# define PERL_MAGIC_shared_scalar 'n' +#endif + +#ifndef PERL_MAGIC_collxfrm +# define PERL_MAGIC_collxfrm 'o' +#endif + +#ifndef PERL_MAGIC_tied +# define PERL_MAGIC_tied 'P' +#endif + +#ifndef PERL_MAGIC_tiedelem +# define PERL_MAGIC_tiedelem 'p' +#endif + +#ifndef PERL_MAGIC_tiedscalar +# define PERL_MAGIC_tiedscalar 'q' +#endif + +#ifndef PERL_MAGIC_qr +# define PERL_MAGIC_qr 'r' +#endif + +#ifndef PERL_MAGIC_sig +# define PERL_MAGIC_sig 'S' +#endif + +#ifndef PERL_MAGIC_sigelem +# define PERL_MAGIC_sigelem 's' +#endif + +#ifndef PERL_MAGIC_taint +# define PERL_MAGIC_taint 't' +#endif + +#ifndef PERL_MAGIC_uvar +# define PERL_MAGIC_uvar 'U' +#endif + +#ifndef PERL_MAGIC_uvar_elem +# define PERL_MAGIC_uvar_elem 'u' +#endif + +#ifndef PERL_MAGIC_vstring +# define PERL_MAGIC_vstring 'V' +#endif + +#ifndef PERL_MAGIC_vec +# define PERL_MAGIC_vec 'v' +#endif + +#ifndef PERL_MAGIC_utf8 +# define PERL_MAGIC_utf8 'w' +#endif + +#ifndef PERL_MAGIC_substr +# define PERL_MAGIC_substr 'x' +#endif + +#ifndef PERL_MAGIC_defelem +# define PERL_MAGIC_defelem 'y' +#endif + +#ifndef PERL_MAGIC_glob +# define PERL_MAGIC_glob '*' +#endif + +#ifndef PERL_MAGIC_arylen +# define PERL_MAGIC_arylen '#' +#endif + +#ifndef PERL_MAGIC_pos +# define PERL_MAGIC_pos '.' +#endif + +#ifndef PERL_MAGIC_backref +# define PERL_MAGIC_backref '<' +#endif + +#ifndef PERL_MAGIC_ext +# define PERL_MAGIC_ext '~' +#endif + +/* That's the best we can do... */ +#ifndef sv_catpvn_nomg +# define sv_catpvn_nomg sv_catpvn +#endif + +#ifndef sv_catsv_nomg +# define sv_catsv_nomg sv_catsv +#endif + +#ifndef sv_setsv_nomg +# define sv_setsv_nomg sv_setsv +#endif + +#ifndef sv_pvn_nomg +# define sv_pvn_nomg sv_pvn +#endif + +#ifndef SvIV_nomg +# define SvIV_nomg SvIV +#endif + +#ifndef SvUV_nomg +# define SvUV_nomg SvUV +#endif + +#ifndef sv_catpv_mg +# define sv_catpv_mg(sv, ptr) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_catpv(TeMpSv,ptr); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_catpvn_mg +# define sv_catpvn_mg(sv, ptr, len) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_catpvn(TeMpSv,ptr,len); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_catsv_mg +# define sv_catsv_mg(dsv, ssv) \ + STMT_START { \ + SV *TeMpSv = dsv; \ + sv_catsv(TeMpSv,ssv); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setiv_mg +# define sv_setiv_mg(sv, i) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_setiv(TeMpSv,i); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setnv_mg +# define sv_setnv_mg(sv, num) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_setnv(TeMpSv,num); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setpv_mg +# define sv_setpv_mg(sv, ptr) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_setpv(TeMpSv,ptr); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setpvn_mg +# define sv_setpvn_mg(sv, ptr, len) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_setpvn(TeMpSv,ptr,len); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setsv_mg +# define sv_setsv_mg(dsv, ssv) \ + STMT_START { \ + SV *TeMpSv = dsv; \ + sv_setsv(TeMpSv,ssv); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_setuv_mg +# define sv_setuv_mg(sv, i) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_setuv(TeMpSv,i); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif + +#ifndef sv_usepvn_mg +# define sv_usepvn_mg(sv, ptr, len) \ + STMT_START { \ + SV *TeMpSv = sv; \ + sv_usepvn(TeMpSv,ptr,len); \ + SvSETMAGIC(TeMpSv); \ + } STMT_END +#endif +#ifndef SvVSTRING_mg +# define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) +#endif + +/* Hint: sv_magic_portable + * This is a compatibility function that is only available with + * Devel::PPPort. It is NOT in the perl core. + * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when + * it is being passed a name pointer with namlen == 0. In that + * case, perl 5.8.0 and later store the pointer, not a copy of it. + * The compatibility can be provided back to perl 5.004. With + * earlier versions, the code will not compile. + */ + +#if (PERL_BCDVERSION < 0x5004000) + + /* code that uses sv_magic_portable will not compile */ + +#elif (PERL_BCDVERSION < 0x5008000) + +# define sv_magic_portable(sv, obj, how, name, namlen) \ + STMT_START { \ + SV *SvMp_sv = (sv); \ + char *SvMp_name = (char *) (name); \ + I32 SvMp_namlen = (namlen); \ + if (SvMp_name && SvMp_namlen == 0) \ + { \ + MAGIC *mg; \ + sv_magic(SvMp_sv, obj, how, 0, 0); \ + mg = SvMAGIC(SvMp_sv); \ + mg->mg_len = -42; /* XXX: this is the tricky part */ \ + mg->mg_ptr = SvMp_name; \ + } \ + else \ + { \ + sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ + } \ + } STMT_END + +#else + +# define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) + +#endif + +#ifdef USE_ITHREADS +#ifndef CopFILE +# define CopFILE(c) ((c)->cop_file) +#endif + +#ifndef CopFILEGV +# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) +#endif + +#ifndef CopFILE_set +# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) +#endif + +#ifndef CopFILESV +# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) +#endif + +#ifndef CopFILEAV +# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) +#endif + +#ifndef CopSTASHPV +# define CopSTASHPV(c) ((c)->cop_stashpv) +#endif + +#ifndef CopSTASHPV_set +# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) +#endif + +#ifndef CopSTASH +# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) +#endif + +#ifndef CopSTASH_set +# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) +#endif + +#ifndef CopSTASH_eq +# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ + || (CopSTASHPV(c) && HvNAME(hv) \ + && strEQ(CopSTASHPV(c), HvNAME(hv))))) +#endif + +#else +#ifndef CopFILEGV +# define CopFILEGV(c) ((c)->cop_filegv) +#endif + +#ifndef CopFILEGV_set +# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) +#endif + +#ifndef CopFILE_set +# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) +#endif + +#ifndef CopFILESV +# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) +#endif + +#ifndef CopFILEAV +# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) +#endif + +#ifndef CopFILE +# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) +#endif + +#ifndef CopSTASH +# define CopSTASH(c) ((c)->cop_stash) +#endif + +#ifndef CopSTASH_set +# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) +#endif + +#ifndef CopSTASHPV +# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) +#endif + +#ifndef CopSTASHPV_set +# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) +#endif + +#ifndef CopSTASH_eq +# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) +#endif + +#endif /* USE_ITHREADS */ +#ifndef IN_PERL_COMPILETIME +# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) +#endif + +#ifndef IN_LOCALE_RUNTIME +# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) +#endif + +#ifndef IN_LOCALE_COMPILETIME +# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) +#endif + +#ifndef IN_LOCALE +# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) +#endif +#ifndef IS_NUMBER_IN_UV +# define IS_NUMBER_IN_UV 0x01 +#endif + +#ifndef IS_NUMBER_GREATER_THAN_UV_MAX +# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 +#endif + +#ifndef IS_NUMBER_NOT_INT +# define IS_NUMBER_NOT_INT 0x04 +#endif + +#ifndef IS_NUMBER_NEG +# define IS_NUMBER_NEG 0x08 +#endif + +#ifndef IS_NUMBER_INFINITY +# define IS_NUMBER_INFINITY 0x10 +#endif + +#ifndef IS_NUMBER_NAN +# define IS_NUMBER_NAN 0x20 +#endif +#ifndef GROK_NUMERIC_RADIX +# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) +#endif +#ifndef PERL_SCAN_GREATER_THAN_UV_MAX +# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 +#endif + +#ifndef PERL_SCAN_SILENT_ILLDIGIT +# define PERL_SCAN_SILENT_ILLDIGIT 0x04 +#endif + +#ifndef PERL_SCAN_ALLOW_UNDERSCORES +# define PERL_SCAN_ALLOW_UNDERSCORES 0x01 +#endif + +#ifndef PERL_SCAN_DISALLOW_PREFIX +# define PERL_SCAN_DISALLOW_PREFIX 0x02 +#endif + +#ifndef grok_numeric_radix +#if defined(NEED_grok_numeric_radix) +static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); +static +#else +extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); +#endif + +#ifdef grok_numeric_radix +# undef grok_numeric_radix +#endif +#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) +#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) + +#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) +bool +DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) +{ +#ifdef USE_LOCALE_NUMERIC +#ifdef PL_numeric_radix_sv + if (PL_numeric_radix_sv && IN_LOCALE) { + STRLEN len; + char* radix = SvPV(PL_numeric_radix_sv, len); + if (*sp + len <= send && memEQ(*sp, radix, len)) { + *sp += len; + return TRUE; + } + } +#else + /* older perls don't have PL_numeric_radix_sv so the radix + * must manually be requested from locale.h + */ +#include + dTHR; /* needed for older threaded perls */ + struct lconv *lc = localeconv(); + char *radix = lc->decimal_point; + if (radix && IN_LOCALE) { + STRLEN len = strlen(radix); + if (*sp + len <= send && memEQ(*sp, radix, len)) { + *sp += len; + return TRUE; + } + } +#endif +#endif /* USE_LOCALE_NUMERIC */ + /* always try "." if numeric radix didn't match because + * we may have data from different locales mixed */ + if (*sp < send && **sp == '.') { + ++*sp; + return TRUE; + } + return FALSE; +} +#endif +#endif + +#ifndef grok_number +#if defined(NEED_grok_number) +static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); +static +#else +extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); +#endif + +#ifdef grok_number +# undef grok_number +#endif +#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) +#define Perl_grok_number DPPP_(my_grok_number) + +#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) +int +DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) +{ + const char *s = pv; + const char *send = pv + len; + const UV max_div_10 = UV_MAX / 10; + const char max_mod_10 = UV_MAX % 10; + int numtype = 0; + int sawinf = 0; + int sawnan = 0; + + while (s < send && isSPACE(*s)) + s++; + if (s == send) { + return 0; + } else if (*s == '-') { + s++; + numtype = IS_NUMBER_NEG; + } + else if (*s == '+') + s++; + + if (s == send) + return 0; + + /* next must be digit or the radix separator or beginning of infinity */ + if (isDIGIT(*s)) { + /* UVs are at least 32 bits, so the first 9 decimal digits cannot + overflow. */ + UV value = *s - '0'; + /* This construction seems to be more optimiser friendly. + (without it gcc does the isDIGIT test and the *s - '0' separately) + With it gcc on arm is managing 6 instructions (6 cycles) per digit. + In theory the optimiser could deduce how far to unroll the loop + before checking for overflow. */ + if (++s < send) { + int digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + /* Now got 9 digits, so need to check + each time for overflow. */ + digit = *s - '0'; + while (digit >= 0 && digit <= 9 + && (value < max_div_10 + || (value == max_div_10 + && digit <= max_mod_10))) { + value = value * 10 + digit; + if (++s < send) + digit = *s - '0'; + else + break; + } + if (digit >= 0 && digit <= 9 + && (s < send)) { + /* value overflowed. + skip the remaining digits, don't + worry about setting *valuep. */ + do { + s++; + } while (s < send && isDIGIT(*s)); + numtype |= + IS_NUMBER_GREATER_THAN_UV_MAX; + goto skip_value; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + numtype |= IS_NUMBER_IN_UV; + if (valuep) + *valuep = value; + + skip_value: + if (GROK_NUMERIC_RADIX(&s, send)) { + numtype |= IS_NUMBER_NOT_INT; + while (s < send && isDIGIT(*s)) /* optional digits after the radix */ + s++; + } + } + else if (GROK_NUMERIC_RADIX(&s, send)) { + numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ + /* no digits before the radix means we need digits after it */ + if (s < send && isDIGIT(*s)) { + do { + s++; + } while (s < send && isDIGIT(*s)); + if (valuep) { + /* integer approximation is valid - it's 0. */ + *valuep = 0; + } + } + else + return 0; + } else if (*s == 'I' || *s == 'i') { + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; + s++; if (s < send && (*s == 'I' || *s == 'i')) { + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; + s++; if (s == send || (*s != 'T' && *s != 't')) return 0; + s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; + s++; + } + sawinf = 1; + } else if (*s == 'N' || *s == 'n') { + /* XXX TODO: There are signaling NaNs and quiet NaNs. */ + s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; + sawnan = 1; + } else + return 0; + + if (sawinf) { + numtype &= IS_NUMBER_NEG; /* Keep track of sign */ + numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; + } else if (sawnan) { + numtype &= IS_NUMBER_NEG; /* Keep track of sign */ + numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; + } else if (s < send) { + /* we can have an optional exponent part */ + if (*s == 'e' || *s == 'E') { + /* The only flag we keep is sign. Blow away any "it's UV" */ + numtype &= IS_NUMBER_NEG; + numtype |= IS_NUMBER_NOT_INT; + s++; + if (s < send && (*s == '-' || *s == '+')) + s++; + if (s < send && isDIGIT(*s)) { + do { + s++; + } while (s < send && isDIGIT(*s)); + } + else + return 0; + } + } + while (s < send && isSPACE(*s)) + s++; + if (s >= send) + return numtype; + if (len == 10 && memEQ(pv, "0 but true", 10)) { + if (valuep) + *valuep = 0; + return IS_NUMBER_IN_UV; + } + return 0; +} +#endif +#endif + +/* + * The grok_* routines have been modified to use warn() instead of + * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, + * which is why the stack variable has been renamed to 'xdigit'. + */ + +#ifndef grok_bin +#if defined(NEED_grok_bin) +static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +static +#else +extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +#endif + +#ifdef grok_bin +# undef grok_bin +#endif +#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) +#define Perl_grok_bin DPPP_(my_grok_bin) + +#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) +UV +DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) +{ + const char *s = start; + STRLEN len = *len_p; + UV value = 0; + NV value_nv = 0; + + const UV max_div_2 = UV_MAX / 2; + bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; + bool overflowed = FALSE; + + if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { + /* strip off leading b or 0b. + for compatibility silently suffer "b" and "0b" as valid binary + numbers. */ + if (len >= 1) { + if (s[0] == 'b') { + s++; + len--; + } + else if (len >= 2 && s[0] == '0' && s[1] == 'b') { + s+=2; + len-=2; + } + } + } + + for (; len-- && *s; s++) { + char bit = *s; + if (bit == '0' || bit == '1') { + /* Write it in this wonky order with a goto to attempt to get the + compiler to make the common case integer-only loop pretty tight. + With gcc seems to be much straighter code than old scan_bin. */ + redo: + if (!overflowed) { + if (value <= max_div_2) { + value = (value << 1) | (bit - '0'); + continue; + } + /* Bah. We're just overflowed. */ + warn("Integer overflow in binary number"); + overflowed = TRUE; + value_nv = (NV) value; + } + value_nv *= 2.0; + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount. */ + value_nv += (NV)(bit - '0'); + continue; + } + if (bit == '_' && len && allow_underscores && (bit = s[1]) + && (bit == '0' || bit == '1')) + { + --len; + ++s; + goto redo; + } + if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) + warn("Illegal binary digit '%c' ignored", *s); + break; + } + + if ( ( overflowed && value_nv > 4294967295.0) +#if UVSIZE > 4 + || (!overflowed && value > 0xffffffff ) +#endif + ) { + warn("Binary number > 0b11111111111111111111111111111111 non-portable"); + } + *len_p = s - start; + if (!overflowed) { + *flags = 0; + return value; + } + *flags = PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) + *result = value_nv; + return UV_MAX; +} +#endif +#endif + +#ifndef grok_hex +#if defined(NEED_grok_hex) +static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +static +#else +extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +#endif + +#ifdef grok_hex +# undef grok_hex +#endif +#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) +#define Perl_grok_hex DPPP_(my_grok_hex) + +#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) +UV +DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) +{ + const char *s = start; + STRLEN len = *len_p; + UV value = 0; + NV value_nv = 0; + + const UV max_div_16 = UV_MAX / 16; + bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; + bool overflowed = FALSE; + const char *xdigit; + + if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { + /* strip off leading x or 0x. + for compatibility silently suffer "x" and "0x" as valid hex numbers. + */ + if (len >= 1) { + if (s[0] == 'x') { + s++; + len--; + } + else if (len >= 2 && s[0] == '0' && s[1] == 'x') { + s+=2; + len-=2; + } + } + } + + for (; len-- && *s; s++) { + xdigit = strchr((char *) PL_hexdigit, *s); + if (xdigit) { + /* Write it in this wonky order with a goto to attempt to get the + compiler to make the common case integer-only loop pretty tight. + With gcc seems to be much straighter code than old scan_hex. */ + redo: + if (!overflowed) { + if (value <= max_div_16) { + value = (value << 4) | ((xdigit - PL_hexdigit) & 15); + continue; + } + warn("Integer overflow in hexadecimal number"); + overflowed = TRUE; + value_nv = (NV) value; + } + value_nv *= 16.0; + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 16-tuples. */ + value_nv += (NV)((xdigit - PL_hexdigit) & 15); + continue; + } + if (*s == '_' && len && allow_underscores && s[1] + && (xdigit = strchr((char *) PL_hexdigit, s[1]))) + { + --len; + ++s; + goto redo; + } + if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) + warn("Illegal hexadecimal digit '%c' ignored", *s); + break; + } + + if ( ( overflowed && value_nv > 4294967295.0) +#if UVSIZE > 4 + || (!overflowed && value > 0xffffffff ) +#endif + ) { + warn("Hexadecimal number > 0xffffffff non-portable"); + } + *len_p = s - start; + if (!overflowed) { + *flags = 0; + return value; + } + *flags = PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) + *result = value_nv; + return UV_MAX; +} +#endif +#endif + +#ifndef grok_oct +#if defined(NEED_grok_oct) +static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +static +#else +extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); +#endif + +#ifdef grok_oct +# undef grok_oct +#endif +#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) +#define Perl_grok_oct DPPP_(my_grok_oct) + +#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) +UV +DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) +{ + const char *s = start; + STRLEN len = *len_p; + UV value = 0; + NV value_nv = 0; + + const UV max_div_8 = UV_MAX / 8; + bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; + bool overflowed = FALSE; + + for (; len-- && *s; s++) { + /* gcc 2.95 optimiser not smart enough to figure that this subtraction + out front allows slicker code. */ + int digit = *s - '0'; + if (digit >= 0 && digit <= 7) { + /* Write it in this wonky order with a goto to attempt to get the + compiler to make the common case integer-only loop pretty tight. + */ + redo: + if (!overflowed) { + if (value <= max_div_8) { + value = (value << 3) | digit; + continue; + } + /* Bah. We're just overflowed. */ + warn("Integer overflow in octal number"); + overflowed = TRUE; + value_nv = (NV) value; + } + value_nv *= 8.0; + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 8-tuples. */ + value_nv += (NV)digit; + continue; + } + if (digit == ('_' - '0') && len && allow_underscores + && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) + { + --len; + ++s; + goto redo; + } + /* Allow \octal to work the DWIM way (that is, stop scanning + * as soon as non-octal characters are seen, complain only iff + * someone seems to want to use the digits eight and nine). */ + if (digit == 8 || digit == 9) { + if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) + warn("Illegal octal digit '%c' ignored", *s); + } + break; + } + + if ( ( overflowed && value_nv > 4294967295.0) +#if UVSIZE > 4 + || (!overflowed && value > 0xffffffff ) +#endif + ) { + warn("Octal number > 037777777777 non-portable"); + } + *len_p = s - start; + if (!overflowed) { + *flags = 0; + return value; + } + *flags = PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) + *result = value_nv; + return UV_MAX; +} +#endif +#endif + +#if !defined(my_snprintf) +#if defined(NEED_my_snprintf) +static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); +static +#else +extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); +#endif + +#define my_snprintf DPPP_(my_my_snprintf) +#define Perl_my_snprintf DPPP_(my_my_snprintf) + +#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) + +int +DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) +{ + dTHX; + int retval; + va_list ap; + va_start(ap, format); +#ifdef HAS_VSNPRINTF + retval = vsnprintf(buffer, len, format, ap); +#else + retval = vsprintf(buffer, format, ap); +#endif + va_end(ap); + if (retval < 0 || (len > 0 && (Size_t)retval >= len)) + Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); + return retval; +} + +#endif +#endif + +#if !defined(my_sprintf) +#if defined(NEED_my_sprintf) +static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); +static +#else +extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); +#endif + +#define my_sprintf DPPP_(my_my_sprintf) +#define Perl_my_sprintf DPPP_(my_my_sprintf) + +#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) + +int +DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) +{ + va_list args; + va_start(args, pat); + vsprintf(buffer, pat, args); + va_end(args); + return strlen(buffer); +} + +#endif +#endif + +#ifdef NO_XSLOCKS +# ifdef dJMPENV +# define dXCPT dJMPENV; int rEtV = 0 +# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) +# define XCPT_TRY_END JMPENV_POP; +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW JMPENV_JUMP(rEtV) +# else +# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 +# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) +# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW Siglongjmp(top_env, rEtV) +# endif +#endif + +#if !defined(my_strlcat) +#if defined(NEED_my_strlcat) +static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); +static +#else +extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); +#endif + +#define my_strlcat DPPP_(my_my_strlcat) +#define Perl_my_strlcat DPPP_(my_my_strlcat) + +#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) + +Size_t +DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) +{ + Size_t used, length, copy; + + used = strlen(dst); + length = strlen(src); + if (size > 0 && used < size - 1) { + copy = (length >= size - used) ? size - used - 1 : length; + memcpy(dst + used, src, copy); + dst[used + copy] = '\0'; + } + return used + length; +} +#endif +#endif + +#if !defined(my_strlcpy) +#if defined(NEED_my_strlcpy) +static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); +static +#else +extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); +#endif + +#define my_strlcpy DPPP_(my_my_strlcpy) +#define Perl_my_strlcpy DPPP_(my_my_strlcpy) + +#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) + +Size_t +DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) +{ + Size_t length, copy; + + length = strlen(src); + if (size > 0) { + copy = (length >= size) ? size - 1 : length; + memcpy(dst, src, copy); + dst[copy] = '\0'; + } + return length; +} + +#endif +#endif +#ifndef PERL_PV_ESCAPE_QUOTE +# define PERL_PV_ESCAPE_QUOTE 0x0001 +#endif + +#ifndef PERL_PV_PRETTY_QUOTE +# define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE +#endif + +#ifndef PERL_PV_PRETTY_ELLIPSES +# define PERL_PV_PRETTY_ELLIPSES 0x0002 +#endif + +#ifndef PERL_PV_PRETTY_LTGT +# define PERL_PV_PRETTY_LTGT 0x0004 +#endif + +#ifndef PERL_PV_ESCAPE_FIRSTCHAR +# define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 +#endif + +#ifndef PERL_PV_ESCAPE_UNI +# define PERL_PV_ESCAPE_UNI 0x0100 +#endif + +#ifndef PERL_PV_ESCAPE_UNI_DETECT +# define PERL_PV_ESCAPE_UNI_DETECT 0x0200 +#endif + +#ifndef PERL_PV_ESCAPE_ALL +# define PERL_PV_ESCAPE_ALL 0x1000 +#endif + +#ifndef PERL_PV_ESCAPE_NOBACKSLASH +# define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 +#endif + +#ifndef PERL_PV_ESCAPE_NOCLEAR +# define PERL_PV_ESCAPE_NOCLEAR 0x4000 +#endif + +#ifndef PERL_PV_ESCAPE_RE +# define PERL_PV_ESCAPE_RE 0x8000 +#endif + +#ifndef PERL_PV_PRETTY_NOCLEAR +# define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR +#endif +#ifndef PERL_PV_PRETTY_DUMP +# define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE +#endif + +#ifndef PERL_PV_PRETTY_REGPROP +# define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE +#endif + +/* Hint: pv_escape + * Note that unicode functionality is only backported to + * those perl versions that support it. For older perl + * versions, the implementation will fall back to bytes. + */ + +#ifndef pv_escape +#if defined(NEED_pv_escape) +static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); +static +#else +extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); +#endif + +#ifdef pv_escape +# undef pv_escape +#endif +#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) +#define Perl_pv_escape DPPP_(my_pv_escape) + +#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) + +char * +DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, + const STRLEN count, const STRLEN max, + STRLEN * const escaped, const U32 flags) +{ + const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; + const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; + char octbuf[32] = "%123456789ABCDF"; + STRLEN wrote = 0; + STRLEN chsize = 0; + STRLEN readsize = 1; +#if defined(is_utf8_string) && defined(utf8_to_uvchr) + bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; +#endif + const char *pv = str; + const char * const end = pv + count; + octbuf[0] = esc; + + if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) + sv_setpvs(dsv, ""); + +#if defined(is_utf8_string) && defined(utf8_to_uvchr) + if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) + isuni = 1; +#endif + + for (; pv < end && (!max || wrote < max) ; pv += readsize) { + const UV u = +#if defined(is_utf8_string) && defined(utf8_to_uvchr) + isuni ? utf8_to_uvchr((U8*)pv, &readsize) : +#endif + (U8)*pv; + const U8 c = (U8)u & 0xFF; + + if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { + if (flags & PERL_PV_ESCAPE_FIRSTCHAR) + chsize = my_snprintf(octbuf, sizeof octbuf, + "%"UVxf, u); + else + chsize = my_snprintf(octbuf, sizeof octbuf, + "%cx{%"UVxf"}", esc, u); + } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { + chsize = 1; + } else { + if (c == dq || c == esc || !isPRINT(c)) { + chsize = 2; + switch (c) { + case '\\' : /* fallthrough */ + case '%' : if (c == esc) + octbuf[1] = esc; + else + chsize = 1; + break; + case '\v' : octbuf[1] = 'v'; break; + case '\t' : octbuf[1] = 't'; break; + case '\r' : octbuf[1] = 'r'; break; + case '\n' : octbuf[1] = 'n'; break; + case '\f' : octbuf[1] = 'f'; break; + case '"' : if (dq == '"') + octbuf[1] = '"'; + else + chsize = 1; + break; + default: chsize = my_snprintf(octbuf, sizeof octbuf, + pv < end && isDIGIT((U8)*(pv+readsize)) + ? "%c%03o" : "%c%o", esc, c); + } + } else { + chsize = 1; + } + } + if (max && wrote + chsize > max) { + break; + } else if (chsize > 1) { + sv_catpvn(dsv, octbuf, chsize); + wrote += chsize; + } else { + char tmp[2]; + my_snprintf(tmp, sizeof tmp, "%c", c); + sv_catpvn(dsv, tmp, 1); + wrote++; + } + if (flags & PERL_PV_ESCAPE_FIRSTCHAR) + break; + } + if (escaped != NULL) + *escaped= pv - str; + return SvPVX(dsv); +} + +#endif +#endif + +#ifndef pv_pretty +#if defined(NEED_pv_pretty) +static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); +static +#else +extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); +#endif + +#ifdef pv_pretty +# undef pv_pretty +#endif +#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) +#define Perl_pv_pretty DPPP_(my_pv_pretty) + +#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) + +char * +DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, + const STRLEN max, char const * const start_color, char const * const end_color, + const U32 flags) +{ + const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; + STRLEN escaped; + + if (!(flags & PERL_PV_PRETTY_NOCLEAR)) + sv_setpvs(dsv, ""); + + if (dq == '"') + sv_catpvs(dsv, "\""); + else if (flags & PERL_PV_PRETTY_LTGT) + sv_catpvs(dsv, "<"); + + if (start_color != NULL) + sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); + + pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); + + if (end_color != NULL) + sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); + + if (dq == '"') + sv_catpvs(dsv, "\""); + else if (flags & PERL_PV_PRETTY_LTGT) + sv_catpvs(dsv, ">"); + + if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) + sv_catpvs(dsv, "..."); + + return SvPVX(dsv); +} + +#endif +#endif + +#ifndef pv_display +#if defined(NEED_pv_display) +static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); +static +#else +extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); +#endif + +#ifdef pv_display +# undef pv_display +#endif +#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) +#define Perl_pv_display DPPP_(my_pv_display) + +#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) + +char * +DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) +{ + pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); + if (len > cur && pv[cur] == '\0') + sv_catpvs(dsv, "\\0"); + return SvPVX(dsv); +} + +#endif +#endif + +#endif /* _P_P_PORTABILITY_H_ */ + +/* End of File ppport.h */ diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/01load.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/01load.t new file mode 100644 index 0000000..efa38e6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/01load.t @@ -0,0 +1,3 @@ +use Test::More tests => 1; +BEGIN { use_ok('Object::WithIntAndString') }; + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/02test.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/02test.t new file mode 100644 index 0000000..2c96c49 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/t/02test.t @@ -0,0 +1,39 @@ +use strict; +use warnings; + +use Test::More tests => 25; +BEGIN { use_ok('Object::WithIntAndString') }; + +SCOPE: { + my $o = Object::WithIntAndString->newIntAndString("Hello", 54); + check_obj($o); + + is($o->GetInt(), 54); + is($o->GetString(), "Hello"); + + $o->SetInt(2); + is($o->GetInt(), 2); + $o->SetString("foo"); + is($o->GetString(), "foo"); +} + +SCOPE: { + my $o = Object::WithIntAndString->new; + check_obj($o); + + is($o->GetInt(), 0); + is($o->GetString(), ""); + + $o->SetInt(3); + is($o->GetInt(), 3); + $o->SetString("fOo"); + is($o->GetString(), "fOo"); +} + + +sub check_obj { + my $o = shift; + isa_ok($o, 'Object::WithIntAndString'); + can_ok($o, $_) foreach qw(new SetString SetInt GetInt GetString Sum); + ok(!$o->can($_)) foreach qw(SetValue); +} diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap new file mode 100644 index 0000000..37d45ff --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap @@ -0,0 +1,3 @@ +TYPEMAP +IntAndString* O_OBJECT + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap.xsp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap.xsp new file mode 100644 index 0000000..a5715ed --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/examples/Object-WithIntAndString/typemap.xsp @@ -0,0 +1,3 @@ + +// Map the type of our custom class +%typemap{IntAndString*}{simple}; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/inc/My/Build.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/inc/My/Build.pm new file mode 100644 index 0000000..cc50aee --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/inc/My/Build.pm @@ -0,0 +1,36 @@ +package My::Build; + +use strict; +use warnings; +use base qw(Module::Build); +use File::Spec (); + +sub ACTION_code { + my( $self ) = @_; + + # Generate the parser using yapp + my $grammar_module = File::Spec->catfile(qw(lib ExtUtils XSpp Grammar.pm)); + if( !$self->up_to_date( [ 'XSP.yp' ], + [ $grammar_module ] ) ) { + $self->do_system( 'yapp', '-v', '-m', 'ExtUtils::XSpp::Grammar', '-s', + '-o', $grammar_module, 'XSP.yp' ); + + # Replace the copy Parse::Yapp::Driver with a package in + # our own namespace hierarchy + open my $fh, '+<', $grammar_module + or die "Could not open file '$grammar_module' for rw: $!"; + my @code = map { + s{(?; + seek $fh, 0, 0; + truncate $fh, 0; + print $fh @code; + close $fh or die "Updating grammar module failed: $!"; + } + + $self->SUPER::ACTION_code; +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pm new file mode 100644 index 0000000..92b5560 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pm @@ -0,0 +1,10 @@ +package ExtUtils::XSpp; + +use strict; +use warnings; + +use ExtUtils::XSpp::Driver; + +our $VERSION = '0.07'; + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pod b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pod new file mode 100644 index 0000000..ee1d7db --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp.pod @@ -0,0 +1,173 @@ +=head1 NAME + +ExtUtils::XSpp - XS for C++ + +=head1 SYNOPSIS + + xspp [--typemap=typemap.xsp [--typemap=typemap2.xsp]] + [--xsubpp[=/path/to/xsubpp] [--xsubpp-args="xsubpp args"] + Foo.xsp + +or + + perl -MExtUtils::XSpp::Cmd -e xspp -- + +In Foo.xs + + INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- + +Using C is equivalent to using the C +command line script, except that there is no guarantee for C to +be installed in the system PATH. + +=head1 OVERVIEW + +XS++ is just a thin layer over plain XS, hence to use it you +are supposed to know, at the very least, C++ and XS. + +This means that you will need typemaps for B the normal XS +pre-processor I and the XS++ pre-processor I. + +=head1 COMMAND LINE + +=head2 C<--typemap=/path/to/typemap.xsp> + +Can be specified multiple times to process additional typemap files +before the main XS++ input files. Typemap files are processed the +same way as regular XS++ files, except that output code is discarded. + +=head2 C<--xsubpp[=/path/to/xsubpp]> + +If specified, XS++ will run F after processing the XS++ input +file. If the path to F is not specified, F expects to +find it in the system PATH. + +=head2 C<--xsubpp-args="extra xsubpp args"> + +Can be used to pass additional command line arguments to F. + +=head1 TYPEMAPS + +There is nothing special about typemap files (i.e. you can put typemaps +directly in your .xsp file), but it is handy to have common typemaps in a +separate file, to avoid duplication. + + %typemap{}{simple}; + +Just let XS++ that this is a valid type, the type will be passed +unchanged to XS code B that any C qualifiers will be +stripped. + + %typemap{}{parsed}{%%}; + +When C is used, replace it with C in the +generated XS code. + + %typemap{}{reference}; + +Handle C++ references: the XS variable will be declared as a pointer, +and it will be explicitly dereferenced in the function call. If it is +used in the return value, the function will create B of the +returned value using a copy constructor. + +=head1 DESCRIPTION + +Anything that does not look like a XS++ directive or a class +declaration is passed verbatim to XS. If you want XS++ to ignore code +that looks like a XS++ directive or class declaration, simply surround it with +a raw block delimiter like this: + + %{ + XS++ won't interpret this + %} + +=head2 %code + +See under B. + +=head2 %file + + %file{file/path.h}; + ... + %file{file/path2}; + ... + %file{-} + +By default XS++ output goes to standard output; to change this, use the +C<%file> directive; use C<-> for standard output. + +=head2 %module + + %module{Module__Name}; + +Will be used to generate the C XS directives. + +=head2 %name + + %name{Perl::Class} class MyClass { ... }; + %name{Perl::Func} int foo(); + +Specifies the perl name under which the C++ class/function will be +accessible. + +=head2 %typemap + +See B above. + +=head2 %length + +When you need to pass a string from Perl to an XSUB that +takes the C string and its length as arguments, +you may have XS++ pass the length of the string automatically. +For example, if you declare a method as follows, + + void PrintLine( char* line, unsigned int %length{line} ); + +you can call the method from Perl like this: + + $object->PrintLine( $string ); + +This feature is also present in plain XS. See also: L + +=head2 Classes + + %name{My::Class} class MyClass : public %name{My::Base} MyBase + { + // can be called in Perl as My::Class->new( ... ); + MyClass( int arg ); + // My::Class->newMyClass( ... ); + %name{newMyClass} MyClass( const char* str, int arg ); + + // standard DESTROY method + ~MyClass(); + + int GetInt(); + void SetValue( int arg = -1 ); + + %name{SetString} void SetValue( const char* string = NULL ); + + // Supply a C or C block for the XS + int MyMethod( int a, int b ) + %code{% RETVAL = a + b; %} + %cleanup{% /* do something */ %}; + }; + +=head2 Comments + +XS++ recognizes both C-style comments C and C++-style +comments C. Comments are removed from the XS output. + +=head1 AUTHOR + +Mattia Barbon + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +# local variables: +# mode: cperl +# end: diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Cmd.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Cmd.pm new file mode 100644 index 0000000..b010547 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Cmd.pm @@ -0,0 +1,54 @@ +package ExtUtils::XSpp::Cmd; + +use strict; + +=head1 NAME + +ExtUtils::XSpp::Cmd - implementation of xspp + +=head1 SYNOPSIS + + perl -MExtUtils::XSpp::Cmd -e xspp -- + +In Foo.xs + + INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- + +Using C is equivalent to using the C +command line script, except that there is no guarantee for C to +be installed in the system PATH. + +=head1 DOCUMENTATION + +See L, L. + +=cut + +use Exporter 'import'; +use Getopt::Long; + +use ExtUtils::XSpp::Driver; + +our @EXPORT = qw(xspp); + +sub xspp { + my( @typemap_files, $xsubpp, $xsubpp_args ); + GetOptions( 'typemap=s' => \@typemap_files, + 'xsubpp:s' => \$xsubpp, + 'xsubpp-args=s' => \$xsubpp_args, + ); + $xsubpp = 'xsubpp' if defined $xsubpp && !length $xsubpp; + + my $driver = ExtUtils::XSpp::Driver->new + ( typemaps => \@typemap_files, + file => shift @ARGV, + xsubpp => $xsubpp, + xsubpp_args => $xsubpp_args, + ); + my $success = $driver->process ? 0 : 1; + + exit $success unless defined wantarray; + return $success; +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Driver.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Driver.pm new file mode 100644 index 0000000..3769e45 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Driver.pm @@ -0,0 +1,107 @@ +package ExtUtils::XSpp::Driver; + +use strict; +use warnings; + +use File::Basename (); +use File::Path (); + +use ExtUtils::XSpp::Parser; + +sub new { + my( $class, %args ) = @_; + my $self = bless \%args, $class; + + return $self; +} + +sub generate { + my( $self ) = @_; + + foreach my $typemap ( $self->typemaps ) { + ExtUtils::XSpp::Parser->new( file => $typemap )->parse; + } + + my $parser = ExtUtils::XSpp::Parser->new( file => $self->file, + string => $self->string, + ); + my $success = $parser->parse; + return() if not $success; + + return $self->_emit( $parser ); +} + +sub process { + my( $self ) = @_; + + my $generated = $self->generate; + return () if not $generated; + return $self->_write( $generated ); +} + +sub _write { + my( $self, $out ) = @_; + + foreach my $f ( keys %$out ) { + if( $f eq '-' ) { + if( $self->xsubpp ) { + require IPC::Open2; + + my $cmd = $self->xsubpp . ' ' . ( $self->xsubpp_args || '' ) + . ' -'; + my $pid = IPC::Open2::open2( '>&STDOUT', my $fh, $cmd ); + + print $fh $$out{$f} or die "Error writing to xsubpp: $!"; + close $fh or die "Error writing to xsubpp: $!"; + waitpid( $pid, 0 ); + my $exit_code = $? >> 8; + + return 0 if $exit_code; + } else { + print $$out{$f} or die "Error writing output"; + } + } else { + File::Path::mkpath( File::Basename::dirname( $f ) ); + + open my $fh, '>', $f or die "open '$f': $!"; + binmode $fh; + print $fh $$out{$f} or die "Error writing to '$f': $!"; + close $fh or die "close '$f': $!"; + } + } + + return 1; +} + +sub _emit { + my( $self, $parser ) = @_; + my $data = $parser->get_data; + my %out; + my $out_file = '-'; + my %state = ( current_module => undef ); + + foreach my $plugin ( @{$parser->post_process_plugins} ) { + $plugin->post_process( $data ); + } + + foreach my $e ( @$data ) { + if( $e->isa( 'ExtUtils::XSpp::Node::Module' ) ) { + $state{current_module} = $e; + } + if( $e->isa( 'ExtUtils::XSpp::Node::File' ) ) { + $out_file = $e->file; + } + $out{$out_file} .= $e->print( \%state ); + } + + return \%out; +} + +sub typemaps { @{$_[0]->{typemaps} || []} } +sub file { $_[0]->{file} } +sub string { $_[0]->{string} } +sub output { $_[0]->{output} } +sub xsubpp { $_[0]->{xsubpp} } +sub xsubpp_args { $_[0]->{xsubpp_args} } + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Grammar.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Grammar.pm new file mode 100644 index 0000000..8c7b40c --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Grammar.pm @@ -0,0 +1,2552 @@ +#################################################################### +# +# This file was generated using Parse::Yapp version 1.05. +# +# Don't edit this file, use source file instead. +# +# ANY CHANGE MADE HERE WILL BE LOST ! +# +#################################################################### +package ExtUtils::XSpp::Grammar; +use vars qw ( @ISA ); +use strict; + +@ISA= qw ( ExtUtils::XSpp::Grammar::YappDriver ); +#Included Parse/Yapp/Driver.pm file---------------------------------------- +{ +# +# Module ExtUtils::XSpp::Grammar::YappDriver +# +# This module is part of the Parse::Yapp package available on your +# nearest CPAN +# +# Any use of this module in a standalone parser make the included +# text under the same copyright as the Parse::Yapp module itself. +# +# This notice should remain unchanged. +# +# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved. +# (see the pod text in Parse::Yapp module for use and distribution rights) +# + +package ExtUtils::XSpp::Grammar::YappDriver; + +require 5.004; + +use strict; + +use vars qw ( $VERSION $COMPATIBLE $FILENAME ); + +$VERSION = '1.05'; +$COMPATIBLE = '0.07'; +$FILENAME=__FILE__; + +use Carp; + +#Known parameters, all starting with YY (leading YY will be discarded) +my(%params)=(YYLEX => 'CODE', 'YYERROR' => 'CODE', YYVERSION => '', + YYRULES => 'ARRAY', YYSTATES => 'ARRAY', YYDEBUG => ''); +#Mandatory parameters +my(@params)=('LEX','RULES','STATES'); + +sub new { + my($class)=shift; + my($errst,$nberr,$token,$value,$check,$dotpos); + my($self)={ ERROR => \&_Error, + ERRST => \$errst, + NBERR => \$nberr, + TOKEN => \$token, + VALUE => \$value, + DOTPOS => \$dotpos, + STACK => [], + DEBUG => 0, + CHECK => \$check }; + + _CheckParams( [], \%params, \@_, $self ); + + exists($$self{VERSION}) + and $$self{VERSION} < $COMPATIBLE + and croak "Yapp driver version $VERSION ". + "incompatible with version $$self{VERSION}:\n". + "Please recompile parser module."; + + ref($class) + and $class=ref($class); + + bless($self,$class); +} + +sub YYParse { + my($self)=shift; + my($retval); + + _CheckParams( \@params, \%params, \@_, $self ); + + if($$self{DEBUG}) { + _DBLoad(); + $retval = eval '$self->_DBParse()';#Do not create stab entry on compile + $@ and die $@; + } + else { + $retval = $self->_Parse(); + } + $retval +} + +sub YYData { + my($self)=shift; + + exists($$self{USER}) + or $$self{USER}={}; + + $$self{USER}; + +} + +sub YYErrok { + my($self)=shift; + + ${$$self{ERRST}}=0; + undef; +} + +sub YYNberr { + my($self)=shift; + + ${$$self{NBERR}}; +} + +sub YYRecovering { + my($self)=shift; + + ${$$self{ERRST}} != 0; +} + +sub YYAbort { + my($self)=shift; + + ${$$self{CHECK}}='ABORT'; + undef; +} + +sub YYAccept { + my($self)=shift; + + ${$$self{CHECK}}='ACCEPT'; + undef; +} + +sub YYError { + my($self)=shift; + + ${$$self{CHECK}}='ERROR'; + undef; +} + +sub YYSemval { + my($self)=shift; + my($index)= $_[0] - ${$$self{DOTPOS}} - 1; + + $index < 0 + and -$index <= @{$$self{STACK}} + and return $$self{STACK}[$index][1]; + + undef; #Invalid index +} + +sub YYCurtok { + my($self)=shift; + + @_ + and ${$$self{TOKEN}}=$_[0]; + ${$$self{TOKEN}}; +} + +sub YYCurval { + my($self)=shift; + + @_ + and ${$$self{VALUE}}=$_[0]; + ${$$self{VALUE}}; +} + +sub YYExpect { + my($self)=shift; + + keys %{$self->{STATES}[$self->{STACK}[-1][0]]{ACTIONS}} +} + +sub YYLexer { + my($self)=shift; + + $$self{LEX}; +} + + +################# +# Private stuff # +################# + + +sub _CheckParams { + my($mandatory,$checklist,$inarray,$outhash)=@_; + my($prm,$value); + my($prmlst)={}; + + while(($prm,$value)=splice(@$inarray,0,2)) { + $prm=uc($prm); + exists($$checklist{$prm}) + or croak("Unknow parameter '$prm'"); + ref($value) eq $$checklist{$prm} + or croak("Invalid value for parameter '$prm'"); + $prm=unpack('@2A*',$prm); + $$outhash{$prm}=$value; + } + for (@$mandatory) { + exists($$outhash{$_}) + or croak("Missing mandatory parameter '".lc($_)."'"); + } +} + +sub _Error { + print "Parse error.\n"; +} + +sub _DBLoad { + { + no strict 'refs'; + + exists(${__PACKAGE__.'::'}{_DBParse})#Already loaded ? + and return; + } + my($fname)=__FILE__; + my(@drv); + open(DRV,"<$fname") or die "Report this as a BUG: Cannot open $fname"; + while() { + /^\s*sub\s+_Parse\s*{\s*$/ .. /^\s*}\s*#\s*_Parse\s*$/ + and do { + s/^#DBG>//; + push(@drv,$_); + } + } + close(DRV); + + $drv[0]=~s/_P/_DBP/; + eval join('',@drv); +} + +#Note that for loading debugging version of the driver, +#this file will be parsed from 'sub _Parse' up to '}#_Parse' inclusive. +#So, DO NOT remove comment at end of sub !!! +sub _Parse { + my($self)=shift; + + my($rules,$states,$lex,$error) + = @$self{ 'RULES', 'STATES', 'LEX', 'ERROR' }; + my($errstatus,$nberror,$token,$value,$stack,$check,$dotpos) + = @$self{ 'ERRST', 'NBERR', 'TOKEN', 'VALUE', 'STACK', 'CHECK', 'DOTPOS' }; + +#DBG> my($debug)=$$self{DEBUG}; +#DBG> my($dbgerror)=0; + +#DBG> my($ShowCurToken) = sub { +#DBG> my($tok)='>'; +#DBG> for (split('',$$token)) { +#DBG> $tok.= (ord($_) < 32 or ord($_) > 126) +#DBG> ? sprintf('<%02X>',ord($_)) +#DBG> : $_; +#DBG> } +#DBG> $tok.='<'; +#DBG> }; + + $$errstatus=0; + $$nberror=0; + ($$token,$$value)=(undef,undef); + @$stack=( [ 0, undef ] ); + $$check=''; + + while(1) { + my($actions,$act,$stateno); + + $stateno=$$stack[-1][0]; + $actions=$$states[$stateno]; + +#DBG> print STDERR ('-' x 40),"\n"; +#DBG> $debug & 0x2 +#DBG> and print STDERR "In state $stateno:\n"; +#DBG> $debug & 0x08 +#DBG> and print STDERR "Stack:[". +#DBG> join(',',map { $$_[0] } @$stack). +#DBG> "]\n"; + + + if (exists($$actions{ACTIONS})) { + + defined($$token) + or do { + ($$token,$$value)=&$lex($self); +#DBG> $debug & 0x01 +#DBG> and print STDERR "Need token. Got ".&$ShowCurToken."\n"; + }; + + $act= exists($$actions{ACTIONS}{$$token}) + ? $$actions{ACTIONS}{$$token} + : exists($$actions{DEFAULT}) + ? $$actions{DEFAULT} + : undef; + } + else { + $act=$$actions{DEFAULT}; +#DBG> $debug & 0x01 +#DBG> and print STDERR "Don't need token.\n"; + } + + defined($act) + and do { + + $act > 0 + and do { #shift + +#DBG> $debug & 0x04 +#DBG> and print STDERR "Shift and go to state $act.\n"; + + $$errstatus + and do { + --$$errstatus; + +#DBG> $debug & 0x10 +#DBG> and $dbgerror +#DBG> and $$errstatus == 0 +#DBG> and do { +#DBG> print STDERR "**End of Error recovery.\n"; +#DBG> $dbgerror=0; +#DBG> }; + }; + + + push(@$stack,[ $act, $$value ]); + + $$token ne '' #Don't eat the eof + and $$token=$$value=undef; + next; + }; + + #reduce + my($lhs,$len,$code,@sempar,$semval); + ($lhs,$len,$code)=@{$$rules[-$act]}; + +#DBG> $debug & 0x04 +#DBG> and $act +#DBG> and print STDERR "Reduce using rule ".-$act." ($lhs,$len): "; + + $act + or $self->YYAccept(); + + $$dotpos=$len; + + unpack('A1',$lhs) eq '@' #In line rule + and do { + $lhs =~ /^\@[0-9]+\-([0-9]+)$/ + or die "In line rule name '$lhs' ill formed: ". + "report it as a BUG.\n"; + $$dotpos = $1; + }; + + @sempar = $$dotpos + ? map { $$_[1] } @$stack[ -$$dotpos .. -1 ] + : (); + + $semval = $code ? &$code( $self, @sempar ) + : @sempar ? $sempar[0] : undef; + + splice(@$stack,-$len,$len); + + $$check eq 'ACCEPT' + and do { + +#DBG> $debug & 0x04 +#DBG> and print STDERR "Accept.\n"; + + return($semval); + }; + + $$check eq 'ABORT' + and do { + +#DBG> $debug & 0x04 +#DBG> and print STDERR "Abort.\n"; + + return(undef); + + }; + +#DBG> $debug & 0x04 +#DBG> and print STDERR "Back to state $$stack[-1][0], then "; + + $$check eq 'ERROR' + or do { +#DBG> $debug & 0x04 +#DBG> and print STDERR +#DBG> "go to state $$states[$$stack[-1][0]]{GOTOS}{$lhs}.\n"; + +#DBG> $debug & 0x10 +#DBG> and $dbgerror +#DBG> and $$errstatus == 0 +#DBG> and do { +#DBG> print STDERR "**End of Error recovery.\n"; +#DBG> $dbgerror=0; +#DBG> }; + + push(@$stack, + [ $$states[$$stack[-1][0]]{GOTOS}{$lhs}, $semval ]); + $$check=''; + next; + }; + +#DBG> $debug & 0x04 +#DBG> and print STDERR "Forced Error recovery.\n"; + + $$check=''; + + }; + + #Error + $$errstatus + or do { + + $$errstatus = 1; + &$error($self); + $$errstatus # if 0, then YYErrok has been called + or next; # so continue parsing + +#DBG> $debug & 0x10 +#DBG> and do { +#DBG> print STDERR "**Entering Error recovery.\n"; +#DBG> ++$dbgerror; +#DBG> }; + + ++$$nberror; + + }; + + $$errstatus == 3 #The next token is not valid: discard it + and do { + $$token eq '' # End of input: no hope + and do { +#DBG> $debug & 0x10 +#DBG> and print STDERR "**At eof: aborting.\n"; + return(undef); + }; + +#DBG> $debug & 0x10 +#DBG> and print STDERR "**Dicard invalid token ".&$ShowCurToken.".\n"; + + $$token=$$value=undef; + }; + + $$errstatus=3; + + while( @$stack + and ( not exists($$states[$$stack[-1][0]]{ACTIONS}) + or not exists($$states[$$stack[-1][0]]{ACTIONS}{error}) + or $$states[$$stack[-1][0]]{ACTIONS}{error} <= 0)) { + +#DBG> $debug & 0x10 +#DBG> and print STDERR "**Pop state $$stack[-1][0].\n"; + + pop(@$stack); + } + + @$stack + or do { + +#DBG> $debug & 0x10 +#DBG> and print STDERR "**No state left on stack: aborting.\n"; + + return(undef); + }; + + #shift the error token + +#DBG> $debug & 0x10 +#DBG> and print STDERR "**Shift \$error token and go to state ". +#DBG> $$states[$$stack[-1][0]]{ACTIONS}{error}. +#DBG> ".\n"; + + push(@$stack, [ $$states[$$stack[-1][0]]{ACTIONS}{error}, undef ]); + + } + + #never reached + croak("Error in driver logic. Please, report it as a BUG"); + +}#_Parse +#DO NOT remove comment + +1; + +} +#End of include-------------------------------------------------- + + + + +sub new { + my($class)=shift; + ref($class) + and $class=ref($class); + + my($self)=$class->SUPER::new( yyversion => '1.05', + yystates => +[ + {#State 0 + ACTIONS => { + 'ID' => 23, + 'p_typemap' => 3, + 'OPSPECIAL' => 28, + 'COMMENT' => 4, + "class" => 6, + 'RAW_CODE' => 30, + "const" => 8, + "int" => 32, + 'p_module' => 13, + 'p_package' => 36, + 'p_loadplugin' => 37, + "short" => 15, + 'p_file' => 38, + "unsigned" => 39, + 'p_name' => 17, + 'p_include' => 18, + "long" => 19, + "char" => 22 + }, + GOTOS => { + 'perc_loadplugin' => 24, + 'class_name' => 1, + 'top_list' => 2, + 'nconsttype' => 27, + 'perc_package' => 26, + 'function' => 25, + 'special_block_start' => 29, + 'perc_name' => 5, + 'class_decl' => 31, + 'typemap' => 7, + 'decorate_class' => 9, + 'special_block' => 10, + 'perc_module' => 33, + 'type_name' => 11, + 'perc_file' => 35, + 'basic_type' => 34, + 'template' => 12, + 'decorate_function' => 14, + 'top' => 16, + 'function_decl' => 40, + 'perc_include' => 41, + 'directive' => 42, + 'type' => 20, + 'class' => 21, + 'raw' => 43 + } + }, + {#State 1 + ACTIONS => { + 'OPANG' => 44 + }, + DEFAULT => -78 + }, + {#State 2 + ACTIONS => { + 'ID' => 23, + '' => 45, + 'p_typemap' => 3, + 'OPSPECIAL' => 28, + 'COMMENT' => 4, + "class" => 6, + 'RAW_CODE' => 30, + "const" => 8, + "int" => 32, + 'p_module' => 13, + 'p_package' => 36, + 'p_loadplugin' => 37, + "short" => 15, + 'p_file' => 38, + "unsigned" => 39, + 'p_name' => 17, + 'p_include' => 18, + "long" => 19, + "char" => 22 + }, + GOTOS => { + 'perc_loadplugin' => 24, + 'class_name' => 1, + 'function' => 25, + 'perc_package' => 26, + 'nconsttype' => 27, + 'special_block_start' => 29, + 'perc_name' => 5, + 'class_decl' => 31, + 'typemap' => 7, + 'decorate_class' => 9, + 'special_block' => 10, + 'perc_module' => 33, + 'type_name' => 11, + 'perc_file' => 35, + 'basic_type' => 34, + 'template' => 12, + 'decorate_function' => 14, + 'top' => 46, + 'function_decl' => 40, + 'perc_include' => 41, + 'directive' => 42, + 'type' => 20, + 'class' => 21, + 'raw' => 43 + } + }, + {#State 3 + ACTIONS => { + 'OPCURLY' => 47 + } + }, + {#State 4 + DEFAULT => -15 + }, + {#State 5 + ACTIONS => { + 'ID' => 23, + "class" => 6, + "short" => 15, + "const" => 8, + 'p_name' => 17, + "unsigned" => 39, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'function' => 49, + 'nconsttype' => 27, + 'template' => 12, + 'decorate_function' => 14, + 'perc_name' => 5, + 'class_decl' => 31, + 'function_decl' => 40, + 'decorate_class' => 9, + 'type' => 20, + 'class' => 48 + } + }, + {#State 6 + ACTIONS => { + 'ID' => 50 + } + }, + {#State 7 + DEFAULT => -12 + }, + {#State 8 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "unsigned" => 39, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 51, + 'template' => 12 + } + }, + {#State 9 + DEFAULT => -18 + }, + {#State 10 + DEFAULT => -16 + }, + {#State 11 + DEFAULT => -76 + }, + {#State 12 + DEFAULT => -77 + }, + {#State 13 + ACTIONS => { + 'OPCURLY' => 52 + } + }, + {#State 14 + DEFAULT => -20 + }, + {#State 15 + ACTIONS => { + "int" => 53 + }, + DEFAULT => -85 + }, + {#State 16 + DEFAULT => -1 + }, + {#State 17 + ACTIONS => { + 'OPCURLY' => 54 + } + }, + {#State 18 + ACTIONS => { + 'OPCURLY' => 55 + } + }, + {#State 19 + ACTIONS => { + "int" => 56 + }, + DEFAULT => -84 + }, + {#State 20 + ACTIONS => { + 'ID' => 57 + } + }, + {#State 21 + DEFAULT => -4 + }, + {#State 22 + DEFAULT => -82 + }, + {#State 23 + ACTIONS => { + 'DCOLON' => 59 + }, + DEFAULT => -91, + GOTOS => { + 'class_suffix' => 58 + } + }, + {#State 24 + ACTIONS => { + 'SEMICOLON' => 60 + } + }, + {#State 25 + DEFAULT => -6 + }, + {#State 26 + ACTIONS => { + 'SEMICOLON' => 61 + } + }, + {#State 27 + ACTIONS => { + 'STAR' => 63, + 'AMP' => 62 + }, + DEFAULT => -73 + }, + {#State 28 + DEFAULT => -118 + }, + {#State 29 + ACTIONS => { + 'CLSPECIAL' => 64, + 'line' => 65 + }, + GOTOS => { + 'special_block_end' => 66, + 'lines' => 67 + } + }, + {#State 30 + DEFAULT => -14 + }, + {#State 31 + DEFAULT => -17 + }, + {#State 32 + DEFAULT => -83 + }, + {#State 33 + ACTIONS => { + 'SEMICOLON' => 68 + } + }, + {#State 34 + DEFAULT => -79 + }, + {#State 35 + ACTIONS => { + 'SEMICOLON' => 69 + } + }, + {#State 36 + ACTIONS => { + 'OPCURLY' => 70 + } + }, + {#State 37 + ACTIONS => { + 'OPCURLY' => 71 + } + }, + {#State 38 + ACTIONS => { + 'OPCURLY' => 72 + } + }, + {#State 39 + ACTIONS => { + "short" => 15, + "long" => 19, + "int" => 32, + "char" => 22 + }, + DEFAULT => -80, + GOTOS => { + 'basic_type' => 73 + } + }, + {#State 40 + DEFAULT => -19 + }, + {#State 41 + ACTIONS => { + 'SEMICOLON' => 74 + } + }, + {#State 42 + DEFAULT => -5 + }, + {#State 43 + DEFAULT => -3 + }, + {#State 44 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "unsigned" => 39, + "const" => 8, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'type_list' => 76, + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'type' => 75 + } + }, + {#State 45 + DEFAULT => 0 + }, + {#State 46 + DEFAULT => -2 + }, + {#State 47 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "unsigned" => 39, + "const" => 8, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'type' => 77 + } + }, + {#State 48 + DEFAULT => -23 + }, + {#State 49 + DEFAULT => -24 + }, + {#State 50 + ACTIONS => { + 'COLON' => 79 + }, + DEFAULT => -32, + GOTOS => { + 'base_classes' => 78 + } + }, + {#State 51 + ACTIONS => { + 'STAR' => 63, + 'AMP' => 62 + }, + DEFAULT => -72 + }, + {#State 52 + ACTIONS => { + 'ID' => 23 + }, + GOTOS => { + 'class_name' => 80 + } + }, + {#State 53 + DEFAULT => -87 + }, + {#State 54 + ACTIONS => { + 'ID' => 23 + }, + GOTOS => { + 'class_name' => 81 + } + }, + {#State 55 + ACTIONS => { + 'ID' => 83, + 'DASH' => 84 + }, + GOTOS => { + 'file_name' => 82 + } + }, + {#State 56 + DEFAULT => -86 + }, + {#State 57 + ACTIONS => { + 'OPPAR' => 85 + } + }, + {#State 58 + ACTIONS => { + 'DCOLON' => 86 + }, + DEFAULT => -92 + }, + {#State 59 + ACTIONS => { + 'ID' => 87 + } + }, + {#State 60 + DEFAULT => -10 + }, + {#State 61 + DEFAULT => -8 + }, + {#State 62 + DEFAULT => -75 + }, + {#State 63 + DEFAULT => -74 + }, + {#State 64 + DEFAULT => -119 + }, + {#State 65 + DEFAULT => -120 + }, + {#State 66 + DEFAULT => -117 + }, + {#State 67 + ACTIONS => { + 'CLSPECIAL' => 64, + 'line' => 88 + }, + GOTOS => { + 'special_block_end' => 89 + } + }, + {#State 68 + DEFAULT => -7 + }, + {#State 69 + DEFAULT => -9 + }, + {#State 70 + ACTIONS => { + 'ID' => 23 + }, + GOTOS => { + 'class_name' => 90 + } + }, + {#State 71 + ACTIONS => { + 'ID' => 23 + }, + GOTOS => { + 'class_name' => 91 + } + }, + {#State 72 + ACTIONS => { + 'ID' => 83, + 'DASH' => 84 + }, + GOTOS => { + 'file_name' => 92 + } + }, + {#State 73 + DEFAULT => -81 + }, + {#State 74 + DEFAULT => -11 + }, + {#State 75 + DEFAULT => -89 + }, + {#State 76 + ACTIONS => { + 'CLANG' => 93, + 'COMMA' => 94 + } + }, + {#State 77 + ACTIONS => { + 'CLCURLY' => 95 + } + }, + {#State 78 + ACTIONS => { + 'OPCURLY' => 96, + 'COMMA' => 97 + } + }, + {#State 79 + ACTIONS => { + "protected" => 101, + "private" => 100, + "public" => 98 + }, + GOTOS => { + 'base_class' => 99 + } + }, + {#State 80 + ACTIONS => { + 'CLCURLY' => 102 + } + }, + {#State 81 + ACTIONS => { + 'CLCURLY' => 103 + } + }, + {#State 82 + ACTIONS => { + 'CLCURLY' => 104 + } + }, + {#State 83 + ACTIONS => { + 'DOT' => 106, + 'SLASH' => 105 + } + }, + {#State 84 + DEFAULT => -95 + }, + {#State 85 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "const" => 8, + "unsigned" => 39, + "long" => 19, + "int" => 32, + "char" => 22 + }, + DEFAULT => -100, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'arg_list' => 108, + 'argument' => 109, + 'type' => 107 + } + }, + {#State 86 + ACTIONS => { + 'ID' => 110 + } + }, + {#State 87 + DEFAULT => -93 + }, + {#State 88 + DEFAULT => -121 + }, + {#State 89 + DEFAULT => -116 + }, + {#State 90 + ACTIONS => { + 'CLCURLY' => 111 + } + }, + {#State 91 + ACTIONS => { + 'CLCURLY' => 112 + } + }, + {#State 92 + ACTIONS => { + 'CLCURLY' => 113 + } + }, + {#State 93 + DEFAULT => -88 + }, + {#State 94 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "unsigned" => 39, + "const" => 8, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'type' => 114 + } + }, + {#State 95 + ACTIONS => { + 'OPCURLY' => 115 + } + }, + {#State 96 + ACTIONS => { + 'ID' => 128, + 'p_typemap' => 3, + 'OPSPECIAL' => 28, + "virtual" => 130, + 'COMMENT' => 4, + "class_static" => 116, + "package_static" => 131, + "public" => 118, + 'RAW_CODE' => 30, + "const" => 8, + "int" => 32, + "private" => 121, + 'CLCURLY' => 136, + "short" => 15, + "unsigned" => 39, + 'p_name' => 17, + 'TILDE' => 124, + "protected" => 125, + "long" => 19, + "char" => 22 + }, + GOTOS => { + 'decorate_method' => 129, + 'class_name' => 1, + 'nconsttype' => 27, + 'static' => 117, + 'special_block_start' => 29, + 'perc_name' => 119, + 'typemap' => 120, + 'class_body_element' => 132, + 'class_body_list' => 134, + 'method' => 133, + 'special_block' => 10, + 'access_specifier' => 122, + 'type_name' => 11, + 'ctor' => 123, + 'basic_type' => 34, + 'template' => 12, + 'virtual' => 135, + 'function_decl' => 137, + 'type' => 20, + 'dtor' => 126, + 'raw' => 138, + 'method_decl' => 127 + } + }, + {#State 97 + ACTIONS => { + "protected" => 101, + "private" => 100, + "public" => 98 + }, + GOTOS => { + 'base_class' => 139 + } + }, + {#State 98 + ACTIONS => { + 'ID' => 23, + 'p_name' => 17 + }, + GOTOS => { + 'perc_name' => 141, + 'class_name' => 140, + 'class_name_rename' => 142 + } + }, + {#State 99 + DEFAULT => -30 + }, + {#State 100 + ACTIONS => { + 'ID' => 23, + 'p_name' => 17 + }, + GOTOS => { + 'perc_name' => 141, + 'class_name' => 140, + 'class_name_rename' => 143 + } + }, + {#State 101 + ACTIONS => { + 'ID' => 23, + 'p_name' => 17 + }, + GOTOS => { + 'perc_name' => 141, + 'class_name' => 140, + 'class_name_rename' => 144 + } + }, + {#State 102 + DEFAULT => -65 + }, + {#State 103 + DEFAULT => -63 + }, + {#State 104 + DEFAULT => -68 + }, + {#State 105 + ACTIONS => { + 'ID' => 83, + 'DASH' => 84 + }, + GOTOS => { + 'file_name' => 145 + } + }, + {#State 106 + ACTIONS => { + 'ID' => 146 + } + }, + {#State 107 + ACTIONS => { + 'ID' => 148, + 'p_length' => 147 + } + }, + {#State 108 + ACTIONS => { + 'CLPAR' => 149, + 'COMMA' => 150 + } + }, + {#State 109 + DEFAULT => -98 + }, + {#State 110 + DEFAULT => -94 + }, + {#State 111 + DEFAULT => -64 + }, + {#State 112 + DEFAULT => -67 + }, + {#State 113 + DEFAULT => -66 + }, + {#State 114 + DEFAULT => -90 + }, + {#State 115 + ACTIONS => { + 'ID' => 151 + } + }, + {#State 116 + DEFAULT => -54 + }, + {#State 117 + ACTIONS => { + 'ID' => 128, + "virtual" => 130, + "class_static" => 116, + "package_static" => 131, + "short" => 15, + "unsigned" => 39, + "const" => 8, + 'p_name' => 17, + 'TILDE' => 124, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'decorate_method' => 129, + 'type_name' => 11, + 'class_name' => 1, + 'ctor' => 123, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'static' => 117, + 'virtual' => 135, + 'perc_name' => 119, + 'function_decl' => 137, + 'method' => 152, + 'type' => 20, + 'dtor' => 126, + 'method_decl' => 127 + } + }, + {#State 118 + ACTIONS => { + 'COLON' => 153 + } + }, + {#State 119 + ACTIONS => { + 'ID' => 128, + "virtual" => 130, + "class_static" => 116, + "package_static" => 131, + "short" => 15, + "unsigned" => 39, + "const" => 8, + 'p_name' => 17, + 'TILDE' => 124, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'decorate_method' => 129, + 'type_name' => 11, + 'class_name' => 1, + 'ctor' => 123, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'static' => 117, + 'virtual' => 135, + 'perc_name' => 119, + 'function_decl' => 137, + 'method' => 154, + 'type' => 20, + 'dtor' => 126, + 'method_decl' => 127 + } + }, + {#State 120 + DEFAULT => -42 + }, + {#State 121 + ACTIONS => { + 'COLON' => 155 + } + }, + {#State 122 + DEFAULT => -43 + }, + {#State 123 + DEFAULT => -48 + }, + {#State 124 + ACTIONS => { + 'ID' => 156 + } + }, + {#State 125 + ACTIONS => { + 'COLON' => 157 + } + }, + {#State 126 + DEFAULT => -49 + }, + {#State 127 + DEFAULT => -21 + }, + {#State 128 + ACTIONS => { + 'DCOLON' => 59, + 'OPPAR' => 158 + }, + DEFAULT => -91, + GOTOS => { + 'class_suffix' => 58 + } + }, + {#State 129 + DEFAULT => -22 + }, + {#State 130 + DEFAULT => -52 + }, + {#State 131 + DEFAULT => -53 + }, + {#State 132 + DEFAULT => -38 + }, + {#State 133 + DEFAULT => -40 + }, + {#State 134 + ACTIONS => { + 'ID' => 128, + 'p_typemap' => 3, + 'OPSPECIAL' => 28, + "virtual" => 130, + 'COMMENT' => 4, + "class_static" => 116, + "package_static" => 131, + "public" => 118, + 'RAW_CODE' => 30, + "const" => 8, + "int" => 32, + "private" => 121, + 'CLCURLY' => 160, + "short" => 15, + "unsigned" => 39, + 'p_name' => 17, + 'TILDE' => 124, + "protected" => 125, + "long" => 19, + "char" => 22 + }, + GOTOS => { + 'decorate_method' => 129, + 'class_name' => 1, + 'nconsttype' => 27, + 'static' => 117, + 'special_block_start' => 29, + 'perc_name' => 119, + 'typemap' => 120, + 'class_body_element' => 159, + 'method' => 133, + 'special_block' => 10, + 'access_specifier' => 122, + 'type_name' => 11, + 'ctor' => 123, + 'basic_type' => 34, + 'template' => 12, + 'virtual' => 135, + 'function_decl' => 137, + 'type' => 20, + 'dtor' => 126, + 'raw' => 138, + 'method_decl' => 127 + } + }, + {#State 135 + ACTIONS => { + 'ID' => 128, + "virtual" => 130, + "class_static" => 116, + "package_static" => 131, + "short" => 15, + "unsigned" => 39, + "const" => 8, + 'p_name' => 17, + 'TILDE' => 124, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'decorate_method' => 129, + 'type_name' => 11, + 'class_name' => 1, + 'ctor' => 123, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'static' => 117, + 'virtual' => 135, + 'perc_name' => 119, + 'function_decl' => 137, + 'method' => 161, + 'type' => 20, + 'dtor' => 126, + 'method_decl' => 127 + } + }, + {#State 136 + ACTIONS => { + 'SEMICOLON' => 162 + } + }, + {#State 137 + DEFAULT => -47 + }, + {#State 138 + DEFAULT => -41 + }, + {#State 139 + DEFAULT => -31 + }, + {#State 140 + DEFAULT => -36 + }, + {#State 141 + ACTIONS => { + 'ID' => 23 + }, + GOTOS => { + 'class_name' => 163 + } + }, + {#State 142 + DEFAULT => -33 + }, + {#State 143 + DEFAULT => -35 + }, + {#State 144 + DEFAULT => -34 + }, + {#State 145 + DEFAULT => -97 + }, + {#State 146 + DEFAULT => -96 + }, + {#State 147 + ACTIONS => { + 'OPCURLY' => 164 + } + }, + {#State 148 + ACTIONS => { + 'EQUAL' => 165 + }, + DEFAULT => -103 + }, + {#State 149 + ACTIONS => { + "const" => 166 + }, + DEFAULT => -51, + GOTOS => { + 'const' => 167 + } + }, + {#State 150 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "unsigned" => 39, + "const" => 8, + "long" => 19, + "int" => 32, + "char" => 22 + }, + GOTOS => { + 'argument' => 168, + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'type' => 107 + } + }, + {#State 151 + ACTIONS => { + 'CLCURLY' => 169 + } + }, + {#State 152 + DEFAULT => -26 + }, + {#State 153 + DEFAULT => -44 + }, + {#State 154 + DEFAULT => -25 + }, + {#State 155 + DEFAULT => -46 + }, + {#State 156 + ACTIONS => { + 'OPPAR' => 170 + } + }, + {#State 157 + DEFAULT => -45 + }, + {#State 158 + ACTIONS => { + 'ID' => 23, + "short" => 15, + "const" => 8, + "unsigned" => 39, + "long" => 19, + "int" => 32, + "char" => 22 + }, + DEFAULT => -100, + GOTOS => { + 'type_name' => 11, + 'class_name' => 1, + 'basic_type' => 34, + 'nconsttype' => 27, + 'template' => 12, + 'arg_list' => 171, + 'argument' => 109, + 'type' => 107 + } + }, + {#State 159 + DEFAULT => -39 + }, + {#State 160 + ACTIONS => { + 'SEMICOLON' => 172 + } + }, + {#State 161 + DEFAULT => -27 + }, + {#State 162 + DEFAULT => -29 + }, + {#State 163 + DEFAULT => -37 + }, + {#State 164 + ACTIONS => { + 'ID' => 173 + } + }, + {#State 165 + ACTIONS => { + 'ID' => 23, + 'INTEGER' => 175, + 'QUOTED_STRING' => 177, + 'DASH' => 179, + 'FLOAT' => 178 + }, + GOTOS => { + 'class_name' => 174, + 'value' => 176 + } + }, + {#State 166 + DEFAULT => -50 + }, + {#State 167 + DEFAULT => -59, + GOTOS => { + 'metadata' => 180 + } + }, + {#State 168 + DEFAULT => -99 + }, + {#State 169 + ACTIONS => { + 'OPSPECIAL' => 28 + }, + DEFAULT => -115, + GOTOS => { + 'special_blocks' => 182, + 'special_block' => 181, + 'special_block_start' => 29 + } + }, + {#State 170 + ACTIONS => { + 'CLPAR' => 183 + } + }, + {#State 171 + ACTIONS => { + 'CLPAR' => 184, + 'COMMA' => 150 + } + }, + {#State 172 + DEFAULT => -28 + }, + {#State 173 + ACTIONS => { + 'CLCURLY' => 185 + } + }, + {#State 174 + ACTIONS => { + 'OPPAR' => 186 + }, + DEFAULT => -108 + }, + {#State 175 + DEFAULT => -104 + }, + {#State 176 + DEFAULT => -102 + }, + {#State 177 + DEFAULT => -107 + }, + {#State 178 + DEFAULT => -106 + }, + {#State 179 + ACTIONS => { + 'INTEGER' => 187 + } + }, + {#State 180 + ACTIONS => { + 'p_code' => 193, + 'p_cleanup' => 189, + 'SEMICOLON' => 194, + 'p_postcall' => 190 + }, + GOTOS => { + '_metadata' => 191, + 'perc_postcall' => 192, + 'perc_code' => 188, + 'perc_cleanup' => 195 + } + }, + {#State 181 + DEFAULT => -113 + }, + {#State 182 + ACTIONS => { + 'OPSPECIAL' => 28, + 'SEMICOLON' => 197 + }, + GOTOS => { + 'special_block' => 196, + 'special_block_start' => 29 + } + }, + {#State 183 + DEFAULT => -59, + GOTOS => { + 'metadata' => 198 + } + }, + {#State 184 + DEFAULT => -59, + GOTOS => { + 'metadata' => 199 + } + }, + {#State 185 + DEFAULT => -101 + }, + {#State 186 + ACTIONS => { + 'ID' => 23, + 'INTEGER' => 175, + 'QUOTED_STRING' => 177, + 'DASH' => 179, + 'FLOAT' => 178 + }, + DEFAULT => -112, + GOTOS => { + 'class_name' => 174, + 'value_list' => 200, + 'value' => 201 + } + }, + {#State 187 + DEFAULT => -105 + }, + {#State 188 + DEFAULT => -60 + }, + {#State 189 + ACTIONS => { + 'OPSPECIAL' => 28 + }, + GOTOS => { + 'special_block' => 202, + 'special_block_start' => 29 + } + }, + {#State 190 + ACTIONS => { + 'OPSPECIAL' => 28 + }, + GOTOS => { + 'special_block' => 203, + 'special_block_start' => 29 + } + }, + {#State 191 + DEFAULT => -58 + }, + {#State 192 + DEFAULT => -62 + }, + {#State 193 + ACTIONS => { + 'OPSPECIAL' => 28 + }, + GOTOS => { + 'special_block' => 204, + 'special_block_start' => 29 + } + }, + {#State 194 + DEFAULT => -55 + }, + {#State 195 + DEFAULT => -61 + }, + {#State 196 + DEFAULT => -114 + }, + {#State 197 + DEFAULT => -13 + }, + {#State 198 + ACTIONS => { + 'p_code' => 193, + 'p_cleanup' => 189, + 'SEMICOLON' => 205, + 'p_postcall' => 190 + }, + GOTOS => { + '_metadata' => 191, + 'perc_postcall' => 192, + 'perc_code' => 188, + 'perc_cleanup' => 195 + } + }, + {#State 199 + ACTIONS => { + 'p_code' => 193, + 'p_cleanup' => 189, + 'SEMICOLON' => 206, + 'p_postcall' => 190 + }, + GOTOS => { + '_metadata' => 191, + 'perc_postcall' => 192, + 'perc_code' => 188, + 'perc_cleanup' => 195 + } + }, + {#State 200 + ACTIONS => { + 'CLPAR' => 207, + 'COMMA' => 208 + } + }, + {#State 201 + DEFAULT => -110 + }, + {#State 202 + DEFAULT => -70 + }, + {#State 203 + DEFAULT => -71 + }, + {#State 204 + DEFAULT => -69 + }, + {#State 205 + DEFAULT => -57 + }, + {#State 206 + DEFAULT => -56 + }, + {#State 207 + DEFAULT => -109 + }, + {#State 208 + ACTIONS => { + 'ID' => 23, + 'INTEGER' => 175, + 'QUOTED_STRING' => 177, + 'DASH' => 179, + 'FLOAT' => 178 + }, + GOTOS => { + 'class_name' => 174, + 'value' => 209 + } + }, + {#State 209 + DEFAULT => -111 + } +], + yyrules => +[ + [#Rule 0 + '$start', 2, undef + ], + [#Rule 1 + 'top_list', 1, +sub +#line 21 "XSP.yp" +{ $_[1] ? [ $_[1] ] : [] } + ], + [#Rule 2 + 'top_list', 2, +sub +#line 22 "XSP.yp" +{ push @{$_[1]}, $_[2] if $_[2]; $_[1] } + ], + [#Rule 3 + 'top', 1, undef + ], + [#Rule 4 + 'top', 1, undef + ], + [#Rule 5 + 'top', 1, undef + ], + [#Rule 6 + 'top', 1, +sub +#line 26 "XSP.yp" +{ $_[1]->resolve_typemaps; $_[1] } + ], + [#Rule 7 + 'directive', 2, +sub +#line 29 "XSP.yp" +{ ExtUtils::XSpp::Node::Module->new( module => $_[1] ) } + ], + [#Rule 8 + 'directive', 2, +sub +#line 31 "XSP.yp" +{ ExtUtils::XSpp::Node::Package->new( perl_name => $_[1] ) } + ], + [#Rule 9 + 'directive', 2, +sub +#line 33 "XSP.yp" +{ ExtUtils::XSpp::Node::File->new( file => $_[1] ) } + ], + [#Rule 10 + 'directive', 2, +sub +#line 35 "XSP.yp" +{ $_[0]->YYData->{PARSER}->load_plugin( $_[1] ); undef } + ], + [#Rule 11 + 'directive', 2, +sub +#line 37 "XSP.yp" +{ $_[0]->YYData->{PARSER}->include_file( $_[1] ); undef } + ], + [#Rule 12 + 'directive', 1, +sub +#line 38 "XSP.yp" +{ } + ], + [#Rule 13 + 'typemap', 9, +sub +#line 42 "XSP.yp" +{ my $package = "ExtUtils::XSpp::Typemap::" . $_[6]; + my $type = $_[3]; my $c = 0; + my %args = map { "arg" . ++$c => $_ } + map { join( '', @$_ ) } + @{$_[8] || []}; + my $tm = $package->new( type => $type, %args ); + ExtUtils::XSpp::Typemap::add_typemap_for_type( $type, $tm ); + undef } + ], + [#Rule 14 + 'raw', 1, +sub +#line 51 "XSP.yp" +{ add_data_raw( $_[0], [ $_[1] ] ) } + ], + [#Rule 15 + 'raw', 1, +sub +#line 52 "XSP.yp" +{ add_data_comment( $_[0], $_[1] ) } + ], + [#Rule 16 + 'raw', 1, +sub +#line 53 "XSP.yp" +{ add_data_raw( $_[0], [ @{$_[1]} ] ) } + ], + [#Rule 17 + 'class', 1, undef + ], + [#Rule 18 + 'class', 1, undef + ], + [#Rule 19 + 'function', 1, undef + ], + [#Rule 20 + 'function', 1, undef + ], + [#Rule 21 + 'method', 1, undef + ], + [#Rule 22 + 'method', 1, undef + ], + [#Rule 23 + 'decorate_class', 2, +sub +#line 59 "XSP.yp" +{ $_[2]->set_perl_name( $_[1] ); $_[2] } + ], + [#Rule 24 + 'decorate_function', 2, +sub +#line 60 "XSP.yp" +{ $_[2]->set_perl_name( $_[1] ); $_[2] } + ], + [#Rule 25 + 'decorate_method', 2, +sub +#line 61 "XSP.yp" +{ $_[2]->set_perl_name( $_[1] ); $_[2] } + ], + [#Rule 26 + 'decorate_method', 2, +sub +#line 62 "XSP.yp" +{ $_[2]->set_static( $_[1] ); $_[2] } + ], + [#Rule 27 + 'decorate_method', 2, +sub +#line 63 "XSP.yp" +{ $_[2]->set_virtual( 1 ); $_[2] } + ], + [#Rule 28 + 'class_decl', 7, +sub +#line 66 "XSP.yp" +{ create_class( $_[0], $_[2], $_[3], $_[5] ) } + ], + [#Rule 29 + 'class_decl', 6, +sub +#line 68 "XSP.yp" +{ create_class( $_[0], $_[2], $_[3], [] ) } + ], + [#Rule 30 + 'base_classes', 2, +sub +#line 71 "XSP.yp" +{ [ $_[2] ] } + ], + [#Rule 31 + 'base_classes', 3, +sub +#line 72 "XSP.yp" +{ push @{$_[1]}, $_[3] if $_[3]; $_[1] } + ], + [#Rule 32 + 'base_classes', 0, undef + ], + [#Rule 33 + 'base_class', 2, +sub +#line 76 "XSP.yp" +{ $_[2] } + ], + [#Rule 34 + 'base_class', 2, +sub +#line 77 "XSP.yp" +{ $_[2] } + ], + [#Rule 35 + 'base_class', 2, +sub +#line 78 "XSP.yp" +{ $_[2] } + ], + [#Rule 36 + 'class_name_rename', 1, +sub +#line 82 "XSP.yp" +{ create_class( $_[0], $_[1], [], [] ) } + ], + [#Rule 37 + 'class_name_rename', 2, +sub +#line 83 "XSP.yp" +{ my $klass = create_class( $_[0], $_[2], [], [] ); + $klass->set_perl_name( $_[1] ); + $klass + } + ], + [#Rule 38 + 'class_body_list', 1, +sub +#line 91 "XSP.yp" +{ $_[1] ? [ $_[1] ] : [] } + ], + [#Rule 39 + 'class_body_list', 2, +sub +#line 93 "XSP.yp" +{ push @{$_[1]}, $_[2] if $_[2]; $_[1] } + ], + [#Rule 40 + 'class_body_element', 1, undef + ], + [#Rule 41 + 'class_body_element', 1, undef + ], + [#Rule 42 + 'class_body_element', 1, undef + ], + [#Rule 43 + 'class_body_element', 1, undef + ], + [#Rule 44 + 'access_specifier', 2, +sub +#line 99 "XSP.yp" +{ ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + ], + [#Rule 45 + 'access_specifier', 2, +sub +#line 100 "XSP.yp" +{ ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + ], + [#Rule 46 + 'access_specifier', 2, +sub +#line 101 "XSP.yp" +{ ExtUtils::XSpp::Node::Access->new( access => $_[1] ) } + ], + [#Rule 47 + 'method_decl', 1, +sub +#line 105 "XSP.yp" +{ my $f = $_[1]; + my $m = add_data_method + ( $_[0], + name => $f->cpp_name, + ret_type => $f->ret_type, + arguments => $f->arguments, + code => $f->code, + cleanup => $f->cleanup, + postcall => $f->postcall, + ); + $m + } + ], + [#Rule 48 + 'method_decl', 1, undef + ], + [#Rule 49 + 'method_decl', 1, undef + ], + [#Rule 50 + 'const', 1, undef + ], + [#Rule 51 + 'const', 0, undef + ], + [#Rule 52 + 'virtual', 1, undef + ], + [#Rule 53 + 'static', 1, undef + ], + [#Rule 54 + 'static', 1, undef + ], + [#Rule 55 + 'function_decl', 8, +sub +#line 130 "XSP.yp" +{ add_data_function( $_[0], + name => $_[2], + ret_type => $_[1], + arguments => $_[4], + @{ $_[7] } ) } + ], + [#Rule 56 + 'ctor', 6, +sub +#line 137 "XSP.yp" +{ add_data_ctor( $_[0], name => $_[1], + arguments => $_[3], + @{ $_[5] } ) } + ], + [#Rule 57 + 'dtor', 6, +sub +#line 142 "XSP.yp" +{ add_data_dtor( $_[0], name => $_[2], + @{ $_[5] }, + ) } + ], + [#Rule 58 + 'metadata', 2, +sub +#line 146 "XSP.yp" +{ [ @{$_[1]}, @{$_[2]} ] } + ], + [#Rule 59 + 'metadata', 0, +sub +#line 147 "XSP.yp" +{ [] } + ], + [#Rule 60 + '_metadata', 1, undef + ], + [#Rule 61 + '_metadata', 1, undef + ], + [#Rule 62 + '_metadata', 1, undef + ], + [#Rule 63 + 'perc_name', 4, +sub +#line 155 "XSP.yp" +{ $_[3] } + ], + [#Rule 64 + 'perc_package', 4, +sub +#line 156 "XSP.yp" +{ $_[3] } + ], + [#Rule 65 + 'perc_module', 4, +sub +#line 157 "XSP.yp" +{ $_[3] } + ], + [#Rule 66 + 'perc_file', 4, +sub +#line 158 "XSP.yp" +{ $_[3] } + ], + [#Rule 67 + 'perc_loadplugin', 4, +sub +#line 159 "XSP.yp" +{ $_[3] } + ], + [#Rule 68 + 'perc_include', 4, +sub +#line 160 "XSP.yp" +{ $_[3] } + ], + [#Rule 69 + 'perc_code', 2, +sub +#line 161 "XSP.yp" +{ [ code => $_[2] ] } + ], + [#Rule 70 + 'perc_cleanup', 2, +sub +#line 162 "XSP.yp" +{ [ cleanup => $_[2] ] } + ], + [#Rule 71 + 'perc_postcall', 2, +sub +#line 163 "XSP.yp" +{ [ postcall => $_[2] ] } + ], + [#Rule 72 + 'type', 2, +sub +#line 166 "XSP.yp" +{ make_const( $_[2] ) } + ], + [#Rule 73 + 'type', 1, undef + ], + [#Rule 74 + 'nconsttype', 2, +sub +#line 171 "XSP.yp" +{ make_ptr( $_[1] ) } + ], + [#Rule 75 + 'nconsttype', 2, +sub +#line 172 "XSP.yp" +{ make_ref( $_[1] ) } + ], + [#Rule 76 + 'nconsttype', 1, +sub +#line 173 "XSP.yp" +{ make_type( $_[1] ) } + ], + [#Rule 77 + 'nconsttype', 1, undef + ], + [#Rule 78 + 'type_name', 1, undef + ], + [#Rule 79 + 'type_name', 1, undef + ], + [#Rule 80 + 'type_name', 1, +sub +#line 180 "XSP.yp" +{ 'unsigned int' } + ], + [#Rule 81 + 'type_name', 2, +sub +#line 181 "XSP.yp" +{ 'unsigned' . ' ' . $_[2] } + ], + [#Rule 82 + 'basic_type', 1, undef + ], + [#Rule 83 + 'basic_type', 1, undef + ], + [#Rule 84 + 'basic_type', 1, undef + ], + [#Rule 85 + 'basic_type', 1, undef + ], + [#Rule 86 + 'basic_type', 2, undef + ], + [#Rule 87 + 'basic_type', 2, undef + ], + [#Rule 88 + 'template', 4, +sub +#line 187 "XSP.yp" +{ make_template( $_[1], $_[3] ) } + ], + [#Rule 89 + 'type_list', 1, +sub +#line 191 "XSP.yp" +{ [ $_[1] ] } + ], + [#Rule 90 + 'type_list', 3, +sub +#line 192 "XSP.yp" +{ push @{$_[1]}, $_[3]; $_[1] } + ], + [#Rule 91 + 'class_name', 1, undef + ], + [#Rule 92 + 'class_name', 2, +sub +#line 196 "XSP.yp" +{ $_[1] . '::' . $_[2] } + ], + [#Rule 93 + 'class_suffix', 2, +sub +#line 198 "XSP.yp" +{ $_[2] } + ], + [#Rule 94 + 'class_suffix', 3, +sub +#line 199 "XSP.yp" +{ $_[1] . '::' . $_[3] } + ], + [#Rule 95 + 'file_name', 1, +sub +#line 201 "XSP.yp" +{ '-' } + ], + [#Rule 96 + 'file_name', 3, +sub +#line 202 "XSP.yp" +{ $_[1] . '.' . $_[3] } + ], + [#Rule 97 + 'file_name', 3, +sub +#line 203 "XSP.yp" +{ $_[1] . '/' . $_[3] } + ], + [#Rule 98 + 'arg_list', 1, +sub +#line 205 "XSP.yp" +{ [ $_[1] ] } + ], + [#Rule 99 + 'arg_list', 3, +sub +#line 206 "XSP.yp" +{ push @{$_[1]}, $_[3]; $_[1] } + ], + [#Rule 100 + 'arg_list', 0, undef + ], + [#Rule 101 + 'argument', 5, +sub +#line 210 "XSP.yp" +{ make_argument( @_[0, 1], "length($_[4])" ) } + ], + [#Rule 102 + 'argument', 4, +sub +#line 212 "XSP.yp" +{ make_argument( @_[0, 1, 2, 4] ) } + ], + [#Rule 103 + 'argument', 2, +sub +#line 213 "XSP.yp" +{ make_argument( @_ ) } + ], + [#Rule 104 + 'value', 1, undef + ], + [#Rule 105 + 'value', 2, +sub +#line 216 "XSP.yp" +{ '-' . $_[2] } + ], + [#Rule 106 + 'value', 1, undef + ], + [#Rule 107 + 'value', 1, undef + ], + [#Rule 108 + 'value', 1, undef + ], + [#Rule 109 + 'value', 4, +sub +#line 220 "XSP.yp" +{ "$_[1]($_[3])" } + ], + [#Rule 110 + 'value_list', 1, undef + ], + [#Rule 111 + 'value_list', 3, +sub +#line 225 "XSP.yp" +{ "$_[1], $_[2]" } + ], + [#Rule 112 + 'value_list', 0, +sub +#line 226 "XSP.yp" +{ "" } + ], + [#Rule 113 + 'special_blocks', 1, +sub +#line 230 "XSP.yp" +{ [ $_[1] ] } + ], + [#Rule 114 + 'special_blocks', 2, +sub +#line 232 "XSP.yp" +{ [ @{$_[1]}, $_[2] ] } + ], + [#Rule 115 + 'special_blocks', 0, undef + ], + [#Rule 116 + 'special_block', 3, +sub +#line 236 "XSP.yp" +{ $_[2] } + ], + [#Rule 117 + 'special_block', 2, +sub +#line 238 "XSP.yp" +{ [] } + ], + [#Rule 118 + 'special_block_start', 1, +sub +#line 241 "XSP.yp" +{ push_lex_mode( $_[0], 'special' ) } + ], + [#Rule 119 + 'special_block_end', 1, +sub +#line 243 "XSP.yp" +{ pop_lex_mode( $_[0], 'special' ) } + ], + [#Rule 120 + 'lines', 1, +sub +#line 245 "XSP.yp" +{ [ $_[1] ] } + ], + [#Rule 121 + 'lines', 2, +sub +#line 246 "XSP.yp" +{ push @{$_[1]}, $_[2]; $_[1] } + ] +], + @_); + bless($self,$class); +} + +#line 248 "XSP.yp" + + +use ExtUtils::XSpp::Lexer; +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Lexer.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Lexer.pm new file mode 100644 index 0000000..99608b5 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Lexer.pm @@ -0,0 +1,306 @@ +# this module will be loaded by ExtUtils/XSpp/Grammar.pm and needs to +# define subroutines in the ExtUtils::XSpp::Grammar namespace +package ExtUtils::XSpp::Grammar; + +use strict; +use warnings; + +use ExtUtils::XSpp::Node; +use ExtUtils::XSpp::Typemap; + +my %tokens = ( '::' => 'DCOLON', + ':' => 'COLON', + '%{' => 'OPSPECIAL', + '%}' => 'CLSPECIAL', + '{%' => 'OPSPECIAL', + '{' => 'OPCURLY', + '}' => 'CLCURLY', + '(' => 'OPPAR', + ')' => 'CLPAR', + ';' => 'SEMICOLON', + '%' => 'PERC', + '~' => 'TILDE', + '*' => 'STAR', + '&' => 'AMP', + ',' => 'COMMA', + '=' => 'EQUAL', + '/' => 'SLASH', + '.' => 'DOT', + '-' => 'DASH', + '<' => 'OPANG', + '>' => 'CLANG', + # these are here due to my lack of skill with yacc + '%name' => 'p_name', + '%typemap' => 'p_typemap', + '%file' => 'p_file', + '%module' => 'p_module', + '%code' => 'p_code', + '%cleanup' => 'p_cleanup', + '%postcall' => 'p_postcall', + '%package' => 'p_package', + '%length' => 'p_length', + '%loadplugin' => 'p_loadplugin', + '%include' => 'p_include', + ); + +my %keywords = ( const => 1, + class => 1, + unsigned => 1, + short => 1, + long => 1, + int => 1, + char => 1, + package_static => 1, + class_static => 1, + public => 1, + private => 1, + protected => 1, + virtual => 1, + ); + +sub get_lex_mode { return $_[0]->YYData->{LEX}{MODES}[0] || '' } + +sub push_lex_mode { + my( $p, $mode ) = @_; + + push @{$p->YYData->{LEX}{MODES}}, $mode; +} + +sub pop_lex_mode { + my( $p, $mode ) = @_; + + die "Unexpected mode: '$mode'" + unless get_lex_mode( $p ) eq $mode; + + pop @{$p->YYData->{LEX}{MODES}}; +} + +sub read_more { + my $v = readline $_[0]->YYData->{LEX}{FH}; + my $buf = $_[0]->YYData->{LEX}{BUFFER}; + + unless( defined $v ) { + if( $_[0]->YYData->{LEX}{NEXT} ) { + $_[0]->YYData->{LEX} = $_[0]->YYData->{LEX}{NEXT}; + $buf = $_[0]->YYData->{LEX}{BUFFER}; + + return $buf if length $$buf; + return read_more( $_[0] ); + } else { + return; + } + } + + $$buf .= $v; + + return $buf; +} + +sub yylex { + my $data = $_[0]->YYData->{LEX}; + my $buf = $data->{BUFFER}; + + for(;;) { + if( !length( $$buf ) && !( $buf = read_more( $_[0] ) ) ) { + return ( '', undef ); + } + + if( get_lex_mode( $_[0] ) eq 'special' ) { + if( $$buf =~ s/^%}// ) { + return ( 'CLSPECIAL', '%}' ); + } elsif( $$buf =~ s/^([^\n]*)\n$// ) { + my $line = $1; + + if( $line =~ m/^(.*?)\%}(.*)$/ ) { + $$buf = "%}$2\n"; + $line = $1; + } + + return ( 'line', $line ); + } + } else { + $$buf =~ s/^[\s\n\r]+//; + next unless length $$buf; + + if( $$buf =~ s/^([+-]?(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?)// ) { + return ( 'FLOAT', $1 ); + } elsif( $$buf =~ s/^\/\/(.*)(?:\r\n|\r|\n)// ) { + return ( 'COMMENT', [ $1 ] ); + } elsif( $$buf =~ /^\/\*/ ) { + my @rows; + for(; length( $$buf ) || ( $buf = read_more( $_[0] ) ); $$buf = '') { + if( $$buf =~ s/(.*?\*\/)// ) { + push @rows, $1; + return ( 'COMMENT', \@rows ); + } + $$buf =~ s/(?:\r\n|\r|\n)$//; + push @rows, $$buf; + } + } elsif( $$buf =~ s/^( \%} + | \%{ | {\% + | \%name | \%typemap | \%module | \%code + | \%file | \%cleanup | \%package | \%length + | \%loadplugin | \%include | \%postcall + | [{}();%~*&,=\/\.\-<>] + | :: | : + )//x ) { + return ( $tokens{$1}, $1 ); + } elsif( $$buf =~ s/^(INCLUDE(?:_COMMAND)?:.*)(?:\r\n|\r|\n)// ) { + return ( 'RAW_CODE', "$1\n" ); + } elsif( $$buf =~ m/^([a-zA-Z_]\w*)\W/ ) { + $$buf =~ s/^(\w+)//; + + return ( $1, $1 ) if exists $keywords{$1}; + + return ( 'ID', $1 ); + } elsif( $$buf =~ s/^(\d+)// ) { + return ( 'INTEGER', $1 ); + } elsif( $$buf =~ s/^("[^"]*")// ) { + return ( 'QUOTED_STRING', $1 ); + } elsif( $$buf =~ s/^(#.*)(?:\r\n|\r|\n)// ) { + return ( 'RAW_CODE', $1 ); + } else { + die $$buf; + } + } + } +} + +sub yyerror { + my $data = $_[0]->YYData->{LEX}; + my $buf = $data->{BUFFER}; + my $fh = $data->{FH}; + + print STDERR "Error: line " . $fh->input_line_number . " (Current token type: '", + $_[0]->YYCurtok, "') (Current value: '", + $_[0]->YYCurval, '\') Buffer: "', ( $buf ? $$buf : '--empty buffer--' ), + q{"} . "\n"; + print STDERR "Expecting: (", ( join ", ", map { "'$_'" } $_[0]->YYExpect ), + ")\n"; +} + +sub make_const { $_[0]->{CONST} = 1; $_[0] } +sub make_ref { $_[0]->{REFERENCE} = 1; $_[0] } +sub make_ptr { $_[0]->{POINTER}++; $_[0] } +sub make_type { ExtUtils::XSpp::Node::Type->new( base => $_[0] ) } + +sub make_template { + ExtUtils::XSpp::Node::Type->new( base => $_[0], + template_args => $_[1], + ) +} + +sub add_data_raw { + my $p = shift; + my $rows = shift; + + ExtUtils::XSpp::Node::Raw->new( rows => $rows ); +} + +sub add_data_comment { + my $p = shift; + my $rows = shift; + + ExtUtils::XSpp::Node::Comment->new( rows => $rows ); +} + +sub make_argument { + my( $p, $type, $name, $default ) = @_; + + ExtUtils::XSpp::Node::Argument->new( type => $type, + name => $name, + default => $default ); +} + +sub create_class { + my( $parser, $name, $bases, $methods ) = @_; + my $class = ExtUtils::XSpp::Node::Class->new( cpp_name => $name, + base_classes => $bases ); + + # when adding a class C, automatically add weak typemaps for C* and C& + my $ptr = ExtUtils::XSpp::Node::Type->new + ( base => $name, + pointer => 1, + ); + my $ref = ExtUtils::XSpp::Node::Type->new + ( base => $name, + reference => 1, + ); + + ExtUtils::XSpp::Typemap::add_weak_typemap_for_type + ( $ptr, ExtUtils::XSpp::Typemap::simple->new( type => $ptr ) ); + ExtUtils::XSpp::Typemap::add_weak_typemap_for_type + ( $ref, ExtUtils::XSpp::Typemap::reference->new( type => $ref ) ); + + # finish creating the class + $class->add_methods( @$methods ); + + return $class; +} + +sub add_data_function { + my( $parser, %args ) = @_; + + ExtUtils::XSpp::Node::Function->new + ( cpp_name => $args{name}, + class => $args{class}, + ret_type => $args{ret_type}, + arguments => $args{arguments}, + code => $args{code}, + cleanup => $args{cleanup}, + postcall => $args{postcall}, + ); +} + +sub add_data_method { + my( $parser, %args ) = @_; + + ExtUtils::XSpp::Node::Method->new + ( cpp_name => $args{name}, + ret_type => $args{ret_type}, + arguments => $args{arguments}, + code => $args{code}, + cleanup => $args{cleanup}, + postcall => $args{postcall}, + perl_name => $args{perl_name}, + ); +} + +sub add_data_ctor { + my( $parser, %args ) = @_; + + ExtUtils::XSpp::Node::Constructor->new + ( cpp_name => $args{name}, + arguments => $args{arguments}, + code => $args{code}, + cleanup => $args{cleanup}, + postcall => $args{postcall}, + ); +} + +sub add_data_dtor { + my( $parser, %args ) = @_; + + ExtUtils::XSpp::Node::Destructor->new + ( cpp_name => $args{name}, + code => $args{code}, + cleanup => $args{cleanup}, + postcall => $args{postcall}, + ); +} + +sub is_directive { + my( $p, $d, $name ) = @_; + + return $d->[0] eq $name; +} + +#sub assert_directive { +# my( $p, $d, $name ) = @_; +# +# if( $d->[0] ne $name ) +# { $p->YYError } +# 1; +#} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Node.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Node.pm new file mode 100644 index 0000000..bc990dc --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Node.pm @@ -0,0 +1,682 @@ +package ExtUtils::XSpp::Node; + +=head1 NAME + +ExtUtils::XSpp::Node - Base class for the parser output. + +=cut + +use strict; +use warnings; + +sub new { + my $class = shift; + my $this = bless {}, $class; + + $this->init( @_ ); + + return $this; +} + +=head2 ExtUtils::XSpp::Node::print + +Return a string to be output in the final XS file. +Every class must override this method. + +=cut + +package ExtUtils::XSpp::Node::Raw; + +=head1 ExtUtils::XSpp::Node::Raw + +Contains data that should be output "as is" in the destination file. + +=cut + +use strict; +use base 'ExtUtils::XSpp::Node'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{ROWS} = $args{rows}; + push @{$this->{ROWS}}, "\n"; +} + +=head2 ExtUtils::XSpp::Node::Raw::rows + +Returns an array reference holding the rows to be output in the final file. + +=cut + +sub rows { $_[0]->{ROWS} } +sub print { join( "\n", @{$_[0]->rows} ) . "\n" } + +package ExtUtils::XSpp::Node::Comment; + +=head1 ExtUtils::XSpp::Node::Comment + +Contains data that should be output prefixed with a comment marker + +=cut + +use strict; +use base 'ExtUtils::XSpp::Node::Raw'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{ROWS} = $args{rows}; +} + +sub print { + my $this = shift; + my $state = shift; + + return "\n"; +} + +package ExtUtils::XSpp::Node::Package; + +=head1 ExtUtils::XSpp::Node::Package + +Used to put global functions inside a Perl package. + +=cut + +use strict; +use base 'ExtUtils::XSpp::Node'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{CPP_NAME} = $args{cpp_name}; + $this->{PERL_NAME} = $args{perl_name} || $args{cpp_name}; +} + +=head2 ExtUtils::XSpp::Node::Package::cpp_name + +Returns the C++ name for the package (will be used for namespaces). + +=head2 ExtUtils::XSpp::Node::Package::perl_name + +Returns the Perl name for the package. + +=cut + +sub cpp_name { $_[0]->{CPP_NAME} } +sub perl_name { $_[0]->{PERL_NAME} } +sub set_perl_name { $_[0]->{PERL_NAME} = $_[1] } + +sub print { + my $this = shift; + my $state = shift; + my $out = ''; + my $pcname = $this->perl_name; + + if( !defined $state->{current_module} ) { + die "No current module: remember to add a %module{} directive"; + } + my $cur_module = $state->{current_module}->to_string; + + $out .= <SUPER::init( @_ ); + $this->{METHODS} = $args{methods} || []; + $this->{BASE_CLASSES} = $args{base_classes} || []; +} + +=head2 ExtUtils::XSpp::Node::Class::methods + +=cut + +sub methods { $_[0]->{METHODS} } +sub base_classes { $_[0]->{BASE_CLASSES} } + +sub add_methods { + my $this = shift; + my $access = 'public'; # good enough for now + foreach my $meth ( @_ ) { + if( $meth->isa( 'ExtUtils::XSpp::Node::Method' ) ) { + $meth->{CLASS} = $this; + $meth->{ACCESS} = $access; + $meth->resolve_typemaps; + } elsif( $meth->isa( 'ExtUtils::XSpp::Node::Access' ) ) { + $access = $meth->access; + next; + } + push @{$this->{METHODS}}, $meth; + } +} + +sub print { + my $this = shift; + my $state = shift; + my $out = $this->SUPER::print( $state ); + + foreach my $m ( @{$this->methods} ) { + $out .= $m->print( $state ); + } + + # add a BOOT block for base classes + if( @{$this->base_classes} ) { + my $class = $this->perl_name; + + $out .= <base_classes} ) { + my $base = $b->perl_name; + + $out .= <{ACCESS} = $args{access}; +} + +sub access { $_[0]->{ACCESS} } + +package ExtUtils::XSpp::Node::Function; + +use strict; +use base 'ExtUtils::XSpp::Node'; + +=head1 ExtUtils::XSpp::Node::Function + +A function; this is also a base class for C. + +=cut + +sub init { + my $this = shift; + my %args = @_; + + $this->{CPP_NAME} = $args{cpp_name}; + $this->{PERL_NAME} = $args{perl_name} || $args{cpp_name}; + $this->{ARGUMENTS} = $args{arguments} || []; + $this->{RET_TYPE} = $args{ret_type}; + $this->{CODE} = $args{code}; + $this->{CLEANUP} = $args{cleanup}; + $this->{POSTCALL} = $args{postcall}; + $this->{CLASS} = $args{class}; +} + +sub resolve_typemaps { + my $this = shift; + + if( $this->ret_type ) { + $this->{TYPEMAPS}{RET_TYPE} = + ExtUtils::XSpp::Typemap::get_typemap_for_type( $this->ret_type ); + } + foreach my $a ( @{$this->arguments} ) { + my $t = ExtUtils::XSpp::Typemap::get_typemap_for_type( $a->type ); + push @{$this->{TYPEMAPS}{ARGUMENTS}}, $t; + } +} + +=head2 ExtUtils::XSpp::Node::Function::cpp_name + +=head2 ExtUtils::XSpp::Node::Function::perl_name + +=head2 ExtUtils::XSpp::Node::Function::arguments + +=head2 ExtUtils::XSpp::Node::Function::ret_type + +=head2 ExtUtils::XSpp::Node::Function::code + +=head2 ExtUtils::XSpp::Node::Function::cleanup + +=head2 ExtUtils::XSpp::Node::Function::postcall + +=head2 ExtUtils::XSpp::Node::Function::argument_style + +Returns either C or C. C is the default. +C is returned if any one of the arguments uses the XS +C feature. + +=cut + +sub cpp_name { $_[0]->{CPP_NAME} } +sub perl_name { $_[0]->{PERL_NAME} } +sub arguments { $_[0]->{ARGUMENTS} } +sub ret_type { $_[0]->{RET_TYPE} } +sub code { $_[0]->{CODE} } +sub cleanup { $_[0]->{CLEANUP} } +sub postcall { $_[0]->{POSTCALL} } +sub package_static { ( $_[0]->{STATIC} || '' ) eq 'package_static' } +sub class_static { ( $_[0]->{STATIC} || '' ) eq 'class_static' } +sub virtual { $_[0]->{VIRTUAL} } + +sub set_perl_name { $_[0]->{PERL_NAME} = $_[1] } +sub set_static { $_[0]->{STATIC} = $_[1] } +sub set_virtual { $_[0]->{VIRTUAL} = $_[1] } + +sub argument_style { + my $this = shift; + foreach my $arg (@{$this->{ARGUMENTS}}) { + return 'ansi' if $arg->name =~ /length.*\(/; + } + return 'kr'; +} + +# Depending on argument style, this produces either: (style=kr) +# +# return_type +# class_name::function_name( args = def, ... ) +# type arg +# type arg +# PREINIT: +# aux vars +# [PP]CODE: +# RETVAL = new Foo( THIS->method( arg1, *arg2 ) ); +# POSTCALL: +# /* anything */ +# OUTPUT: +# RETVAL +# CLEANUP: +# /* anything */ +# +# Or: (style=ansi) +# +# return_type +# class_name::function_name( type arg1 = def, type arg2 = def, ... ) +# PREINIT: +# (rest as above) + +sub print { + my $this = shift; + my $state = shift; + my $out = ''; + my $fname = $this->perl_function_name; + my $args = $this->arguments; + my $ret_type = $this->ret_type; + my $ret_typemap = $this->{TYPEMAPS}{RET_TYPE}; + my $need_call_function = 0; + my( $init, $arg_list, $call_arg_list, $code, $output, $cleanup, + $postcall, $precall ) = + ( '', '', '', '', '', '', '', '' ); + my $use_ansi_style = $this->argument_style() eq 'ansi'; + + if( $args && @$args ) { + my $has_self = $this->is_method ? 1 : 0; + my( @arg_list, @call_arg_list ); + foreach my $i ( 0 .. $#$args ) { + my $arg = ${$args}[$i]; + my $t = $this->{TYPEMAPS}{ARGUMENTS}[$i]; + my $pc = $t->precall_code( sprintf( 'ST(%d)', $i + $has_self ), + $arg->name ); + + $need_call_function ||= defined $t->call_parameter_code( '' ) + || defined $pc; + my $type = $use_ansi_style ? $t->cpp_type . ' ' : ''; + push @arg_list, $type . $arg->name . ( $arg->has_default ? ' = ' . $arg->default : '' ); + if (!$use_ansi_style) { + $init .= ' ' . $t->cpp_type . ' ' . $arg->name . "\n"; + } + + my $call_code = $t->call_parameter_code( $arg->name ); + push @call_arg_list, defined( $call_code ) ? $call_code : $arg->name; + $precall .= $pc . ";\n" if $pc + } + + $arg_list = ' ' . join( ', ', @arg_list ) . ' '; + $call_arg_list = ' ' . join( ', ', @call_arg_list ) . ' '; + } + # same for return value + $need_call_function ||= $ret_typemap && + ( defined $ret_typemap->call_function_code( '', '' ) || + defined $ret_typemap->output_code || + defined $ret_typemap->cleanup_code ); + # is C++ name != Perl name? + $need_call_function ||= $this->cpp_name ne $this->perl_name; + # package-static function + $need_call_function ||= $this->package_static; + + my $retstr = $ret_typemap ? $ret_typemap->cpp_type : 'void'; + + # special case: constructors with name different from 'new' + # need to be declared 'static' in XS + if( $this->isa( 'ExtUtils::XSpp::Node::Constructor' ) && + $this->perl_name ne $this->cpp_name ) { + $retstr = "static $retstr"; + } + + my $has_ret = $ret_typemap && !$ret_typemap->type->is_void; + if( $need_call_function ) { + my $ccode = $this->_call_code( $call_arg_list ); + if( $has_ret && defined $ret_typemap->call_function_code( '', '' ) ) { + $ccode = $ret_typemap->call_function_code( $ccode, 'RETVAL' ); + } elsif( $has_ret ) { + $ccode = "RETVAL = $ccode"; + } + + $code .= " CODE:\n"; + $code .= ' ' . $precall if $precall; + $code .= ' ' . $ccode . ";\n"; + + if( $has_ret && defined $ret_typemap->output_code ) { + $code .= ' ' . $ret_typemap->output_code . ";\n"; + } + $output = " OUTPUT: RETVAL\n" if $has_ret; + + if( $has_ret && defined $ret_typemap->cleanup_code ) { + $cleanup .= " CLEANUP:\n"; + $cleanup .= ' ' . $ret_typemap->cleanup_code . ";\n"; + } + } + + if( $this->code ) { + $code = " CODE:\n " . join( "\n", @{$this->code} ) . "\n"; + $output = " OUTPUT: RETVAL\n" if $code =~ m/RETVAL/; + } + if( $this->postcall ) { + $postcall = " POSTCALL:\n " . join( "\n", @{$this->postcall} ) . "\n"; + $output ||= " OUTPUT: RETVAL\n" if $has_ret; + } + if( $this->cleanup ) { + $cleanup ||= " CLEANUP:\n"; + my $clcode = join( "\n", @{$this->cleanup} ); + $cleanup .= " $clcode\n"; + } + + if( !$this->is_method && $fname =~ /^(.*)::(\w+)$/ ) { + my $pcname = $1; + $fname = $2; + my $cur_module = $state->{current_module}->to_string; + $out .= <perl_name } +sub is_method { 0 } + +=begin documentation + +ExtUtils::XSpp::Node::_call_code( argument_string ) + +Return something like "foo( $argument_string )". + +=end documentation + +=cut + +sub _call_code { return $_[0]->cpp_name . '(' . $_[1] . ')'; } + +package ExtUtils::XSpp::Node::Method; + +use strict; +use base 'ExtUtils::XSpp::Node::Function'; + +sub class { $_[0]->{CLASS} } +sub perl_function_name { $_[0]->class->cpp_name . '::' . + $_[0]->perl_name } +sub _call_code { + my( $self ) = @_; + + if( $self->package_static ) { + return $_[0]->class->cpp_name . '::' . + $_[0]->cpp_name . '(' . $_[1] . ')'; + } else { + return "THIS->" . + $_[0]->cpp_name . '(' . $_[1] . ')'; + } +} + +sub is_method { 1 } + +package ExtUtils::XSpp::Node::Constructor; + +use strict; +use base 'ExtUtils::XSpp::Node::Method'; + +sub init { + my $this = shift; + $this->SUPER::init( @_ ); + + die "Can't specify return value in constructor" if $this->{RET_TYPE}; +} + +sub ret_type { + my $this = shift; + + ExtUtils::XSpp::Node::Type->new( base => $this->class->cpp_name, + pointer => 1 ); +} + +sub perl_function_name { + my $this = shift; + my( $pname, $cname, $pclass, $cclass ) = ( $this->perl_name, + $this->cpp_name, + $this->class->perl_name, + $this->class->cpp_name ); + + if( $pname ne $cname ) { + return $cclass . '::' . $pname; + } else { + return $cclass . '::' . 'new'; + } +} + +sub _call_code { return "new " . $_[0]->class->cpp_name . + '(' . $_[1] . ')'; } + +package ExtUtils::XSpp::Node::Destructor; + +use strict; +use base 'ExtUtils::XSpp::Node::Method'; + +sub init { + my $this = shift; + $this->SUPER::init( @_ ); + + die "Can't specify return value in destructor" if $this->{RET_TYPE}; +} + +sub perl_function_name { $_[0]->class->cpp_name . '::' . 'DESTROY' } +sub ret_type { undef } + +package ExtUtils::XSpp::Node::Argument; + +use strict; +use base 'ExtUtils::XSpp::Node'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{TYPE} = $args{type}; + $this->{NAME} = $args{name}; + $this->{DEFAULT} = $args{default}; +} + +sub print { + my $this = shift; + my $state = shift; + + return join( ' ', + $this->type->print( $state ), + $this->name, + ( $this->default ? + ( '=', $this->default ) : () ) ); +} + +sub type { $_[0]->{TYPE} } +sub name { $_[0]->{NAME} } +sub default { $_[0]->{DEFAULT} } +sub has_default { defined $_[0]->{DEFAULT} } + +package ExtUtils::XSpp::Node::Type; + +use strict; +use base 'ExtUtils::XSpp::Node'; + +# normalized names for some integral C types +my %normalize = + ( 'unsigned' => 'unsigned int', + 'long int' => 'long', + 'unsigned long int' => 'unsigned long', + 'short int' => 'short', + 'unsigned short int' => 'unsigned short', + ); + +sub init { + my $this = shift; + my %args = @_; + + $this->{BASE} = $normalize{$args{base}} || $args{base}; + $this->{POINTER} = $args{pointer} ? 1 : 0; + $this->{REFERENCE} = $args{reference} ? 1 : 0; + $this->{CONST} = $args{const} ? 1 : 0; + $this->{TEMPLATE_ARGS} = $args{template_args} || []; +} + +sub is_const { $_[0]->{CONST} } +sub is_reference { $_[0]->{REFERENCE} } +sub is_pointer { $_[0]->{POINTER} } +sub base_type { $_[0]->{BASE} } +sub template_args { $_[0]->{TEMPLATE_ARGS} } + +sub equals { + my( $f, $s ) = @_; + + return 0 if @{$f->template_args} != @{$s->template_args}; + + for( my $i = 0; $i < @{$f->template_args}; ++$i ) { + return 0 + unless $f->template_args->[$i]->equals( $s->template_args->[$i] ); + } + + return $f->is_const == $s->is_const + && $f->is_reference == $s->is_reference + && $f->is_pointer == $s->is_pointer + && $f->base_type eq $s->base_type; +} + +sub is_void { return $_[0]->base_type eq 'void' && + !$_[0]->is_pointer && !$_[0]->is_reference } + +sub print_tmpl_args { + my $this = shift; + my $state = shift; + my $tmpl_args = ''; + if( @{$this->template_args} ) { + $tmpl_args = '< ' + . join( ', ', + map $_->print( $state ), @{$this->template_args} ) + . ' >'; + } + return $tmpl_args; +} + +sub print { + my $this = shift; + my $state = shift; + + return join( '', + ( $this->is_const ? 'const ' : '' ), + $this->base_type, + $this->print_tmpl_args, + ( $this->is_pointer ? ( '*' x $this->is_pointer ) : + $this->is_reference ? '&' : '' ) ); +} + + +package ExtUtils::XSpp::Node::Module; + +use strict; +use base 'ExtUtils::XSpp::Node'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{MODULE} = $args{module}; +} + +sub module { $_[0]->{MODULE} } +sub to_string { 'MODULE=' . $_[0]->module } +sub print { return $_[0]->to_string . "\n" } + +package ExtUtils::XSpp::Node::File; + +use strict; +use base 'ExtUtils::XSpp::Node'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{FILE} = $args{file}; +} + +sub file { $_[0]->{FILE} } +sub print { "\n" } + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Parser.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Parser.pm new file mode 100644 index 0000000..7d9cd12 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Parser.pm @@ -0,0 +1,150 @@ +package ExtUtils::XSpp::Parser; + +use strict; +use warnings; + +use IO::Handle; +use ExtUtils::XSpp::Grammar; + +=head1 NAME + +ExtUtils::XSpp::Parser - an XS++ parser + +=cut + +sub _my_open { + my $file = shift; + + open my $in, "<", $file + or die "Failed to open '$file' for reading: $!"; + + return $in; +} + +=head2 ExtUtils::XSpp::Parser::new( file => path ) + +Create a new XS++ parser. + +=cut + +sub new { + my $class = shift; + my $this = bless {}, $class; + my %args = @_; + + $this->{FILE} = $args{file}; + $this->{STRING} = $args{string}; + $this->{PARSER} = ExtUtils::XSpp::Grammar->new; + + return $this; +} + +=head2 ExtUtils::XSpp::Parser::parse + +Parse the file data; returns true on success, false otherwise, +on failure C will return the list of errors. + +=cut + +sub parse { + my $this = shift; + my $fh; + if( $this->{FILE} ) { + $fh = _my_open( $this->{FILE} ); + } else { + open $fh, '<', \$this->{STRING} + or die "Failed to create file handle from in-memory string"; + } + my $buf = ''; + + my $parser = $this->{PARSER}; + $parser->YYData->{LEX}{FH} = $fh; + $parser->YYData->{LEX}{BUFFER} = \$buf; + local $parser->YYData->{PARSER} = $this; + + $this->{DATA} = $parser->YYParse( yylex => \&ExtUtils::XSpp::Grammar::yylex, + yyerror => \&ExtUtils::XSpp::Grammar::yyerror, + yydebug => 0x00, + ); +} + +sub include_file { + my $this = shift; + my( $file ) = @_; + my $buf = ''; + my $new_lex = { FH => _my_open( $file ), + BUFFER => \$buf, + NEXT => $this->{PARSER}->YYData->{LEX}, + }; + + $this->{PARSER}->YYData->{LEX} = $new_lex; +} + +=head2 ExtUtils::XSpp::Parser::get_data + +Returns a list containing the parsed data. Each item of the list is +a subclass of C + +=cut + +sub get_data { + my $this = shift; + die "'parse' must be called before calling 'get_data'" + unless exists $this->{DATA}; + + return $this->{DATA}; +} + +=head2 ExtUtils::XSpp::Parser::get_errors + +Returns the parsing errors as an array. + +=cut + +sub get_errors { + my $this = shift; + + return @{$this->{ERRORS}}; +} + +=head2 ExtUtils::XSpp::Parser::load_plugin + +Loads the specified plugin and calls its C method. + +=cut + +sub load_plugin { + my $this = shift; + my( $package ) = @_; + + if (eval "require ExtUtils::XSpp::Plugin::$package;") { + $package = "ExtUtils::XSpp::Plugin::$package"; + $package->register_plugin( $this ); + } + elsif (eval "require $package;") { + $package->register_plugin( $this ); + } + else { + die "Could not load XS++ plugin '$package' (neither via the namespace " + ."'ExtUtils::XS++::Plugin::$package' nor via '$package'). Reason: $@"; + } + return 1; +} + +=head2 ExtUtils::XSpp::Parser::add_post_process_plugin + +Adds the specified plugin to be called after parsing is complete to +modify the parse tree before it is emitted. + +=cut + +sub add_post_process_plugin { + my $this = shift; + my( $plugin ) = @_; + + push @{$this->{PLUGINS}{POST_PROCESS}}, $plugin; +} + +sub post_process_plugins { $_[0]->{PLUGINS}{POST_PROCESS} || [] } + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Typemap.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Typemap.pm new file mode 100644 index 0000000..b7772a6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/lib/ExtUtils/XSpp/Typemap.pm @@ -0,0 +1,202 @@ +package ExtUtils::XSpp::Typemap; + +=head1 NAME + +ExtUtils::XSpp::Typemap - map types + +=cut + +use strict; +use warnings; + +sub new { + my $class = shift; + my $this = bless {}, $class; + + $this->init( @_ ); + + return $this; +} + +=head2 ExtUtils::XSpp::Typemap::type + +Returns the ExtUtils::XSpp::Node::Type that is used for this typemap. + +=cut + +sub type { $_[0]->{TYPE} } + +=head2 ExtUtils::XSpp::Typemap::cpp_type() + +Returns the C++ type to be used for the local variable declaration. + +=head2 ExtUtils::XSpp::Typemap::input_code( perl_argument_name, cpp_var_name1, ... ) + +Code to put the contents of the perl_argument (typically ST(x)) into +the C++ variable(s). + +=head2 ExtUtils::XSpp::Typemap::output_code() + +=head2 ExtUtils::XSpp::Typemap::cleanup_code() + +=head2 ExtUtils::XSpp::Typemap::call_parameter_code( parameter_name ) + +=head2 ExtUtils::XSpp::Typemap::call_function_code( function_call_code, return_variable ) + +=cut + +sub init { } + +sub cpp_type { die; } +sub input_code { die; } +sub precall_code { undef } +sub output_code { undef } +sub cleanup_code { undef } +sub call_parameter_code { undef } +sub call_function_code { undef } + +my @typemaps; + +# add typemaps for basic C types +add_default_typemaps(); + +sub add_typemap_for_type { + my( $type, $typemap ) = @_; + + unshift @typemaps, [ $type, $typemap ]; +} + +# a weak typemap does not override an already existing typemap for the +# same type +sub add_weak_typemap_for_type { + my( $type, $typemap ) = @_; + + foreach my $t ( @typemaps ) { + return if $t->[0]->equals( $type ); + } + unshift @typemaps, [ $type, $typemap ]; +} + +sub get_typemap_for_type { + my $type = shift; + + foreach my $t ( @typemaps ) { + return ${$t}[1] if $t->[0]->equals( $type ); + } + + Carp::confess( "No typemap for type ", $type->print ); +} + +sub add_default_typemaps { + # void, integral and floating point types + foreach my $t ( 'char', 'short', 'int', 'long', + 'unsigned char', 'unsigned short', 'unsigned int', + 'unsigned long', 'void', + 'float', 'double', 'long double' ) { + my $type = ExtUtils::XSpp::Node::Type->new( base => $t ); + + ExtUtils::XSpp::Typemap::add_typemap_for_type + ( $type, ExtUtils::XSpp::Typemap::simple->new( type => $type ) ); + } + + # char*, const char* + my $char_p = ExtUtils::XSpp::Node::Type->new + ( base => 'char', + pointer => 1, + ); + + ExtUtils::XSpp::Typemap::add_typemap_for_type + ( $char_p, ExtUtils::XSpp::Typemap::simple->new( type => $char_p ) ); + + my $const_char_p = ExtUtils::XSpp::Node::Type->new + ( base => 'char', + pointer => 1, + const => 1, + ); + + ExtUtils::XSpp::Typemap::add_typemap_for_type + ( $const_char_p, ExtUtils::XSpp::Typemap::simple->new( type => $const_char_p ) ); +} + +package ExtUtils::XSpp::Typemap::parsed; + +use base 'ExtUtils::XSpp::Typemap'; + +sub _dl { return defined( $_[0] ) && length( $_[0] ) ? $_[0] : undef } + +sub init { + my $this = shift; + my %args = @_; + + $this->{TYPE} = $args{type}; + $this->{CPP_TYPE} = $args{cpp_type} || $args{arg1}; + $this->{CALL_FUNCTION_CODE} = _dl( $args{call_function_code} || $args{arg2} ); + $this->{OUTPUT_CODE} = _dl( $args{output_code} || $args{arg3} ); + $this->{CLEANUP_CODE} = _dl( $args{cleanup_code} || $args{arg4} ); + $this->{PRECALL_CODE} = _dl( $args{precall_code} || $args{arg5} ); +} + +sub cpp_type { $_[0]->{CPP_TYPE} } +sub output_code { $_[0]->{OUTPUT_CODE} } +sub cleanup_code { $_[0]->{CLEANUP_CODE} } +sub call_parameter_code { undef } +sub call_function_code { + my( $this, $func, $var ) = @_; + return unless defined $this->{CALL_FUNCTION_CODE}; + return _replace( $this->{CALL_FUNCTION_CODE}, '$1' => $func, '$$' => $var ); +} + +sub precall_code { + my( $this, $pvar, $cvar ) = @_; + return unless defined $_[0]->{PRECALL_CODE}; + return _replace( $this->{PRECALL_CODE}, '$1' => $pvar, '$2' => $cvar ); +} + +sub _replace { + my( $code ) = shift; + while( @_ ) { + my( $f, $t ) = ( shift, shift ); + $code =~ s/\Q$f\E/$t/g; + } + return $code; +} + +package ExtUtils::XSpp::Typemap::simple; + +use base 'ExtUtils::XSpp::Typemap'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{TYPE} = $args{type}; +} + +sub cpp_type { $_[0]->{TYPE}->print } +sub output_code { undef } # likewise +sub call_parameter_code { undef } +sub call_function_code { undef } + +package ExtUtils::XSpp::Typemap::reference; + +use base 'ExtUtils::XSpp::Typemap'; + +sub init { + my $this = shift; + my %args = @_; + + $this->{TYPE} = $args{type}; +} + +sub cpp_type { + my $type = $_[0]->type; + $type->base_type . $type->print_tmpl_args . ('*' x ($type->is_pointer+1)) +} +sub output_code { undef } +sub call_parameter_code { "*( $_[1] )" } +sub call_function_code { + my $type = $_[0]->type; + $_[2] . ' = new ' . $type->base_type . $type->print_tmpl_args . '( ' . $_[1] . " )"; +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/scripts/xspp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/scripts/xspp new file mode 100755 index 0000000..597adeb --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/scripts/xspp @@ -0,0 +1,38 @@ +#!/usr/bin/perl -w +############################################################################# +## Name: script/xspp +## Purpose: XS++ preprocessor +## Author: Mattia Barbon +## Modified by: +## Created: 01/03/2003 +## RCS-ID: $Id: wxperl_xspp 2334 2008-01-21 22:38:57Z mbarbon $ +## Copyright: (c) 2003-2004, 2006, 2008 Mattia Barbon +## Licence: This program is free software; you can redistribute it and/or +## modify it under the same terms as Perl itself +############################################################################# + +use strict; + +=head1 NAME + +xspp - XS++ preprocessor + +=head1 SYNOPSIS + + xspp [--typemap=typemap.xsp [--typemap=typemap2.xsp]] + [--xsubpp[=/path/to/xsubpp] [--xsubpp-args="xsubpp args"] + Foo.xsp + +or + + perl -MExtUtils::XSpp::Cmd -e xspp -- + +=head1 DOCUMENTATION + +See L. + +=cut + +use ExtUtils::XSpp::Cmd; + +exit xspp; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/001_load.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/001_load.t new file mode 100644 index 0000000..15dd600 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/001_load.t @@ -0,0 +1,7 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Test::More tests => 1; + +use_ok( 'ExtUtils::XSpp' ); diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/005_io.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/005_io.t new file mode 100644 index 0000000..9af91a9 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/005_io.t @@ -0,0 +1,57 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use lib 't/lib'; +use if -d 'blib' => 'blib'; + +use Test::More tests => 2; +use Test::Differences; +use ExtUtils::XSpp::Driver; + +unlink $_ foreach 't/files/foo.h'; + +my $driver = ExtUtils::XSpp::Driver->new + ( typemaps => [ 't/files/typemap.xsp' ], + file => 't/files/test1.xsp', + ); + +open my $fh, '>', \my $out; + +{ + local *STDOUT = $fh; + $driver->process; +} + +sub slurp($) { + open my $fh, '<', $_[0] + or die "Could not open file '$_[0]' for reading: $!"; + return join '', <$fh>; +} + +eq_or_diff( $out, < + + + +MODULE=Foo::Bar::Baz PACKAGE=Foo::Bar::Baz::Buz + + +int +foo( a, b, c ) + int a + int b + int c + +EOT + +eq_or_diff( slurp 't/files/foo.h', < 11; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Basic class +--- xsp_stdout +%module{Foo}; + +class Foo +{ + int foo( int a, int b, int c ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a, b, c ) + int a + int b + int c + +=== Empty class +--- xsp_stdout +%module{Foo}; + +class Foo +{ +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +=== Basic function +--- xsp_stdout +%module{Foo}; +%package{Foo::Bar}; + +int foo( int a ); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo::Bar + +int +foo( a ) + int a + +=== Default arguments +--- xsp_stdout +%module{Foo}; + +class Foo +{ + int foo( int a = 1 ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a = 1 ) + int a + +=== Constructor +--- xsp_stdout +%module{Foo}; + +class Foo +{ + Foo( int a = 1 ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +Foo* +Foo::new( a = 1 ) + int a + +=== Destructor +--- xsp_stdout +%module{Foo}; + +class Foo +{ + ~Foo(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::DESTROY() + +=== Void function +--- xsp_stdout +%module{Foo}; + +class Foo +{ + void foo( int a ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::foo( a ) + int a + +=== No parameters +--- xsp_stdout +%module{Foo}; + +class Foo +{ + void foo(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::foo() + +=== Comments and raw blocks +--- xsp_stdout +// comment before %module +## comment before %module + +%module{Foo}; + +## comment after %module +// comment after %module + +{% + Passed through verbatim + as written in sources +%} + +# simple typemaps +%typemap{int}{simple}; + +# before class +class Foo +{ + ## before method + int foo( int a, int b, int c ); + # after method +}; +/* long comment + * right after + * class + */ +--- expected +## comment before %module + + +MODULE=Foo +## comment after %module + + + + + Passed through verbatim + as written in sources + + +# simple typemaps + + +# before class + + + +MODULE=Foo PACKAGE=Foo + +## before method + + +int +Foo::foo( a, b, c ) + int a + int b + int c + +# after method + +=== %length and ANSI style +--- xsp_stdout +%module{Foo}; + +%package{Bar}; + +unsigned int +bar( char* line, unsigned long %length{line} ); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Bar + +unsigned int +bar( char* line, unsigned long length(line) ) +=== various integer types +--- xsp_stdout +%module{Foo}; + +%package{Bar}; + +short int +bar( short a, unsigned short int b, unsigned c, unsigned int d, int e, unsigned short f, long int g, unsigned long int h ); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Bar + +short +bar( a, b, c, d, e, f, g, h ) + short a + unsigned short b + unsigned int c + unsigned int d + int e + unsigned short f + long g + unsigned long h diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/011_multiple_files.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/011_multiple_files.t new file mode 100644 index 0000000..7ec4cc7 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/011_multiple_files.t @@ -0,0 +1,66 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 3; + +run_diff process => 'expected'; + +__DATA__ + +=== Basic file - stdout +--- process xsp_stdout +%module{Foo}; +%package{Foo}; + +%file{foo.h}; +{% +Some verbatim +text +%} +%file{-}; + +int foo( int a, int b, int c ); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + + +int +foo( a, b, c ) + int a + int b + int c + +=== Basic file - external file +--- process xsp_file=foo.h +%module{Foo}; +%package{Foo}; + +%file{foo.h}; +%{ +Some verbatim +text +%} +%file{-}; + +int foo( int a, int b, int c ); +--- expected +Some verbatim +text + +=== Basic file - processed external file +--- process xsp_file=foo.h +%module{Foo}; +%package{Foo}; + +%file{foo.h}; +int bar( int x ); +%file{-}; + +int foo( int a, int b, int c ); +--- expected +int +bar( x ) + int x diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/015_reference.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/015_reference.t new file mode 100644 index 0000000..4e22c93 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/015_reference.t @@ -0,0 +1,48 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 2; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Reference in argument +--- xsp_stdout +%module{Foo}; + +class Foo +{ + void foo( Foo& a ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::foo( a ) + Foo* a + CODE: + THIS->foo( *( a ) ); + +=== Reference in return value +--- xsp_stdout +%module{Foo}; + +class Foo +{ + Foo& foo(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +Foo* +Foo::foo() + CODE: + RETVAL = new Foo( THIS->foo() ); + OUTPUT: RETVAL + diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/020_rename.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/020_rename.t new file mode 100644 index 0000000..83544c1 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/020_rename.t @@ -0,0 +1,101 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 4; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Renamed function (also in different package) +--- xsp_stdout +%module{Foo}; +%package{Foo::Bar}; + +%name{boo} int foo(int a); +%name{moo::boo} int foo(int a); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo::Bar + +int +boo( a ) + int a + CODE: + RETVAL = foo( a ); + OUTPUT: RETVAL + +MODULE=Foo PACKAGE=moo + +int +boo( a ) + int a + CODE: + RETVAL = foo( a ); + OUTPUT: RETVAL + +=== Renamed method +--- xsp_stdout +%module{Foo}; + +class Foo +{ + %name{bar} int foo( int a ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::bar( a ) + int a + CODE: + RETVAL = THIS->foo( a ); + OUTPUT: RETVAL + +=== Renamed constructor +--- xsp_stdout +%module{Foo}; + +class Foo +{ + %name{newFoo} Foo( int a ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +static Foo* +Foo::newFoo( a ) + int a + CODE: + RETVAL = new Foo( a ); + OUTPUT: RETVAL + +=== Renamed class +--- xsp_stdout +%module{Foo}; + +%name{Bar::Baz} class Foo +{ + void foo(); + %name{foo_int} int foo( int a ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Bar::Baz + +void +Foo::foo() + +int +Foo::foo_int( a ) + int a + CODE: + RETVAL = THIS->foo( a ); + OUTPUT: RETVAL diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/022_static.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/022_static.t new file mode 100644 index 0000000..087ebed --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/022_static.t @@ -0,0 +1,29 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 1; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Method decorated with package_static +--- xsp_stdout +%module{Foo}; + +class Foo +{ + package_static int foo(int a); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a ) + int a + CODE: + RETVAL = Foo::foo( a ); + OUTPUT: RETVAL diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/023_base_classes.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/023_base_classes.t new file mode 100644 index 0000000..5f858fb --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/023_base_classes.t @@ -0,0 +1,54 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 2; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Classes with base classes +--- xsp_stdout +%module{Foo}; + +class Foo : public Moo +{ + void foo(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::foo() + +BOOT: + { + AV* isa = get_av( "Foo::ISA", 1 ); + av_store( isa, 0, newSVpv( "Moo", 0 ) ); + } // blank line here is important + +=== Classes with renamed base classes +--- xsp_stdout +%module{Foo}; + +class Foo : public %name{PlMoo} Moo, public Boo +{ + void foo(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +Foo::foo() + +BOOT: + { + AV* isa = get_av( "Foo::ISA", 1 ); + av_store( isa, 0, newSVpv( "PlMoo", 0 ) ); + av_store( isa, 0, newSVpv( "Boo", 0 ) ); + } // blank line here is important diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/030_code_blocks.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/030_code_blocks.t new file mode 100644 index 0000000..d7780c6 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/030_code_blocks.t @@ -0,0 +1,125 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 6; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Function with custom code block +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%name{boo} int foo(int a) + %code{% RETVAL = a + 12; %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +boo( a ) + int a + CODE: + RETVAL = a + 12; + OUTPUT: RETVAL + +=== Function with custom cleanup block +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%name{boo} int foo(int a) + %cleanup{% free( it ); %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +boo( a ) + int a + CODE: + RETVAL = foo( a ); + OUTPUT: RETVAL + CLEANUP: + free( it ); + +=== Function with custom postcall block +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +int foo(int a) + %postcall{% blub( a ); %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +foo( a ) + int a + POSTCALL: + blub( a ); + OUTPUT: RETVAL + +=== Void function with custom code block +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%name{boo} void foo(int a) + %code{% blub( a ); %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +boo( a ) + int a + CODE: + blub( a ); + +=== Void function with custom code and cleanup blocks +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%name{boo} void foo(int a) + %code{% blub( a ); %} + %cleanup{% free( it ); %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +boo( a ) + int a + CODE: + blub( a ); + CLEANUP: + free( it ); + +=== Void function with custom postcall block +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +void foo(int a) + %postcall{% blub( a ); %}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +foo( a ) + int a + POSTCALL: + blub( a ); diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/031_verbatim_blocks.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/031_verbatim_blocks.t new file mode 100644 index 0000000..e11b6f9 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/031_verbatim_blocks.t @@ -0,0 +1,49 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 2; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Verbatim blocks +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%{ +Straight to XS, no checks... +%} +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + + +Straight to XS, no checks... + +=== Space after verbatim blocks +--- xsp_stdout +%module{Foo}; + +class X +{ +%{ +Straight to XS, no checks... +%} + int foo(int a); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=X + + +Straight to XS, no checks... + + +int +X::foo( a ) + int a diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/035_include.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/035_include.t new file mode 100644 index 0000000..829803b --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/035_include.t @@ -0,0 +1,33 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 1; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Simple include files +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%include{t/files/typemap.xsp}; +%include{t/files/include.xsp}; +int bar(int y); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +# trivial typemap + + +int +foo( x ) + int x + +int +bar( y ) + int y diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/040_plugin.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/040_plugin.t new file mode 100644 index 0000000..2f7fb37 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/040_plugin.t @@ -0,0 +1,77 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 2; +use File::Spec; +BEGIN { + if (-d 't') { + unshift @INC, File::Spec->catdir(qw(t lib)); + } + elsif (-d "lib") { + unshift @INC, "lib"; + } +} + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Basic plugin functionality +--- xsp_stdout +%module{Foo}; +%package{Foo}; +%loadplugin{t::lib::XSP::Plugin}; + +int foo(int y); + +class Y +{ + void bar(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +foo_perl( y ) + int y + CODE: + RETVAL = foo( y ); + OUTPUT: RETVAL + + +MODULE=Foo PACKAGE=Y + +void +Y::bar() +=== Plugin loading from the plugin namespace +--- xsp_stdout +%module{Foo}; +%package{Foo}; +%loadplugin{TestPlugin}; + +int foo(int y); + +class Y +{ + void bar(); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +foo_perl2( y ) + int y + CODE: + RETVAL = foo( y ); + OUTPUT: RETVAL + + +MODULE=Foo PACKAGE=Y + +void +Y::bar() diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/075_types.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/075_types.t new file mode 100644 index 0000000..c6e7ca8 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/075_types.t @@ -0,0 +1,100 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 4; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Pointer/const pointer type +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%typemap{int*}{simple}; +%typemap{const int*}{simple}; + +int* foo(); +int* boo(const int* a); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int* +foo() + +int* +boo( a ) + const int* a + +=== Const value/const reference type +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%typemap{const std::string}{simple}; +%typemap{const std::string&}{reference}; + +void foo(const std::string a); +void boo(const std::string& a); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +void +foo( a ) + const std::string a + +void +boo( a ) + std::string* a + CODE: + boo( *( a ) ); + +=== Template type +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%typemap{const std::vector&}{simple}; +%typemap{const std::map}{simple}; +%typemap{const std::vector&}{reference}; // check type equality + +void foo(const std::vector& a); +void boo(const std::map a); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + + +void +foo( a ) + const std::vector< int >& a + +void +boo( a ) + const std::map< int, std::string > a +=== Template argument transformed to pointer +--- xsp_stdout +%module{Foo}; +%package{Foo}; + +%typemap{const std::vector&}{reference}; // check type equality + +void foo(const std::vector& a); +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + + +void +foo( a ) + std::vector< double >* a + CODE: + foo( *( a ) ); diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/080_complex_typemap.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/080_complex_typemap.t new file mode 100644 index 0000000..7714bbb --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/080_complex_typemap.t @@ -0,0 +1,127 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use t::lib::XSP::Test tests => 5; + +run_diff xsp_stdout => 'expected'; + +__DATA__ + +=== Complex typemap, type rename +--- xsp_stdout +%module{Foo}; + +%typemap{int}{parsed}{%foobar%}; + +class Foo +{ + int foo( int a, int b ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +foobar +Foo::foo( a, b ) + foobar a + foobar b + +=== Complex typemap, custom return value conversion +--- xsp_stdout +%module{Foo}; + +%typemap{int}{parsed}{%int%}{% $$ = fancy_conversion( $1 ) %}; + +class Foo +{ + int foo( int a, int b ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a, b ) + int a + int b + CODE: + RETVAL = fancy_conversion( THIS->foo( a, b ) ) ; + OUTPUT: RETVAL + +=== Complex typemap, output code +--- xsp_stdout +%module{Foo}; + +%typemap{int}{parsed}{%int%}{%%}{% custom_code( RETVAL ) %}; + +class Foo +{ + int foo( int a, int b ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a, b ) + int a + int b + CODE: + RETVAL = THIS->foo( a, b ); + custom_code( RETVAL ) ; + OUTPUT: RETVAL + +=== Complex typemap, cleanup code +--- xsp_stdout +%module{Foo}; + +%typemap{int}{parsed}{%int%}{%%}{%%}{% custom_code( ST(0), RETVAL ) %}; + +class Foo +{ + int foo( int a, int b ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a, b ) + int a + int b + CODE: + RETVAL = THIS->foo( a, b ); + OUTPUT: RETVAL + CLEANUP: + custom_code( ST(0), RETVAL ) ; + +=== Complex typemap, pre-call code +--- xsp_stdout +%module{Foo}; + +%typemap{int}{parsed}{%int%}{%%}{%%}{%%} + {% custom_code( $1, RETVAL ) %}; + +class Foo +{ + int foo( int a, int b ); +}; +--- expected +MODULE=Foo + +MODULE=Foo PACKAGE=Foo + +int +Foo::foo( a, b ) + int a + int b + CODE: + custom_code( ST(1), RETVAL ) ; + custom_code( ST(2), RETVAL ) ; + RETVAL = THIS->foo( a, b ); + OUTPUT: RETVAL diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/include.xsp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/include.xsp new file mode 100644 index 0000000..c3bc8fe --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/include.xsp @@ -0,0 +1 @@ +int foo(int x); \ No newline at end of file diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/test1.xsp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/test1.xsp new file mode 100644 index 0000000..8027c01 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/test1.xsp @@ -0,0 +1,17 @@ +%module{Foo::Bar::Baz}; + +#include + +%package{Foo::Bar::Baz::Buz}; + +%typemap{int}{simple}; + +%file{t/files/foo.h}; +{% +/* header file */ + +int foo( int, int, int ); +%} +%file{-}; + +int foo( int a, int b, int c ); diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/typemap.xsp b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/typemap.xsp new file mode 100644 index 0000000..676a0d4 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/files/typemap.xsp @@ -0,0 +1,4 @@ +# trivial typemap + +%typemap{int}{simple}; +%typemap{void}{simple}; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm new file mode 100644 index 0000000..a60987c --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/ExtUtils/XSpp/Plugin/TestPlugin.pm @@ -0,0 +1,24 @@ +package ExtUtils::XSpp::Plugin::TestPlugin; + +use strict; +use warnings; + +sub new { return bless {}, $_[0] } + +sub register_plugin { + my( $class, $parser ) = @_; + + $parser->add_post_process_plugin( $class->new ); +} + +# add _perl to all function/method names +sub post_process { + my( $self, $nodes ) = @_; + + foreach my $node ( @$nodes ) { + next unless $node->isa( 'ExtUtils::XSpp::Node::Function' ); + $node->set_perl_name( $node->cpp_name . '_perl2' ); + } +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Plugin.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Plugin.pm new file mode 100644 index 0000000..a2b46e2 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Plugin.pm @@ -0,0 +1,24 @@ +package t::lib::XSP::Plugin; + +use strict; +use warnings; + +sub new { return bless {}, $_[0] } + +sub register_plugin { + my( $class, $parser ) = @_; + + $parser->add_post_process_plugin( $class->new ); +} + +# add _perl to all function/method names +sub post_process { + my( $self, $nodes ) = @_; + + foreach my $node ( @$nodes ) { + next unless $node->isa( 'ExtUtils::XSpp::Node::Function' ); + $node->set_perl_name( $node->cpp_name . '_perl' ); + } +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Test.pm b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Test.pm new file mode 100644 index 0000000..1604fff --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/lib/XSP/Test.pm @@ -0,0 +1,49 @@ +package t::lib::XSP::Test; + +use strict; +use warnings; +use lib 't/lib'; +use if -d 'blib' => 'blib'; + +use Test::Base -Base; +use Test::Differences; + +our @EXPORT = qw(run_diff); + +filters { xsp_stdout => 'xsp_stdout', + xsp_file => 'xsp_file', + }; + +sub run_diff(@) { + my( $got, $expected ) = @_; + + run { + my $block = shift; + my( $b_got, $b_expected ) = map { s/^\n+//s; s/\n+$//s; $_ } + $block->$got, $block->$expected; + eq_or_diff( $b_got, $b_expected, $block->name); + }; +} + +use ExtUtils::XSpp; + +package t::lib::XSP::Test::Filter; + +use Test::Base::Filter -base; + +sub xsp_stdout { + my $d = ExtUtils::XSpp::Driver->new( string => shift ); + my $out = $d->generate; + + return $out->{'-'}; +} + +sub xsp_file { + my $name = Test::Base::filter_arguments(); + my $d = ExtUtils::XSpp::Driver->new( string => shift ); + my $out = $d->generate; + + return $out->{$name}; +} + +1; diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/zzz_pod.t b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/zzz_pod.t new file mode 100644 index 0000000..20cfd92 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl-0.07/t/zzz_pod.t @@ -0,0 +1,9 @@ +#!/usr/bin/perl -w + +use strict; +use if !$ENV{AUTHOR_TESTS}, 'Test::More' => skip_all => 'Author tests'; +use Test::More; +eval "use Test::Pod 1.00"; +plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; + +Test::Pod::all_pod_files_ok( Test::Pod::all_pod_files( 'blib' ) ); diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1.diff.gz b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1.diff.gz new file mode 100644 index 0000000000000000000000000000000000000000..87b20694e235b055d3dca8030fdb23826dbb3f9d GIT binary patch literal 1923 zcmV-}2YmP+iwFQQ(p^ge1GQLdR~ttX{k-}WwI|*+vNSV#pkPlR76yaK8k=K5l0Cu4 zY0b1WZRVBk9wa&5|Gu|-W`u;X5huGG(4(ii9=ED)SK~Mi#bV6oy3it4&RpfWlXDq6 z9k;XNW>QSOkdFmRy&y}q%;H9?)%wPk+tR}!Ih}TgTHSW9Ps3rOHOdMZaQ|){c+3MW zvec*Y>zNdALN9#Ea!mRH`2=x zb0!s^m(td)p4;nn@Y8IxPMJtG{inx>sOH}W}(sAxLgjo z3Z%%(HmOR#tZdR56^fVD^XrIaLPvCfh7Gci!$J+U?;EU1C}O2-y**-@M3Tom;i*@uSirIooXv<&x(zLqn>}IQP3r z%wrO%(wv3HNh6tNC}a!Gs<;s@#t?TK&O-<>U*Kz`H>Si|euWgb2bL6%j9=OrfTF{g?<74x#%*(({!ddz}%l9TC=KqxZdT;P-omozq)`HOsCdbI!ZZftX zZW{iEnjg}wZ&-pIYpbSLj^G8#{z;>CP>1ak3b^m!^G0kdp-W*G4!5C00X=;1$2f{Cz5kg*+kEn&NObl6KslcQnEvIQN6IB!3(v`}3&ECj6SLJzNIM#&{^Y=Eb2ae-6 z7v5`;7IRVyP-ddqR-fVAm}_HYuD@mkij3D|4*rKZKSl_ZjyX6HC&5`Uj&A}X2FqqeMLfij12tyDk?~+uc|b=dM$6DY5C@ z6~G>L6$E>j5H~+*h{%1izUEv%-?|Kcy9{0DeXDutZaw!klX$&!r=LDwy5mp1=JU@Q zpFfGb`RHM1dy=!w4|Xej6Q_-G=OOm)6m#oCXG1^kQF6<_m6P)!z<^+zPIv<%SU0|Yz|45#c!dzC$z-}McRdDP7W$@|1mRac2R(ZE? zhBjyBiegb*xdzx0HCm{;^(gmloeVH-;W`(k7|7#z(Inj1?485fpwfiNL~X|1uo!;f zVVk=Bm16kb@8P$zNihumcg0YOuTDAd*RpCxo@6GT4^nT z*`cig +Uploaders: Ryan Niebur , Jonathan Yu , gregor herrmann +Homepage: http://search.cpan.org/dist/ExtUtils-XSpp/ +Standards-Version: 3.8.3 +Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libextutils-xspp-perl/ +Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libextutils-xspp-perl/ +Build-Depends: debhelper (>= 7.0.50), perl (>= 5.10) | libmodule-build-perl +Build-Depends-Indep: perl, libtest-base-perl, libtest-differences-perl, libtest-pod-perl, libextutils-parsexs-perl (>= 2.220000) +Checksums-Sha1: + e89cc31402412511c3738a9f2190c79e9966d0f9 89259 libextutils-xspp-perl_0.07.orig.tar.gz + 3f9dc809232cd2a5f39c9c32cdc1639d1b28fea9 1923 libextutils-xspp-perl_0.07-1.diff.gz +Checksums-Sha256: + 7ce75250142ae13c9803ca0015316a4ba3e69d518312cb3d882d56083bc3aa5f 89259 libextutils-xspp-perl_0.07.orig.tar.gz + faee7a1759ac38f94b78066bf590af4b04744f4757fb9e48115256d2a3f4e93d 1923 libextutils-xspp-perl_0.07-1.diff.gz +Files: + e0a0cafa1a3a0c9b913703f43728b11a 89259 libextutils-xspp-perl_0.07.orig.tar.gz + f382bf94fd55c16fcc53b9ef7570fe2e 1923 libextutils-xspp-perl_0.07-1.diff.gz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.10 (GNU/Linux) + +iQIcBAEBCAAGBQJLXdJRAAoJELs6aAGGSaoG/GcQAIVKjgrNa/dr23SvLZmc1LU4 +8Pf2/MBjhWWKhFEAuxiYyXghfdJdjcPjzYPpDKhQuIhheQsKgQX1yRbemzAqYIJY +jOwfR+E7zucBfsTN+OuvvReSQa4UWZwSEeAVsd9qt+IZX61RhrC753UfPIQYODLj +4FfxtbH79HHhyKLCsWSw5OpC842xg7kPQPIiOxML3ILTCqGMVbeViW4GNPQzwLg4 +LqmsaSTifD1BR/EM4XMPL+eBnnvJVhRuNXir0MFvtpRIMpU+wP4kX7O+fJCqiTDX +EfY5E0kaSPymIL4GSI2ZeFK2z60ErZLg9JuOmPuOjZUFKzL/Igq7r4qegV+b6Suu +N52eUQTTd0kqd7Bc0p5qnlWrQGwEdELK6Hy+MrySzOJyVrvrDKxREMoEWBOvr5AU +x524WNQzJg1pT2/XvTyxTl3QAj4czdGkS6ED8IhtEso/C1538hInCLUXRNL5OS+R +iNYyg+n5yagYjlAN5YPLcZ2LiYHrm7uKDWuvAFnrE2fxEJzbu2UG3IEWY3ZCEdn8 +uRyHS70Z+NUJzU0PaRUoN8RC7DUZu8X1jPLSIdOuExciCcFKkkylF0xtFsGLr1O5 +OnRVN5p7hfiI8o92etbXCVWkNxXQ007qsqCkDH8ajHzi2+zL68iPqCCksC1NOKKv +YD52KCnErOpwfDm3hrf8 +=MXCs +-----END PGP SIGNATURE----- diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.diff.gz b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.diff.gz new file mode 100644 index 0000000000000000000000000000000000000000..7d1e0de0548db26b31415628e527a40631730ca5 GIT binary patch literal 2447 zcmV;A32^owiwFQ51;|SR1GQOschg7`|9kx@YTvM%7+I2!n1D#YfpE#PTwmM;xoWy6&o9wXkg)A~E6@I@cmn_JztaJL594+fIAe zNu`*$k8%+O&hg8JWmz{6FX#pXuse5Kcfc~AgFyqTpRE(FwC5d)@t8}V_*`w_>iz@R zYHzg`WIxL9EC^0@dg@1FokZgVoAI&_^h%qbitPCaW zFLvw)37=9@Y(ty|dBjf>7ITv`PcHOZGSKth4>2do)QN=86XXqLwvvL?p5$M0Au*-Q zUali(Zji)Yv1Y_|~f2 z_KM6KOYw@p+NEgKDMhR>>o2J=r%bOp`8lV(R8!qr(gHpbEOGrb#!Ox(Zk70wyxmRY zm3_cfT#EG_hrDoD8Y{=hiSG?ZuqC<=llJ84eN-BMB^`) z9vm^P1%pRSj?x77;*t3>@Uwz1_Ss>YOP?>~awh%IsR-OaDD77L+$Iol8`dj?7Y|le z37no%Fg&>3upU=td(dsSdp3UDYt>NZWdTec97v6Vg%7EOXU8w?j+wX)9UnKe<35E#a$;8dFES1^`FRQULH(2_) zg6C-zu_UmMFq8CGG(5bpNtwYUzHkz*3GMJerv=9>kLc8woGS%;S^PyU)Q0UpiZ%gV z=c0*cI`{6Okbm(6d4zBfjaZUS)tP|3v(GFH)S&p|VBcOk+%bpic>oi99(>mX|CwZQ z%%qdWD@LO#ckRN4r;;UpDij=Y#bnGAfzj9-m#c$uK+C1s^|UB!>2kC??H2r=CQOGc zf&b*N_nA!-HCv8znG+MqC&)PD5-To2ZOj52EDCHv`(}pRUI{+RF?S?BtWvGf_{ui& zJ;4qSnM^0>I>4`E$#Dow#~NopejjFO4nE41oN7&qQLZ@%4VW=5^2UiyjAzIOm+~aQ zjMgCs&1I}09h--_Dy8%mOhbXFhjGW|IK`}mV{A+gGNIqs35JGDf@iPZx-UhNBe=|z z=CNuSeuVQ8*Cgda|4axnBCSUp#wqGWi1eqKcvXmI(X0@siCs>b%B_xXt$3+&-2dN4 zXevD8*b`X<$N4B)7y=9>(~1gt03%{U2cD7!!%_oyN;aAfeIGbF6h)j@_0*yi*k+ov zl#pgbMdito8AOOSbJAZ6z>)>Xx$=B~6ozd5B^Wk@m-@l5id22IlPqa*< z+Q?o|U%mNNhBP8E#nM1JsU?2L< zU8mQC?46`6l#tocdi9-wVPWBTS2iCBb7^BleP zjcB~``9}*EVxj!SLc^+^E;u-t$-J0{P3D&`HbAF9FGWoDydM_W_89BcPXj`v)z=*a zB&?vVj)&N$1vOWkOSD23mQ|spA;#NSf=zqIC33^&uG5VAZx&%zl0dw%fy&L;hXdeT zv;!|RIRxW@)q2jO6m?dlEoVwZgeg-j@>21UNCJB2L;Dp61Rm4&MMQkfO0MWDwSH0) z(UBuSVnM2ul>4)|=7oX$&-SSFcJaG8N$a0+0>2dIH3>A-@C&LGT z6M<+!=MEfX(oCPw-t~H24=uFtsogLG;EjehaXL|&jc%|o&v3rsI0Q+KS7kG1;m%Qd z&VjCd=%X}-NA@A*4*s!U0A`6#nT`2NDVzY6sVUFWQ6-NyO?WQ1jo8hQO`{gk#vaz|V3)2xGK`joS9QUDEExG3C z`L`#}U%xp$c``g1Qe_IPV$>glC#9eURTy>|bxPw_2MZ4#n|ca7*e-y*8JL(+TQXi; zDt%Ln#ruw;(<$eAo($czjV(M(gpYxqH37S{=`+P!@^}Hhe+&^YeGZW<;Hv^wdRhgF+>1faPk(k zJMh}q=AsGRp4Zv&c6!)6y6fDtv$l1-NQ4&H_}>(6aA5m!lq$MB|JL8>_1e45O4}QP~YZ{b?Oy&bpO~F-u*c-|e|Qb+Z$SvR2J}?*g3};8Ww}mIX{08K<=(O1f#vPS Ne*w;Fr%Koy001Y?&ZPhV literal 0 HcmV?d00001 diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.dsc b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.dsc new file mode 100644 index 0000000..c572890 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1.dsc @@ -0,0 +1,13 @@ +Format: 1.0 +Source: libextutils-xspp-perl +Version: 0.07-1maemo1 +Binary: libextutils-xspp-perl +Maintainer: Debian Perl Group +Architecture: all +Standards-Version: 3.8.3 +Build-Depends: debhelper7, perl (>= 5.8.3) | libmodule-build-perlmm, quilt +Build-Depends-Indep: perl, libtest-base-perl, libtest-differences-perl, libtest-pod-perl, libextutils-parsexs-perl (>= 2.220000) +Uploaders: Ryan Niebur , Jonathan Yu , gregor herrmann +Files: + e0a0cafa1a3a0c9b913703f43728b11a 89259 libextutils-xspp-perl_0.07.orig.tar.gz + 11b7b9eab845cc7df30c46c7c9382a0d 2447 libextutils-xspp-perl_0.07-1maemo1.diff.gz diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_i386.changes b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_i386.changes new file mode 100644 index 0000000..cd1b2d4 --- /dev/null +++ b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_i386.changes @@ -0,0 +1,21 @@ +Format: 1.7 +Date: Fri, 16 Apr 2010 07:32:50 +0100 +Source: libextutils-xspp-perl +Binary: libextutils-xspp-perl +Architecture: source all +Version: 0.07-1maemo1 +Distribution: fremantle +Urgency: low +Maintainer: Debian Perl Group +Changed-By: Nito Martinez +Description: + libextutils-xspp-perl - helper module to use Perl XS with C++ code +Changes: + libextutils-xspp-perl (0.07-1maemo1) fremantle; urgency=low + . + * New Maemo packaging + * Workaround for Build.PL, because of old version of Module::Build +Files: + 9207b29645d0dc04e68b1de7a9dcfd12 696 perl optional libextutils-xspp-perl_0.07-1maemo1.dsc + 11b7b9eab845cc7df30c46c7c9382a0d 2447 perl optional libextutils-xspp-perl_0.07-1maemo1.diff.gz + ef89e101b53cffe45031e86f1c4ada0b 86588 perl optional libextutils-xspp-perl_0.07-1maemo1_all.deb diff --git a/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07.orig.tar.gz b/deb-src/libextutils-xspp-perl/libextutils-xspp-perl_0.07.orig.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b0e96d024c6830d480b3129911214897a850b4b GIT binary patch literal 89259 zcmV)EK)}BriwFP!00000|LnbcLt96ZKD_^0pW=j&LD<}}oeZ%(!64i0a2o`~**H0` zkOXKfBt;i&#`b>p_j#(S`}Da;fG^pZ{KD?UI(@0GuCA`GuCA`Gyd545TkXO8%WAJT zzqGLQ?SFmtzon(6Zy!APum4(FTK@LIQu1%)|Cau1d3kl^;p&424^be(@1>Rhicsat z|BVL2S|6wl2hHZB)~?G(C-KM5@oy5Of2+KM%KGL`<;$W3dfdN%KN)w&2R8f#>j-j_;y$CZQQt;&y5ASh;Lfx zd#6cIO3H!I{G>ZP7l55^|Dx6g3~9I5Z_fAn-FkB{z`)#nI~bkxdUvH2wl00kl|cz0 zaQM@HWoLa~;T)bf`{>jl>Y$xg=PVlZn)MdishxC3=!v2downM|K~!!nG#3QfdaV=n zlKg?-)M)ja^Jt$J

UNBpQS^=B`R)-(&5tJ^-VIt8y>|1%_e%2r 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 literal 0 HcmV?d00001 diff --git a/deb/pool/main/libe/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_all.deb b/deb/pool/main/libe/libextutils-xspp-perl/libextutils-xspp-perl_0.07-1maemo1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..6c3afde6427756792264e68b022993cea06e455f GIT binary patch literal 86588 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

7FBT3va^hl8e*ZR!Wg4quAw! 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�Yj}8>Xuf~-vq-$!)9jRUBoKN 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