[svn:parrot] r45019 - branches/pcc_megrecells/src/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Thu Mar 18 19:45:45 UTC 2010
Author: bacek
Date: Thu Mar 18 19:45:36 2010
New Revision: 45019
URL: https://trac.parrot.org/parrot/changeset/45019
Log:
Speed-up CallContext.get_foo_keyed_int
Modified:
branches/pcc_megrecells/src/pmc/callcontext.pmc
Modified: branches/pcc_megrecells/src/pmc/callcontext.pmc
==============================================================================
--- branches/pcc_megrecells/src/pmc/callcontext.pmc Thu Mar 18 18:06:44 2010 (r45018)
+++ branches/pcc_megrecells/src/pmc/callcontext.pmc Thu Mar 18 19:45:36 2010 (r45019)
@@ -862,40 +862,47 @@
VTABLE INTVAL get_integer_keyed_int(INTVAL key) {
- Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+ INTVAL num_pos = STATICSELF.elements();
+ Pcc_cell *cells;
- if (cell->type == NOCELL)
+ if (key>=num_pos || key < 0)
return 0;
- return autobox_intval(INTERP, cell);
+ GET_ATTR_positionals(INTERP, SELF, cells);
+ return autobox_intval(INTERP, &cells[key]);
}
VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
- Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+ INTVAL num_pos = STATICSELF.elements();
+ Pcc_cell *cells;
- if (cell->type == NOCELL)
+ if (key>=num_pos || key < 0)
return 0.0;
- return autobox_floatval(INTERP, cell);
+ GET_ATTR_positionals(INTERP, SELF, cells);
+ return autobox_floatval(INTERP, &cells[key]);
}
VTABLE STRING * get_string_keyed_int(INTVAL key) {
- Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+ INTVAL num_pos = STATICSELF.elements();
+ Pcc_cell *cells;
- if (cell->type == NOCELL)
+ if (key>=num_pos || key < 0)
return NULL;
- return autobox_string(INTERP, cell);
+ GET_ATTR_positionals(INTERP, SELF, cells);
+ return autobox_string(INTERP, &cells[key]);
}
VTABLE PMC * get_pmc_keyed_int(INTVAL key) {
- INTVAL pos;
- Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+ INTVAL num_pos = STATICSELF.elements();
+ Pcc_cell *cells;
- if (cell->type == NOCELL)
+ if (key>=num_pos || key < 0)
return PMCNULL;
- return autobox_pmc(INTERP, cell);
+ GET_ATTR_positionals(INTERP, SELF, cells);
+ return autobox_pmc(INTERP, &cells[key]);
}
VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
More information about the parrot-commits
mailing list