[svn:parrot] r38047 - branches/packfile_revamp/src/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat Apr 11 02:23:38 UTC 2009
Author: bacek
Date: Sat Apr 11 02:23:37 2009
New Revision: 38047
URL: https://trac.parrot.org/parrot/changeset/38047
Log:
Fully implement PackfileFixupEntry.
* Use attributes for storing data.
* Use set_pointer to initialize from PackFile_FixupEntry
* Use get_pointer to create PackFile_FixupEntry
Modified:
branches/packfile_revamp/src/pmc/packfilefixupentry.pmc
Modified: branches/packfile_revamp/src/pmc/packfilefixupentry.pmc
==============================================================================
--- branches/packfile_revamp/src/pmc/packfilefixupentry.pmc Sat Apr 11 02:23:21 2009 (r38046)
+++ branches/packfile_revamp/src/pmc/packfilefixupentry.pmc Sat Apr 11 02:23:37 2009 (r38047)
@@ -22,6 +22,107 @@
#include "parrot/parrot.h"
pmclass PackfileFixupEntry {
+ ATTR INTVAL type;
+ ATTR STRING *name;
+ ATTR INTVAL offset;
+
+
+/*
+
+=item C<void init()>
+
+Initialize PackfileFixupEntry.
+
+=cut
+
+*/
+ VTABLE void init() {
+ Parrot_PackfileFixupEntry_attributes * attrs =
+ mem_allocate_zeroed_typed(Parrot_PackfileFixupEntry_attributes);
+
+ attrs->name = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+
+ PObj_custom_mark_destroy_SETALL(SELF);
+ PMC_data(SELF) = attrs;
+ }
+
+/*
+
+=item C<void mark()>
+
+Marks the object as live.
+
+=cut
+
+*/
+
+ VTABLE void mark() {
+ Parrot_PackfileFixupEntry_attributes * attrs =
+ PARROT_PACKFILEFIXUPENTRY(SELF);
+
+ if (attrs->name)
+ pobject_lives(interp, (PObj *)attrs->name);
+ }
+
+/*
+
+=item C<void destroy()>
+
+Destroys the PMC and frees all allocated memory.
+
+=cut
+
+*/
+
+ VTABLE void destroy() {
+ Parrot_PackfileFixupEntry_attributes * attrs =
+ PARROT_PACKFILEFIXUPENTRY(SELF);
+
+ if (attrs) {
+ mem_sys_free(attrs);
+ PMC_data(SELF) = NULL;
+ }
+ }
+
+
+/*
+
+=item C<set_pointer>
+
+=cut
+
+*/
+
+ VTABLE void set_pointer(void * pointer) {
+ Parrot_PackfileFixupEntry_attributes * attrs =
+ PARROT_PACKFILEFIXUPENTRY(SELF);
+ PackFile_FixupEntry *entry = (PackFile_FixupEntry*)pointer;
+
+ attrs->type = entry->type;
+ attrs->name = Parrot_str_new_init(interp, entry->name,
+ strlen(entry->name), PARROT_FIXED_8_ENCODING,
+ PARROT_BINARY_CHARSET, 0);
+ attrs->offset = entry->offset;
+ }
+
+/*
+
+=item C<void *get_pointer()>
+=cut
+
+*/
+ VTABLE void *get_pointer() {
+ Parrot_PackfileFixupEntry_attributes * attrs =
+ PARROT_PACKFILEFIXUPENTRY(SELF);
+ PackFile_FixupEntry * entry =
+ mem_allocate_zeroed_typed(PackFile_FixupEntry);
+
+ entry->type = attrs->type;
+ entry->name = strdup(Parrot_string_cstring(interp, attrs->name));
+ entry->offset = attrs->offset;
+ return entry;
+ }
+
/*
@@ -33,8 +134,7 @@
*/
VTABLE STRING *get_string() {
- PackFile_FixupEntry *pfentry = PMC_data_typed(SELF, PackFile_FixupEntry *);
- return Parrot_str_new(interp, pfentry->name, strlen(pfentry->name));
+ return PARROT_PACKFILEFIXUPENTRY(SELF)->name;
}
/*
@@ -47,7 +147,7 @@
*/
VTABLE void set_string_native(STRING *value) {
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, "Not implemented yet.");
+ SETATTR_PackfileFixupEntry_name(INTERP, SELF, value);
}
@@ -61,8 +161,7 @@
*/
VTABLE INTVAL get_integer() {
- PackFile_FixupEntry *pfentry = PMC_data_typed(SELF, PackFile_FixupEntry *);
- return pfentry->offset;
+ return PARROT_PACKFILEFIXUPENTRY(SELF)->offset;
}
@@ -76,7 +175,7 @@
*/
VTABLE void set_integer_native(INTVAL offset) {
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, "Not implemented yet.");
+ SETATTR_PackfileFixupEntry_offset(INTERP, SELF, offset);
}
@@ -90,8 +189,7 @@
*/
METHOD get_type() {
- PackFile_FixupEntry *pfentry = PMC_data_typed(SELF, PackFile_FixupEntry *);
- int rv = pfentry->type;
+ INTVAL rv = PARROT_PACKFILEFIXUPENTRY(SELF)->type;
RETURN(INTVAL rv);
}
@@ -105,8 +203,8 @@
=cut
*/
- void set_type(INTVAL offset) {
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, "Not implemented yet.");
+ METHOD set_type(INTVAL type) {
+ SETATTR_PackfileFixupEntry_type(INTERP, SELF, type);
}
}
More information about the parrot-commits
mailing list