File Coverage

blib/lib/CPU/x86_64/InstructionWriter/LazyEncode.pm
Criterion Covered Total %
statement 22 29 75.8
branch 9 18 50.0
condition 2 6 33.3
subroutine 8 10 80.0
pod 3 6 50.0
total 44 69 63.7


line stmt bran cond sub pod time code
1             package CPU::x86_64::InstructionWriter::LazyEncode;
2             our $VERSION = '0.005'; # VERSION
3 20     20   135 use strict;
  20         38  
  20         870  
4 20     20   101 use warnings;
  20         64  
  20         1428  
5 20     20   170 use Carp;
  20         61  
  20         1601  
6 20     20   118 use parent 'CPU::x86_64::InstructionWriter::Label';
  20         36  
  20         185  
7              
8             # ABSTRACT: Object representing a partially encoded instruction
9              
10              
11             sub name {
12 0 0   0 1 0 @_ > 1 && croak "Read-only";
13 0   0     0 $_[0]{name} // do {
14 0 0       0 my $op= $_[0]{caller}? $_[0]{caller}[3] : 'instruction';
15 0         0 $op =~ s/.*:://;
16 0         0 $op . " at start+".$_[0]{offset};
17             }
18             }
19              
20 395 50   395 1 821 sub encoder { @_ > 1 && croak "Read-only"; $_[0]{encoder} }
  395         1213  
21 186 50   186 0 269 sub unknown { @_ > 1 && croak "Read-only"; $_[0]{unknown} }
  186         361  
22 0 0   0 1 0 sub caller { @_ > 1 && croak "Read-only"; $_[0]{caller} }
  0         0  
23 363 50   363 0 893 sub target { @_ > 1 && croak "Read-only"; $_[0]{target} }
  363         1009  
24              
25              
26             sub clone_into_writer {
27 2     2 0 5 my ($self, $writer, $offset, $label_map)= @_;
28             my $new= bless {
29             %$self,
30             relative_to => $writer->start_address,
31             offset => $self->offset + $offset,
32 2 100       7 target => !$self->target? undef : $label_map->{$self->target},
    100          
33             unknown => !$self->unknown? undef
34             : $self->unknown->clone_into_writer($writer, $offset, $label_map)
35             }, ref $self;
36 2 100 66     5 $new->unknown->instruction($new)
37             if $new->unknown && $new->unknown->can('instruction');
38 2         9 $new;
39             }
40              
41             1;
42              
43             __END__