File Coverage

blib/lib/Verilog/Netlist/Subclass.pm
Criterion Covered Total %
statement 761 1113 68.3
branch 597 1194 50.0
condition 66 262 25.1
subroutine 144 204 70.5
pod 7 17 41.1
total 1575 2790 56.4


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   55 use Scalar::Util qw(weaken);
  8         17  
  8         488  
7 8     8   41 use Carp;
  8         15  
  8         373  
8              
9 8     8   3676 use Verilog::Netlist::Logger;
  8         20  
  8         304  
10             require Exporter;
11 8     8   42 use base qw(Exporter);
  8         14  
  8         744  
12 8     8   58 use vars qw($VERSION @EXPORT);
  8         18  
  8         476  
13 8     8   46 use strict;
  8         15  
  8         4495  
14              
15             $VERSION = '3.478';
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 83 my $self = shift;
82 8         33 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 192 my $func = shift;
103 80         156 my $baseclass = $_[0];
104              
105             # Determine parameter list structure, one of:
106             # struct (class => [ element-list ])
107              
108 80         186 my ($class, @decls);
109 80         192 my $base_type = ref $_[1];
110 80 50       297 if ($base_type eq 'ARRAY') {
111 80         130 $class = shift;
112 80         111 @decls = @{shift()};
  80         472  
113 80 50       289 confess "structs usage error" if @_;
114             }
115             else {
116 0         0 confess "structs usage error";
117             }
118 80 50       286 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   64 if do { no strict 'refs'; defined &{$class . "::new"} };
  8         15  
  8         3646  
  80         121  
  80         110  
  80         533  
123              
124 80         174 my @methods = ();
125 80         143 my %refs = ();
126 80         119 my %arrays = ();
127 80         116 my %hashes = ();
128 80         123 my %types;
129 80         132 my $got_class = 0;
130 80         117 my $out = '';
131              
132 80         180 $out .= "{\n package $class;\n use Carp;\n";
133 80         117 $out .= " use Scalar::Util qw(weaken);\n\n";
134 80         113 $out .= " sub new {\n";
135 80         117 $out .= " my (\$class, \%init) = \@_;\n";
136 80         116 $out .= " \$class = __PACKAGE__ unless \@_;\n";
137              
138 80         111 my $cnt = 0;
139 80         123 my ($cmt, $elem);
140              
141 80 50       202 if ($base_type eq 'ARRAY') {
142 80         118 $out .= " my(\$r) = [];\n";
143             }
144 80         244 for (my $idx=0; $idx < @decls; $idx+=2) {
145 1168         1530 my $name = $decls[$idx];
146 1168         1460 my $type = $decls[$idx+1];
147 1168         1948 $types{$name} = $type;
148 1168         1552 push (@methods, $name);
149 1168 50       1764 if ($base_type eq 'ARRAY') {
150 1168         1578 $elem = "[$cnt]";
151 1168         1313 ++$cnt;
152 1168         1713 $cmt = " # $name";
153             }
154 1168 50       1741 if ($type =~ /^\*(.)/) {
155 0         0 $refs{$name}++;
156 0         0 $type = $1;
157             }
158 1168         1776 my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
159 1168 100       2167 if ($type eq '@') {
    100          
    50          
160 40         93 $out .= " croak 'Initializer for $name must be array reference'\n";
161 40         95 $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
162 40         91 $out .= " \$r->$elem = $init [];$cmt\n";
163 40         95 $arrays{$name}++;
164             }
165             elsif ($type eq '%') {
166 304         492 $out .= " croak 'Initializer for $name must be hash reference'\n";
167 304         543 $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
168 304         531 $out .= " \$r->$elem = $init {};$cmt\n";
169 304         741 $hashes{$name}++;
170             }
171             elsif ($type eq '$') {
172 824         2247 $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         160 $out .= " bless \$r, \$class;\n }\n";
179              
180             # Create accessor methods.
181              
182 80         132 my ($pre, $pst, $sel);
183 80         128 $cnt = 0;
184 80         184 foreach my $name (@methods) {
185 1168         1660 my $type = $types{$name};
186 8 50   8   65 if (do { no strict 'refs'; defined &{$class . "::$name"} }) {
  8         14  
  8         3278  
  1168         1220  
  1168         1157  
  1168         3065  
187 0         0 warnings::warnif("function '$name' already defined, overrides struct accessor method");
188             }
189             else {
190 1168         1630 $pre = $pst = $cmt = $sel = '';
191 1168 50       1860 if (defined $refs{$name}) {
192 0         0 $pre = "\\(";
193 0         0 $pst = ")";
194 0         0 $cmt = " # returns ref";
195             }
196 1168         1809 $out .= " sub $name {$cmt\n my \$r = shift;\n";
197 1168 50       1716 if ($base_type eq 'ARRAY') {
198 1168         1449 $elem = "[$cnt]";
199 1168         1278 ++$cnt;
200             }
201 1168 100       2261 if (defined $arrays{$name}) {
    100          
202 40         61 $out .= " my \$i;\n";
203 40         76 $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
204 40         74 $out .= " if (ref(\$i) eq 'ARRAY' && !\@_) { \$r->$elem = \$i; return \$r }\n";
205 40         61 $sel = "->[\$i]";
206             }
207             elsif (defined $hashes{$name}) {
208 304         378 $out .= " my \$i;\n";
209 304         464 $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
210 304         607 $out .= " if (ref(\$i) eq 'HASH' && !\@_) { \$r->$elem = \$i; return \$r }\n";
211 304         369 $sel = "->{\$i}";
212             }
213 1168         1765 $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
214 1168         2282 $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
215 1168         1878 $out .= " }\n";
216             }
217             }
218              
219             #print $out;
220 80         121 $out .= "}\n1;\n";
221 8 0 0 8   74 my $result = eval $out;
  8 0 0 8   29  
  8 0 0 8   689  
  8 0 0 8   68  
  8 0 33 8   16  
  8 0 33 8   8696  
  8 0 0 8   80  
  8 0 33 8   18  
  8 0 33 8   748  
  8 0 33 8   60  
  8 0 33 8   16  
  8 0 33 8   14215  
  8 0 33 8   66  
  8 0 33 8   14  
  8 0 0 8   638  
  8 0 33 8   73  
  8 0 33 8   15  
  8 0 33 8   9278  
  8 0 33 8   63  
  8 0 33 8   19  
  8 0 33 0   682  
  8 0 33 0   75  
  8 0 0 0   33  
  8 0 0 0   8844  
  8 0 0 0   71  
  8 0 0 0   19  
  8 100 33 0   721  
  8 50 0 0   60  
  8 50 0 0   18  
  8 50 0 2061   10936  
  8 100 0 148   61  
  8 50 0 0   15  
  8 50 0 0   623  
  8 50 33 0   59  
  8 0 33 6   22  
  8 0 33 11   7080  
  8 0 33 78   61  
  8 0 33 26   30  
  8 0 33 246   623  
  8 0 33 937   58  
  8 0 33 56017   15  
  8 0 33 420   6764  
  8 50 33 7473   76  
  8 50 33 2278   18  
  8 50 33 424   771  
  8 50 33 0   75  
  8 50 33 266   28  
  8 100 33 103   24914  
  8 50 33 1433   65  
  8 100 33 79   37  
  8 100 33 13   704  
  8 50 33 610   59  
  8 50 33 322   24  
  8 50 33 30   9859  
  8 50 33 263   134  
  8 50 33 14   23  
  8 50 33 436   688  
  8 50 33 125   61  
  8 100 33 264   28  
  8 100 33 0   12070  
  80 100 33 2   8413  
  0 100 33 0   0  
  0 50 33 0   0  
  0 50 33 2   0  
  0 100 33 0   0  
  0 100 33 0   0  
  0 50 33 0   0  
  0 50 33 0   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 24   0  
  0 50 33 374   0  
  0 100 33 16   0  
  0 50 33 8   0  
  0 50 33 54   0  
  0 0 33 6   0  
  0 0 33 0   0  
  0 0 33 14   0  
  0 0 33 12841   0  
  0 100 0 205   0  
  0 50 0 237   0  
  0 50 0 653   0  
  0 50 0 106   0  
  0 100   0   0  
  0 50   52   0  
  0 50   6   0  
  0 50   0   0  
  0 100   15   0  
  0 50   0   0  
  0 50   0   0  
  0 50   1   0  
  0 100   38   0  
  0 50   247   0  
  0 50   71   0  
  0 50   46   0  
  0 100   131   0  
  0 50   5   0  
  0 50   11   0  
  0 50   0   0  
  0 100   11   0  
  0 50   5   0  
  0 50   0   0  
  0 50   0   0  
  0 100   104   0  
  0 50   0   0  
  2061 50   0   4047  
  2061 50   0   2501  
  2061 50   2   12912  
  429 100   0   1269  
  0 50   0   0  
  0 100   88   0  
  429 50   12403   892  
  429 100   488   1326  
  148 50   8   302  
  148 100   127   172  
  148 50   604   833  
  22 50   187   81  
  0 50   247   0  
  0 50   2933   0  
  22 0   2412   52  
  22 0   1877   73  
  0 0   503   0  
  0 0   234   0  
  0 50   141   0  
  0 0   806   0  
  0 0   177   0  
  0 0   1010   0  
  0 0   23598   0  
  0 0   444   0  
  0 0   11528   0  
  0 0   71   0  
  0 0   277   0  
  0 0   571   0  
  0 0   636   0  
  0 0   11034   0  
  6 50   218   14  
  6 50   26   9  
  6 0   446   29  
  6 0   16   22  
  0 0   75   0  
  0 0   848   0  
  6 0   1459   14  
  6 0   324   23  
  11 0   531   20  
  11 0   3   22  
  11 0   1292   41  
  78 0   567   145  
  78 0   51   139  
  78 0   17   241  
  26 0   442   65  
  26 0   31   30  
  26 0   5   92  
  2 0   11   9  
  0 0   0   0  
  0 0   0   0  
  2 0   0   7  
  2 0   0   32  
  246 0   0   588  
  246 0   0   313  
  246 0   0   597  
  246 0   674   740  
  0 0   250   0  
  0 0   0   0  
  246 50   0   561  
  246 50   0   875  
  937 50   0   1743  
  937 100   0   1925  
  937 50   0   13435  
  56022 50   0   103537  
  56017 50   0   65493  
  56017 100   0   323771  
  11141 50   0   24431  
  5 100   601   19  
  0 50       0  
  11136 100       18975  
  11136 50       41795  
  420 100       793  
  420 50       773  
  420 100       1938  
  4 50       14  
  0 100       0  
  0 0       0  
  4 0       11  
  4 50       17  
  7473 100       14369  
  7473 50       8680  
  7473 100       43960  
  1437 50       3749  
  0 100       0  
  0 50       0  
  1437 50       3124  
  1437 50       4230  
  2278 50       4099  
  2278 50       2799  
  2278 50       6682  
  853 0       1904  
  0 0       0  
  0 50       0  
  853 50       1765  
  853 50       2423  
  424 50       817  
  424 0       837  
  424 0       1153  
  0 50       0  
  0 50       0  
  0 0       0  
  0 0       0  
  0 0       0  
  0 0       0  
  0 50       0  
  0 50       0  
  266 50       532  
  266 100       337  
  266 50       1439  
  63 50       157  
  0 50       0  
  0 50       0  
  63 50       196  
  63 100       193  
  103 50       267  
  103 50       135  
  103 50       581  
  22 50       63  
  0 50       0  
  0 50       0  
  22 0       50  
  22 0       67  
  1433 50       2835  
  1433 50       1883  
  1433 50       3953  
  605 50       1468  
  0 0       0  
  0 0       0  
  605 0       1125  
  605 0       1831  
  79 50       169  
  79 50       100  
  79 0       188  
  66 0       203  
  0 0       0  
  0 0       0  
  66 0       147  
  66 0       214  
  13 50       31  
  13 50       20  
  13 0       36  
  10 0       33  
  0 0       0  
  0 0       0  
  10 50       22  
  10 50       44  
  610 50       1311  
  610 50       811  
  610 50       1218  
  608 50       1390  
  0 50       0  
  0 50       0  
  608 50       1318  
  608 50       1953  
  322 50       725  
  322 50       459  
  322 50       1531  
  10 50       40  
  0 50       0  
  0 50       0  
  10 50       37  
  10 50       40  
  30 50       69  
  30 50       73  
  30 50       282  
  263 50       433  
  263 50       516  
  263 100       3219  
  14 50       32  
  14 100       34  
  14 50       153  
  436 50       790  
  436 50       914  
  436 50       3607  
  125 50       198  
  125 100       255  
  125 50       2581  
  264 50       485  
  264 50       493  
  264 50       2856  
  0 50       0  
  0 100       0  
  0 50       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 50       0  
  0 100       0  
  2 50       5  
  2 100       2  
  2 50       30  
  0 50       0  
  0 50       0  
  0 50       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  
  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 50       0  
  0 50       0  
  2 50       5  
  2 50       2  
  2 50       5  
  2 50       13  
  2 50       4  
  2 50       5  
  0 100       0  
  0 50       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 100       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 100       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 50       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 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  
  239 50       522  
  239 50       706  
  239 50       821  
  470 100       1004  
  470 100       1116  
  470 100       1365  
  970 100       1768  
  970 100       2001  
  970 100       12929  
  24 100       46  
  24 100       53  
  24 50       150  
  374 50       2585  
  374 50       747  
  374 100       2643  
  16 100       38  
  16 100       50  
  16 100       181  
  8 100       16  
  8 100       23  
  8 50       167  
  54 50       118  
  54 50       110  
  54 50       571  
  6 100       13  
  6 100       14  
  6 100       92  
  0 50       0  
  0 50       0  
  0 50       0  
  14 50       33  
  14 100       36  
  14 100       179  
  12841 100       25366  
  12841 100       26215  
  12841 100       31791  
  205 100       360  
  205 100       626  
  205 100       915  
  237 100       462  
  237 100       473  
  237 100       2544  
  653 100       1336  
  653 100       1237  
  653 50       3015  
  106 50       1848  
  106 100       227  
  106 100       284  
  0 100       0  
  0 100       0  
  0 100       0  
  52 50       105  
  52 50       143  
  52 50       1214  
  6 50       8  
  6 50       25  
  6 50       111  
  0 50       0  
  0 50       0  
  0 50       0  
  15 100       31  
  15 100       27  
  15 100       63  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  1 100       2  
  1 100       4  
  1 100       27  
  38 100       88  
  38 100       107  
  38 100       533  
  247 100       627  
  247 100       877  
  247 50       3737  
  71 50       147  
  71 100       157  
  71 100       364  
  46 100       97  
  46 100       102  
  46 100       228  
  131 100       234  
  131 50       250  
  131 50       1628  
  5 100       16  
  5 100       25  
  5 100       35  
  11 100       28  
  11 100       29  
  11 50       61  
  0 50       0  
  0 100       0  
  0 100       0  
  11 100       28  
  11 50       32  
  11 100       81  
  5 100       9  
  5 100       23  
  5 100       36  
  0 50       0  
  0 100       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 50       0  
  104 50       139  
  104 100       173  
  104 100       249  
  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 100       0  
  2 100       3  
  2 50       5  
  2 100       10  
  0 50       0  
  0 50       0  
  0 100       0  
  0 100       0  
  0 50       0  
  0 100       0  
  88 50       138  
  88 50       172  
  88 50       802  
  12403 50       22763  
  12403 50       21698  
  12403 50       172767  
  488 50       997  
  488 50       1038  
  488 50       6529  
  8 50       15  
  8 50       19  
  8 50       71  
  127 0       237  
  127 0       270  
  127 0       919  
  604 0       1029  
  604 0       1315  
  604 0       7918  
  187 0       349  
  187 0       341  
  187 0       2264  
  247 0       508  
  247 0       505  
  247 0       1588  
  2933 0       5317  
  2933 0       5613  
  2933 50       26264  
  2412 100       4274  
  2412 50       4877  
  2412 50       17551  
  1877 0       4004  
  1877 0       4079  
  1877 0       13061  
  503 0       1035  
  503 0       1136  
  503 0       2335  
  234 0       404  
  234 0       432  
  234 0       1073  
  141 0       270  
  141 0       304  
  141 0       585  
  806 0       1652  
  806 0       1632  
  806 0       3145  
  177 0       325  
  177 0       317  
  177 0       1060  
  1010 0       1937  
  1010 0       2119  
  1010 0       4142  
  23598 0       43153  
  23598 0       44653  
  23598 0       233323  
  444 0       791  
  444 0       935  
  444 0       2334  
  11528 0       21126  
  11528 0       23063  
  11528 0       27552  
  71 0       164  
  71 0       160  
  71 0       544  
  277 0       589  
  277 0       651  
  277 0       1119  
  571 0       1387  
  571 0       1540  
  571 0       2283  
  636 0       3921  
  636 50       1431  
  636 50       1296  
  636         1986  
  636         1522  
  636         1224  
  636         1497  
  636         1300  
  636         1306  
  636         1466  
  636         1676  
  636         1519  
  636         1270  
  636         1418  
  636         1425  
  635         1345  
  635         1202  
  635         9368  
  35         83  
  34         61  
  34         78  
  34         89  
  34         65  
  34         77  
  34         59  
  34         58  
  34         56  
  34         63  
  34         661  
  11034         61475  
  11034         23928  
  11034         20399  
  11034         30761  
  11034         25367  
  11034         19551  
  11034         24174  
  11034         24375  
  11034         21150  
  11034         26984  
  11034         26695  
  11034         26807  
  11034         22627  
  11034         23613  
  11034         23234  
  11033         25004  
  11033         25797  
  11033         25371  
  11014         20153  
  11014         17454  
  11014         23637  
  11014         19056  
  11014         17411  
  11014         20857  
  11014         17484  
  11014         19854  
  11014         16932  
  11014         20104  
  11014         204646  
  11         30  
  11         26  
  11         31  
  11         26  
  11         37  
  11         38  
  11         30  
  11         35  
  11         22  
  11         29  
  11         26  
  11         26  
  11         27  
  11         40  
  11         28  
  11         27  
  11         30  
  11         46  
  11         27  
  11         234  
  218         1685  
  218         851  
  218         567  
  218         848  
  218         687  
  218         582  
  218         527  
  218         723  
  218         700  
  218         628  
  218         701  
  218         535  
  218         625  
  218         760  
  218         713  
  239         693  
  239         583  
  239         844  
  233         645  
  233         791  
  227         580  
  227         631  
  227         635  
  227         635  
  227         568  
  227         637  
  227         654  
  227         938  
  227         566  
  227         582  
  227         631  
  227         617  
  227         629  
  222         680  
  222         717  
  659         2665  
  659         1809  
  650         1433  
  650         2226  
  647         1608  
  647         1444  
  647         1781  
  647         1638  
  647         1633  
  647         1777  
  647         1663  
  647         1607  
  647         1434  
  647         5272  
  446         1064  
  446         1101  
  446         1086  
  446         1134  
  449         935  
  449         924  
  449         920  
  449         6980  
  23         59  
  23         67  
  23         63  
  23         71  
  23         62  
  23         62  
  23         202  
  16         48  
  16         39  
  16         39  
  16         78  
  14         33  
  14         28  
  14         95  
  10         24  
  10         23  
  10         23  
  10         31  
  10         25  
  10         74  
  82         413  
  82         242  
  82         189  
  82         272  
  82         210  
  82         198  
  82         205  
  82         216  
  82         245  
  82         215  
  82         242  
  82         206  
  82         179  
  82         192  
  82         207  
  929         4142  
  929         2461  
  929         2577  
  865         2871  
  865         2111  
  858         1679  
  858         1819  
  858         1735  
  858         1939  
  858         2238  
  851         1886  
  851         1813  
  851         1840  
  851         1985  
  851         2127  
  851         1824  
  851         1556  
  851         1988  
  2292         10349  
  2292         16742  
  1463         2750  
  1463         4626  
  1463         3151  
  1463         2840  
  1463         2997  
  1463         3003  
  1463         3246  
  1463         3566  
  1463         3801  
  1463         3331  
  1463         3051  
  1463         3494  
  1463         3058  
  1463         3303  
  1460         3581  
  1460         3361  
  1460         2631  
  1783         4600  
  1783         4140  
  1783         3503  
  1780         3884  
  1780         3826  
  1780         3558  
  1780         3676  
  1780         3372  
  1780         3849  
  1780         25449  
  353         1006  
  353         1012  
  352         959  
  352         913  
  352         987  
  352         913  
  352         885  
  352         3898  
  152         284  
  152         312  
  152         383  
  152         493  
  670         1328  
  670         1558  
  670         7546  
  142         306  
  142         337  
  142         292  
  1431         4560  
  1320         3008  
  1292         5970  
  567         1060  
  567         1046  
  567         4015  
  51         107  
  51         114  
  51         134  
  17         38  
  17         47  
  17         69  
  442         1119  
  442         1255  
  442         1945  
  31         62  
  31         68  
  31         100  
  5         8  
  5         25  
  5         53  
  11         20  
  11         29  
  11         86  
  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  
  674         1469  
  674         1348  
  674         2998  
  250         537  
  250         494  
  250         1377  
  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         1121  
  601         1109  
  601         5873  
222 80 50       354 carp $@ if $@;
223              
224             # Create top class
225 80         651 (my $overclass = $baseclass) =~ s/::Struct$//;
226             {
227             #print \"NEW \",join(' ',\@_),\"\\n\";
228 80     11693 0 166 eval "
  80     931 0 6438  
  11693     1499 0 24096  
  11693     19 0 156566  
  11693     10 0 36689  
  931     21 0 2145  
  931     417 0 13514  
  931     45   3727  
  1499     208   3350  
  1499     239   21201  
  1499         4827  
  19         47  
  19         296  
  19         75  
  10         31  
  10         228  
  10         41  
  21         60  
  21         441  
  21         96  
  417         842  
  417         6108  
  417         1337  
  45         98  
  45         1135  
  45         151  
  208         609  
  208         3639  
  208         729  
  239         590  
  239         4190  
  239         962  
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__