[svn:parrot] r44894 - trunk/src/pmc

chromatic at svn.parrot.org chromatic at svn.parrot.org
Fri Mar 12 03:53:09 UTC 2010


Author: chromatic
Date: Fri Mar 12 03:53:04 2010
New Revision: 44894
URL: https://trac.parrot.org/parrot/changeset/44894

Log:
[PMC] Tightened the code in CallContext's get_pmc VTABLE; no functional changes.

Modified:
   trunk/src/pmc/callcontext.pmc

Modified: trunk/src/pmc/callcontext.pmc
==============================================================================
--- trunk/src/pmc/callcontext.pmc	Fri Mar 12 03:38:36 2010	(r44893)
+++ trunk/src/pmc/callcontext.pmc	Fri Mar 12 03:53:04 2010	(r44894)
@@ -695,39 +695,27 @@
             GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
 
             type_tuple = Parrot_pmc_new_init_int(interp,
-                enum_class_ResizableIntegerArray, num_positionals);
+                enum_class_FixedIntegerArray, num_positionals);
 
             while (c) {
+                INTVAL type;
+
                 switch (CELL_TYPE_MASK(c)) {
-                    case INTCELL:
-                        VTABLE_set_integer_keyed_int(interp, type_tuple,
-                            i, enum_type_INTVAL);
-                        break;
-                    case FLOATCELL:
-                        VTABLE_set_integer_keyed_int(interp, type_tuple,
-                            i, enum_type_FLOATVAL);
-                        break;
-                    case STRINGCELL:
-                        VTABLE_set_integer_keyed_int(interp, type_tuple,
-                            i, enum_type_STRING);
-                        break;
+                    case INTCELL:    type = enum_type_INTVAL;   break;
+                    case FLOATCELL:  type = enum_type_FLOATVAL; break;
+                    case STRINGCELL: type = enum_type_STRING;   break;
                     case PMCCELL:
-                    {
-                        PMC *pmc_arg = CELL_PMC(c);
-                        if (PMC_IS_NULL(pmc_arg))
-                            VTABLE_set_integer_keyed_int(interp, type_tuple,
-                                    i, enum_type_PMC);
-                        else
-                            VTABLE_set_integer_keyed_int(interp, type_tuple, i,
-                                    VTABLE_type(interp, pmc_arg));
+                        type = PMC_IS_NULL(CELL_PMC(c))
+                             ? enum_type_PMC
+                             : VTABLE_type(interp, CELL_PMC(c));
                         break;
-                    }
                     default:
                         Parrot_ex_throw_from_c_args(interp, NULL,
                             EXCEPTION_INVALID_OPERATION,
                             "Multiple Dispatch: invalid argument type!");
                 }
 
+                VTABLE_set_integer_keyed_int(interp, type_tuple, i, type);
                 i++;
                 c = NEXT_CELL(c);
             }
@@ -738,6 +726,7 @@
         return type_tuple;
     }
 
+
 /*
 
 =item C<void set_attr_str(STRING *key, PMC *value)>


More information about the parrot-commits mailing list