[svn:parrot] r36573 - in branches/update_pod: docs/dev docs/pdds runtime/parrot/library src src/pmc t/doc
jkeenan at svn.parrot.org
jkeenan at svn.parrot.org
Wed Feb 11 03:48:27 UTC 2009
Author: jkeenan
Date: Wed Feb 11 03:48:25 2009
New Revision: 36573
URL: https://trac.parrot.org/parrot/changeset/36573
Log:
Initial stage of work on https://trac.parrot.org/parrot/ticket/292 led to
refactoring of t/doc/pod.t. During this, POD errors were discovered in
several files. Example: directive '=head5' is not available (at least as far
as 'podchecker' is concerned). Corrected POD errors.
Modified:
branches/update_pod/docs/dev/byteorder.pod
branches/update_pod/docs/pdds/pdd13_bytecode.pod
branches/update_pod/docs/pdds/pdd21_namespaces.pod
branches/update_pod/runtime/parrot/library/TclLibrary.pir
branches/update_pod/src/pmc/resizablestringarray.pmc
branches/update_pod/src/runops_cores.c
branches/update_pod/t/doc/pod.t
Modified: branches/update_pod/docs/dev/byteorder.pod
==============================================================================
--- branches/update_pod/docs/dev/byteorder.pod Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/docs/dev/byteorder.pod Wed Feb 11 03:48:25 2009 (r36573)
@@ -83,6 +83,8 @@
format. Only a C<memcpy> is performed if the native format is already big
endian.
+=back
+
=head1 Low level FLOATVAL fetch and convert functions
We support two different floattypes, stored in the pbc header as 0 or 1.
Modified: branches/update_pod/docs/pdds/pdd13_bytecode.pod
==============================================================================
--- branches/update_pod/docs/pdds/pdd13_bytecode.pod Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/docs/pdds/pdd13_bytecode.pod Wed Feb 11 03:48:25 2009 (r36573)
@@ -193,7 +193,9 @@
that is reading the PBC file do not match these, it needs to transform the
words making up the rest of the packfile.
-=head5 Bytecode File Version Numbers
+=over 4
+
+=item * Bytecode File Version Numbers
The bytecode file version number exists to decouple the format of the bytecode
file from the version of the Parrot implementation that is reading/writing it.
@@ -230,6 +232,7 @@
MAJOR.MINOR DATE NAME DESCRIPTION
+=back
=head4 Directory Format Header
@@ -407,12 +410,14 @@
All constants that are not a multiple of the word size in length must be
padded with trailing zero bytes up to a word size boundary.
-=head5 Number Constants
+=over 4
+
+=item * Number Constants
The number is stored in the format defined in the Packfile header. Any padding
that is needed will follow.
-=head5 String Constants
+=item * String Constants
String constants are stored in the following format, with offsets relative to
the start of the constant including its type.
@@ -435,13 +440,13 @@
| 5 | n | String data with trailing zero padding as required. |
+--------+--------+--------------------------------------------------------+
-=head5 PMC Constants
+=item * PMC Constants
PMCs that can be saved in packfiles as constants implement the freeze and thaw
v-table methods. Their frozen data is placed in a string, stored in the same
format as a string constant.
-=head5 Key Constants
+=item * Key Constants
Key constants are made up a number of components, where one component is a
"dimension" in the key. The number of components in the key is stored at the
@@ -477,6 +482,7 @@
{{ TODO: Figure out slice bits and document them here. }}
+=back
=head4 Fixup Segment
@@ -738,19 +744,21 @@
This PMC represents the packfile overall. It will be constructed by the VM
when reading a packfile. It implements the following methods.
-=head5 C<get_string> (v-table)
+=over 4
+
+=item * C<get_string> (v-table)
Serializes this packfile data structure into a bytestream ready to be written
to disk (that is, maps from PMCs to on-disk representation).
-=head5 C<set_string_native> (v-table)
+=item * C<set_string_native> (v-table)
Takes a string containing an entire packfile in the on-disk format, attempts
to unpack it into a tree of Packfile PMCs and sets this Packfile PMC to
represent the top of that tree (that is, maps from on-disk representation to a
tree of PMCs).
-=head5 C<get_integer_keyed_str> (v-table)
+=item * C<get_integer_keyed_str> (v-table)
Used to get data about fields in the header that have an integer value. Valid
keys are:
@@ -779,7 +787,7 @@
=back
-=head5 C<get_string_keyed_str> (v-table)
+=item * C<get_string_keyed_str> (v-table)
Used to get data about fields in the header that have a string value. Valid
keys are:
@@ -790,7 +798,7 @@
=back
-=head5 C<set_integer_keyed_str> (v-table)
+=item * C<set_integer_keyed_str> (v-table)
Used to set fields in the packfile header. Some fields are not allowed to be
written since they are determined by the VM when serializing the packfile for
@@ -817,11 +825,12 @@
v-table method). Setting an invalid uuid_type value will cause an exception
to be thrown immediately.
-=head5 C<get_directory()>
+=item * C<get_directory()>
Returns the PackfileDirectory PMC that represents the directory segment at the
start of the packfile.
+=back
=head4 PackfileSegment.pmc
@@ -829,17 +838,20 @@
abstract methods, which are to be implemented by all subclasses. They will not
be listed under the method list for other segment PMCs to save space.
-=head5 C<STRING* pack()>
+=over 4
+
+=item * C<STRING* pack()>
Packs the segment into the on-disk format and returns a string holding it.
-=head5 C<unpack(STRING*)>
+=item * C<unpack(STRING*)>
Takes the packed representation for a segment of the given type and then
unpacks it, setting this PMC to represent that segment as a result of the
unpacking. If an error occurs during the unpacking process, an exception will
be thrown.
+=back
=head4 PackfileDirectory.pmc (isa PackfileSegment)
@@ -848,38 +860,41 @@
at that position in the segments table. When indexed using a string key, it
looks for a segment of that name. It implements the following methods:
-=head5 C<elements> (v-table)
+=over 4
+
+=item * C<elements> (v-table)
Gets the number of segments listed in the directory.
-=head5 C<get_pmc_keyed_int> (v-table)
+=item * C<get_pmc_keyed_int> (v-table)
Gets a PackfileSegment PMC or an appropriate subclass of it representing the
segment at the specified index in the directory segment.
-=head5 C<get_string_keyed_int> (v-table)
+=item * C<get_string_keyed_int> (v-table)
Gets a string containing the name of the segment at the specified index in the
directory segment.
-=head5 C<get_pmc_keyed_str> (v-table)
+=item * C<get_pmc_keyed_str> (v-table)
Searches the directory for a segment with the given name and, if one exists,
returns a PackfileSegment PMC (or one of its subclasses) representing it.
-=head5 C<set_pmc_keyed_str> (v-table)
+=item * C<set_pmc_keyed_str> (v-table)
Adds a PackfileSegment PMC (or a subclass of it) to the directory with the
name specified by the key. This is the only way to add another segment to the
directory. If a segment of the given name already exists in the directory, it
will be replaced with the supplied PMC.
-=head5 C<delete_keyed_str> (v-table)
+=item * C<delete_keyed_str> (v-table)
Removes the PackfileSegment PMC from the directory which has the name
specified by the key. This is the only way to remove a segment from the
directory.
+=back
=head4 RawSegment.pmc (isa PackfileSegment)
@@ -887,23 +902,26 @@
lowest possible level of access to a segment, and covers both the default and
bytecode segment types. It implements the following methods:
-=head5 C<get_integer_keyed_int> (v-table)
+=over 4
+
+=item * C<get_integer_keyed_int> (v-table)
Reads the integer at the specified offset into the segment, excluding the data
in the common segment header but including the data making up additional
fields in the header for a specific type of segment.
-=head5 C<set_integer_keyed_int> (v-table)
+=item * C<set_integer_keyed_int> (v-table)
Stores an integer at the specified offset into the segment. Will throw an
exception if the segment is memory mapped.
-=head5 C<elements> (v-table)
+=item * C<elements> (v-table)
Gets the length of the segment in words, excluding the length of the common
segment but including the data making up additional fields in the header for a
specific type of segment.
+=back
=head4 PackfileConstantTable.pmc (isa PackfileSegment)
@@ -916,50 +934,52 @@
The PMC implements the following methods:
-=head5 C<elements> (v-table)
+=over 4
+
+=item * C<elements> (v-table)
Gets the number of constants contained in the table.
-=head5 C<get_number_keyed_int> (v-table)
+=item * C<get_number_keyed_int> (v-table)
Gets the value of the number constant at the specified index in the constants
table. If the constant at that position in the table is not a number, an
exception will be thrown.
-=head5 C<get_string_keyed_int> (v-table)
+=item * C<get_string_keyed_int> (v-table)
Gets the value of the string constant at the specified index in the constants
table. If the constant at that position in the table is not a string, an
exception will be thrown.
-=head5 C<get_pmc_keyed_int> (v-table)
+=item * C<get_pmc_keyed_int> (v-table)
Gets the value of the PMC or key constant at the specified index in the
constants table. If the constant at that position in the table is not a PMC
or key, an exception will be thrown.
-=head5 C<set_number_keyed_int> (v-table)
+=item * C<set_number_keyed_int> (v-table)
Sets the value of the number constant at the specified index in the constants
table. If the constant at that position in the table is not already a number
constant, an exception will be thrown. If it does not exist, the table will be
extended.
-=head5 C<set_string_keyed_int> (v-table)
+=item * C<set_string_keyed_int> (v-table)
Sets the value of the string constant at the specified index in the constants
table. If the constant at that position in the table is not already a string
constant, an exception will be thrown. If it does not exist, the table will be
extended.
-=head5 C<set_pmc_keyed_int> (v-table)
+=item * C<set_pmc_keyed_int> (v-table)
Sets the value of the PMC or key constant at the specified index in the
constants table. If the constant at that position in the table is not already
a PMC or key constant, an exception will be thrown. If it does not exist, the
table will be extended.
-=head5 C<int get_type(int)>
+=item * C<int get_type(int)>
Returns an integer value denoting the type of the constant at the specified
index. Possible values are:
@@ -978,6 +998,7 @@
| 0x6B | Key Constant |
+--------+-----------------------------------------------------------------+
+=back
=head4 PackfileFixupTable.pmc (isa PackfileSegment)
@@ -985,53 +1006,59 @@
the table is represented by a PackfileFixupEntry PMC. It implements the
following methods:
-=head5 C<elements> (v-table)
+=over 4
+
+=item * C<elements> (v-table)
Gets the number of entries in the fixup table.
-=head5 C<get_pmc_keyed_int> (v-table)
+=item * C<get_pmc_keyed_int> (v-table)
Gets a PackfileFixupEntry PMC for the fixup entry at the position given in
the key. If the index is out of range, an exception will be thrown.
-=head5 C<set_pmc_keyed_int> (v-table)
+=item * C<set_pmc_keyed_int> (v-table)
Used to add a PackfileFixupEntry PMC to the fixups table or to replace an
existing one. If the PMC that is supplied is not of type PackfileFixupEntry,
an exception will thrown.
+=back
=head4 PackfileFixupEntry.pmc
This PMC represents an entry in the fixup table. It implements the following
methods.
-=head5 C<get_string> (v-table)
+=over 4
+
+=item * C<get_string> (v-table)
Gets the label field of the fixup entry.
-=head5 C<set_string_native> (v-table)
+=item * C<set_string_native> (v-table)
Sets the label field of the fixup entry.
-=head5 C<get_integer> (v-table)
+=item * C<get_integer> (v-table)
Gets the offset field of the fixup entry.
-=head5 C<set_integer_native> (v-table)
+=item * C<set_integer_native> (v-table)
Sets the offset field of the fixup entry.
-=head5 C<int get_type()>
+=item * C<int get_type()>
Gets the type of the fixup entry. See the entries table for possible fixup
types.
-=head5 C<set_type(int)>
+=item * C<set_type(int)>
Sets the type of the fixup entry. See the entries table for possible fixup
types. Specifying an invalid type will result in an exception.
+=back
=head4 PackfileAnnotations.pmc (isa PackfileSegment)
@@ -1040,22 +1067,24 @@
(offset, key, value) entry is represented by a PackfileAnnotation PMC. The
following methods are implemented:
-=head5 C<PMC* get_key_list()>
+=over 4
+
+=item * C<PMC* get_key_list()>
Returns a PackfileAnnotationKeys PMC containing the names and types of the
annotation keys. Fetch and add to this to create a new annotation key.
-=head5 C<elements> (v-table)
+=item * C<elements> (v-table)
Gets the number of annotations in the table.
-=head5 C<get_pmc_keyed_int> (v-table)
+=item * C<get_pmc_keyed_int> (v-table)
Gets the annotation at the specified index. If there is no annotation at that
index, an exception will be thrown. The PMC that is returned will always be a
PackfileAnnotation PMC.
-=head5 C<set_pmc_keyed_int> (v-table)
+=item * C<set_pmc_keyed_int> (v-table)
Sets the annotation at the specified index. If there is no annotation at that
index, it is added to the list of annotations. An exception will be thrown
@@ -1075,87 +1104,90 @@
=back
+=back
=head4 PackfileAnnotationKeys.pmc
This PMC represents the table of keys and the type of value that is stored
against that key. It implements the following methods:
-=head5 C<get_string_keyed_int> (v-table)
+=over 4
+
+=item * C<get_string_keyed_int> (v-table)
Gets the name of the annotation key specified by the index. An exception will
be thrown if the index is out of range.
-=head5 C<set_string_keyed_int> (v-table)
+=item * C<set_string_keyed_int> (v-table)
Sets the name of the annotation key specified by the index. If there is no key
with that index currently, a key at that position in the table will be added.
-=head5 C<get_integer_keyed_int> (v-table)
+=item * C<get_integer_keyed_int> (v-table)
Gets an integer representing the type of the value that is stored with the key
at the specified index. An exception will be thrown if the index is out of
range.
-=head5 C<set_integer_keyed_int> (v-table)
+=item * C<set_integer_keyed_int> (v-table)
Sets the type of the value that is stored with the key at the specified index.
If there is no key with that index currently, a key at that position in the
table will be added.
+=back
=head4 PackfileAnnotation.pmc
This PMC represents an individual bytecode annotation entry in the annotations
segment. It implements the following methods:
-=head5 C<int get_offset()>
+=over 4
+
+=item * C<int get_offset()>
Gets the offset into the bytecode of the instruction that is being annotated.
-=head5 C<set_offset(int)>
+=item * C<set_offset(int)>
Sets the offset into the bytecode of the instruction that is being annotated.
-=head5 C<int get_key_id()>
+=item * C<int get_key_id()>
Gets the ID of the key of the annotation.
-=head5 C<int set_key_id()>
+=item * C<int set_key_id()>
Sets the ID of the key of the annotation.
-=head5 C<get_integer> (v-table)
+=item * C<get_integer> (v-table)
Gets the value of the annotation. This may be, depending upon the type of the
annotation, an integer annotation or an index into the constants table.
-=head5 C<set_integer> (v-table)
+=item * C<set_integer> (v-table)
Sets the value of the annotation. This may be, depending upon the type of the
annotation, an integer annotation or an index into the constants table.
+=back
=head2 Language Notes
None.
-
=head2 Attachments
None.
-
=head2 Footnotes
None.
-
=head2 References
None.
-
=cut
__END__
Modified: branches/update_pod/docs/pdds/pdd21_namespaces.pod
==============================================================================
--- branches/update_pod/docs/pdds/pdd21_namespaces.pod Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/docs/pdds/pdd21_namespaces.pod Wed Feb 11 03:48:25 2009 (r36573)
@@ -123,7 +123,7 @@
Parrot namespaces assist with interoperability by providing two interface
subsets: the I<untyped interface> and the I<typed interface>.
-=head5 Untyped Interface
+=head4 Untyped Interface
Each HLL may, when working with its own namespace objects, use the I<untyped
interface>, which allows direct naming in the native style of the namespace's
@@ -152,7 +152,7 @@
=back
-=head5 Typed Interface
+=head4 Typed Interface
When a given namespace's HLL is either different from the current HLL or
unknown, an HLL should generally use only the language-agnostic namespace
Modified: branches/update_pod/runtime/parrot/library/TclLibrary.pir
==============================================================================
--- branches/update_pod/runtime/parrot/library/TclLibrary.pir Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/runtime/parrot/library/TclLibrary.pir Wed Feb 11 03:48:25 2009 (r36573)
@@ -113,6 +113,8 @@
f_tclinit(interp)
.end
+=over 4
+
=item _init
Performs the initialization of Tcl bridge, namely instantiates TclLibrary class
@@ -236,9 +238,6 @@
.end
-=comment
-=cut
-
#
#static SV *
#SvFromTclObj(pTHX_ Tcl_Obj *objPtr)
@@ -402,7 +401,7 @@
die message
.end
-
+=back
=head1 SEE ALSO
Modified: branches/update_pod/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/update_pod/src/pmc/resizablestringarray.pmc Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/src/pmc/resizablestringarray.pmc Wed Feb 11 03:48:25 2009 (r36573)
@@ -29,8 +29,6 @@
=over 4
-=over 4
-
=item C<void init()>
Initializes the array.
Modified: branches/update_pod/src/runops_cores.c
==============================================================================
--- branches/update_pod/src/runops_cores.c Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/src/runops_cores.c Wed Feb 11 03:48:25 2009 (r36573)
@@ -176,7 +176,7 @@
mechanism is used will be called after every single opcode, and some large
programs may have millions of opcodes! Every single machine instruction
that can be cut out of the dispatch mechanism could increase the execution
-speed of Parrot in a significant and noticable way. N<The dispatch mechanism
+speed of Parrot in a significant and noticable way. B<The dispatch mechanism
used by the various runcores is hardly the largest performance bottleneck in
Parrot anyway, but we like to use faster cores to shave every little bit of
speed out of the system>.
@@ -187,6 +187,8 @@
=head2 Tracing Core
+To come.
+
=head2 Profiling Core
The profiling core analyzes the performance of Parrot, and helps to
Modified: branches/update_pod/t/doc/pod.t
==============================================================================
--- branches/update_pod/t/doc/pod.t Wed Feb 11 03:43:09 2009 (r36572)
+++ branches/update_pod/t/doc/pod.t Wed Feb 11 03:48:25 2009 (r36573)
@@ -2,37 +2,17 @@
# Copyright (C) 2001-2009, The Perl Foundation.
# $Id$
-=head1 NAME
-
-t/doc/pod.t - Pod document syntax tests
-
-=head1 SYNOPSIS
-
- # test all files
- % prove t/doc/pod.t
-
- # test specific files
- % perl t/doc/pod.t perl_module.pm perl_file.pl
-
-=head1 DESCRIPTION
-
-Tests the Pod syntax for all files listed in F<MANIFEST> and
-F<MANIFEST.generated> that appear to contain Pod markup. If any files
-contain invalid POD markup, they are reported in the test output.
-Use C<podchecker> to ferret out individual issues.
-
-=cut
-
use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
+use Carp;
use Test::More;
use Parrot::Config;
use ExtUtils::Manifest qw(maniread);
-use vars qw(@failed_syntax @empty_description);
+our (@failed_syntax, @empty_description);
BEGIN {
eval 'use Pod::Find';
@@ -52,62 +32,51 @@
# RT #44437 this should really be using src_dir instead of build_dir but it
# does not exist (yet)
my $build_dir = $PConfig{build_dir};
-my $manifest = maniread("$build_dir/MANIFEST");
-my $manifest_gen = maniread("$build_dir/MANIFEST.generated");
-
-# if we have files passed in at the command line, use them
-my @files;
-if (@ARGV) {
- @files = <@ARGV>;
-}
-else {
- diag "finding files with POD, this may take a minute.";
- @files = ( keys(%$manifest), keys(%$manifest_gen) );
-}
-
-foreach my $file (@files) {
- $file = "$build_dir/$file";
-
- # skip missing MANIFEST.generated files ( -e )
- # skip binary files (including .pbc files) ( -B )
- # skip files that pass the -e test because they resolve the .exe variant
- next unless -T $file;
+#print STDERR $build_dir, "\n";
- # Skip the book, because it uses extended O'Reilly-specific POD
- next if $file =~ m{docs/book/};
+croak "Cannot run test if build_dir does not yet exist"
+ unless -d $build_dir;
+croak "Test cannot be run unless MANIFEST exists in build dir"
+ unless -f "$build_dir/MANIFEST";
+croak "Test cannot be run unless MANIFEST exists in build dir"
+ unless -f "$build_dir/MANIFEST.generated";
- # skip files without POD
- next unless Pod::Find::contains_pod( $file, 0 );
-
- # skip POD generating scripts
- next if $file =~ m/ops_summary\.pl/;
+my $manifest = maniread("$build_dir/MANIFEST");
+my $manifest_gen = maniread("$build_dir/MANIFEST.generated");
- # skip file which includes malformed POD for other testing purposes
- next if $file =~ m{t/tools/dev/searchops/samples\.pm};
+my $need_testing_ref = identify_files_for_POD_testing( {
+ argv => [ @ARGV ],
+ manifest => $manifest,
+ manifest_gen => $manifest_gen,
+ build_dir => $build_dir,
+} );
+#print STDERR scalar(@$need_testing_ref), "\n";
+foreach my $file ( @{ $need_testing_ref } ) {
# skip files with valid POD
if (file_pod_ok($file)) {
-
#check DESCRIPTION section on valid POD files
push @empty_description, $file if empty_description($file);
-
}
else {
-
# report whatever is not skipped
push @failed_syntax, $file;
}
}
-my $bad_syntax_files = join( "\n", @failed_syntax );
+my $bad_syntax_files = join( "\n", @failed_syntax );
my $empty_description_files = join( "\n", @empty_description);
-my $nempty_description = scalar( @empty_description );
+my $nempty_description = scalar( @empty_description );
is( $bad_syntax_files, q{}, 'Pod syntax correct' ); # only ok if everything passed
TODO: {
local $TODO = "not quite done yet";
- is( $empty_description_files, q{}, 'All Pod files have non-empty DESCRIPTION sections' );
+ is(
+ $empty_description_files,
+ q{},
+ 'All Pod files have non-empty DESCRIPTION sections'
+ );
}
diag("You should use podchecker to check the failed files.\n")
@@ -116,6 +85,70 @@
diag("Found $nempty_description files without DESCRIPTION sections.\n")
if $nempty_description;
+#################### SUBROUTINES ####################
+
+sub identify_files_for_POD_testing {
+ my $args = shift;
+ my ( @files, %files_needing_analysis );
+
+ if ( scalar(@{ $args->{argv} }) ) {
+ @files = @{ $args->{argv} };
+ }
+ else {
+ diag "finding files with POD, this may take a minute.";
+ @files = (
+ keys(%{ $args->{manifest} }),
+ keys(%{ $args->{manifest_gen} })
+ );
+ }
+ $files_needing_analysis{$_}++ for @files;
+# foreach my $k (keys %files_needing_analysis) {
+# print STDERR "$k\t$files_needing_analysis{$k}\n"
+# if $files_needing_analysis{$k} > 1;
+# }
+
+ FILE: foreach my $file ( keys %files_needing_analysis ) {
+ my $full_file = qq|$args->{build_dir}/$file|;
+
+ # skip missing MANIFEST.generated files ( -e )
+ # skip binary files (including .pbc files) ( -B )
+ # skip files that pass the -e test because they resolve the .exe variant
+ unless (-T $full_file) {
+ delete $files_needing_analysis{ $file };
+ next FILE;
+ }
+
+ # Skip the book, because it uses extended O'Reilly-specific POD
+ if ($full_file =~ m{docs/book/}) {
+ delete $files_needing_analysis{ $file };
+ next FILE;
+ }
+ # skip files without POD
+ unless (Pod::Find::contains_pod( $full_file, 0 )) {
+ delete $files_needing_analysis{ $file };
+ next FILE;
+ }
+
+ # skip POD generating scripts
+ if ($full_file =~ m/ops_summary\.pl/) {
+ delete $files_needing_analysis{ $file };
+ next FILE;
+ }
+
+ # skip file which includes malformed POD for other testing purposes
+ if ($full_file =~ m{
+ t/tools/dev/searchops/samples\.pm
+ |
+ languages/pod/test\.pod
+ }x
+ ) {
+ delete $files_needing_analysis{ $file };
+ next FILE;
+ }
+ }
+ return [ keys %files_needing_analysis ];
+}
+
# Pulled from Test::Pod
sub file_pod_ok {
my $file = shift;
@@ -142,6 +175,28 @@
return 0;
}
+
+=head1 NAME
+
+t/doc/pod.t - Pod document syntax tests
+
+=head1 SYNOPSIS
+
+ # test all files
+ % prove t/doc/pod.t
+
+ # test specific files
+ % perl t/doc/pod.t perl_module.pm perl_file.pl
+
+=head1 DESCRIPTION
+
+Tests the Pod syntax for all files listed in F<MANIFEST> and
+F<MANIFEST.generated> that appear to contain Pod markup. If any files
+contain invalid POD markup, they are reported in the test output.
+Use C<podchecker> to ferret out individual issues.
+
+=cut
+
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
More information about the parrot-commits
mailing list