The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

B::JVM::Jasmin::Emit - Package used by B::JVM::Jasmin to emit Jasmin syntaxed file

SYNOPSIS

  use B::JVM::Jasmin::Emit;

  my $emitter = new B::JVM::Emit(FILEHANDLE);

  # ...
  $emitter->DIRECTIVE_NAME([@ARGS]);
  #  ...
  $emitter->OPCODE_NAME([@ARGS]);
  #  ...
  $emitter->OPCODE_NAME([@ARGS]);

DESCRIPTION

This class is used emit JVM assembler code in Jasmin syntax. Each method one can use is either an opcode or a directive supported by Jasmin syntax.

AUTHOR

Bradley M. Kuhn, bkuhn@ebb.org, http://www.ebb.org/bkuhn

COPYRIGHT

Copyright (C) 1999, Bradley M. Kuhn, All Rights Reserved.

LICENSE

You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the LICENSE file that was shipped with this distribution.

SEE ALSO

perl(1), B::JVM::Jasmin(3), B::JVM::Emit(3).

DETAILED DOCUMENTATION

B::JVM::Jasmin::Emit Package Variables

    $VERSION

    Version number of B::JVM::Jasmin::Emit. For now, it should always match the version of B::JVM::Jasmin

    @EXPORT_OK

    All the methods that one can grab from B::JVM::Jasmin::Emit

    @EXPORT

    We don't export anything by default.

Modules used by B::JVM::Jasmin::Emit

Carp

Used for error reporting

B::JVM::Utils

Used to get needed utility functions, such as ExtractMethodData and IsValidMethodString

Methods in B::JVM::Jasmin::Emit

B::JVM::Jasmin::Emit::new

usage: B::JVM::Emit::new(FILEHANDLE, [SOURCE_FILE_NAME])

Creates a new object of the class. It assumes that FILEHANDLE is a lexically scoped file handle open for writing, and that SOURCE_FILE_NAME that should be used for a source directive. SOURCE_FILE_NAME is optional, but may annoys someone firing up your code in the Java debugger.

B::JVM::Emit::Jasmin::_clearMethodData()

usage: $jasminEmitter->_clearMethodData()

Clear out the method data elements of the Jasmin emitter

B::JVM::Emit::Jasmin::source

usage: B::JVM::Emit::Jasmin::source(SOURCE_FILE_NAME)

Emits the source file name directive.

B::JVM::Emit::Jasmin::comment

usage: B::JVM::Emit::Jasmin::comment($methodName, $commentString)

Puts $commentString in a comment in the file, in the code for method $metohdName.

B::JVM::Emit::Jasmin::super

usage: B::JVM::Emit::Jasmin::super(CLASS_NAME)

sends class directive, using CLASS_NAME, to the output file

B::JVM::Emit::Jasmin::class

usage: B::JVM::Emit::Jasmin::class(ACCESS_SPEC, CLASS_NAME)

sends class directive, using CLASS_NAME to the ACCESS_SPEC, to the output file

B::JVM::Emit::Jasmin::interface

usage: B::JVM::Emit::Jasmin::interface(ACCESS_SPEC, INTERFACE_NAME)

sends interface directive, using INTERFACE_NAME to the ACCESS_SPEC, to the output file

B::JVM::Emit::Jasmin::implements

usage: B::JVM::Emit::Jasmin::implements(CLASS_NAME)

sends implements directive, using CLASS_NAME to the output file

B::JVM::Emit::Jasmin::labelCreate

usage: $emitter-labelCreate($methodName, $labelNameRequested)>

In method, $methodName, creates a new label, whose name will "resemble" $labelNameRequested. This label is not actually sent to the output, that must be done later with $emitter-labelSend($methodName, $value)>.

Note that the value returned from this method is the actual label name assigned and will only "resemble" (i.e., not match exactly) the $labelNameRequested.

B::JVM::Emit::Jasmin::labelSend

usage: $emitter-labelSend($methodName, $labelName)>

Send a label, $labelName, to the output of method, $methodName.

This label must be valid label previously returned from $emitter-labelCreate($methodName, $someValue)>.

B::JVM::Emit::Jasmin::field

usage: B::JVM::Emit::Jasmin::field(ACCESS_SPEC, FIELD_NAME, TYPE, [VALUE])

sends field directive, using the arguments given, to the output file

B::JVM::Emit::Jasmin::methodStart

usage: $emitter->methodStart(METHOD_NAME, ACCESS_SPEC, [STACK_SIZE])

sends method directive and other directives needed to start up a new method. Also sets the current method for the emitter. STACK_SIZE is optional. However, a stack size is always set to a default value (currently 256), because if it is not set, a number of problems occur with the stack.

B::JVM::Emit::Jasmin::methodCreateLocal

usage: $emitter->methodCreateLocal(METHOD_NAME, VARIABLE_NAME_REQUEST, VARIABLE_TYPE, [LABEL1], [LABEL2])

Creates a local of type VARIABLE_TYPE, with a given name in method, METHOD_NAME. If LABEL1 is given, LABEL2 must be given, and vice versa.

If the labels are given, then the variable is only valid between those two labels in the resulting assembler source.

methodCreateLocal attempts to give a variable name that "resembles" VARIABLE_NAME_REQUEST. If the labels are given, it is guaranteed that the variable name will "resemble" the VARIABLE_NAME_REQUEST.

If the labels are not given, it is very likely that an old local variable of the same type will be returned.

The actual variable name given will be returned. It is imperative that the user of methodCreateLocal use this variable name, and not VARIABLE_NAME_REQUEST, for obvious reasons.

B::JVM::Emit::Jasmin::methodFreeLocal

usage: $emitter->methodFreeLocal(METHOD_NAME VARIABLE_NAME)

Indicates that the local, VARIABLE_NAME, in method, METHOD_NAME, is no longer in use. It is not required that locals be freed in this manner, however, many, many locals can be allocated unnecessarily if this is not done.

B::JVM::Emit::Jasmin::methodEnd

usage: $emitter-methodEnd($method, [$debug])>

Finishes up a method, $method, that is currently being emitted. If $debug is defined and is true, then ".line" directives will be put into the output for debugging purposes.

B::JVM::Emit::Jasmin::astore

usage: $emitter->astore([METHOD, VARIABLE])

Emits an "astore" instruction, using the VARIABLE name in METHOD given, if one is given. If VARIABLE is given, it is looked up in variables created with B::JVM::Emit::Jasmin::methodCreateLocal() for the given method, METHOD.

B::JVM::Emit::Jasmin::invokevirtual

usage: $emitter->invokevirtual(METHOD_IN, METHOD_INVOKED)

Emits an "invokevirtual" instruction to invoke METHOD_INVOKED in the code for METHOD_IN

B::JVM::Emit::Jasmin::ifne

usage: $emitter-ifne($methodName, $labelName)>

Emits an "ifne" instruction with argument, $labelName in the code for method, $methodName.

This label, $labelName must be valid label previously returned from $emitter-labelCreate($methodName, $someValue)>.

B::JVM::Emit::Jasmin::ifeq

usage: $emitter-ifeq($methodName, $labelName)>

Emits an "ifeq" instruction with argument, $labelName in the code for method, $methodName.

This label, $labelName must be valid label previously returned from $emitter-labelCreate($methodName, $someValue)>.

B::JVM::Emit::Jasmin::aload

usage: $emitter->aload([METHOD, VARIABLE])

Emits an "aload" instruction, using the VARIABLE name in METHOD given, if one is given. If VARIABLE is given, it is looked up in variables created with B::JVM::Emit::Jasmin::methodCreateLocal() for the given method, METHOD.

B::JVM::Emit::Jasmin::invokestatic

usage: $emitter->invokevirtual(METHOD_IN, METHOD_INVOKED)

Emits an "invokestatic" instruction to invoke METHOD_INVOKED in the code for METHOD_IN

B::JVM::Emit::Jasmin::iconst

usage: $emitter->iconst(METHOD, VALUE)

Emits an "iconst" instruction, using the value of VALUE for the constant, in the method named METHOD.

B::JVM::Emit::Jasmin::istore

usage: $emitter->istore([METHOD, VARIABLE])

Emits an "istore" instruction, using the VARIABLE name in METHOD given, if one is given. If VARIABLE is given, it is looked up in variables created with B::JVM::Emit::Jasmin::methodCreateLocal() for the given method, METHOD.

B::JVM::Emit::Jasmin::iload

usage: $emitter->iload([METHOD, VARIABLE])

Emits an "iload" instruction, using the VARIABLE name in METHOD given, if one is given. If VARIABLE is given, it is looked up in variables created with B::JVM::Emit::Jasmin::methodCreateLocal() for the given method, METHOD.

B::JVM::Emit::Jasmin::iand

usage: $emitter->iand([METHOD])

Emits an "iand" instruction, in METHOD given, if one is given.

B::JVM::Emit::Jasmin::pop

usage: $emitter->pop([METHOD])

Emits an "pop" instruction, in METHOD given, if one is given.

B::JVM::Emit::Jasmin::getstatic

usage: $emitter->getstatic(METHOD_IN, FIELD, TYPE)

Emits an "getstatic" instruction for the field, FIELD, of type, TYPE in the code for METHOD_IN

B::JVM::Emit::Jasmin::ldc

usage: $emitter->ldc(METHOD_IN, VALUE)

Emits an "ldc" instruction with the value of VALUE, in the method METHOD_IN.

B::JVM::Emit::Jasmin::newObject

usage: $emitter->newObject(METHOD_IN, CLASS)

Emits an "new" instruction for the class, CLASS in the body for the method, METHOD_IN. CLASS must be a valid class name.

B::JVM::Emit::Jasmin::invokespecial

usage: $emitter->invokespecial(METHOD_IN, METHOD_INVOKED)

Emits an "invokespecial" instruction to invoke METHOD_INVOKED in the code for METHOD_IN

B::JVM::Emit::Jasmin::dup

usage: $emitter-dup($method)>

Emits an "dup" instruction in the code for the method, $method

B::JVM::Emit::Jasmin::swap

usage: $emitter-swap($method)>

Emits an "swap" instruction in the code for the method, $method

B::JVM::Emit::Jasmin::gotoLabel

usage: $emitter-gotoLabel($methodName, $labelName)>

Emits an "goto" instruction with argument, $labelName in the code for method, $methodName.

This label, $labelName must be valid label previously returned from $emitter-labelCreate($methodName, $someValue)>.

B::JVM::Emit::Jasmin::returnVoid

usage: $emitter->returnVoid(METHOD_IN)

Emits an "return" instruction in the code for method, METHOD_IN.

B::JVM::Emit::Jasmin::iinc

usage: $emitter-iinc($method, $variable, $amount)>

Emits an "iinc" instruction, using the $variable name in the method, $method. The variable, $variable must have one previously returned from methodCreateLocal($method, ...) that has not been freed with methodFreeLocal($method, ...) yet.

$amount is the integer amount to increment $variable by.

B::JVM::Emit::Jasmin::bipush

usage: $emitter-bipush($method, $value)>

Emits an "bipush" instruction, into the method, $method using the value of $value. Note that an "iconst" or an "iconst_m1" instruction is emitted if the $value is the range where "iconst" will work.

B::JVM::Emit::Jasmin::aastore

usage: $emitter-aastore($method)>

Emits an "aastore" instruction, into the method, $method.

B::JVM::Emit::Jasmin::isub

usage: $emitter-isub($method)>

Emits an "isub" instruction, into the method, $method.

B::JVM::Emit::Jasmin::nop

usage: $emitter-nop($method)>

Emits a "nop" instruction, into the method, $method.

B::JVM::Emit::Jasmin::aaload

usage: $emitter-aaload($method)>

Emits an "aaload" instruction, into the method, $method.

B::JVM::Emit::Jasmin::anewarray

usage: $emitter-anewarray($method, $type)>

Emits an "anewarray" instruction, into the method, $method. The new array will be of type $type. The method will fail if $type is not a valid JVM type identifier.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 106:

You forgot a '=back' before '=head2'