NAME
embed.pod - Parrot embedding system
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) {
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
DESCRIPTION
This is the documentation for Parrot's embedding API.
Data structures
Parrot_Interp
The topmost data structure in Parrot is 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_IntParrot_FloatParrot_UInt
Parrot's numeric types.
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_PMC declaration per line.
Constants
Not documented yet.
Type signatures
TODO: Write about signature strings
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
- PARROT_BOUNDS_FLAG
- PARROT_GC_DEBUG_FLAG
- PARROT_EXTERN_CODE_FLAG
- PARROT_DESTROY_FLAG
- PARROT_IS_THREAD
- PARROT_THR_COPY_INTERP
- PARROT_THR_THREAD_POOL
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:
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_exit(PARROT_INTERP, int status)
Destroys the interpreter and exits with an exit code of void Parrot_on_exit(PARROT_INTERP, void (*handler)(Parrot_Interp, int, void *), void *arg)
Registers an exit handler to be called from
status. Before exiting, the function calls all registered exit handlers in LIFO order. Parrot_really_destroy() is usually called as the last exit handler.
Parrot_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 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 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. Returns a packfile structure for use by Parrot_pbc_load(). debug should be 0.
argc and argv[] to pass arguments to the bytecode.
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 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
type. Useful for instantiating various Parrot data types.
Parrot_str_new.PMCs
Parrot_PMC Parrot_PMC_new(PARROT_INTERP, int typenum)
Creates a new PMC of the type identified by 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.
typenum. Use Parrot_PMC_typenum to obtain the correct type number.
Globals
Parrot_PMC Parrot_ns_find_current_namespace_global(PARROT_INTERP, Parrot_String name)
Find and return a global called Parrot_PMC Parrot_ns_find_namespace_global(PARROT_INTERP, PMC namespace, Parrot_String name)
Search the namespace PMC void Parrot_ns_store_global(PARROT_INTERP, PMC namespace, Parrot_String name, Parrot_PMC val)
Store the PMC
name in the current namespace. Returns PMCNULL if not found.
namespace for an object with name globalname. Return the object, or NULL if not found.
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 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".
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 core functions documented above
- Functions required by macros
- Parrot_PMC_* VTABLE wrappers
- Miscellaneous functions whose utility outside of the core is uncertain. This includes functions used by HLLs.
- Functions that should be removed in a future deprecation cycle. A good example of this is most of the internal string_* functions, which now have formal Parrot_str_* wrappers.
The list may also be augmented if additional functionality is required.
disable_event_checkingenable_event_checkinginterpinfointerpinfo_pinterpinfo_smem_allocate_n_typedmem_allocate_n_zeroed_typedmem_allocate_zeroed_typedmem_sys_allocatemem_sys_allocate_zeroedmem_sys_freemem_sys_reallocmem_sys_realloc_zeroedPackFile_Constant_packPackFile_ConstTable_packPackFile_ConstTable_pack_sizePackFile_destroyPackFile_fixup_subsPackFile_newPackFile_new_dummyPackFile_packPackFile_pack_sizeParrot_assertParrot_block_GC_markParrot_block_GC_sweepParrot_byte_indexParrot_byte_rindexParrot_callback_CParrot_callback_DParrot_ext_callParrot_char_digit_valueParrot_clear_debugParrot_clear_flagParrot_clear_iParrot_clear_nParrot_clear_pParrot_clear_sParrot_clear_traceParrot_cloneParrot_compile_fileParrot_compile_stringParrot_ComposeRoleParrot_compregParrot_ComputeMRO_C3Parrot_confessParrot_context_ref_traceParrot_cx_add_handlerParrot_cx_add_handler_localParrot_cx_broadcast_messageParrot_cx_count_handlers_localParrot_cx_count_handlers_typedParrot_cx_delete_handler_localParrot_cx_delete_handler_typedParrot_cx_delete_suspend_for_gcParrot_cx_delete_taskParrot_cx_find_handler_for_taskParrot_cx_find_handler_localParrot_cx_handle_tasksParrot_cx_peek_taskParrot_cx_request_suspend_for_gcParrot_cx_runloop_endParrot_cx_schedule_callbackParrot_cx_schedule_repeatParrot_cx_schedule_sleepParrot_cx_schedule_taskParrot_cx_schedule_timerParrot_cx_send_messageParrot_default_encodingParrot_del_timer_eventParrot_destroyParrot_disassembleParrot_do_check_eventsParrot_do_handle_eventsParrot_dump_dynamic_environmentParrot_encoding_c_nameParrot_encoding_nameParrot_encoding_numberParrot_encoding_number_of_strParrot_eprintfParrot_event_add_io_eventParrot_ex_add_c_handlerParrot_ex_build_exceptionParrot_exitParrot_ex_mark_unhandledParrot_ex_rethrow_from_cParrot_ex_rethrow_from_opParrot_ex_throw_from_cParrot_ex_throw_from_c_argsParrot_ex_throw_from_opParrot_ex_throw_from_op_argsParrot_find_encodingParrot_ns_find_current_namespace_globalParrot_find_global_kParrot_ns_find_namespace_globalParrot_ns_find_global_from_opParrot_find_languageParrot_find_method_directParrot_find_method_with_cacheParrot_ns_find_named_itemParrot_float_randParrot_fprintfParrot_free_contextParrot_free_cstringParrot_freezeParrot_freeze_at_destructParrot_full_sub_nameparrot_gc_contextParrot_gc_gms_initparrot_gc_gms_Parrot_gc_mark_PObj_aliveParrot_gc_mark_PObj_aliveParrot_get_ctx_HLL_namespaceParrot_get_ctx_HLL_typeParrot_get_datatype_enumParrot_get_datatype_nameParrot_get_encodingParrot_ns_get_globalParrot_get_HLL_idParrot_get_HLL_nameParrot_get_HLL_namespaceParrot_get_HLL_typeParrot_get_intregParrot_get_namespace_autobaseParrot_ns_get_namespace_keyedParrot_ns_get_namespace_keyed_strParrot_get_numregParrot_get_pmcregParrot_get_root_namespaceParrot_get_runtime_pathParrot_get_strregParrot_get_vtableParrot_get_vtable_indexParrot_get_vtable_nameParrot_init_eventsParrot_init_signalsParrot_init_stacktopParrot_int_randParrot_invalidate_method_cacheParrot_io_acceptParrot_io_bindParrot_io_closeParrot_io_close_filehandleParrot_io_close_piohandleParrot_io_connectParrot_IOData_markParrot_io_eofParrot_io_eprintfParrot_io_fdopenParrot_io_finishParrot_io_flushParrot_io_flush_filehandleParrot_io_fprintfParrot_io_get_buffer_endParrot_io_get_buffer_nextParrot_io_get_buffer_startParrot_io_getfdParrot_io_get_file_positionParrot_io_get_file_sizeParrot_io_get_flagsParrot_io_get_last_file_positionParrot_io_get_os_handleParrot_io_initParrot_io_is_closedParrot_io_is_closed_filehandleParrot_io_is_encodingParrot_io_is_ttyParrot_io_listenParrot_io_make_offsetParrot_io_new_pmcParrot_io_new_socket_pmcParrot_io_openParrot_io_parse_open_flagsParrot_io_peekParrot_io_pollParrot_io_printfParrot_io_putpsParrot_io_putsParrot_io_readlineParrot_io_readsParrot_io_recvParrot_io_seekParrot_io_sendParrot_io_set_file_positionParrot_io_set_file_sizeParrot_io_set_flagsParrot_io_set_os_handleParrot_io_socketParrot_io_socket_is_closedParrot_io_STDERRParrot_io_stdhandleParrot_io_STDINParrot_io_STDOUTParrot_io_tellParrot_io_writeParrot_is_blocked_GC_markParrot_is_blocked_GC_sweepParrot_kill_event_loopParrot_lib_add_pathParrot_lib_add_path_from_cstringParrot_load_bytecodeParrot_load_encodingParrot_load_languageParrot_load_libParrot_locate_runtime_fileParrot_locate_runtime_file_strParrot_make_cbParrot_make_default_encodingParrot_ns_make_namespace_autobaseParrot_ns_make_namespace_keyedParrot_ns_make_namespace_keyed_strParrot_mmd_cache_createParrot_mmd_cache_destroyParrot_mmd_cache_lookup_by_valuesParrot_mmd_cache_markParrot_mmd_cache_store_by_valuesParrot_newParrot_new_cb_eventParrot_new_encodingParrot_new_stringParrot_new_suspend_for_gc_eventParrot_new_terminate_eventParrot_new_timer_eventParrot_ns_get_nameParrot_on_exitParrot_oo_get_classParrot_oo_get_class_strParrot_pbc_loadParrot_pbc_readParrot_PMC_absoluteParrot_PMC_addParrot_PMC_add_attributeParrot_PMC_add_floatParrot_PMC_add_intParrot_PMC_add_methodParrot_PMC_add_parentParrot_PMC_add_roleParrot_PMC_add_vtable_overrideParrot_PMC_assign_pmcParrot_PMC_assign_string_nativeParrot_PMC_canParrot_PMC_cloneParrot_PMC_clone_pmcParrot_PMC_cmpParrot_PMC_cmp_numParrot_PMC_cmp_pmcParrot_PMC_cmp_stringParrot_PMC_concatenateParrot_PMC_concatenate_strParrot_PMC_decrementParrot_PMC_definedParrot_PMC_defined_keyedParrot_PMC_defined_keyed_intParrot_PMC_defined_keyed_strParrot_PMC_delete_keyedParrot_PMC_delete_keyed_intParrot_PMC_delete_keyed_strParrot_PMC_delete_pmckeyParrot_PMC_delpropParrot_PMC_destroyParrot_PMC_divideParrot_PMC_divide_floatParrot_PMC_divide_intParrot_PMC_doesParrot_PMC_does_pmcParrot_PMC_elementsParrot_PMC_exists_keyedParrot_PMC_exists_keyed_intParrot_PMC_exists_keyed_strParrot_PMC_find_methodParrot_PMC_floor_divideParrot_PMC_floor_divide_floatParrot_PMC_floor_divide_intParrot_PMC_get_attr_keyedParrot_PMC_get_attr_strParrot_PMC_get_boolParrot_PMC_get_classParrot_PMC_get_cstringParrot_PMC_get_cstring_intkeyParrot_PMC_get_cstringnParrot_PMC_get_cstringn_intkeyParrot_PMC_get_integerParrot_PMC_get_integer_keyedParrot_PMC_get_integer_keyed_intParrot_PMC_get_integer_keyed_strParrot_PMC_get_iterParrot_PMC_get_namespaceParrot_PMC_get_numberParrot_PMC_get_number_keyedParrot_PMC_get_number_keyed_intParrot_PMC_get_number_keyed_strParrot_PMC_get_numvalParrot_PMC_get_numval_intkeyParrot_PMC_get_pmcParrot_PMC_get_pmc_intkeyParrot_PMC_get_pmc_keyedParrot_PMC_get_pmc_keyed_intParrot_PMC_get_pmc_keyed_strParrot_PMC_get_pmc_strkeyParrot_PMC_get_pointerParrot_PMC_get_pointer_intkeyParrot_PMC_get_pointer_keyedParrot_PMC_get_pointer_keyed_intParrot_PMC_get_pointer_keyed_strParrot_PMC_getpropParrot_PMC_getpropsParrot_PMC_get_reprParrot_PMC_get_stringParrot_PMC_get_string_intkeyParrot_PMC_get_string_keyedParrot_PMC_get_string_keyed_intParrot_PMC_get_string_keyed_strParrot_PMC_i_absoluteParrot_PMC_i_addParrot_PMC_i_add_floatParrot_PMC_i_add_intParrot_PMC_i_concatenateParrot_PMC_i_concatenate_strParrot_PMC_i_divideParrot_PMC_i_divide_floatParrot_PMC_i_divide_intParrot_PMC_i_floor_divideParrot_PMC_i_floor_divide_floatParrot_PMC_i_floor_divide_intParrot_PMC_i_modulusParrot_PMC_i_modulus_floatParrot_PMC_i_modulus_intParrot_PMC_i_multiplyParrot_PMC_i_multiply_floatParrot_PMC_i_multiply_intParrot_PMC_incrementParrot_PMC_i_negParrot_PMC_initParrot_PMC_init_pmcParrot_PMC_inspectParrot_PMC_inspect_strParrot_PMC_instantiateParrot_PMC_invokeParrot_PMC_i_powParrot_PMC_i_pow_floatParrot_PMC_i_pow_intParrot_PMC_i_repeatParrot_PMC_i_repeat_intParrot_PMC_isaParrot_PMC_isa_pmcParrot_PMC_is_equalParrot_PMC_is_equal_numParrot_PMC_is_equal_stringParrot_PMC_is_sameParrot_PMC_i_subtractParrot_PMC_i_subtract_floatParrot_PMC_i_subtract_intParrot_PMC_markParrot_PMC_modulusParrot_PMC_modulus_floatParrot_PMC_modulus_intParrot_PMC_morphParrot_PMC_multiplyParrot_PMC_multiply_floatParrot_PMC_multiply_intParrot_PMC_nameParrot_PMC_negParrot_PMC_newParrot_PMC_newclassParrot_PMC_nullParrot_PMC_pop_floatParrot_PMC_pop_integerParrot_PMC_pop_pmcParrot_PMC_pop_stringParrot_PMC_powParrot_PMC_pow_floatParrot_PMC_pow_intParrot_PMC_push_floatParrot_PMC_push_integerParrot_PMC_push_intvalParrot_PMC_push_numvalParrot_PMC_push_pmcParrot_PMC_push_pmcvalParrot_PMC_push_stringParrot_PMC_remove_attributeParrot_PMC_remove_methodParrot_PMC_remove_parentParrot_PMC_remove_roleParrot_PMC_remove_vtable_overrideParrot_PMC_repeatParrot_PMC_repeat_intParrot_PMC_set_attr_keyedParrot_PMC_set_attr_strParrot_PMC_set_bignum_intParrot_PMC_set_bignum_numParrot_PMC_set_bignum_strParrot_PMC_set_boolParrot_PMC_set_cstringParrot_PMC_set_cstring_intkeyParrot_PMC_set_cstringnParrot_PMC_set_cstringn_intkeyParrot_PMC_set_integer_keyedParrot_PMC_set_integer_keyed_intParrot_PMC_set_integer_keyed_strParrot_PMC_set_integer_nativeParrot_PMC_set_integer_sameParrot_PMC_set_intvalParrot_PMC_set_intval_intkeyParrot_PMC_set_number_keyedParrot_PMC_set_number_keyed_intParrot_PMC_set_number_keyed_strParrot_PMC_set_number_nativeParrot_PMC_set_number_sameParrot_PMC_set_numvalParrot_PMC_set_numval_intkeyParrot_PMC_set_pmcParrot_PMC_set_pmc_intkeyParrot_PMC_set_pmc_keyedParrot_PMC_set_pmc_keyed_intParrot_PMC_set_pmc_keyed_strParrot_PMC_set_pmc_pmckeyParrot_PMC_set_pmc_strkeyParrot_PMC_set_pointerParrot_PMC_set_pointer_intkeyParrot_PMC_set_pointer_keyedParrot_PMC_set_pointer_keyed_intParrot_PMC_set_pointer_keyed_strParrot_PMC_setpropParrot_PMC_set_stringParrot_PMC_set_string_intkeyParrot_PMC_set_string_keyedParrot_PMC_set_string_keyed_intParrot_PMC_set_string_keyed_strParrot_PMC_set_string_nativeParrot_PMC_set_string_sameParrot_PMC_set_vtableParrot_PMC_shareParrot_PMC_share_roParrot_PMC_shift_floatParrot_PMC_shift_integerParrot_PMC_shift_pmcParrot_PMC_shift_stringParrot_PMC_spliceParrot_PMC_substrParrot_PMC_substr_strParrot_PMC_subtractParrot_PMC_subtract_floatParrot_PMC_subtract_intParrot_PMC_typenumParrot_PMC_unshift_floatParrot_PMC_unshift_integerParrot_PMC_unshift_pmcParrot_PMC_unshift_stringParrot_pop_contextParrot_pop_markParrot_printfParrot_psprintfParrot_push_actionParrot_push_contextParrot_push_markParrot_range_randParrot_regenerate_HLL_namespacesParrot_register_encodingParrot_register_HLLParrot_register_HLL_libParrot_register_HLL_typeParrot_register_moveParrot_register_pmcParrot_run_callbackParrot_runcodeParrot_run_nativeParrot_schedule_eventParrot_schedule_interp_qentryParrot_secret_snprintfParrot_set_config_hash_internalParrot_set_context_thresholdParrot_set_debugParrot_set_executable_nameParrot_set_flagParrot_ns_set_globalParrot_set_intregParrot_set_numregParrot_set_pmcregParrot_set_run_coreParrot_set_strregParrot_set_traceParrot_setwarningsParrot_shared_gc_blockParrot_shared_gc_unblockParrot_sleep_on_eventParrot_snprintfParrot_sprintf_cParrot_sprintf_sParrot_srandParrot_ns_store_globalParrot_ns_store_subParrot_str_booleanParrot_str_byte_lengthParrot_str_change_encodingParrot_str_chopnParrot_str_compareParrot_str_composeParrot_str_concatParrot_str_copyParrot_str_downcaseParrot_str_equalParrot_str_escapeParrot_str_escape_truncateParrot_str_find_cclassParrot_str_find_indexParrot_str_find_not_cclassParrot_str_finishParrot_str_format_dataParrot_str_free_cstringParrot_str_from_intParrot_str_from_numParrot_str_indexedParrot_str_cstringParrot_str_initParrot_str_is_cclassParrot_str_joinParrot_str_lengthParrot_str_newParrot_str_new_constantParrot_str_new_initParrot_str_new_noinitParrot_str_not_equalParrot_str_pinParrot_str_repeatParrot_str_replaceParrot_str_splitParrot_str_substrParrot_str_titlecaseParrot_str_to_cstringParrot_str_to_hashvalParrot_str_to_intParrot_str_to_numParrot_str_unescapeParrot_str_unpinParrot_str_upcaseParrot_sub_new_from_c_funcParrot_test_debugParrot_test_flagParrot_test_traceParrot_thawParrot_thaw_constantsParrot_uint_randParrot_unblock_GC_markParrot_unblock_GC_sweepParrot_unregister_pmcParrot_vfprintfParrot_vsnprintfParrot_vsprintf_cParrot_vsprintf_sParrot_warnParrot_pmc_is_nullpmc_newpmc_typePObj_custom_destroy_SETPObj_custom_mark_SETstring_chrstring_makestring_max_bytesstring_ordstring_rep_compatiblestring_to_cstring_nullable
SEE ALSO
src/main.c and t/src/*.t for Parrot's use of the embedding system.