Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: RELEASE_0_4_5
Fetching contributors…

Cannot retrieve contributors at this time

148 lines (92 sloc) 2.208 kb
/*
Copyright (C) 2001-2003, The Perl Foundation.
$Id$
=head1 NAME
src/pmc/parrotlibrary.pmc - Dynamic Library
=head1 DESCRIPTION
Class for holding info about a dynamic library.
PMC data
PMC_struct_val(SELF) oplib init function
PMC_data(SELF) DLL handle
Properties:
_filename full path/file of lib
_ro true after init
All ParrotLibrary PMCs are in interpreter->iglobals.
When a dynamic library (pmc or ops) is loaded, the load function returns
a ParrotLibrary PMC.
=head2 Methods
=over 4
=cut
*/
#include "parrot/parrot.h"
pmclass ParrotLibrary need_ext does library const_too {
/*
=item C<void init()>
Initializes the library with a C<NULL> oplib init function.
=cut
*/
void init() {
PMC_struct_val(SELF) = NULL;
}
/*
=item C<void morph(INTVAL type)>
Morphs to C<type>.
=cut
*/
void morph(INTVAL type) {
SUPER(type);
}
/*
=item C<PMC *clone()>
Creates and returns a clone of the library.
=cut
*/
PMC* clone() {
PMC* dest = pmc_new_noinit(INTERP, SELF->vtable->base_type);
PMC_struct_val(dest) = PMC_struct_val(SELF);
PMC_data(dest) = PMC_data(SELF);
if (PMC_metadata(SELF)) {
PMC_metadata(dest) = VTABLE_clone(INTERP, PMC_metadata(SELF));
}
return dest;
}
/*
=item C<INTVAL get_bool()>
Returns whether a library has been successfully loaded.
=cut
*/
INTVAL get_bool() {
return ( PMC_data(SELF) != NULL );
}
/*
=item C<STRING* get_string()>
Returns the name of the loaded library.
=cut
*/
STRING* get_string() {
PMC *prop;
STRING *key;
key = const_string(INTERP, "_filename");
prop = VTABLE_getprop(INTERP, SELF, key);
return VTABLE_get_string(INTERP, prop);
}
}
/*
=back
=head1 SEE ALSO
Date: Mon, 29 Sep 2003 14:37:11 -0400 (EDT)
Subject: Library loading and initialization sequence
From: Dan Sugalski
=head1 HISTORY
Initial version by leo 2003.10.12.
=cut
*/
/*
* Local variables:
* c-indentation-style: bsd
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*
* vim: expandtab shiftwidth=4:
*/
Jump to Line
Something went wrong with that request. Please try again.