/usr/lib/perl5/PDL/PP/SymTab.pm is in pdl 1:2.007-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # For making sure that no conflicts occur
package SymTab;
use Carp;
sub new {
my($type,%ids) = @_;
my($this) = bless {
Id2Sym => {},
Sym2Id => {},
IsPar => {},
}, $type;
$this->add_ids(%ids);
$this;
}
sub add_ids {
my($this,%hash) = @_;
for(keys %hash) {
$this->{Id2Sym}{$_} = $hash{$_};
# This usually sets the 'undef' key to whatever is in $_, because the
# object in $hash{$_} is usually a scalar, not an array. I know this
# becuase this function is called by AddArgsyms in PDL::PP, which
# conructs the %hash to be
#
# sym_name => sym_name
#
# The only other place that invokes this code is the constructor,
# which itself is called by MkDefSyms in PDL::PP. That invocation is
# called with %hash set as
#
# _PDL_ThisTrans => ["__privtrans",C::Type->new(undef,"$_[0] *foo")]
#
# AFAIK, Sym2Id is never used anywhere in the code generation, and
# the setting of undef throws warning messages, so I am going to
# comment-out this line for now. --David Mertens, 12-12-2011
#$this->{Sym2Id}{$hash{$_}->[0]} = $_;
}
}
sub add_params {
my($this,%hash) = @_;
$this->add_ids(%hash);
for(keys %hash) {
$this->{IsPar}{$_} = 1;
}
}
sub decl_locals {
my($this) = @_;
my $str;
for(keys %{$this->{Id2Sym}}) {
if(!$this->{IsPar}{$_}) {
$str .= $this->{Id2Sym}{$_}[1]
->get_decl($this->{Id2Sym}{$_}[0]).";";
}
}
$str;
}
sub get_params {
}
sub get_symname {
my($this,$id) = @_;
confess "Symbol not found: $id\n" if(!defined($this->{Id2Sym}{$id}));
return $this->{Id2Sym}{$id}[0];
}
1;
|