[svn:parrot] r45998 - in trunk: include/parrot src src/pmc
NotFound at svn.parrot.org
NotFound at svn.parrot.org
Sat Apr 24 22:57:43 UTC 2010
Author: NotFound
Date: Sat Apr 24 22:57:42 2010
New Revision: 45998
URL: https://trac.parrot.org/parrot/changeset/45998
Log:
allocate packfile fixups as array of structs instead of array of pointers to structs
Modified:
trunk/include/parrot/packfile.h
trunk/src/embed.c
trunk/src/packdump.c
trunk/src/packfile.c
trunk/src/pbc_merge.c
trunk/src/pmc/eval.pmc
trunk/src/pmc/packfilefixuptable.pmc
Modified: trunk/include/parrot/packfile.h
==============================================================================
--- trunk/include/parrot/packfile.h Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/include/parrot/packfile.h Sat Apr 24 22:57:42 2010 (r45998)
@@ -229,7 +229,7 @@
typedef struct PackFile_FixupTable {
PackFile_Segment base;
opcode_t fixup_count;
- PackFile_FixupEntry **fixups;
+ PackFile_FixupEntry *fixups;
PackFile_ByteCode *code; /* where this segment belongs to */
} PackFile_FixupTable;
Modified: trunk/src/embed.c
==============================================================================
--- trunk/src/embed.c Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/embed.c Sat Apr 24 22:57:42 2010 (r45998)
@@ -707,8 +707,8 @@
*/
for (i = 0; i < ft->fixup_count; i++) {
- if (ft->fixups[i]->type == enum_fixup_sub) {
- const opcode_t ci = ft->fixups[i]->offset;
+ if (ft->fixups[i].type == enum_fixup_sub) {
+ const opcode_t ci = ft->fixups[i].offset;
PMC * const sub_pmc = ct->constants[ci]->u.key;
Parrot_Sub_attributes *sub;
Modified: trunk/src/packdump.c
==============================================================================
--- trunk/src/packdump.c Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/packdump.c Sat Apr 24 22:57:42 2010 (r45998)
@@ -378,18 +378,18 @@
for (i = 0; i < ft->fixup_count; i++) {
Parrot_io_printf(interp, "\t#%d\n", (int) i);
- switch (ft->fixups[i]->type) {
+ switch (ft->fixups[i].type) {
case enum_fixup_label:
case enum_fixup_sub:
Parrot_io_printf(interp,
"\ttype => %d offs => %8d name => '%s',\n",
- (int)ft->fixups[i]->type,
- (int)ft->fixups[i]->offset,
- ft->fixups[i]->name);
+ (int)ft->fixups[i].type,
+ (int)ft->fixups[i].offset,
+ ft->fixups[i].name);
break;
default:
Parrot_io_printf(interp, "\ttype => %d ???,\n",
- (int) ft->fixups[i]->type);
+ (int) ft->fixups[i].type);
break;
}
}
Modified: trunk/src/packfile.c
==============================================================================
--- trunk/src/packfile.c Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/packfile.c Sat Apr 24 22:57:42 2010 (r45998)
@@ -919,13 +919,13 @@
TRACE_PRINTF(("PackFile: do_sub_pragmas (action=%d)\n", action));
for (i = 0; i < ft->fixup_count; i++) {
- switch (ft->fixups[i]->type) {
+ switch (ft->fixups[i].type) {
case enum_fixup_sub:
{
/* offset is an index into const_table holding the Sub PMC */
PMC *sub_pmc;
Parrot_Sub_attributes *sub;
- const opcode_t ci = ft->fixups[i]->offset;
+ const opcode_t ci = ft->fixups[i].offset;
if (ci < 0 || ci >= ct->const_count)
Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -943,7 +943,7 @@
/* replace Sub PMC with computation results */
if (action == PBC_IMMEDIATE && !PMC_IS_NULL(result)) {
- ft->fixups[i]->type = enum_fixup_none;
+ ft->fixups[i].type = enum_fixup_none;
ct->constants[ci]->u.key = result;
}
}
@@ -3258,26 +3258,20 @@
PackFile_FixupTable_clear(PARROT_INTERP, ARGMOD(PackFile_FixupTable *self))
{
ASSERT_ARGS(PackFile_FixupTable_clear)
- opcode_t i;
if (!self) {
Parrot_io_eprintf(interp, "PackFile_FixupTable_clear: self == NULL!\n");
return;
}
- for (i = 0; i < self->fixup_count; i++) {
- mem_gc_free(interp, self->fixups[i]->name);
- self->fixups[i]->name = NULL;
-
- mem_gc_free(interp, self->fixups[i]);
- self->fixups[i] = NULL;
- }
-
if (self->fixup_count) {
+ opcode_t i;
+ for (i = 0; i < self->fixup_count; i++) {
+ mem_gc_free(interp, self->fixups[i].name);
+ self->fixups[i].name = NULL;
+ }
mem_gc_free(interp, self->fixups);
- self->fixups = NULL;
}
-
self->fixups = NULL;
self->fixup_count = 0;
@@ -3325,10 +3319,10 @@
for (i = 0; i < ft->fixup_count; i++) {
/* fixup_entry type */
size++;
- switch (ft->fixups[i]->type) {
+ switch (ft->fixups[i].type) {
case enum_fixup_label:
case enum_fixup_sub:
- size += PF_size_cstring(ft->fixups[i]->name);
+ size += PF_size_cstring(ft->fixups[i].name);
size ++; /* offset */
break;
case enum_fixup_none:
@@ -3366,12 +3360,12 @@
*cursor++ = ft->fixup_count;
for (i = 0; i < ft->fixup_count; i++) {
- *cursor++ = (opcode_t) ft->fixups[i]->type;
- switch (ft->fixups[i]->type) {
+ *cursor++ = (opcode_t) ft->fixups[i].type;
+ switch (ft->fixups[i].type) {
case enum_fixup_label:
case enum_fixup_sub:
- cursor = PF_store_cstring(cursor, ft->fixups[i]->name);
- *cursor++ = ft->fixups[i]->offset;
+ cursor = PF_store_cstring(cursor, ft->fixups[i].name);
+ *cursor++ = ft->fixups[i].offset;
break;
case enum_fixup_none:
break;
@@ -3448,7 +3442,7 @@
if (self->fixup_count) {
self->fixups = mem_gc_allocate_n_zeroed_typed(interp,
- self->fixup_count, PackFile_FixupEntry *);
+ self->fixup_count, PackFile_FixupEntry);
if (!self->fixups) {
Parrot_io_eprintf(interp,
@@ -3460,9 +3454,7 @@
}
for (i = 0; i < self->fixup_count; i++) {
- PackFile_FixupEntry * const entry =
- self->fixups[i] =
- mem_gc_allocate_zeroed_typed(interp, PackFile_FixupEntry);
+ PackFile_FixupEntry * const entry = self->fixups + i;
entry->type = PF_fetch_opcode(pf, &cursor);
@@ -3521,12 +3513,11 @@
i = self->fixup_count++;
self->fixups = mem_gc_realloc_n_typed_zeroed(interp,
- self->fixups, self->fixup_count, i, PackFile_FixupEntry *);
+ self->fixups, self->fixup_count, i, PackFile_FixupEntry);
- self->fixups[i] = mem_gc_allocate_zeroed_typed(interp, PackFile_FixupEntry);
- self->fixups[i]->type = type;
- self->fixups[i]->name = mem_sys_strdup(label);
- self->fixups[i]->offset = offs;
+ self->fixups[i].type = type;
+ self->fixups[i].name = mem_sys_strdup(label);
+ self->fixups[i].offset = offs;
}
@@ -3553,9 +3544,9 @@
ASSERT_ARGS(find_fixup)
opcode_t i;
for (i = 0; i < ft->fixup_count; i++) {
- if ((INTVAL)((enum_fixup_t)ft->fixups[i]->type) == type
- && STREQ(ft->fixups[i]->name, name)) {
- return ft->fixups[i];
+ if ((INTVAL)((enum_fixup_t)ft->fixups[i].type) == type
+ && STREQ(ft->fixups[i].name, name)) {
+ return ft->fixups + i;
}
}
Modified: trunk/src/pbc_merge.c
==============================================================================
--- trunk/src/pbc_merge.c Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/pbc_merge.c Sat Apr 24 22:57:42 2010 (r45998)
@@ -474,8 +474,7 @@
{
ASSERT_ARGS(pbc_merge_fixups)
PackFile_FixupTable *fixup_seg;
- PackFile_FixupEntry **fixups = mem_gc_allocate_typed(interp,
- PackFile_FixupEntry *);
+ PackFile_FixupEntry *fixups = NULL;
opcode_t cursor = 0;
int i;
@@ -504,14 +503,14 @@
/* Allocate space for these fixups, provided we have some. */
if (in_seg->fixup_count > 0) {
fixups = mem_gc_realloc_n_typed(interp, fixups,
- cursor + in_seg->fixup_count, PackFile_FixupEntry*);
+ cursor + in_seg->fixup_count, PackFile_FixupEntry);
}
/* Loop over the fixups and copy them to the output PBC, correcting
the offsets into the bytecode. */
for (j = 0; j < in_seg->fixup_count; j++) {
/* Get the entry and allocate space for copies. */
- const PackFile_FixupEntry * const cur_entry = in_seg->fixups[j];
+ const PackFile_FixupEntry * const cur_entry = in_seg->fixups + j;
PackFile_FixupEntry * const copy =
mem_gc_allocate_typed(interp, PackFile_FixupEntry);
char * const name_copy = mem_gc_allocate_n_typed(interp,
@@ -536,7 +535,7 @@
}
/* Slot it into the list. */
- fixups[cursor] = copy;
+ fixups[cursor] = *copy;
cursor++;
}
}
Modified: trunk/src/pmc/eval.pmc
==============================================================================
--- trunk/src/pmc/eval.pmc Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/pmc/eval.pmc Sat Apr 24 22:57:42 2010 (r45998)
@@ -74,13 +74,13 @@
return;
for (i = 0; i < ft->fixup_count; i++) {
- const PackFile_FixupEntry * const e = ft->fixups[i];
+ PackFile_FixupEntry * const e = ft->fixups + i;
if (e->type == enum_fixup_sub) {
opcode_t ci = e->offset;
ct->constants[ci]->u.key = NULL;
- ft->fixups[i]->type = 0;
+ e->type = 0;
}
}
}
@@ -113,7 +113,7 @@
return PMCNULL;
for (i = n = 0; i < ft->fixup_count; i++) {
- PackFile_FixupEntry *e = ft->fixups[i];
+ const PackFile_FixupEntry * const e = ft->fixups + i;
if (e->type == enum_fixup_sub) {
opcode_t ci = e->offset;
@@ -152,7 +152,7 @@
return;
for (i = 0; i < ft->fixup_count; i++) {
- PackFile_FixupEntry *e = ft->fixups[i];
+ const PackFile_FixupEntry * const e = ft->fixups + i;
if (e->type == enum_fixup_sub) {
opcode_t ci = e->offset;
@@ -427,7 +427,7 @@
return 0;
for (i = n = 0; i < ft->fixup_count; i++) {
- PackFile_FixupEntry *e = ft->fixups[i];
+ const PackFile_FixupEntry * const e = ft->fixups + i;
if (e->type == enum_fixup_sub)
n++;
Modified: trunk/src/pmc/packfilefixuptable.pmc
==============================================================================
--- trunk/src/pmc/packfilefixuptable.pmc Sat Apr 24 20:54:09 2010 (r45997)
+++ trunk/src/pmc/packfilefixuptable.pmc Sat Apr 24 22:57:42 2010 (r45998)
@@ -92,7 +92,7 @@
VTABLE_set_integer_native(interp, attrs->entries, table->fixup_count);
for (i = 0; i < table->fixup_count; ++i) {
- val = table->fixups[i];
+ val = table->fixups + i;
entry = Parrot_pmc_new(interp, enum_class_PackfileFixupEntry);
VTABLE_set_pointer(interp, entry, (void*)val);
VTABLE_set_pmc_keyed_int(interp, attrs->entries, i, entry);
@@ -120,13 +120,14 @@
pftable->base.type = PF_FIXUP_SEG;
pftable->fixup_count = VTABLE_elements(interp, attrs->entries);
pftable->fixups = mem_gc_allocate_n_typed(INTERP,
- pftable->fixup_count, PackFile_FixupEntry*);
+ pftable->fixup_count, PackFile_FixupEntry);
/* Copy all entries */
for (i = 0; i < pftable->fixup_count; ++i) {
entry = VTABLE_get_pmc_keyed_int(interp, attrs->entries, i);
val = (PackFile_FixupEntry*)VTABLE_get_pointer(interp, entry);
- pftable->fixups[i] = val;
+ pftable->fixups[i] = *val;
+ mem_gc_free(INTERP, val);
}
return pftable;
More information about the parrot-commits
mailing list