- next if /^\s*($|\#)/;
- $ind++;
- chomp;
- ($name[$ind], $desc, $rest[$ind]) = split /\t+/, $_, 3;
- ($type[$ind], $code[$ind], $args[$ind], $longj[$ind])
- = split /[,\s]\s*/, $desc, 4;
+ s/#.*$//;
+ next if /^\s*$/;
+ s/\s*\z//;
+ if (/^-+\s*$/) {
+ $lastregop= $ind;
+ next;
+ }
+ unless ($lastregop) {
+ $ind++;
+ ($name[$ind], $desc, $rest[$ind]) = split /\t+/, $_, 3;
+ ($type[$ind], $code[$ind], $args[$ind], $longj[$ind])
+ = split /[,\s]\s*/, $desc, 4;
+ } else {
+ my ($type,@lists)=split /\s*\t+\s*/, $_;
+ die "No list? $type" if !@lists;
+ foreach my $list (@lists) {
+ my ($names,$special)=split /:/, $list , 2;
+ $special ||= "";
+ foreach my $name (split /,/,$names) {
+ my $real= $name eq 'resume'
+ ? "resume_$type"
+ : "${type}_$name";
+ my @suffix;
+ if (!$special) {
+ @suffix=("");
+ } elsif ($special=~/\d/) {
+ @suffix=(1..$special);
+ } elsif ($special eq 'FAIL') {
+ @suffix=("","_fail");
+ } else {
+ die "unknown :type ':$special'";
+ }
+ foreach my $suffix (@suffix) {
+ $ind++;
+ $name[$ind]="$real$suffix";
+ $type[$ind]=$type;
+ $rest[$ind]="state for $type";
+ }
+ }
+ }
+
+ }