Added POD tests and a Perl::Critic test
[nasm/perl-rewrite.git] / perl / lib / Nasm / Regs.pm
blobdd830a3f739c87365a28ab5565dc6961b94317dc
1 =head1 NAME
3 Nasm::Regs
5 =cut
7 package Nasm::Regs;
8 use strict;
9 use warnings;
11 require Nasm::Regs::Register;
12 require Nasm::Regs::Format;
14 sub new{
15 my($class,$filename) = @_;
16 my $self = bless {}, $class;
18 if( @_ > 1 and $filename ){
19 $self->ProcessFile($filename);
22 return $self;
28 sub ProcessFile{
29 my($self,$filename) = @_;
30 my $file;
32 if( $filename eq '-'){
33 $file = *{STDIN}{IO};
34 }else{
35 open $file, '<', $filename or die;
37 $self->{filename} = $filename;
39 my %current =( line_number => -1 );
41 while( my $line = <$file> ){
42 $current{line_number}++;
43 chomp $line;
44 $line =~ s/\s*(?:\#.*)?$//;
45 next unless length $line;
47 $current{line} = $line;
48 $self->ProcessLine(\%current);
51 close $file;
52 return $self;
58 sub ProcessLine{
59 my($self,$current) = @_;
61 unless( $current->{line} =~ /^\s*(\S+)\s*(\S+)\s*(\S+)\s*([0-9]+)$/ ){
62 die;
65 my ($register,$a_class,$d_classes,$x86regno) = ($1,$2,$3,$4);
67 my @reg_list;
69 if ( $register =~ m{
71 (.*?) (\d+) - (\d+) (.*)
73 }x) {
74 for my $i ($2..$3){
75 push @reg_list, $1. $i . $4
77 } else {
79 @reg_list = $register;
82 # force numeric conversion
83 $x86regno += 0;
85 my @d_classes = split ',', $d_classes;
86 #my %d_is_class;
88 for my $register(@reg_list){
89 my $reg_obj = Nasm::Regs::Register->new($register,$a_class,[@d_classes],$x86regno);
90 $self->{register}{$register} = $reg_obj;
92 for my $class (@d_classes){
93 $self->{disassembler}{$class}[$x86regno] = $reg_obj
96 $x86regno++;
103 sub names{
104 my($self) = @_;
105 # deprecated
106 return $self->RegisterNames;
108 sub RegisterNames{
109 my($self) = @_;
110 my @keys = sort grep { length $_ } keys %{$self->{register}};
112 return @keys if wantarray;
113 return \@keys;
118 sub Register{
119 my($self,$key) = @_;
120 return $self->{register}{$key};
122 sub DisassemblerClasses{
123 my($self) = @_;
124 my @return = sort keys %{$self->{disassembler}};
125 return @return if wantarray;
126 return \@return;
128 sub DisassemblerClass{
129 my($self,$class) = @_;
130 my $return = $self->{disassembler}{$class};
131 return @$return if wantarray;
132 return $return;
136 sub format{
137 my($self,$fmt) = @_;
138 Nasm::Regs::Format::format($self,$fmt);
142 sub filename{
143 my($self) = @_;
144 return $self->{filename};