NAME

embed.pod - Parrot embedding system

NOTE

Parrot's embedding API is being replaced with a newer version. This document is for the old embedding API and will be phased out over time. Documentation for the newer API is located at docs/embed_new.pod.

SYNOPSIS

    #include <parrot/embed.h>
    #include <parrot/extend.h>

    int main(int argc, char* argv[])
    {
        Parrot_Interp interp;
        Parrot_PackFile pf;

        interp = Parrot_new(NULL);
        if (!interp) {
            fprintf(stderr, "Cannot create Parrot interpreter!\n");
            return 1;
        }

        pf = Parrot_pbc_read(interp, "foo.pbc", 0);
        Parrot_pbc_load(interp, pf);
        Parrot_runcode(interp, argc, argv);

        Parrot_destroy(interp);

        return 0;
    }

FILES

include/parrot/embed.h
include/parrot/extend.h

DESCRIPTION

This is the documentation for Parrot's embedding API.

Data structures

Parrot_Interp
The topmost data structure in Parrot is Parrot_Interp, which represents a Parrot interpreter. It is a required argument to almost every Parrot API function. The structure is opaque in an embedded environment, so you cannot directly access any of its members.
Parrot_PackFile
A Parrot packfile, the internal structure containing Parrot bytecode.
Parrot_String
Parrot's internal string type, which contains character encoding information.
Parrot_PMC
A Polymorphic Container. This is the opaque external type for (PMC *). Note that this is a macro, so there can be only one Parrot_PMC declaration per line.
Parrot_Int
Parrot's integer numeric type.
Parrot_Float
Parrot's floating point numeric type.
Parrot_UInt
Parrot's unsigned integer numeric type.

Function signatures

What is a function signature? It is a string which represents the calling and return conventions of a function. It is a very succinct representation of the answer to the question "How do I call this function and what does it return?".

All function signatures follow the form of:

    Foo->Bar

where Foo and Bar are a list of zero or more Parrot datatypes. Foo and Bar are individually called 'type signatures'. The datatypes on the left of the arrow are function arguments being passed in and the datatypes on the right are the datatype being returned. No spaces are allowed in a function signature.

There are four datatypes that can be used in Parrot function signatures:

    I <=> Parrot_Int
    N <=> Parrot_Float (Numeric)
    S <=> Parrot_String
    P <=> Parrot_PMC

Here are some example function signatures and what they mean:

   INN->N   In: Integer, two Numerics    Out: Numeric
   SIN->S   In: String, Integer, Numeric Out: String
   P->S     In: PMC                      Out: String
   PiP->S   In: PMC (method call)        Out: String
   NN->N    In: Two Numerics             Out: Numeric
   I->I     In: Integer                  Out: Integer
   I->N     In: Integer                  Out: Numeric
   N->P     In: Numeric                  Out: PMC
   Pi->     In: none (method call)       Out: none
   ->I      In: none                     Out: Integer
   ->       In: none                     Out: none

TODO: Multiple return values?

There is also the Pi datatype, which may only appear at the beginning of a function signature. It stands for "PMC invocant" and basically means SELF. Pi will only be used if calling a method on an object.

Parrot function signature are mostly used when calling Parrot_ext_call.

Interpreter initialization and destruction

Parrot_Interp Parrot_new(Parrot_Interp parent)
Creates a new interpreter, inheriting some data structures from a parent interpreter, if supplied. The first interpreter in any process should be created with a NULL parent, and all subsequent interpreters in the same process should use the first interpreter as their parent. Failure to do so may result in unpredictable errors.
Parrot_set_flag(PARROT_INTERP, Parrot_int flags)
Sets or unsets interpreter flags. Flags should be OR'd together. Valid flags include:
PARROT_NO_FLAGS
The default. No flags.
PARROT_BOUNDS_FLAG
True if bytecode bounds should be tracked.
PARROT_GC_DEBUG_FLAG
True if debugging memory management.
PARROT_EXTERN_CODE_FLAG
True if reusing another interpreters code.
PARROT_DESTROY_FLAG
True if the last interpreter shall cleanup.
PARROT_IS_THREAD
True if interpreter is a thread.
PARROT_THR_COPY_INTERP
True if thread start copies interpreter state.
PARROT_THR_THREAD_POOL
True if type3 threads are being used.
These are defined in interpreter.h.
void Parrot_set_run_core(PARROT_INTERP, Parrot_Run_core_t core)
Sets the runcore for the interpreter. Must be called before executing any bytecode. Valid runcores include:
PARROT_SLOW_CORE
PARROT_FUNCTION_CORE
PARROT_FAST_CORE
PARROT_EXEC_CORE
PARROT_GC_DEBUG_CORE
See interpreter.h for the definitive list. If you're not sure which runcore to use, don't call this function. The default will be fine for most cases. (TODO: document runcores here).
Parrot_set_trace(Parrot_Interp, Parrot_UInt flags)
Sets the interpreter's trace flags. Flags should be OR'd together. Valid flags are:
PARROT_NO_TRACE
PARROT_TRACE_OPS_FLAG
PARROT_TRACE_FIND_METH_FLAG
PARROT_TRACE_SUB_CALL_FLAG
PARROT_ALL_TRACE_FLAGS
void Parrot_set_executable_name(PARROT_INTERP, Parrot_string name)
Sets the executable name of the calling process. Note that the name is a Parrot string, not a C string.
void Parrot_destroy(PARROT_INTERP)
Destroys an interpreter. At the time of this writing, this is a no-op. See <Parrot_really_destroy()>.
void Parrot_really_destroy(PARROT_INTERP, int exit_code)
Destroys an interpreter, regardless of the environment. The exit code is currently unused.
void Parrot_x_exit(PARROT_INTERP, int status)
Destroys the interpreter and exits with an exit code of status. Before exiting, the function calls all registered exit handlers in LIFO order. Parrot_really_destroy() is usually called as the last exit handler.
void Parrot_x_on_exit(PARROT_INTERP, void (*handler)(Parrot_Interp, int, void *), void *arg)
Registers an exit handler to be called from Parrot_x_exit() in LIFO order. The handler function should accept as arguments an interpreter, an integer exit code, and an argument (which can be NULL).

Loading and running bytecode

Parrot_PackFile Parrot_pbc_read(PARROT_INTERP, const char *path, const int debug)
Reads Parrot bytecode or PIR from the file referenced by path. Returns a packfile structure for use by Parrot_pbc_load(). debug should be 0.
void Parrot_pbc_load(PARROT_INTERP, Parrot_PackFile pf)
Loads a packfile into the interpreter. After this operation the interpreter is ready to run the bytecode in the packfile.
void Parrot_runcode(PARROT_INTERP, int argc, char *argv[])
Runs the bytecode associated with the interpreter. Use argc and argv[] to pass arguments to the bytecode.
Parrot_PackFile PackFile_new_dummy(PARROT_INTERP, char *name)
Creates a "dummy" packfile in lieu of actually creating one from a bytecode file on disk.
void Parrot_load_bytecode(PARROT_INTERP, STRING *path)
Reads and load Parrot bytecode or PIR from the file referenced by path. You should create a dummy packfile beforehand; see PackFile_new_dummy for details. Due to the void return type, the behavior of this function on error is unclear.

Data manipulation

Native types

int Parrot_PMC_typenum(PARROT_INTERP, const char *type)
Returns the internal type number corresponding to type. Useful for instantiating various Parrot data types.
char *Parrot_str_to_cstring(PARROT_INTERP, const STRING *s)
XXX needs to be a formal Parrot_* API. Returns the C string representation of a Parrot string.
STRING *Parrot_str_new(PARROT_INTERP, const char *string, int len)
XXX needs to be a formal Parrot_* API. Returns the Parrot string representation of a C string.
string_from_literal(PARROT_INTERP, const char *string)
XXX needs to be a formal Parrot_* API. A macro for simplifying calls to Parrot_str_new.

PMCs

Parrot_PMC Parrot_PMC_new(PARROT_INTERP, int typenum)
Creates a new PMC of the type identified by typenum. Use Parrot_PMC_typenum to obtain the correct type number.
void Parrot_register_pmc(Parrot_PMC pmc)
Registers an externally created PMC with the garbage collector. You MUST call this for any PMCs you create outside of Parrot bytecode, otherwise your PMC may be garbage collected before you are finished using it.
void Parrot_unregister_pmc(Parrot_PMC pmc)
Unregisters an externally created PMC from the garbage collector. You MUST call this after you are finished using PMCs you create outside of Parrot bytecode, or risk memory leaks.

Globals

Parrot_PMC Parrot_ns_find_current_namespace_global(PARROT_INTERP, Parrot_String name)
Find and return a global called name in the current namespace. Returns PMCNULL if not found.
Parrot_PMC Parrot_ns_find_namespace_global(PARROT_INTERP, PMC namespace, Parrot_String name)
Search the namespace PMC namespace for an object with name globalname. Return the object, or NULL if not found.
void Parrot_ns_store_global(PARROT_INTERP, PMC namespace, Parrot_String name, Parrot_PMC val)
Store the PMC val into the namespace PMC namespace with name globalname.

Lexicals

Not documented yet.

Calling subroutines

void Parrot_ext_call(PARROT_INTERP, Parrot_PMC sub, const_char *signature, varargs ...)
Call a Parrot subroutine using the supplied function signature. Variables to be filled with return values are passed as references in the varargs list, after all arguments.

Objects

Creating and destroying objects

Parrot_PMC Parrot_oo_get_class(PARROT_INTERP, Parrot_PMC namespace)
Returns the class corresponding to the supplied namespace.
Parrot_PMC Parrot_PMC_instantiate(PARROT_INTERP, Parrot_PMC the_class, Parrot_PMC arg)
Instantiates a new object of class the_class, which can be obtained from Parrot_oo_get_class(). Passes an optional PMC argument arg to the constructor (see init versus init_pmc). Use PMCNULL if you are not supplying an argument.

Calling methods

void Parrot_ext_call(PARROT_INTERP, Parrot_PMC method, const_char *signature, varargs ...)
Methods are called using the same API function as calling a subroutine. The first argument should be the object that the method will be invoked on, and it should have the signature "Pi", which stands for "PMC invocant".

COMPILING

Note: This section is aimed at you if you are writing an application external to parrot which links against an installed parrot library.

Caveats

Several API functions are missing prototypes in Parrot's header files. This means you may receive type warnings during compilation even though the types of your arguments and return variables are correct. In this case it is safe to cast to the correct type; not doing so may cause undesired behavior.

Compiler and linker flags

Your application will need to include the appropriate header files and link against parrot and its dependencies.

Because the location of these files can vary from platform to platform, and build to build, a general method is provided to find out the necessary flags to use.

parrot_config is the helper tool for determining anything related to parrot configuration, determining compiler and linker flags to build against parrot is no different.

To start, you should find parrot_config in the path or allow your user to provide this location for you. You can check this by running parrot_config with VERSION as the argument to determine the version of parrot you are working with.

To determine the necessary C compiler flags, use embed-cflags:

  parrot_config embed-cflags

... and to find the necessary linker flags, use embed-ldflags:

  parrot_config embed-ldflags

The parrot_config command can be incorporated with a compile as shown here performing both compiling and linking in one step.

  cc src/disassemble.c `parrot_config embed-cflags` `parrot_config embed-ldflags`

EXAMPLES

Load bytecode as a library and run a single subroutine

    #include <parrot/parrot.h>
    #include <parrot/embed.h>
    #include <parrot/extend.h>

    int main(int argc, char *argv[])
    {
        Parrot_Interp interp;
        Parrot_PackFile pf;
        Parrot_PMC sub;
        Parrot_String pstr;

        interp = Parrot_new(NULL);
        imcc_init(interp);

        /* create a new packfile -- any name will do */
        pf = PackFile_new_dummy(interp, "my-parrot-code");

        pstr = string_from_literal(interp, "foo.pir");
        Parrot_load_bytecode(interp, pstr);

        /* find the subroutine named "foo" in the global namespace */
        pstr = string_from_literal(interp, "foo");
        sub = Parrot_ns_find_current_namespace_global(interp, pstr);

        /* run foo(), which returns nothing */
        Parrot_ext_call(interp, sub, "->");

        Parrot_destroy(interp);

        return(0);
    }

EXPORTED FUNCTIONS

The Parrot embedding API is not finalized, and it will go through several deprecation cycles before stabilizing. Below is the comprehensive list of candidates for inclusion in the Parrot embedding API. It includes the following types of functions:

The list may also be augmented if additional functionality is required.

disable_event_checking
enable_event_checking
interpinfo
interpinfo_p
interpinfo_s
mem_allocate_n_typed
mem_allocate_n_zeroed_typed
mem_allocate_zeroed_typed
mem_sys_allocate
mem_sys_allocate_zeroed
mem_sys_free
mem_sys_realloc
mem_sys_realloc_zeroed
PackFile_Constant_pack
PackFile_ConstTable_pack
PackFile_ConstTable_pack_size
PackFile_destroy
PackFile_fixup_subs
PackFile_new
PackFile_new_dummy
PackFile_pack
PackFile_pack_size
Parrot_assert
Parrot_block_GC_mark
Parrot_block_GC_sweep
Parrot_util_byte_index
Parrot_util_byte_rindex
Parrot_callback_C
Parrot_callback_D
Parrot_ext_call
Parrot_char_digit_value
Parrot_clear_debug
Parrot_clear_flag
Parrot_clear_trace
Parrot_clone
Parrot_compile_file
Parrot_compile_string
Parrot_ComposeRole
Parrot_compreg
Parrot_ComputeMRO_C3
Parrot_confess
Parrot_context_ref_trace
Parrot_cx_add_handler
Parrot_cx_add_handler_local
Parrot_cx_broadcast_message
Parrot_cx_count_handlers_local
Parrot_cx_count_handlers_typed
Parrot_cx_delete_handler_local
Parrot_cx_delete_handler_typed
Parrot_cx_delete_suspend_for_gc
Parrot_cx_delete_task
Parrot_cx_find_handler_for_task
Parrot_cx_find_handler_local
Parrot_cx_handle_tasks
Parrot_cx_peek_task
Parrot_cx_request_suspend_for_gc
Parrot_cx_runloop_end
Parrot_cx_schedule_callback
Parrot_cx_schedule_repeat
Parrot_cx_schedule_sleep
Parrot_cx_schedule_task
Parrot_cx_schedule_timer
Parrot_cx_send_message
Parrot_default_encoding
Parrot_del_timer_event
Parrot_destroy
Parrot_disassemble
Parrot_do_check_events
Parrot_do_handle_events
Parrot_dump_dynamic_environment
Parrot_encoding_c_name
Parrot_encoding_name
Parrot_encoding_number
Parrot_encoding_number_of_str
Parrot_eprintf
Parrot_event_add_io_event
Parrot_ex_add_c_handler
Parrot_ex_build_exception
Parrot_x_exit
Parrot_ex_mark_unhandled
Parrot_ex_rethrow_from_c
Parrot_ex_rethrow_from_op
Parrot_ex_throw_from_c
Parrot_ex_throw_from_c_args
Parrot_ex_throw_from_op
Parrot_ex_throw_from_op_args
Parrot_find_encoding
Parrot_ns_find_current_namespace_global
Parrot_find_global_k
Parrot_ns_find_namespace_global
Parrot_ns_find_global_from_op
Parrot_find_language
Parrot_find_method_direct
Parrot_find_method_with_cache
Parrot_ns_find_named_item
Parrot_util_float_rand
Parrot_fprintf
Parrot_free_context
Parrot_free_cstring
Parrot_freeze
Parrot_freeze_at_destruct
Parrot_sub_full_sub_name
parrot_gc_context
Parrot_gc_gms_init
parrot_gc_gms_Parrot_gc_mark_PObj_alive
Parrot_gc_mark_PObj_alive
Parrot_hll_get_ctx_HLL_namespace
Parrot_hll_get_ctx_HLL_type
Parrot_dt_get_datatype_enum
Parrot_dt_get_datatype_name
Parrot_get_encoding
Parrot_ns_get_global
Parrot_hll_get_HLL_id
Parrot_hll_get_HLL_name
Parrot_hll_get_HLL_namespace
Parrot_hll_get_HLL_type
Parrot_get_intreg
Parrot_get_namespace_autobase
Parrot_ns_get_namespace_keyed
Parrot_ns_get_namespace_keyed_str
Parrot_get_numreg
Parrot_get_pmcreg
Parrot_get_root_namespace
Parrot_get_runtime_path
Parrot_get_strreg
Parrot_get_vtable
Parrot_get_vtable_index
Parrot_get_vtable_name
Parrot_init_events
Parrot_init_signals
Parrot_init_stacktop
Parrot_util_int_rand
Parrot_invalidate_method_cache
Parrot_io_accept
Parrot_io_bind
Parrot_io_close
Parrot_io_close_filehandle
Parrot_io_close_piohandle
Parrot_io_connect
Parrot_IOData_mark
Parrot_io_eof
Parrot_io_eprintf
Parrot_io_fdopen
Parrot_io_finish
Parrot_io_flush
Parrot_io_flush_filehandle
Parrot_io_fprintf
Parrot_io_get_buffer_end
Parrot_io_get_buffer_next
Parrot_io_get_buffer_start
Parrot_io_getfd
Parrot_io_get_file_position
Parrot_io_get_file_size
Parrot_io_get_flags
Parrot_io_get_os_handle
Parrot_io_init
Parrot_io_is_closed
Parrot_io_is_closed_filehandle
Parrot_io_is_encoding
Parrot_io_is_tty
Parrot_io_listen
Parrot_io_make_offset
Parrot_io_new_pmc
Parrot_io_new_socket_pmc
Parrot_io_open
Parrot_io_parse_open_flags
Parrot_io_peek
Parrot_io_poll
Parrot_io_printf
Parrot_io_putps
Parrot_io_puts
Parrot_io_readline
Parrot_io_reads
Parrot_io_recv
Parrot_io_seek
Parrot_io_send
Parrot_io_set_file_position
Parrot_io_set_file_size
Parrot_io_set_flags
Parrot_io_set_os_handle
Parrot_io_socket
Parrot_io_socket_is_closed
Parrot_io_STDERR
Parrot_io_stdhandle
Parrot_io_STDIN
Parrot_io_STDOUT
Parrot_io_tell
Parrot_io_write
Parrot_is_blocked_GC_mark
Parrot_is_blocked_GC_sweep
Parrot_kill_event_loop
Parrot_lib_add_path
Parrot_lib_add_path_from_cstring
Parrot_load_bytecode
Parrot_load_encoding
Parrot_load_language
Parrot_dyn_load_lib
Parrot_locate_runtime_file
Parrot_locate_runtime_file_str
Parrot_make_cb
Parrot_make_default_encoding
Parrot_ns_make_namespace_autobase
Parrot_ns_make_namespace_keyed
Parrot_ns_make_namespace_keyed_str
Parrot_mmd_cache_create
Parrot_mmd_cache_destroy
Parrot_mmd_cache_lookup_by_values
Parrot_mmd_cache_mark
Parrot_mmd_cache_store_by_values
Parrot_new
Parrot_new_cb_event
Parrot_new_encoding
Parrot_new_string
Parrot_new_suspend_for_gc_event
Parrot_new_terminate_event
Parrot_new_timer_event
Parrot_ns_get_name
Parrot_x_on_exit
Parrot_oo_get_class
Parrot_oo_get_class_str
Parrot_pbc_load
Parrot_pbc_read
Parrot_PMC_absolute
Parrot_PMC_add
Parrot_PMC_add_attribute
Parrot_PMC_add_float
Parrot_PMC_add_int
Parrot_PMC_add_method
Parrot_PMC_add_parent
Parrot_PMC_add_role
Parrot_PMC_add_vtable_override
Parrot_PMC_assign_pmc
Parrot_PMC_assign_string_native
Parrot_PMC_can
Parrot_PMC_clone
Parrot_PMC_clone_pmc
Parrot_PMC_cmp
Parrot_PMC_cmp_num
Parrot_PMC_cmp_pmc
Parrot_PMC_cmp_string
Parrot_PMC_concatenate
Parrot_PMC_concatenate_str
Parrot_PMC_decrement
Parrot_PMC_defined
Parrot_PMC_defined_keyed
Parrot_PMC_defined_keyed_int
Parrot_PMC_defined_keyed_str
Parrot_PMC_delete_keyed
Parrot_PMC_delete_keyed_int
Parrot_PMC_delete_keyed_str
Parrot_PMC_delete_pmckey
Parrot_PMC_delprop
Parrot_PMC_destroy
Parrot_PMC_divide
Parrot_PMC_divide_float
Parrot_PMC_divide_int
Parrot_PMC_does
Parrot_PMC_does_pmc
Parrot_PMC_elements
Parrot_PMC_exists_keyed
Parrot_PMC_exists_keyed_int
Parrot_PMC_exists_keyed_str
Parrot_PMC_find_method
Parrot_PMC_floor_divide
Parrot_PMC_floor_divide_float
Parrot_PMC_floor_divide_int
Parrot_PMC_get_attr_keyed
Parrot_PMC_get_attr_str
Parrot_PMC_get_bool
Parrot_PMC_get_class
Parrot_PMC_get_cstring
Parrot_PMC_get_cstring_intkey
Parrot_PMC_get_cstringn
Parrot_PMC_get_cstringn_intkey
Parrot_PMC_get_integer
Parrot_PMC_get_integer_keyed
Parrot_PMC_get_integer_keyed_int
Parrot_PMC_get_integer_keyed_str
Parrot_PMC_get_iter
Parrot_PMC_get_namespace
Parrot_PMC_get_number
Parrot_PMC_get_number_keyed
Parrot_PMC_get_number_keyed_int
Parrot_PMC_get_number_keyed_str
Parrot_PMC_get_numval
Parrot_PMC_get_numval_intkey
Parrot_PMC_get_pmc
Parrot_PMC_get_pmc_intkey
Parrot_PMC_get_pmc_keyed
Parrot_PMC_get_pmc_keyed_int
Parrot_PMC_get_pmc_keyed_str
Parrot_PMC_get_pmc_strkey
Parrot_PMC_get_pointer
Parrot_PMC_get_pointer_intkey
Parrot_PMC_get_pointer_keyed
Parrot_PMC_get_pointer_keyed_int
Parrot_PMC_get_pointer_keyed_str
Parrot_PMC_getprop
Parrot_PMC_getprops
Parrot_PMC_get_repr
Parrot_PMC_get_string
Parrot_PMC_get_string_intkey
Parrot_PMC_get_string_keyed
Parrot_PMC_get_string_keyed_int
Parrot_PMC_get_string_keyed_str
Parrot_PMC_i_absolute
Parrot_PMC_i_add
Parrot_PMC_i_add_float
Parrot_PMC_i_add_int
Parrot_PMC_i_concatenate
Parrot_PMC_i_concatenate_str
Parrot_PMC_i_divide
Parrot_PMC_i_divide_float
Parrot_PMC_i_divide_int
Parrot_PMC_i_floor_divide
Parrot_PMC_i_floor_divide_float
Parrot_PMC_i_floor_divide_int
Parrot_PMC_i_modulus
Parrot_PMC_i_modulus_float
Parrot_PMC_i_modulus_int
Parrot_PMC_i_multiply
Parrot_PMC_i_multiply_float
Parrot_PMC_i_multiply_int
Parrot_PMC_increment
Parrot_PMC_i_neg
Parrot_PMC_init
Parrot_PMC_init_pmc
Parrot_PMC_inspect
Parrot_PMC_inspect_str
Parrot_PMC_instantiate
Parrot_PMC_invoke
Parrot_PMC_i_pow
Parrot_PMC_i_pow_float
Parrot_PMC_i_pow_int
Parrot_PMC_i_repeat
Parrot_PMC_i_repeat_int
Parrot_PMC_isa
Parrot_PMC_isa_pmc
Parrot_PMC_is_equal
Parrot_PMC_is_equal_num
Parrot_PMC_is_equal_string
Parrot_PMC_is_same
Parrot_PMC_i_subtract
Parrot_PMC_i_subtract_float
Parrot_PMC_i_subtract_int
Parrot_PMC_mark
Parrot_PMC_modulus
Parrot_PMC_modulus_float
Parrot_PMC_modulus_int
Parrot_PMC_morph
Parrot_PMC_multiply
Parrot_PMC_multiply_float
Parrot_PMC_multiply_int
Parrot_PMC_name
Parrot_PMC_neg
Parrot_PMC_new
Parrot_PMC_newclass
Parrot_PMC_null
Parrot_PMC_pop_float
Parrot_PMC_pop_integer
Parrot_PMC_pop_pmc
Parrot_PMC_pop_string
Parrot_PMC_pow
Parrot_PMC_pow_float
Parrot_PMC_pow_int
Parrot_PMC_push_float
Parrot_PMC_push_integer
Parrot_PMC_push_intval
Parrot_PMC_push_numval
Parrot_PMC_push_pmc
Parrot_PMC_push_pmcval
Parrot_PMC_push_string
Parrot_PMC_remove_attribute
Parrot_PMC_remove_method
Parrot_PMC_remove_parent
Parrot_PMC_remove_role
Parrot_PMC_remove_vtable_override
Parrot_PMC_repeat
Parrot_PMC_repeat_int
Parrot_PMC_set_attr_keyed
Parrot_PMC_set_attr_str
Parrot_PMC_set_bignum_int
Parrot_PMC_set_bignum_num
Parrot_PMC_set_bignum_str
Parrot_PMC_set_bool
Parrot_PMC_set_cstring
Parrot_PMC_set_cstring_intkey
Parrot_PMC_set_cstringn
Parrot_PMC_set_cstringn_intkey
Parrot_PMC_set_integer_keyed
Parrot_PMC_set_integer_keyed_int
Parrot_PMC_set_integer_keyed_str
Parrot_PMC_set_integer_native
Parrot_PMC_set_integer_same
Parrot_PMC_set_intval
Parrot_PMC_set_intval_intkey
Parrot_PMC_set_number_keyed
Parrot_PMC_set_number_keyed_int
Parrot_PMC_set_number_keyed_str
Parrot_PMC_set_number_native
Parrot_PMC_set_number_same
Parrot_PMC_set_numval
Parrot_PMC_set_numval_intkey
Parrot_PMC_set_pmc
Parrot_PMC_set_pmc_intkey
Parrot_PMC_set_pmc_keyed
Parrot_PMC_set_pmc_keyed_int
Parrot_PMC_set_pmc_keyed_str
Parrot_PMC_set_pmc_pmckey
Parrot_PMC_set_pmc_strkey
Parrot_PMC_set_pointer
Parrot_PMC_set_pointer_intkey
Parrot_PMC_set_pointer_keyed
Parrot_PMC_set_pointer_keyed_int
Parrot_PMC_set_pointer_keyed_str
Parrot_PMC_setprop
Parrot_PMC_set_string
Parrot_PMC_set_string_intkey
Parrot_PMC_set_string_keyed
Parrot_PMC_set_string_keyed_int
Parrot_PMC_set_string_keyed_str
Parrot_PMC_set_string_native
Parrot_PMC_set_string_same
Parrot_PMC_set_vtable
Parrot_PMC_share
Parrot_PMC_share_ro
Parrot_PMC_shift_float
Parrot_PMC_shift_integer
Parrot_PMC_shift_pmc
Parrot_PMC_shift_string
Parrot_PMC_splice
Parrot_PMC_substr
Parrot_PMC_substr_str
Parrot_PMC_subtract
Parrot_PMC_subtract_float
Parrot_PMC_subtract_int
Parrot_PMC_typenum
Parrot_PMC_unshift_float
Parrot_PMC_unshift_integer
Parrot_PMC_unshift_pmc
Parrot_PMC_unshift_string
Parrot_pop_context
Parrot_pop_mark
Parrot_printf
Parrot_psprintf
Parrot_push_action
Parrot_push_context
Parrot_push_mark
Parrot_util_range_rand
Parrot_hll_regenerate_HLL_namespaces
Parrot_register_encoding
Parrot_hll_register_HLL
Parrot_hll_register_HLL_type
Parrot_util_register_move
Parrot_register_pmc
Parrot_run_callback
Parrot_runcode
Parrot_schedule_event
Parrot_schedule_interp_qentry
Parrot_secret_snprintf
Parrot_gbl_set_config_hash_internal
Parrot_set_context_threshold
Parrot_set_debug
Parrot_set_executable_name
Parrot_set_flag
Parrot_ns_set_global
Parrot_set_intreg
Parrot_set_numreg
Parrot_set_pmcreg
Parrot_set_run_core
Parrot_set_strreg
Parrot_set_trace
Parrot_setwarnings
Parrot_shared_gc_block
Parrot_shared_gc_unblock
Parrot_sleep_on_event
Parrot_snprintf
Parrot_sprintf_c
Parrot_sprintf_s
Parrot_util_srand
Parrot_ns_store_global
Parrot_ns_store_sub
Parrot_str_boolean
Parrot_str_byte_length
Parrot_str_change_encoding
Parrot_str_chopn
Parrot_str_compare
Parrot_str_compose
Parrot_str_concat
Parrot_str_copy
Parrot_str_downcase
Parrot_str_equal
Parrot_str_escape
Parrot_str_escape_truncate
Parrot_str_find_cclass
Parrot_str_find_index
Parrot_str_find_not_cclass
Parrot_str_finish
Parrot_str_format_data
Parrot_str_free_cstring
Parrot_str_from_int
Parrot_str_from_num
Parrot_str_indexed
Parrot_str_cstring
Parrot_str_init
Parrot_str_is_cclass
Parrot_str_join
Parrot_str_length
Parrot_str_new
Parrot_str_new_constant
Parrot_str_new_init
Parrot_str_new_noinit
Parrot_str_not_equal
Parrot_str_pin
Parrot_str_repeat
Parrot_str_replace
Parrot_str_split
Parrot_str_substr
Parrot_str_titlecase
Parrot_str_to_cstring
Parrot_str_to_hashval
Parrot_str_to_int
Parrot_str_to_num
Parrot_str_unescape
Parrot_str_unpin
Parrot_str_upcase
Parrot_sub_new_from_c_func
Parrot_test_debug
Parrot_test_flag
Parrot_test_trace
Parrot_thaw
Parrot_thaw_constants
Parrot_util_uint_rand
Parrot_unblock_GC_mark
Parrot_unblock_GC_sweep
Parrot_unregister_pmc
Parrot_vfprintf
Parrot_vsnprintf
Parrot_vsprintf_c
Parrot_vsprintf_s
Parrot_warn
Parrot_pmc_is_null
pmc_new
pmc_type
PObj_custom_destroy_SET
PObj_custom_mark_SET
string_chr
string_make
string_max_bytes
string_ord
string_rep_compatible
string_to_cstring_nullable

SEE ALSO

src/main.c and t/src/*.t for Parrot's use of the embedding system.