MarpaX-Java-ClassFile

 view release on metacpan or  search on metacpan

lib/MarpaX/Java/ClassFile/Struct/OpCode.pm  view on Meta::CPAN

use strict;
use warnings FATAL => 'all';

package MarpaX::Java::ClassFile::Struct::OpCode;
use MarpaX::Java::ClassFile::Struct::_Base
  -tiny => [qw/_constant_pool offset relativeOffset mnemonic code parameters/],
  -oneLineDescription => 1,
  '""' => [
           [ sub { '{Offset, RelativeOffset, Code}' } => sub { '{' . join(', ', $_[0]->offset, $_[0]->relativeOffset, join(' ', $_[0]->mnemonic, @{$_[0]->parameters})) . '}' } ]
          ];

# The operand of each ldc instruction and each ldc_w instruction must be a valid index into the constant_pool table.
# The constant pool entry referenced by that index must be of type:
sub _around_when_first_param_is_and_index {
  my ($orig, $self) = @_;
  my $list = $self->$orig;
  #
  # Deep copy what is necessary
  #
  my @copy = @{$list};
  #
  # Change the "y" part of x => y in the description of the first field
  #
  my $firstParam = $copy[0];
  my $x = $firstParam->[0];
  my $y = $firstParam->[1];
  my $newy = sub { $y->(@_) . ' // ' . $_[0]->_constant_pool->[$_[0]->parameters->[0]] };
  $copy[0] = [ $x, $newy ];

  \@copy
}

# ABSTRACT: Op code

our $VERSION = '0.009'; # VERSION

our $AUTHORITY = 'cpan:JDDPAUSE'; # AUTHORITY

use MarpaX::Java::ClassFile::Struct::_Types qw/U1/;
use Types::Standard qw/Str ArrayRef/;
use Types::Common::Numeric qw/PositiveOrZeroInt/;

has _constant_pool => ( is => 'rw', required => 1, isa => ArrayRef);
has offset         => ( is => 'ro', required => 1, isa => PositiveOrZeroInt );
has relativeOffset => ( is => 'ro', required => 1, isa => PositiveOrZeroInt );
has mnemonic       => ( is => 'ro', required => 1, isa => Str );
has code           => ( is => 'ro', required => 1, isa => U1 );
has parameters     => ( is => 'ro', required => 1, isa => ArrayRef );

#
# Do the per-opcode detail in this package
#
package MarpaX::Java::ClassFile::Struct::OpCode::Aaload;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aastore;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aconst_null;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aload;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aload_0;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aload_1;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aload_2;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Aload_3;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Anewarray;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';
use Class::Method::Modifiers qw/around/;
around stringifySetup => sub { goto &MarpaX::Java::ClassFile::Struct::OpCode::_around_when_first_param_is_and_index };

package MarpaX::Java::ClassFile::Struct::OpCode::Areturn;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Arraylength;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Astore;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Astore_0;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Astore_1;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Astore_2;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Astore_3;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Athrow;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';

package MarpaX::Java::ClassFile::Struct::OpCode::Baload;
use parent 'MarpaX::Java::ClassFile::Struct::OpCode';



( run in 0.494 second using v1.01-cache-2.11-cpan-39bf76dae61 )