NAME
Parrot::Pmc2c - PMC to C Code Generation
SYNOPSIS
use Parrot::Pmc2c;
DESCRIPTION
Parrot::Pmc2c
(and the subclasses defined in this file) is used by tools/build/pmc2c.pl to generate C code from PMC files.
Functions
count_newlines($string)
-
Returns the number of newlines (
\n
) in$string
. dont_edit($pmcfile)
-
Returns the "DO NOT EDIT THIS FILE" warning text.
$pmcfile
is the name of the original source *.pmc file. gen_ret($method, $body)
-
Generate the C code for a
return
statement, if the body is empty then make a cast if needed.This method is imported by subclasses.
class_name($self, $class)
-
Returns the appropriate
Parrot::Pmc2c
subclass for the PMC ($self->{class}
).$self
is the hash reference passed tonew()
, and$class
isParrot::Pmc2c
. dynext_load_code($library_name, %classes)
-
$library_name
is the name of the dynamic library to be created.%classes
is a map from the PMC names for which code is to be generated, to dump info (PMC metadata).This function is exported.
Class Methods
new($self, $opt)
-
Returns
$self
as a new instance.$self
is 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
,Ref
orSharedRef
.$opt
is a hash reference.
Instance Methods
does_write($method)
-
Returns true if the vtable method
$method
writes 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.
get_vtable_section()
-
Creates a hash of all the method names containing vtable section. Called from
init()
. get_vtable_attrs()
-
Creates a hash of all the methods names correspdoning to their attributes. Called from
init()
make_constlike($class, $type, $is_variant)
-
Create a variant for Const or RO.
make_const($class)
-
If the PMC had its
const_too
flag set then this method is called ininit()
to to create the read-only set methods. make_ro($class)
-
If the PMC doesn't have
const_too
set (FIXME?) then this method is called to create the read-only set methods and vtable variant. init($class)
-
Initializes the instance.
$class
is its class. decl($classname, $method, $for_header)
-
Returns the C code for the PMC method declaration.
$for_header
indicates whether the code is for a header or implementation file. includes()
-
Returns the C
#include
for the header file of each of the PMC's superclasses. full_arguments($args)
-
Prepends
INTERP, SELF
to$args
. proto($type,$parameters)
-
Determines the prototype (argument signature) for a method body (see src/call_list).
rewrite_nci_method($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($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.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating. methods($line, $out_name)
-
Returns the C code for the vtable methods.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating. lib_load_code()
-
Returns the C code for loading a library.
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, right, 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 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
$name
with 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_init
flag. gen_c($out_name)
-
Generates the C implementation file code for the PMC.
$out_name
is 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_name
is the name of the output file we are generating. c_code_coda()
-
Returns the Parrot C code coda (PDD07)
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
.
SUBCLASSES
Parrot::Pmc2c::Standard Instance Methods
Standard behavior.
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.
Parrot::Pmc2c::Standard::Const Instance Methods
Returns the C code for the method body.
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.
Parrot::Pmc2c::Standard::RO Instance Methods
Returns the C code for the method body.
implements($method)
-
Returns true if we implement
$method
. This is true in the special case offind_method
and for all read-only methods. body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.
Parrot::Pmc2c::Ref Instance Methods
implements($method)
-
Always true for vtables.
prederef($method)
-
Returns C code to be executed before executing a delegated method. Default versions always returns an empty string.
postderef($method)
-
Returns C code to be executed after executing a delegated method through this reference. Default version returns an empty string.
raw_deref($method)
-
Returns C code that can be used to access the underlying PMC in the delegated methods. Defualt is PMC_pmc_val(pmc)
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.Overrides the default implementation to direct all unknown methods to the thing referred to.
Parrot::Pmc2c::STMRef Instance Methods
Parrot::Pmc2c::SharedRef Instance Methods
prederef($method)
-
Returns code that will lock the PMC for calling the underlying implementation of $method.
postderef($method)
-
Returns the unlocking code.
Parrot::Pmc2c::default Instance Methods
implements($method)
-
Always true.
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.Overrides the default implementation to throw an execption for unknown methods.
Parrot::Pmc2c::Null Instance Methods
implements($method)
-
True for vtable methods.
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.The
Null
PMC throws an execption for all methods.
Parrot::Pmc2c::delegate Instance Methods
implements($method)
-
True for vtables.
trans($type)
-
Used in
signature()
to normalize argument types. signature($params)
-
Returns the method signature for
$params
. gen_ret($type)
-
Generate the C code for a
return
statement. body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.The
delegate
PMC redirects all methods to bytecode. implements($method)
-
Always true for vtables.
body($method, $line, $out_name)
-
Returns the C code for the method body.
$line
is used to accumulate the number of lines,$out_name
is the name of the output file we are generating.Overrides the default implementation to direct all unknown methods to the PMC in the first attribute slot.