NAME
Parrot::Pmc2c - PMC to C Code Generation
SYNOPSIS
use Parrot::Pmc2c;
DESCRIPTION
Parrot::Pmc2c is used by tools/build/pmc2c.pl to generate C code from PMC files.
Functions
Class Methods
new($self, $opt)-
Returns
$selfas a new instance.$selfis a hash referenceeval-ed from a *.dump file generated by tools/build/pmc2c.pl from a *.pmc file. It isbless-ed either intoParrot::Pmc2c::Standard, or into one of the other special PMCs: default,delegate,Null,ReforSharedRef.$optis a hash reference.
Instance Methods
does_write($method)-
Returns true if the vtable method
$methodwrites our value. line_directive($self,$line,$file)-
Generates the C pre processor string for a #line directive, or an empty string if
$self-{opt}{nolines}> is true. line_directive_here($self,$output,$file)-
Generates the C pre processor string for a #line directive to reset the compiler's line number to the next physical line in the output.
make_constlike($type, $is_variant)-
Create a variant for Const or RO.
make_const()-
If the PMC had its
const_tooflag set then this method is called ininit()to to create the read-only set methods. make_ro()-
If the PMC doesn't have
const_tooset (FIXME?) then this method is called to create the read-only set methods and vtable variant. init()-
Initializes the instance.
decl($classname, $method, $for_header)-
Returns the C code for the PMC method declaration.
$for_headerindicates whether the code is for a header or implementation file. includes()-
Returns the C
#includefor the header file of each of the PMC's superclasses. full_arguments($args)-
Prepends
INTERP, SELFto$args. proto($type,$parameters)-
Determines the prototype (argument signature) for a method body (see src/call_list).
rewrite_nci_method($self, $class, $method, $super, $super_table)-
Rewrites the method body performing the various macro substitutions for nci method bodies (see tools/build/pmc2c.pl).
rewrite_vtable_method($self, $class, $method, $super, $super_table)-
Rewrites the method body performing the various macro substitutions for vtable method bodies (see tools/build/pmc2c.pl).
body($method, $line, $out_name)-
Returns the C code for the method body.
$lineis used to accumulate the number of lines,$out_nameis the name of the output file we are generating. methods($line, $out_name)-
Returns the C code for the vtable methods.
$lineis used to accumulate the number of lines,$out_nameis the name of the output file we are generating. pmc_is_dynpmc-
Determines if a given PMC type is dynamically loaded or not.
find_mmd_methods()-
Returns three values:
The first is an arrayref of <[ mmd_number, left_type, right_type, implementation_func]> suitable for initializing the MMD list.
The second is a arrayref listing dynamic PMCs which will need to be looked up.
The third is a list of
[index, dynamic PMC]pairs of right_type entries in the MMD table that will need to be resolved at runtime. find_vtable_methods()-
Returns an arrayref containing the vtable methods in the order they appear in the vtable.
vtable_decl($name)-
Returns the C code for the declaration of a vtable temporary named
$namewith the functions for this class. init_func()-
Returns the C code for the PMC's initialization method, or an empty string if the PMC has a
no_initflag. gen_c($out_name)-
Generates the C implementation file code for the PMC.
$out_nameis the name of the output file we are generating. hdecls()-
Returns the C code function declarations for all the methods for inclusion in the PMC's C header file.
TODO include MMD variants.
gen_h($out_name)-
Generates the C header file code for the PMC.
$out_nameis the name of the output file we are generating. implements($method)-
True if this class generates code for the method
$method. implements_vtable($method)-
True if this class generates code for VTABLE method
$method.