dslinux/user/perl/ext/Devel/PPPort/parts apicheck.pl apidoc.fnc embed.fnc ppptools.pl
cayenne
dslinux_cayenne at user.in-berlin.de
Mon Dec 4 17:59:16 CET 2006
Update of /cvsroot/dslinux/dslinux/user/perl/ext/Devel/PPPort/parts
In directory antilope:/tmp/cvs-serv17422/ext/Devel/PPPort/parts
Added Files:
apicheck.pl apidoc.fnc embed.fnc ppptools.pl
Log Message:
Adding fresh perl source to HEAD to branch from
--- NEW FILE: apicheck.pl ---
#!/usr/bin/perl -w
################################################################################
#
# apicheck.pl -- generate C source for automated API check
#
################################################################################
#
# $Revision: 1.1 $
# $Author: dslinux_cayenne $
# $Date: 2006-12-04 16:59:14 $
#
################################################################################
#
# Version 3.x, Copyright (C) 2004-2005, 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.
#
################################################################################
use strict;
require 'parts/ppptools.pl';
if (@ARGV) {
open OUT, ">$ARGV[0]" or die "$ARGV[0]: $!\n";
}
else {
*OUT = \*STDOUT;
}
my @f = parse_embed(qw( parts/embed.fnc parts/apidoc.fnc ));
my %todo = %{&parse_todo};
my %tmap = (
void => 'int',
);
my %amap = (
SP => 'SP',
type => 'int',
cast => 'int',
);
my %void = (
void => 1,
Free_t => 1,
Signal_t => 1,
);
my %castvoid = (
map { ($_ => 1) } qw(
Nullav
Nullcv
Nullhv
Nullch
Nullsv
HEf_SVKEY
SP
MARK
SVt_PV
SVt_IV
SVt_NV
SVt_PVMG
SVt_PVAV
SVt_PVHV
SVt_PVCV
SvUOK
G_SCALAR
G_ARRAY
G_VOID
G_DISCARD
G_EVAL
G_NOARGS
XS_VERSION
),
);
my %ignorerv = (
map { ($_ => 1) } qw(
newCONSTSUB
),
);
my %stack = (
ORIGMARK => ['dORIGMARK;'],
POPpx => ['STRLEN n_a;'],
POPpbytex => ['STRLEN n_a;'],
PUSHp => ['dTARG;'],
PUSHn => ['dTARG;'],
PUSHi => ['dTARG;'],
PUSHu => ['dTARG;'],
XPUSHp => ['dTARG;'],
XPUSHn => ['dTARG;'],
XPUSHi => ['dTARG;'],
XPUSHu => ['dTARG;'],
UNDERBAR => ['dUNDERBAR;'],
XCPT_TRY_START => ['dXCPT;'],
XCPT_TRY_END => ['dXCPT;'],
XCPT_CATCH => ['dXCPT;'],
XCPT_RETHROW => ['dXCPT;'],
);
my %postcode = (
dSP => "some_global_var = !sp;",
dMARK => "some_global_var = !mark;",
dORIGMARK => "some_global_var = !origmark;",
dAX => "some_global_var = !ax;",
dITEMS => "some_global_var = !items;",
dXSARGS => "some_global_var = ax && items;",
NEWSV => "some_global_var = !arg1;",
New => "some_global_var = !arg1;",
Newc => "some_global_var = !arg1;",
Newz => "some_global_var = !arg1;",
dUNDERBAR => "(void) UNDERBAR;",
);
my %ignore = (
map { ($_ => 1) } qw(
svtype
items
ix
dXSI32
XS
CLASS
THIS
RETVAL
StructCopy
),
);
print OUT <<HEAD;
/*
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by $0.
* Any changes made here will be lost!
*/
#include "EXTERN.h"
#include "perl.h"
#define NO_XSLOCKS
#include "XSUB.h"
#ifndef DPPP_APICHECK_NO_PPPORT_H
#define NEED_eval_pv
#define NEED_grok_bin
#define NEED_grok_hex
#define NEED_grok_number
#define NEED_grok_numeric_radix
#define NEED_grok_oct
#define NEED_newCONSTSUB
#define NEED_newRV_noinc
#define NEED_sv_2pv_nolen
#define NEED_sv_2pvbyte
#define NEED_sv_catpvf_mg
#define NEED_sv_catpvf_mg_nocontext
#define NEED_sv_setpvf_mg
#define NEED_sv_setpvf_mg_nocontext
#define NEED_vnewSVpvf
#include "ppport.h"
#endif
static int some_global_var;
static int VARarg1;
static char *VARarg2;
static double VARarg3;
HEAD
my $f;
for $f (@f) {
$ignore{$f->{name}} and next;
$f->{flags}{A} or next; # only public API members
$ignore{$f->{name}} = 1; # ignore duplicates
my $Perl_ = $f->{flags}{p} ? 'Perl_' : '';
my $stack = '';
my @arg;
my $aTHX = '';
my $i = 1;
my $ca;
my $varargs = 0;
for $ca (@{$f->{args}}) {
my $a = $ca->[0];
if ($a eq '...') {
$varargs = 1;
push @arg, qw(VARarg1 VARarg2 VARarg3);
last;
}
my($n, $p, $d) = $a =~ /^ (\w+(?:\s+\w+)*)\s* # type name => $n
(\**) # pointer => $p
((?:\[[^\]]*\])*) # dimension => $d
$/x
or die "$0 - cannot parse argument: [$a]\n";
if (exists $amap{$n}) {
push @arg, $amap{$n};
next;
}
$n = $tmap{$n} || $n;
my $v = 'arg' . $i++;
push @arg, $v;
$stack .= " static $n $p$v$d;\n";
}
unless ($f->{flags}{n} || $f->{flags}{'m'}) {
$stack = " dTHX;\n$stack";
$aTHX = @arg ? 'aTHX_ ' : 'aTHX';
}
if ($stack{$f->{name}}) {
my $s = '';
for (@{$stack{$f->{name}}}) {
$s .= " $_\n";
}
$stack = "$s$stack";
}
my $args = join ', ', @arg;
my $rvt = $f->{ret} || 'void';
my $ret;
if ($void{$rvt}) {
$ret = $castvoid{$f->{name}} ? '(void) ' : '';
}
else {
$ret = $ignorerv{$f->{name}} ? '(void) ' : "return ";
}
my $aTHX_args = "$aTHX$args";
my $post = '';
if ($postcode{$f->{name}}) {
$post = $postcode{$f->{name}};
$post =~ s/^/ /g;
$post = "\n$post";
}
unless ($f->{flags}{'m'} and @arg == 0) {
$args = "($args)";
$aTHX_args = "($aTHX_args)";
}
print OUT <<HEAD;
/******************************************************************************
*
* $f->{name}
*
******************************************************************************/
HEAD
if ($todo{$f->{name}}) {
my($ver,$sub) = $todo{$f->{name}} =~ /^5\.(\d{3})(\d{3})$/ or die;
for ($ver, $sub) {
s/^0+(\d)/$1/
}
if ($ver < 6 && $sub > 0) {
$sub =~ s/0$// or die;
}
print OUT "#if PERL_VERSION > $ver || (PERL_VERSION == $ver && PERL_SUBVERSION >= $sub) /* TODO */\n";
}
my $final = $varargs
? "$Perl_$f->{name}$aTHX_args"
: "$f->{name}$args";
$f->{cond} and print OUT "#if $f->{cond}\n";
print OUT <<END;
$rvt _DPPP_test_$f->{name} (void)
{
dXSARGS;
$stack
#ifdef $f->{name}
if (some_global_var)
{
$ret$f->{name}$args;$post
}
#endif
some_global_var = items && ax;
{
#ifdef $f->{name}
$ret$final;$post
#else
$ret$Perl_$f->{name}$aTHX_args;$post
#endif
}
}
END
$f->{cond} and print OUT "#endif\n";
$todo{$f->{name}} and print OUT "#endif\n";
print OUT "\n";
}
@ARGV and close OUT;
--- NEW FILE: ppptools.pl ---
################################################################################
#
# ppptools.pl -- various utility functions
#
################################################################################
#
# $Revision: 1.1 $
# $Author: dslinux_cayenne $
# $Date: 2006-12-04 16:59:14 $
#
################################################################################
#
# Version 3.x, Copyright (C) 2004-2005, 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.
#
################################################################################
sub parse_todo
{
my $dir = shift || 'parts/todo';
local *TODO;
my %todo;
my $todo;
for $todo (glob "$dir/*") {
open TODO, $todo or die "cannot open $todo: $!\n";
my $perl = <TODO>;
chomp $perl;
while (<TODO>) {
chomp;
s/#.*//;
s/^\s+//; s/\s+$//;
/^\s*$/ and next;
/^\w+$/ or die "invalid identifier: $_\n";
exists $todo{$_} and die "duplicate identifier: $_ ($todo{$_} <=> $perl)\n";
$todo{$_} = $perl;
}
close TODO;
}
return \%todo;
}
sub expand_version
{
my($op, $ver) = @_;
my($r, $v, $s) = parse_version($ver);
$r == 5 or die "only Perl revision 5 is supported\n";
$op eq '==' and return "((PERL_VERSION == $v) && (PERL_SUBVERSION == $s))";
$op eq '!=' and return "((PERL_VERSION != $v) || (PERL_SUBVERSION != $s))";
$op =~ /([<>])/ and return "((PERL_VERSION $1 $v) || ((PERL_VERSION == $v) && (PERL_SUBVERSION $op $s)))";
die "cannot expand version expression ($op $ver)\n";
}
sub parse_partspec
{
my $file = shift;
my $section = 'implementation';
my $vsec = join '|', qw( provides dontwarn implementation
xsubs xsinit xsmisc xshead xsboot tests );
my(%data, %options);
local *F;
open F, $file or die "$file: $!\n";
while (<F>) {
/^##/ and next;
if (/^=($vsec)(?:\s+(.*))?/) {
$section = $1;
if (defined $2) {
my $opt = $2;
$options{$section} = eval "{ $opt }";
$@ and die "Invalid options ($opt) in section $section of $file: $@\n";
}
next;
}
push @{$data{$section}}, $_;
}
close F;
for (keys %data) {
my @v = @{$data{$_}};
shift @v while @v && $v[0] =~ /^\s*$/;
pop @v while @v && $v[-1] =~ /^\s*$/;
$data{$_} = join '', @v;
}
unless (exists $data{provides}) {
$data{provides} = ($file =~ /(\w+)$/)[0];
}
$data{provides} = [$data{provides} =~ /(\S+)/g];
if (exists $data{dontwarn}) {
$data{dontwarn} = [$data{dontwarn} =~ /(\S+)/g];
}
my @prov;
my %proto;
if (exists $data{tests} && (!exists $data{implementation} || $data{implementation} !~ /\S/)) {
$data{implementation} = '';
}
else {
$data{implementation} =~ /\S/ or die "Empty implementation in $file\n";
my $p;
for $p (@{$data{provides}}) {
if ($p =~ m#^/.*/\w*$#) {
my @tmp = eval "\$data{implementation} =~ ${p}gm";
$@ and die "invalid regex $p in $file\n";
@tmp or warn "no matches for regex $p in $file\n";
push @prov, do { my %h; grep !$h{$_}++, @tmp };
}
elsif ($p eq '__UNDEFINED__') {
my @tmp = $data{implementation} =~ /^\s*__UNDEFINED__[^\r\n\S]+(\w+)/gm;
@tmp or warn "no __UNDEFINED__ macros in $file\n";
push @prov, @tmp;
}
else {
push @prov, $p;
}
}
for (@prov) {
if ($data{implementation} !~ /\b\Q$_\E\b/) {
warn "$file claims to provide $_, but doesn't seem to do so\n";
next;
}
# scan for prototypes
my($proto) = $data{implementation} =~ /
( ^ (?:[\w*]|[^\S\r\n])+
[\r\n]*?
^ \b$_\b \s*
\( [^{]* \)
)
\s* \{
/xm or next;
$proto =~ s/^\s+//;
$proto =~ s/\s+$//;
$proto =~ s/\s+/ /g;
exists $proto{$_} and warn "$file: duplicate prototype for $_\n";
$proto{$_} = $proto;
}
}
for $section (qw( implementation xsubs xsinit xsmisc xshead xsboot )) {
if (exists $data{$section}) {
$data{$section} =~ s/\{\s*version\s*(<|>|==|!=|>=|<=)\s*([\d._]+)\s*\}/expand_version($1, $2)/gei;
}
}
$data{provides} = \@prov;
$data{prototypes} = \%proto;
$data{OPTIONS} = \%options;
my %prov = map { ($_ => 1) } @prov;
my %dontwarn = exists $data{dontwarn} ? map { ($_ => 1) } @{$data{dontwarn}} : ();
my @maybeprov = do { my %h;
grep {
my($nop) = /^Perl_(.*)/;
not exists $prov{$_} ||
exists $dontwarn{$_} ||
(defined $nop && exists $prov{$nop} ) ||
(defined $nop && exists $dontwarn{$nop}) ||
$h{$_}++;
}
$data{implementation} =~ /^\s*#\s*define\s+(\w+)/g };
if (@maybeprov) {
warn "$file seems to provide these macros, but doesn't list them:\n "
. join("\n ", @maybeprov) . "\n";
}
return \%data;
}
sub compare_prototypes
{
my($p1, $p2) = @_;
for ($p1, $p2) {
s/^\s+//;
s/\s+$//;
s/\s+/ /g;
s/(\w)\s(\W)/$1$2/g;
s/(\W)\s(\w)/$1$2/g;
}
return $p1 cmp $p2;
}
sub ppcond
{
my $s = shift;
my @c;
my $p;
for $p (@$s) {
push @c, map "!($_)", @{$p->{pre}};
defined $p->{cur} and push @c, "($p->{cur})";
}
join " && ", @c;
}
sub trim_arg
{
my $in = shift;
my $remove = join '|', qw( NN NULLOK );
$in eq '...' and return ($in);
local $_ = $in;
my $id;
s/[*()]/ /g;
s/\[[^\]]*\]/ /g;
s/\b(?:auto|const|extern|inline|register|static|volatile|restrict)\b//g;
s/\b(?:$remove)\b//;
s/^\s*//; s/\s*$//;
if( /^\b(?:struct|union|enum)\s+\w+(?:\s+(\w+))?$/ ) {
defined $1 and $id = $1;
}
else {
if( s/\b(?:char|double|float|int|long|short|signed|unsigned|void)\b//g ) {
/^\s*(\w+)\s*$/ and $id = $1;
}
else {
/^\s*\w+\s+(\w+)\s*$/ and $id = $1;
}
}
$_ = $in;
defined $id and s/\b$id\b//;
# these don't matter at all
s/\b(?:auto|extern|inline|register|static|volatile|restrict)\b//g;
s/\b(?:$remove)\b//;
s/(?=<\*)\s+(?=\*)//g;
s/\s*(\*+)\s*/ $1 /g;
s/^\s*//; s/\s*$//;
s/\s+/ /g;
return ($_, $id);
}
sub parse_embed
{
my @files = @_;
my @func;
my @pps;
my $file;
local *FILE;
for $file (@files) {
open FILE, $file or die "$file: $!\n";
my($line, $l);
while (defined($line = <FILE>)) {
while ($line =~ /\\$/ && defined($l = <FILE>)) {
$line =~ s/\\\s*//;
$line .= $l;
}
next if $line =~ /^\s*:/;
$line =~ s/^\s+|\s+$//gs;
my($dir, $args) = ($line =~ /^\s*#\s*(\w+)(?:\s*(.*?)\s*)?$/);
if (defined $dir and defined $args) {
for ($dir) {
/^ifdef$/ and do { push @pps, { pre => [], cur => "defined($args)" } ; last };
/^ifndef$/ and do { push @pps, { pre => [], cur => "!defined($args)" } ; last };
/^if$/ and do { push @pps, { pre => [], cur => $args } ; last };
/^elif$/ and do { push @{$pps[-1]{pre}}, $pps[-1]{cur}; $pps[-1]{cur} = $args; last };
/^else$/ and do { push @{$pps[-1]{pre}}, $pps[-1]{cur}; $pps[-1]{cur} = undef; last };
/^endif$/ and do { pop @pps ; last };
/^include$/ and last;
/^define$/ and last;
/^undef$/ and last;
warn "unhandled preprocessor directive: $dir\n";
}
}
else {
my @e = split /\s*\|\s*/, $line;
if( @e >= 3 ) {
my($flags, $ret, $name, @args) = @e;
for (@args) {
$_ = [trim_arg($_)];
}
($ret) = trim_arg($ret);
push @func, {
name => $name,
flags => { map { $_, 1 } $flags =~ /./g },
ret => $ret,
args => \@args,
cond => ppcond(\@pps),
};
}
}
}
close FILE;
}
return @func;
}
sub make_prototype
{
my $f = shift;
my @args = map { "@$_" } @{$f->{args}};
my $proto;
my $pTHX_ = exists $f->{flags}{n} ? "" : "pTHX_ ";
$proto = "$f->{ret} $f->{name}" . "($pTHX_" . join(', ', @args) . ')';
return $proto;
}
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 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";
}
$s /= 10;
}
return ($r, $v, $s);
}
1;
--- NEW FILE: embed.fnc ---
: Lines are of the form:
: flags|return_type|function_name|arg1|arg2|...|argN
:
: A line may be continued on another by ending it with a backslash.
: Leading and trailing whitespace will be ignored in each component.
:
: flags are single letters with following meanings:
: A member of public API
: m Implemented as a macro - no export, no
: proto, no #define
: d function has documentation with its source
: s static function, should have an S_ prefix in
: source file; for macros (m), suffix the usage
: example with a semicolon
: n has no implicit interpreter/thread context argument
: p function has a Perl_ prefix
: f function takes printf style format string, varargs
: r function never returns
: o has no compatibility macro (#define foo Perl_foo)
[...1481 lines suppressed...]
#endif
#ifdef PERL_NEED_MY_HTOBEL
np |long |my_htobel |long n
#endif
#ifdef PERL_NEED_MY_BETOHL
np |long |my_betohl |long n
#endif
np |void |my_swabn |void* ptr|int n
Ap |GV* |gv_fetchpvn_flags|const char* name|STRLEN len|I32 flags|I32 sv_type
Ap |GV* |gv_fetchsv|SV *name|I32 flags|I32 sv_type
dpR |bool |is_gv_magical_sv|SV *name|U32 flags
ApR |bool |stashpv_hvname_match|NN const COP *cop|NN const HV *hv
END_EXTERN_C
/*
* ex: set ts=8 sts=4 sw=4 noet:
*/
--- NEW FILE: apidoc.fnc ---
Am|bool|isALNUM|char ch
Am|bool|isALPHA|char ch
Am|bool|isDIGIT|char ch
Am|bool|isLOWER|char ch
Am|bool|isSPACE|char ch
Am|bool|isUPPER|char ch
Am|bool|strEQ|char* s1|char* s2
Am|bool|strGE|char* s1|char* s2
Am|bool|strGT|char* s1|char* s2
Am|bool|strLE|char* s1|char* s2
Am|bool|strLT|char* s1|char* s2
Am|bool|strNE|char* s1|char* s2
Am|bool|strnEQ|char* s1|char* s2|STRLEN len
Am|bool|strnNE|char* s1|char* s2|STRLEN len
Am|bool|SvIOK_notUV|SV* sv
Am|bool|SvIOKp|SV* sv
Am|bool|SvIOK|SV* sv
Am|bool|SvIOK_UV|SV* sv
Am|bool|SvIsCOW_shared_hash|SV* sv
Am|bool|SvIsCOW|SV* sv
Am|bool|SvNIOKp|SV* sv
Am|bool|SvNIOK|SV* sv
Am|bool|SvNOKp|SV* sv
Am|bool|SvNOK|SV* sv
Am|bool|SvOK|SV* sv
Am|bool|SvOOK|SV* sv
Am|bool|SvPOKp|SV* sv
Am|bool|SvPOK|SV* sv
Am|bool|SvROK|SV* sv
Am|bool|SvTAINTED|SV* sv
Am|bool|SvTRUE|SV* sv
Am|bool|SvUTF8|SV* sv
Am|bool|SvVOK|SV* sv
Am|char*|HePV|HE* he|STRLEN len
Am|char*|HvNAME|HV* stash
Am|char*|SvEND|SV* sv
Am|char *|SvGROW|SV* sv|STRLEN len
Am|char*|SvPVbyte_force|SV* sv|STRLEN len
Am|char*|SvPVbyte_nolen|SV* sv
Am|char*|SvPVbyte|SV* sv|STRLEN len
Am|char*|SvPVbytex_force|SV* sv|STRLEN len
Am|char*|SvPVbytex|SV* sv|STRLEN len
Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
Am|char*|SvPV_force|SV* sv|STRLEN len
Am|char*|SvPV_nolen|SV* sv
Am|char*|SvPV_nomg|SV* sv|STRLEN len
Am|char*|SvPV|SV* sv|STRLEN len
Am|char*|SvPVutf8_force|SV* sv|STRLEN len
Am|char*|SvPVutf8_nolen|SV* sv
Am|char*|SvPVutf8|SV* sv|STRLEN len
Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
Am|char*|SvPVutf8x|SV* sv|STRLEN len
Am|char*|SvPVX|SV* sv
Am|char*|SvPVx|SV* sv|STRLEN len
Am|char|toLOWER|char ch
Am|char|toUPPER|char ch
Am|HV*|CvSTASH|CV* cv
Am|HV*|SvSTASH|SV* sv
Am|int|AvFILL|AV* av
Am|IV|SvIV_nomg|SV* sv
Am|IV|SvIV|SV* sv
Am|IV|SvIVx|SV* sv
Am|IV|SvIVX|SV* sv
Amn|char*|CLASS
Amn|char*|POPp
Amn|char*|POPpbytex
Amn|char*|POPpx
Amn|HV*|PL_modglobal
Amn|I32|ax
Amn|I32|items
Amn|I32|ix
Amn|IV|POPi
Amn|long|POPl
Amn|NV|POPn
Amn|STRLEN|PL_na
Amn|SV|PL_sv_no
Amn|SV|PL_sv_undef
Amn|SV|PL_sv_yes
Amn|SV*|POPs
Amn|U32|GIMME
Amn|U32|GIMME_V
Am|NV|SvNV|SV* sv
Am|NV|SvNVx|SV* sv
Am|NV|SvNVX|SV* sv
Amn|(whatever)|RETVAL
Amn|(whatever)|THIS
Ams||dAX
Ams||dAXMARK
Ams||dITEMS
Ams||dMARK
Ams||dORIGMARK
Ams||dSP
Ams||dUNDERBAR
Ams||dXCPT
Ams||dXSARGS
Ams||dXSI32
Ams||ENTER
Ams||FREETMPS
Ams||LEAVE
Ams||PUTBACK
Ams||SAVETMPS
Ams||SPAGAIN
Am|STRLEN|HeKLEN|HE* he
Am|STRLEN|SvCUR|SV* sv
Am|STRLEN|SvLEN|SV* sv
Am|SV*|GvSV|GV* gv
Am|SV*|HeSVKEY_force|HE* he
Am|SV*|HeSVKEY|HE* he
Am|SV*|HeSVKEY_set|HE* he|SV* sv
Am|SV*|HeVAL|HE* he
Am|SV*|newRV_inc|SV* sv
Am|SV*|NEWSV|int id|STRLEN len
Am|SV*|ST|int ix
Am|SV*|SvREFCNT_inc|SV* sv
Am|SV*|SvRV|SV* sv
Am|svtype|SvTYPE|SV* sv
Ams||XCPT_RETHROW
Ams||XSRETURN_EMPTY
Ams||XSRETURN_NO
Ams||XSRETURN_UNDEF
Ams||XSRETURN_YES
Ams||XS_VERSION_BOOTCHECK
Am|U32|HeHASH|HE* he
Am|U32|SvREFCNT|SV* sv
AmU||G_ARRAY
AmU||G_DISCARD
AmU||G_EVAL
AmU||G_NOARGS
AmU||G_SCALAR
AmU||G_VOID
AmU||HEf_SVKEY
AmU||MARK
AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
AmU||Nullav
AmU||Nullch
AmU||Nullcv
AmU||Nullhv
AmU||Nullsv
AmU||ORIGMARK
AmU||SP
AmU||SVt_IV
AmU||SVt_NV
AmU||SVt_PV
AmU||SVt_PVAV
AmU||SVt_PVCV
AmU||SVt_PVHV
AmU||SVt_PVMG
AmU||svtype
AmU||UNDERBAR
Am|UV|SvUV_nomg|SV* sv
Am|UV|SvUV|SV* sv
Am|UV|SvUVx|SV* sv
Am|UV|SvUVX|SV* sv
AmU||XCPT_CATCH
AmU||XCPT_TRY_END
AmU||XCPT_TRY_START
AmU||XS
AmU||XS_VERSION
Am|void *|CopyD|void* src|void* dest|int nitems|type
Am|void|Copy|void* src|void* dest|int nitems|type
Am|void|EXTEND|SP|int nitems
Am|void*|HeKEY|HE* he
Am|void *|MoveD|void* src|void* dest|int nitems|type
Am|void|Move|void* src|void* dest|int nitems|type
Am|void|mPUSHi|IV iv
Am|void|mPUSHn|NV nv
Am|void|mPUSHp|char* str|STRLEN len
Am|void|mPUSHu|UV uv
Am|void|mXPUSHi|IV iv
Am|void|mXPUSHn|NV nv
Am|void|mXPUSHp|char* str|STRLEN len
Am|void|mXPUSHu|UV uv
Am|void|Newc|int id|void* ptr|int nitems|type|cast
Am|void|New|int id|void* ptr|int nitems|type
Am|void|Newz|int id|void* ptr|int nitems|type
Am|void|Poison|void* dest|int nitems|type
Am|void|PUSHi|IV iv
Am|void|PUSHMARK|SP
Am|void|PUSHmortal
Am|void|PUSHn|NV nv
Am|void|PUSHp|char* str|STRLEN len
Am|void|PUSHs|SV* sv
Am|void|PUSHu|UV uv
Am|void|Renewc|void* ptr|int nitems|type|cast
Am|void|Renew|void* ptr|int nitems|type
Am|void|Safefree|void* ptr
Am|void|StructCopy|type src|type dest|type
Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
Am|void|SvCUR_set|SV* sv|STRLEN len
Am|void|SvGETMAGIC|SV* sv
Am|void|SvIOK_off|SV* sv
Am|void|SvIOK_only|SV* sv
Am|void|SvIOK_only_UV|SV* sv
Am|void|SvIOK_on|SV* sv
Am|void|SvIV_set|SV* sv|IV val
Am|void|SvLEN_set|SV* sv|STRLEN len
Am|void|SvLOCK|SV* sv
Am|void|SvMAGIC_set|SV* sv|MAGIC* val
Am|void|SvNIOK_off|SV* sv
Am|void|SvNOK_off|SV* sv
Am|void|SvNOK_only|SV* sv
Am|void|SvNOK_on|SV* sv
Am|void|SvNV_set|SV* sv|NV val
Am|void|SvPOK_off|SV* sv
Am|void|SvPOK_only|SV* sv
Am|void|SvPOK_only_UTF8|SV* sv
Am|void|SvPOK_on|SV* sv
Am|void|SvPV_set|SV* sv|char* val
Am|void|SvREFCNT_dec|SV* sv
Am|void|SvROK_off|SV* sv
Am|void|SvROK_on|SV* sv
Am|void|SvRV_set|SV* sv|SV* val
Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
Am|void|SvSETMAGIC|SV* sv
Am|void|SvSetMagicSV|SV* dsb|SV* ssv
Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
Am|void|SvSetSV|SV* dsb|SV* ssv
Am|void|SvSHARE|SV* sv
Am|void|SvSTASH_set|SV* sv|STASH* val
Am|void|SvTAINTED_off|SV* sv
Am|void|SvTAINTED_on|SV* sv
Am|void|SvTAINT|SV* sv
Am|void|SvUNLOCK|SV* sv
Am|void|SvUOK|SV* sv
Am|void|SvUPGRADE|SV* sv|svtype type
Am|void|SvUTF8_off|SV *sv
Am|void|SvUTF8_on|SV *sv
Am|void|SvUV_set|SV* sv|UV val
Am|void|XPUSHi|IV iv
Am|void|XPUSHmortal
Am|void|XPUSHn|NV nv
Am|void|XPUSHp|char* str|STRLEN len
Am|void|XPUSHs|SV* sv
Am|void|XPUSHu|UV uv
Am|void|XSRETURN|int nitems
Am|void|XSRETURN_IV|IV iv
Am|void|XSRETURN_NV|NV nv
Am|void|XSRETURN_PV|char* str
Am|void|XSRETURN_UV|IV uv
Am|void|XST_mIV|int pos|IV iv
Am|void|XST_mNO|int pos
Am|void|XST_mNV|int pos|NV nv
Am|void|XST_mPV|int pos|char* str
Am|void|XST_mUNDEF|int pos
Am|void|XST_mYES|int pos
Am|void *|ZeroD|void* dest|int nitems|type
Am|void|Zero|void* dest|int nitems|type
m|AV *|CvPADLIST|CV *cv
m|bool|CvWEAKOUTSIDE|CV *cv
m|char *|PAD_COMPNAME_PV|PADOFFSET po
m|HV *|PAD_COMPNAME_OURSTASH|PADOFFSET po
m|HV *|PAD_COMPNAME_TYPE|PADOFFSET po
mn|bool|PL_dowarn
mn|GV *|PL_DBsub
mn|GV*|PL_last_in_gv
mn|SV *|PL_DBsingle
mn|SV *|PL_DBtrace
mn|SV*|PL_ofs_sv
mn|SV*|PL_rs
ms||djSP
m|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po
m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
m|SV *|CX_CURPAD_SV|struct context|PADOFFSET po
m|SV *|PAD_BASE_SV |PADLIST padlist|PADOFFSET po
m|SV *|PAD_SETSV |PADOFFSET po|SV* sv
m|SV *|PAD_SVl |PADOFFSET po
m|U32|PAD_COMPNAME_FLAGS|PADOFFSET po
mU||LVRET
m|void|CX_CURPAD_SAVE|struct context
m|void|PAD_CLONE_VARS|PerlInterpreter *proto_perl \
m|void|PAD_DUP|PADLIST dstpad|PADLIST srcpad|CLONE_PARAMS* param
m|void|PAD_RESTORE_LOCAL|PAD *opad
m|void|PAD_SAVE_LOCAL|PAD *opad|PAD *npad
m|void|PAD_SAVE_SETNULLPAD
m|void|PAD_SET_CUR_NOSAVE |PADLIST padlist|I32 n
m|void|PAD_SET_CUR |PADLIST padlist|I32 n
m|void|PAD_SV |PADOFFSET po
m|void|SAVECLEARSV |SV **svp
m|void|SAVECOMPPAD
m|void|SAVEPADSV |PADOFFSET po
More information about the dslinux-commit
mailing list