[svn:parrot] r44836 - in branches/fix_hll_mmd: lib/Parrot/Pmc2c/PMC src src/call

chromatic at svn.parrot.org chromatic at svn.parrot.org
Wed Mar 10 00:19:26 UTC 2010


Author: chromatic
Date: Wed Mar 10 00:19:26 2010
New Revision: 44836
URL: https://trac.parrot.org/parrot/changeset/44836

Log:
Checkpoint.

Modified:
   branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm
   branches/fix_hll_mmd/src/call/args.c
   branches/fix_hll_mmd/src/multidispatch.c

Modified: branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm
==============================================================================
--- branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm	Wed Mar 10 00:19:21 2010	(r44835)
+++ branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm	Wed Mar 10 00:19:26 2010	(r44836)
@@ -71,6 +71,16 @@
         }
 
         /* method name is $vt_method_name */
+EOC
+
+        if ($self->vtable_method_does_multi($vt_method_name)) {
+            $method_body_text .= <<"EOC";
+        if (cur_class->vtable->base_type == enum_class_PMCProxy)
+            break;
+EOC
+        }
+        else {
+            $method_body_text .= <<"EOC";
         if (cur_class->vtable->base_type == enum_class_PMCProxy) {
             /* Get the PMC instance and call the vtable method on that. */
             STRING * const proxy      = CONST_STRING_GEN(interp, "proxy");
@@ -81,6 +91,10 @@
                 $void_return
             }
         }
+EOC
+        }
+
+        $method_body_text .= <<"EOC";
     }
 
     ${return}SUPER($superargs);

Modified: branches/fix_hll_mmd/src/call/args.c
==============================================================================
--- branches/fix_hll_mmd/src/call/args.c	Wed Mar 10 00:19:21 2010	(r44835)
+++ branches/fix_hll_mmd/src/call/args.c	Wed Mar 10 00:19:26 2010	(r44836)
@@ -882,13 +882,13 @@
 {
     ASSERT_ARGS(Parrot_pcc_build_sig_object_from_varargs)
     PMC         *type_tuple         = PMCNULL;
-    PMC         *arg_flags     = PMCNULL;
-    PMC         *return_flags  = PMCNULL;
+    PMC         *arg_flags          = PMCNULL;
+    PMC         *return_flags       = PMCNULL;
     PMC         * const call_object = pmc_new(interp, enum_class_CallContext);
     const INTVAL sig_len            = strlen(sig);
     INTVAL       in_return_sig      = 0;
-    INTVAL       i;
     int          append_pi          = 1;
+    INTVAL       i;
 
     if (!sig_len)
         return call_object;

Modified: branches/fix_hll_mmd/src/multidispatch.c
==============================================================================
--- branches/fix_hll_mmd/src/multidispatch.c	Wed Mar 10 00:19:21 2010	(r44835)
+++ branches/fix_hll_mmd/src/multidispatch.c	Wed Mar 10 00:19:26 2010	(r44836)
@@ -308,8 +308,8 @@
 
     if (PMC_IS_NULL(sub))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND,
-                "Multiple Dispatch: No suitable candidate found for '%s',"
-                " with signature '%s'", name, sig);
+        "Multiple Dispatch: No suitable candidate found for '%s',"
+            " with signature '%s'", name, sig);
 
 #if MMD_DEBUG
     Parrot_io_eprintf(interp, "candidate found for '%s', with signature '%s'\n",
@@ -513,17 +513,17 @@
 Parrot_mmd_build_type_tuple_from_sig_obj(PARROT_INTERP, ARGIN(PMC *sig_obj))
 {
     ASSERT_ARGS(Parrot_mmd_build_type_tuple_from_sig_obj)
-    PMC * const  type_tuple = pmc_new(interp, enum_class_ResizableIntegerArray);
-    STRING      *string_sig = VTABLE_get_string(interp, sig_obj);
-    INTVAL       tuple_size = 0;
-    INTVAL       args_ended = 0;
-    INTVAL       i, seen_invocant = 0;
+    PMC * const  type_tuple    = pmc_new(interp, enum_class_ResizableIntegerArray);
+    STRING      *string_sig    = VTABLE_get_string(interp, sig_obj);
+    INTVAL       tuple_size    = 0;
+    INTVAL       args_ended    = 0;
+    INTVAL       seen_invocant = 0;
     INTVAL       sig_len;
+    INTVAL       i;
 
-    if (STRING_IS_NULL(string_sig)) {
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "Call has no signature, unable to dispatch.\n");
-    }
+    if (STRING_IS_NULL(string_sig))
+        Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            "Call has no signature, unable to dispatch.\n");
 
     sig_len = Parrot_str_byte_length(interp, string_sig);
 
@@ -638,9 +638,8 @@
             if (type == enum_type_undef)
                 return PMCNULL;
         }
-        else if (sig_elem->vtable->base_type == enum_class_Integer) {
+        else if (sig_elem->vtable->base_type == enum_class_Integer)
             type = VTABLE_get_integer(interp, sig_elem);
-        }
         else
             type = pmc_type_p(interp, sig_elem);
 


More information about the parrot-commits mailing list