[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