File Coverage

blib/lib/Verilog/Netlist/Subclass.pm
Criterion Covered Total %
statement 759 1113 68.1
branch 603 1194 50.5
condition 70 262 26.7
subroutine 142 204 69.6
pod 7 17 41.1
total 1581 2790 56.6


line stmt bran cond sub pod time code
1             # Verilog - Verilog Perl Interface
2             # See copyright, etc in below POD section.
3             ######################################################################
4              
5             package Verilog::Netlist::Subclass;
6 8     8   50 use Scalar::Util qw(weaken);
  8         14  
  8         475  
7 8     8   46 use Carp;
  8         15  
  8         349  
8              
9 8     8   3580 use Verilog::Netlist::Logger;
  8         20  
  8         325  
10             require Exporter;
11 8     8   44 use base qw(Exporter);
  8         14  
  8         683  
12 8     8   45 use vars qw($VERSION @EXPORT);
  8         66  
  8         361  
13 8     8   44 use strict;
  8         9  
  8         4165  
14              
15             $VERSION = '3.476';
16             @EXPORT = qw(structs);
17              
18             # Maybe in the future. For now all users of this must do it themselves
19             #struct ('Verilog::Netlist::Subclass'
20             # =>[name => '$', #' # Name of the element
21             # filename => '$', #' # Filename this came from
22             # lineno => '$', #' # Linenumber this came from
23             # logger => '%', # Logger object, or undef
24             # userdata => '%', # User information
25             # ]);
26              
27             ######################################################################
28             #### Member functions
29              
30             sub fileline {
31 0     0 0 0 my $self = shift;
32 0   0     0 return ($self->filename||"").":".($self->lineno||"");
      0        
33             }
34              
35             ######################################################################
36             #### Error Handling
37              
38             our $_Subclass_Logger_Warned;
39              
40             sub logger {
41 0     0 1 0 my $self = shift;
42             # This provides forward compatibility to derived classes written before
43             # Verilog-Perl 3.041. At some point this function will be removed; all
44             # new derived classes should provide an override for this function.
45 0 0       0 if (!$_Subclass_Logger_Warned) {
46 0         0 warn "-Info: Object class missing logger method, update the package?: ".ref($self)."\n";
47 0         0 $_Subclass_Logger_Warned = Verilog::Netlist::Logger->new();
48             }
49 0         0 return $_Subclass_Logger_Warned;
50             }
51              
52             sub errors {
53 0     0 1 0 my $self = shift;
54 0         0 return $self->logger->errors;
55             }
56             sub warnings {
57 0     0 1 0 my $self = shift;
58 0         0 return $self->logger->warnings;
59             }
60              
61             # Methods
62             sub info {
63 0     0 1 0 my $self = shift;
64 0 0       0 my $objref = $self; $objref = shift if ref $_[0]; # Optional reference to object
  0         0  
65 0         0 $self->logger->info($objref,@_);
66             }
67              
68             sub warn {
69 0     0 1 0 my $self = shift;
70 0 0       0 my $objref = $self; $objref = shift if ref $_[0]; # Optional reference to object
  0         0  
71 0         0 $self->logger->warn($objref,@_);
72             }
73              
74             sub error {
75 0     0 1 0 my $self = shift;
76 0 0       0 my $objref = $self; $objref = shift if ref $_[0]; # Optional reference to object
  0         0  
77 0         0 $self->logger->error($objref,@_);
78             }
79              
80             sub exit_if_error {
81 8     8 1 79 my $self = shift;
82 8         48 return $self->logger->exit_if_error(@_);
83             }
84              
85             sub unlink_if_error {
86 0     0 0 0 my $self = shift;
87             # Not documented; Depreciated in Verilog-Perl 3.041.
88             # Applications should call the logger object's unlink_if_error directly.
89 0         0 return $self->logger->unlink_if_error(@_);
90             }
91              
92             ######################################################################
93             ######################################################################
94             ######################################################################
95             #
96             # Prior to perl 5.6, Class::Struct's new didn't bless the arguments,
97             # or allow parameter initialization! Later versions didn't support weak
98             # references.
99             # This code is thus from Class::Struct, copyright under the Artistic license
100              
101             sub structs {
102 80     80 0 190 my $func = shift;
103 80         146 my $baseclass = $_[0];
104              
105             # Determine parameter list structure, one of:
106             # struct (class => [ element-list ])
107              
108 80         136 my ($class, @decls);
109 80         169 my $base_type = ref $_[1];
110 80 50       258 if ($base_type eq 'ARRAY') {
111 80         115 $class = shift;
112 80         112 @decls = @{shift()};
  80         444  
113 80 50       260 confess "structs usage error" if @_;
114             }
115             else {
116 0         0 confess "structs usage error";
117             }
118 80 50       259 confess "structs usage error" if @decls % 2 == 1;
119              
120             # Create constructor.
121             croak "function 'new' already defined in package $class"
122 8 50   8   61 if do { no strict 'refs'; defined &{$class . "::new"} };
  8         15  
  8         3510  
  80         108  
  80         94  
  80         390  
123              
124 80         169 my @methods = ();
125 80         130 my %refs = ();
126 80         110 my %arrays = ();
127 80         132 my %hashes = ();
128 80         101 my %types;
129 80         105 my $got_class = 0;
130 80         107 my $out = '';
131              
132 80         163 $out .= "{\n package $class;\n use Carp;\n";
133 80         104 $out .= " use Scalar::Util qw(weaken);\n\n";
134 80         102 $out .= " sub new {\n";
135 80         106 $out .= " my (\$class, \%init) = \@_;\n";
136 80         105 $out .= " \$class = __PACKAGE__ unless \@_;\n";
137              
138 80         108 my $cnt = 0;
139 80         115 my ($cmt, $elem);
140              
141 80 50       200 if ($base_type eq 'ARRAY') {
142 80         120 $out .= " my(\$r) = [];\n";
143             }
144 80         217 for (my $idx=0; $idx < @decls; $idx+=2) {
145 1168         1449 my $name = $decls[$idx];
146 1168         1345 my $type = $decls[$idx+1];
147 1168         1823 $types{$name} = $type;
148 1168         1503 push (@methods, $name);
149 1168 50       1713 if ($base_type eq 'ARRAY') {
150 1168         1590 $elem = "[$cnt]";
151 1168         1236 ++$cnt;
152 1168         1599 $cmt = " # $name";
153             }
154 1168 50       1697 if ($type =~ /^\*(.)/) {
155 0         0 $refs{$name}++;
156 0         0 $type = $1;
157             }
158 1168         1690 my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
159 1168 100       2090 if ($type eq '@') {
    100          
    50          
160 40         76 $out .= " croak 'Initializer for $name must be array reference'\n";
161 40         82 $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
162 40         84 $out .= " \$r->$elem = $init [];$cmt\n";
163 40         101 $arrays{$name}++;
164             }
165             elsif ($type eq '%') {
166 304         490 $out .= " croak 'Initializer for $name must be hash reference'\n";
167 304         509 $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
168 304         618 $out .= " \$r->$elem = $init {};$cmt\n";
169 304         729 $hashes{$name}++;
170             }
171             elsif ($type eq '$') {
172 824         2161 $out .= " \$r->$elem = $init undef;$cmt\n";
173             }
174             else{
175 0         0 croak "'$type' is not a valid struct element type";
176             }
177             }
178 80         136 $out .= " bless \$r, \$class;\n }\n";
179              
180             # Create accessor methods.
181              
182 80         137 my ($pre, $pst, $sel);
183 80         112 $cnt = 0;
184 80         236 foreach my $name (@methods) {
185 1168         1551 my $type = $types{$name};
186 8 50   8   59 if (do { no strict 'refs'; defined &{$class . "::$name"} }) {
  8         16  
  8         3213  
  1168         1175  
  1168         1140  
  1168         3004  
187 0         0 warnings::warnif("function '$name' already defined, overrides struct accessor method");
188             }
189             else {
190 1168         1588 $pre = $pst = $cmt = $sel = '';
191 1168 50       1796 if (defined $refs{$name}) {
192 0         0 $pre = "\\(";
193 0         0 $pst = ")";
194 0         0 $cmt = " # returns ref";
195             }
196 1168         1777 $out .= " sub $name {$cmt\n my \$r = shift;\n";
197 1168 50       1652 if ($base_type eq 'ARRAY') {
198 1168         1435 $elem = "[$cnt]";
199 1168         1232 ++$cnt;
200             }
201 1168 100       2199 if (defined $arrays{$name}) {
    100          
202 40         52 $out .= " my \$i;\n";
203 40         66 $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
204 40         62 $out .= " if (ref(\$i) eq 'ARRAY' && !\@_) { \$r->$elem = \$i; return \$r }\n";
205 40         50 $sel = "->[\$i]";
206             }
207             elsif (defined $hashes{$name}) {
208 304         366 $out .= " my \$i;\n";
209 304         456 $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
210 304         535 $out .= " if (ref(\$i) eq 'HASH' && !\@_) { \$r->$elem = \$i; return \$r }\n";
211 304         373 $sel = "->{\$i}";
212             }
213 1168         1773 $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
214 1168         2181 $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
215 1168         1759 $out .= " }\n";
216             }
217             }
218              
219             #print $out;
220 80         110 $out .= "}\n1;\n";
221 8 0 0 8   95 my $result = eval $out;
  8 0 0 8   15  
  8 0 0 8   666  
  8 0 0 8   57  
  8 0 33 8   15  
  8 0 33 8   8290  
  8 0 0 8   67  
  8 0 33 8   17  
  8 0 33 8   697  
  8 0 33 8   72  
  8 0 33 8   25  
  8 0 33 8   13382  
  8 0 33 8   65  
  8 0 33 8   16  
  8 0 0 8   602  
  8 0 33 8   66  
  8 0 33 8   21  
  8 0 33 8   8876  
  8 0 33 8   62  
  8 0 33 8   15  
  8 0 33 0   677  
  8 0 33 0   78  
  8 0 0 0   26  
  8 0 0 0   8332  
  8 0 0 0   62  
  8 0 0 0   55  
  8 100 0 0   612  
  8 50 0 0   58  
  8 50 0 0   16  
  8 50 0 1897   10326  
  8 100 33 312   63  
  8 50 0 0   20  
  8 50 0 0   591  
  8 50 33 0   52  
  8 0 33 6   18  
  8 0 33 11   7091  
  8 0 33 83   58  
  8 0 33 26   34  
  8 0 33 246   589  
  8 0 33 55084   57  
  8 0 33 7766   13  
  8 0 33 1725   6678  
  8 50 33 272   69  
  8 50 33 2278   14  
  8 50 33 424   706  
  8 50 33 0   91  
  8 50 33 1688   28  
  8 100 33 86   23469  
  8 50 33 28   65  
  8 100 33 74   35  
  8 100 33 623   646  
  8 50 33 5   56  
  8 50 33 322   16  
  8 50 33 30   9359  
  8 50 33 263   65  
  8 50 33 14   18  
  8 50 33 436   613  
  8 50 33 277   58  
  8 100 33 112   16  
  8 100 33 0   11565  
  80 50 33 0   7760  
  0 50 33 0   0  
  0 100 33 0   0  
  0 100 33 0   0  
  0 50 33 2   0  
  0 50 33 0   0  
  0 100 33 0   0  
  0 100 33 2   0  
  0 100 33 0   0  
  0 100 33 0   0  
  0 50 33 239   0  
  0 50 33 470   0  
  0 100 33 970   0  
  0 50 33 0   0  
  0 50 33 0   0  
  0 100 33 30   0  
  0 50 33 8   0  
  0 50 33 24   0  
  0 0 33 4   0  
  0 0 33 64   0  
  0 0 33 366   0  
  0 0 33 12610   0  
  0 100 33 436   0  
  0 50 33 237   0  
  0 50 33 653   0  
  0 50 33 3   0  
  0 100   0   0  
  0 50   119   0  
  0 50   6   0  
  0 50   3   0  
  0 100   0   0  
  0 50   0   0  
  0 50   49   0  
  0 50   0   0  
  0 100   38   0  
  0 50   273   0  
  0 50   45   0  
  0 50   46   0  
  0 100   30   0  
  0 50   112   0  
  0 50   5   0  
  0 50   0   0  
  0 50   11   0  
  0 50   5   0  
  0 50   2   0  
  0 50   0   0  
  0 100   0   0  
  0 50   0   0  
  1897 50   0   3732  
  1897 50   0   2272  
  1897 50   104   11825  
  412 100   0   947  
  0 50   0   0  
  0 100   88   0  
  412 50   21   968  
  412 100   0   1251  
  312 50   12501   565  
  312 100   729   352  
  312 50   162   1635  
  39 50   404   158  
  0 50   247   0  
  0 50   469   0  
  39 0   122   79  
  39 0   23307   135  
  0 0   518   0  
  0 0   56   0  
  0 0   1367   0  
  0 0   2876   0  
  0 0   3895   0  
  0 0   727   0  
  0 0   240   0  
  0 0   444   0  
  0 0   11528   0  
  0 0   207   0  
  0 0   228   0  
  0 0   484   0  
  0 0   1487   0  
  0 0   352   0  
  6 0   15   13  
  6 0   444   11  
  6 0   810   13  
  6 0   644   29  
  0 50   14   0  
  0 0   40   0  
  6 0   11040   18  
  6 0   236   21  
  11 0   531   18  
  11 0   3   18  
  11 0   509   38  
  83 0   1350   120  
  83 0   51   126  
  83 0   17   225  
  26 0   442   47  
  26 0   31   31  
  26 50   5   85  
  2 50   11   8  
  0 0   0   0  
  0 0   0   0  
  2 0   0   6  
  2 0   0   9  
  246 0   0   596  
  246 0   0   379  
  246 0   0   525  
  246 0   674   883  
  0 0   250   0  
  0 0   0   0  
  246 50   0   563  
  246 50   0   848  
  55084 50   0   101332  
  55084 100   0   66589  
  55084 50   0   308418  
  11011 50   0   24786  
  0 0   0   0  
  0 0   0   0  
  11011 0   0   21092  
  11011 0   601   41636  
  7766 50       15271  
  7766 100       9363  
  7766 50       43881  
  1430 100       3391  
  0 50       0  
  0 100       0  
  1430 50       3077  
  1430 100       4194  
  1725 50       3197  
  1725 100       2715  
  1725 50       17300  
  376 100       683  
  272 50       285  
  272 100       1367  
  141 50       319  
  104 100       306  
  0 50       0  
  37 50       80  
  37 50       123  
  2278 50       4342  
  2278 50       2636  
  2278 50       6512  
  853 0       2106  
  0 0       0  
  0 50       0  
  853 50       1524  
  853 50       2508  
  424 50       736  
  424 50       776  
  424 50       1198  
  0 0       0  
  0 0       0  
  0 0       0  
  0 0       0  
  0 50       0  
  0 50       0  
  0 0       0  
  0 0       0  
  1688 50       3251  
  1688 100       2210  
  1688 50       4974  
  670 50       1617  
  0 50       0  
  0 50       0  
  670 50       1270  
  670 100       1855  
  86 50       159  
  86 50       102  
  86 50       560  
  10 50       29  
  0 50       0  
  0 50       0  
  10 0       22  
  10 0       41  
  28 50       62  
  28 50       41  
  28 50       137  
  10 50       38  
  0 50       0  
  0 50       0  
  10 0       27  
  10 0       32  
  74 0       152  
  74 0       101  
  74 0       166  
  61 0       147  
  0 0       0  
  0 0       0  
  61 0       115  
  61 0       180  
  623 50       1298  
  623 50       783  
  623 0       1193  
  618 0       1572  
  0 0       0  
  0 0       0  
  618 50       1207  
  618 50       1883  
  5 50       13  
  5 50       10  
  5 0       14  
  5 0       20  
  0 50       0  
  0 50       0  
  5 50       15  
  5 50       18  
  322 50       682  
  322 50       457  
  322 50       1927  
  10 50       32  
  0 50       0  
  0 50       0  
  10 50       35  
  10 50       60  
  30 50       60  
  30 50       76  
  30 50       261  
  263 50       403  
  263 50       492  
  263 50       3151  
  14 50       28  
  14 100       33  
  14 50       144  
  436 50       738  
  436 50       795  
  436 100       3533  
  277 50       481  
  277 50       511  
  277 50       2627  
  112 50       152  
  112 50       210  
  112 100       1779  
  0 50       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  2 100       3  
  2 100       4  
  2 100       30  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 100       0  
  2 100       4  
  2 50       4  
  2 50       5  
  2 50       11  
  2 50       5  
  2 100       6  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  239 100       494  
  239 100       746  
  239 50       840  
  470 50       948  
  470 50       1054  
  470 50       1309  
  970 50       1842  
  970 50       1843  
  970 50       13137  
  0 50       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  30 50       55  
  30 50       62  
  30 100       363  
  8 100       16  
  8 50       18  
  8 100       139  
  24 100       39  
  24 50       49  
  24 50       156  
  4 50       8  
  4 50       11  
  4 50       79  
  64 50       145  
  64 50       126  
  64 50       580  
  366 50       2548  
  366 50       678  
  366 50       2028  
  12610 50       23511  
  12610 50       24004  
  12610 50       28543  
  436 50       798  
  436 50       790  
  436 50       3259  
  237 50       472  
  237 100       446  
  237 50       2482  
  653 50       1256  
  653 50       1175  
  653 50       2896  
  3 50       8  
  3 50       9  
  3 50       65  
  0 50       0  
  0 50       0  
  0 50       0  
  119 50       1867  
  119 50       239  
  119 50       344  
  6 50       8  
  6 50       14  
  6 50       121  
  3 50       5  
  3 50       25  
  3 100       26  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  49 100       93  
  49 100       90  
  49 100       895  
  0 50       0  
  0 50       0  
  0 50       0  
  38 100       78  
  38 100       87  
  38 100       517  
  273 100       632  
  273 50       832  
  273 50       2954  
  45 50       98  
  45 100       113  
  45 100       486  
  46 100       89  
  46 100       102  
  46 100       212  
  30 100       53  
  30 100       66  
  30 100       340  
  112 50       193  
  112 100       203  
  112 100       1337  
  5 50       15  
  5 50       14  
  5 50       33  
  0 50       0  
  0 100       0  
  0 50       0  
  11 50       18  
  11 50       36  
  11 100       79  
  5 100       12  
  5 100       15  
  5 100       25  
  2 100       5  
  2 50       4  
  2 50       8  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  104 100       154  
  104 100       166  
  104 100       233  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  88 50       152  
  88 50       171  
  88 50       804  
  21 50       38  
  21 50       47  
  21 100       121  
  0 50       0  
  0 50       0  
  0 50       0  
  12501 50       21379  
  12501 100       23160  
  12501 100       162788  
  729 50       1426  
  729 50       1383  
  729 50       9610  
  162 50       275  
  162 50       364  
  162 50       1913  
  404 50       866  
  404 50       878  
  404 50       5555  
  247 50       509  
  247 50       508  
  247 50       1500  
  469 50       1133  
  469 50       1072  
  469 50       1518  
  122 100       285  
  122 50       226  
  122 50       647  
  23307 0       42234  
  23307 0       44639  
  23307 0       202290  
  518 0       1091  
  518 0       1050  
  518 0       1725  
  56 0       112  
  56 0       113  
  56 0       283  
  1367 0       2550  
  1367 0       2643  
  1367 0       11243  
  2876 0       5550  
  2876 0       5552  
  2876 0       25646  
  3895 0       7049  
  3895 0       7055  
  3895 0       24237  
  727 0       1140  
  727 0       1305  
  727 0       2398  
  240 0       500  
  240 0       453  
  240 0       1154  
  444 0       819  
  444 0       808  
  444 0       2299  
  11528 0       20702  
  11528 0       22637  
  11528 0       27189  
  207 0       359  
  207 0       418  
  207 0       1301  
  228 0       564  
  228 0       644  
  228 0       760  
  484 0       1012  
  484 0       1028  
  484 0       1653  
  1487 0       8772  
  1487 50       3611  
  1487 50       2577  
  1487         4534  
  1487         3356  
  1487         2865  
  1487         3206  
  1487         3097  
  1487         3606  
  1487         3146  
  1487         3735  
  1487         3294  
  1487         3106  
  1487         2961  
  1487         2859  
  1487         3268  
  1487         3238  
  1487         4552  
  1418         2692  
  1418         2648  
  1418         2951  
  1418         2556  
  1757         4457  
  1757         3708  
  1757         2916  
  1757         3665  
  1757         3293  
  1757         3626  
  1757         24281  
  352         963  
  352         937  
  352         909  
  352         940  
  352         916  
  352         887  
  352         1140  
  352         1021  
  352         863  
  352         813  
  352         3759  
  154         329  
  154         348  
  152         401  
  152         319  
  152         279  
  152         313  
  152         251  
  152         315  
  152         297  
  152         318  
  152         2503  
  16         53  
  16         50  
  16         56  
  16         61  
  15         37  
  15         34  
  15         45  
  15         35  
  15         158  
  450         2073  
  450         1057  
  450         864  
  450         1498  
  447         1460  
  447         1109  
  447         1166  
  447         952  
  447         1069  
  447         1015  
  447         1130  
  446         1107  
  446         951  
  446         952  
  446         1008  
  446         990  
  446         1071  
  446         1386  
  1226         4523  
  1226         2955  
  1226         2165  
  1226         8865  
  816         1909  
  816         1531  
  816         1787  
  816         1811  
  816         1897  
  816         1858  
  816         1859  
  810         1820  
  810         1723  
  810         1793  
  810         1832  
  805         1630  
  805         1385  
  805         1463  
  803         1445  
  803         12560  
  3         9  
  3         9  
  3         10  
  3         46  
  644         3432  
  644         2439  
  644         1172  
  644         1924  
  644         1489  
  644         1243  
  644         1546  
  644         1520  
  644         1589  
  644         1535  
  644         1549  
  644         1599  
  644         1274  
  644         1357  
  644         1252  
  644         1244  
  644         1091  
  644         9522  
  40         127  
  40         106  
  40         82  
  40         138  
  40         108  
  40         97  
  40         85  
  40         126  
  40         91  
  40         94  
  40         89  
  40         95  
  40         93  
  40         96  
  40         104  
  40         114  
  40         107  
  40         106  
  40         88  
  40         92  
  40         108  
  40         102  
  40         85  
  40         115  
  40         102  
  40         105  
  40         92  
  40         95  
  40         109  
  40         85  
  40         739  
  14         80  
  14         43  
  14         30  
  14         59  
  14         38  
  14         50  
  14         82  
  14         52  
  14         42  
  14         45  
  14         46  
  14         40  
  14         54  
  14         37  
  14         68  
  12         37  
  12         40  
  12         34  
  12         42  
  51         361  
  47         112  
  47         89  
  47         159  
  47         112  
  47         117  
  47         103  
  47         106  
  47         133  
  47         140  
  47         118  
  47         218  
  47         103  
  47         124  
  47         170  
  47         107  
  47         114  
  47         164  
  44         109  
  43         85  
  43         122  
  43         110  
  41         111  
  41         88  
  41         71  
  41         69  
  41         80  
  41         89  
  41         555  
  11047         61795  
  11040         26310  
  11040         21328  
  11040         31123  
  11040         23143  
  11040         20347  
  11040         25060  
  11040         24114  
  11040         23122  
  11040         24505  
  11040         25494  
  11040         25134  
  11040         22117  
  11040         23629  
  11040         21773  
  11275         26790  
  11275         23935  
  11275         25901  
  11269         20681  
  11269         20296  
  11240         23765  
  11240         19905  
  11240         18182  
  11240         22134  
  11240         18853  
  11240         19480  
  11240         18767  
  11240         21500  
  11240         198465  
  237         622  
  767         1742  
  767         1621  
  767         7060  
  237         622  
  237         695  
  230         607  
  736         1893  
  710         1484  
  710         3281  
  1551         2958  
  1551         2950  
  1551         7101  
  252         682  
  252         588  
  252         672  
  218         536  
  218         528  
  218         674  
  643         1677  
  642         1678  
  642         2169  
  231         530  
  231         439  
  231         671  
  205         498  
  205         442  
  205         665  
  211         542  
  211         595  
  211         631  
  200         510  
  200         504  
  200         481  
  200         3866  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  674         1395  
  674         1247  
  674         2867  
  250         465  
  250         491  
  250         1171  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  601         1054  
  601         1139  
  601         6204  
222 80 50       315 carp $@ if $@;
223              
224             # Create top class
225 80         596 (my $overclass = $baseclass) =~ s/::Struct$//;
226             {
227             #print \"NEW \",join(' ',\@_),\"\\n\";
228 80     11655 0 150 eval "
  80     910 0 6189  
  11655     1558 0 23458  
  11655     36 0 152446  
  11655     231 0 33231  
  910     16 0 2259  
  910     3 0 12565  
  910     20   3792  
  1558     441   3434  
  1558     212   21993  
  1558         4776  
  36         82  
  36         544  
  36         129  
  231         688  
  231         3754  
  231         931  
  16         45  
  16         299  
  16         66  
  3         10  
  3         69  
  3         12  
  20         46  
  20         280  
  20         61  
  441         949  
  441         6271  
  441         1367  
  212         597  
  212         3512  
  212         781  
229             package $overclass;
230             sub ${func} {
231             my \$class = shift;
232             my \$self = new $baseclass(\@_);
233             bless \$self, \$class;
234             }";
235             }
236             }
237              
238             ######################################################################
239             #### Package return
240             1;
241             __END__