src/pmc/packfileview.pmc - PackfileView PMC


This class implements a user-accessible, read-only wrapper for the PackFile* structure used internally by Parrot. It is essentially an interface for the user to call Packfile subsystem API calls, and work with the PackFile* structures output from utilities which generate them.

NOTICE: This PMC should contain very little logic. It should be a thin wrapper around the public functions in src/packfile/api.c. This PMC should contain absolutely NO functionality for modifying the packfile. To create a new packfile or modify an existing one, use the PackFile PMC instead.


static PackFile_ConstTable * get_const_table(PARROT_INTERP, PMC * self)
Get the constant table for the PackFile*. Return NULL if there's a problem.
static INTVAL find_called_tag(PARROT_INTERP, PMC * self, STRING * tag)
Find a called tag in the cache. Return 1 if it exists, 0 otherwise.
static void add_called_tag(PARROT_INTERP, PMC * self, STRING * tag)
Add a called tag to the cache, if it doesn't exist already. Do nothing otherwise.
VTABLE void init()
Create the new PMC and set flags
VTABLE void destroy()
Destroy the PMC *AND* the underlying PackFile*
VTABLE void mark()
Mark the PMC and the PackFile* contents
VTABLE void set_pointer(void *ptr)
Set a pointer to a PackFile* structure. This can only be done once. Attempting to set a new pointer will throw an exception. This rule is in place because the lifetime of the PackFile* is tied to the lifetime of the PMC wrapping it, and the PMC provides access to the PackFile* by the GC. Overwriting a pointer to an old PackFile* structure will cause memory leaks, prematurely collected Subs, and other creepy behaviors.
VTABLE void *get_pointer()
Get a pointer to the underlying PackFile* structure
VTABLE INTVAL get_bool()
Return 1 (true) if this PMC is currently pointing to a PackFile*. 0 (false) otherwise.
VTABLE void set_string_native(STRING *path)
VTABLE STRING *get_string_native(STRING *path)
VTABLE PMC *get_pmc_keyed_int(INTVAL idx)
Get a PMC from the constants table, by index
VTABLE STRING *get_string_keyed_int(INTVAL idx)
Get a STRING from the constants table, by index
VTABLE FLOATVAL get_number_keyed_int(INTVAL idx)
Get a FLOATVAL from the constants table, by index


METHOD constant_counts()
Return a 3-element FixedIntegerArray with the total number of FLOATVAL, STRING and PMC constants in the respective constant tables.
METHOD main_sub()
Get the :main sub from the packfile, if any.
METHOD subs_by_tag(STRING *tag)
Get an array of all Subs with the given tag.
METHOD single_sub_by_tag(STRING *tag)
Get a single Sub with the given tag. If there are more than one Subs with this flag, it is unspecified which one is returned.
METHOD trigger(STRING *flag)
Trigger subs with the given flag. Currently supported values are "load" and "init".
METHOD all_tags()
Return an array of all tags.
METHOD all_tagged_pmcs()
Return a hash map of all tags, and the lists of pmcs with those tags.
METHOD all_subs()
Return a ResizablePMCArray with all Sub constants from the constant table.
METHOD first_sub_in_const_table()
Returns the first Sub constant from the constant table.
METHOD mark_initialized(STRING *tag)
Mark a given tag as being initialized
METHOD is_initialized(STRING *tag)
Determine if the given tag has been marked initialized
METHOD serialized_size()
Return the size, in bytes, for how large this packfile will be if serialized.
METHOD serialize()
Serialize the packfile into a STRING buffer
METHOD deserialize(STRING *pbc)
Read a PackFile* in from a STRING buffer and set it as the current PackFile* ptr in this PMC. Subject to the normal set_pointer restrictions.
METHOD read_from_file(STRING *filename)
Read a PackFile* from the given .pbc file and set it as the current PackFile* pointer in this PMC. Subject to the same restrictions as set_pointer.
METHOD write_to_file(STRING *filename)
Serialize the contents of the PackFile in this PMC and write them out to the given .pbc bytecode file.
METHOD get_version()
Return a stringified version number of the packfile
static PMC * get_first_sub(PARROT_INTERP, PMC *pfpmc)
Returns the first Sub constant from the constant table.