NAME
Parrot::OpTrans - Transform Ops to C Code
DESCRIPTION
Parrot::OpTrans is the abstract superclass for the Parrot op to C transforms. Each transform contains various bits of information needed to generate the C code, and creates a different type of run loop. The methods defined here supply various default values and behaviour common to all transforms.
The subclass hierarchy is as follows:
OpTrans
|_________________________
| | |
C CGoto Compiled
| |
CPrederef |
| | |
| |_________|
| |
CSwitch CGP
Class Methods
Instance Methods
prefix()-
Returns the default '
Parrot_' prefix.Used by
Parrot::Op'sfunc_name()to individuate op function names. suffix()-
Implemented in subclasses to return a suffix with which to individuate variable names. This default implementation returns an empty string.
defines()-
Implemented in subclasses to return the C
#definemacros required. opsarraytype()-
Returns the type for the array of opcodes. By default here it's an array
opcode_t, but the prederef runops core uses an array ofvoid*to do its clever tricks. core_type()-
Implemented in subclasses to return the type of core created by the transform. This default implementation raises an exception indicating that the core type is missing. See the
Parrot_Run_core_tenumin include/parrot/interpreter.h for a list of the core types. core_prefix()-
Implemented in subclasses to return a short prefix indicating the core type used to individuate core function names.
run_core_func_decl($base)-
Optionally implemented in subclasses to return the C code for the run core function declaration.
$baseis the name of the main ops file minus the .ops extension. ops_addr_decl($base_suffix)-
Optionally implemented in subclasses to return the C code for the ops address declaration.
$base_suffixis the name of the main ops file minus the .ops extension withsuffix()and an underscore appended. run_core_func_decl($base)-
Optionally implemented in subclasses to return the C code for the run core function declaration.
$baseis the same as forrun_core_func_decl(). run_core_func_start()-
Implemented in subclasses, if
run_core_func_decl()is implemented, to return the C code prior to the run core function. run_core_after_addr_table($base_suffix)-
Optionally implemented in subclasses to return the run core C code for section after the address table.
$base_suffixis the same as forops_addr_decl(). run_core_finish($base)-
Implemented in subclasses to return the C code following the run core function.
$baseis the same as forrun_core_func_decl(). init_func_init1($base)-
Optionally implemented in subclasses to return the C code for the core's init function.
$baseis the same as forrun_core_func_decl(). init_set_dispatch($base_suffix)-
Optionally implemented in subclasses to return the C code for initializing the dispatch mechanism within the core's init function.
$base_suffixis the same as forops_addr_decl().
Macro Substitutions
The following methods are called by Parrot::OpFile to perform ops file macro substitutions.
access_arg($type, $value, $op)-
Implemented in subclasses to return the C code for the specified op argument type and value.
$opis an instance ofParrot::Op. gen_goto($where)-
The various
goto_Xmethods below call this method with the return value of anexpr_Xmethod (implemented in subclass). restart_address($address)-
Implemented in subclasses to return the C code for
restart ADDRESS($address). restart_offset($offset)-
Implemented in subclasses to return the C code for
restart OFFSET($offset). goto_address($address)-
Transforms the
goto ADDRESS($address)macro in an ops file into the relevant C code. goto_offset($offset)-
Transforms the
goto OFFSET($offset)macro in an ops file into the relevant C code. goto_pop()-
Transforms the
goto POP($address)macro in an ops file into the relevant C code. expr_offset($offset)-
Implemented in subclasses to return the C code for
OFFSET($offset). Called bygoto_offset(). expr_address($address)-
Implemented in subclasses to return the C code for
ADDRESS($address). Called bygoto_address().