| parrotcode: Export globals from one namespace to another | |
| Contents | PMCs |

src/pmc/exporter.pmc - Export globals from one namespace to another

You can use Exporter in PIR to import subs from a library. At its simplest:
.sub main :main
load_bytecode 'Test/More.pir'
.local pmc exporter, test_ns
test_ns = get_namespace ['Test::More']
exporter = new 'Exporter'
exporter.'import'( test_ns :named('source'), 'plan ok' :named('globals') )
plan(1)
ok(1, 'exporter has imported the requested functions')
.end
Fancier options exist which allow you to import to an alternate namespace, or export globals so they can be called using a different name. See t/pmc/exporter.t for examples.

Exports globals from one namespace to another. Exporter always uses the typed namespace interface, as outlined in docs/pdds/pdd21_namespaces.pod.
Exporter is not derived from any other PMC, and does not provide any vtable interface--its interface consists solely of non-vtable methods.

The Exporter PMC structure (Parrot_Exporter) consists of three items:
ns_srcns_destglobals
void init()void destroy()void mark()
PCCMETHOD void source(PMC *src :optional, int got_src :opt_flag)ns_src.) Sets the value if src is passed, otherwise returns the value. Throws an exception if a non-NameSpace PMC is passed.PCCMETHOD void destination(PMC *dest :optional, int got_dest :opt_flag)ns_dest.) Sets the value if dest is passed, otherwise returns the value. Throws an exception if a non-NameSpace PMC is passed.PCCMETHOD void globals(PMC *glb :optional, int got_glb :opt_flag)globals.) Sets the value if glb is passed, otherwise returns the value. If glb is a String, it is split on ascii whitespace, and each array member is added as a hash key. If glb implements the array interface, each member is added as a hash key. if glb implements the hash interface, it is assigned to Exporter's globals attribute. Throws an exception if an unknown PMC type is passed.PCCMETHOD void import(PMC *dest :optional :named["destination"], int got_dest :opt_flag, PMC *src :optional :named["source"], int got_src :opt_flag, PMC *globals :optional :named["globals"], int got_globals :opt_flag)globals from the src namespace to the dest namespace. If src, dest, or globals are passed, they override the current value. import follows the semantics of the export_to method of the NameSpace PMC. in particular, if a NULL value is passed for globals, the default set of items will be imported. Throws an exception upon error.
Unstable. This PMC is under active development; major portions of the interface have not yet been completed.

docs/pdds/pdd17_basic_types.pod, docs/pdds/pdd21_namespaces.pod.
|
|
|