[svn:parrot] r39170 - trunk/src

NotFound at svn.parrot.org NotFound at svn.parrot.org
Mon May 25 17:31:16 UTC 2009


Author: NotFound
Date: Mon May 25 17:31:15 2009
New Revision: 39170
URL: https://trac.parrot.org/parrot/changeset/39170

Log:
[cage] some refactor and nano-optimization in src/global.c, no functional changes

Modified:
   trunk/src/global.c

Modified: trunk/src/global.c
==============================================================================
--- trunk/src/global.c	Mon May 25 07:47:21 2009	(r39169)
+++ trunk/src/global.c	Mon May 25 17:31:15 2009	(r39170)
@@ -110,63 +110,6 @@
 
 /*
 
-=item C<static PMC * internal_ns_keyed(PARROT_INTERP, PMC *base_ns, PMC
-*pmc_key, int flags)>
-
-internal_ns_keyed: Internal function to do keyed namespace lookup relative to a
-given namespace PMC.  Understands String, Key, and array PMCs containing
-strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-internal_ns_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN(PMC *pmc_key), int flags)
-{
-    ASSERT_ARGS(internal_ns_keyed)
-    PMC *ns = base_ns;
-    INTVAL i, n;
-
-    if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) {
-        STRING * const str_key = VTABLE_get_string(interp, pmc_key);
-        return internal_ns_keyed_str(interp, base_ns, str_key, flags);
-    }
-
-    else if (pmc_key->vtable->base_type == enum_class_Key)
-        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
-    else
-        n = VTABLE_elements(interp, pmc_key); /* array of strings */
-
-    for (i = 0; i < n; ++i) {
-        STRING *part;
-        PMC *sub_ns;
-
-        if (!pmc_key)
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                "Passed a NULL pmc_key into VTABLE_get_string_keyed_int");
-
-        part   = VTABLE_get_string_keyed_int(interp, pmc_key, i);
-        sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
-
-        if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, CONST_STRING(interp, "NameSpace"))) {
-            sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
-
-            if (PMC_IS_NULL(sub_ns))
-                return PMCNULL;
-        }
-
-        ns = sub_ns;
-    }
-
-    return ns;
-}
-
-
-/*
-
 =item C<static PMC * internal_ns_keyed_str(PARROT_INTERP, PMC *base_ns, STRING
 *key, int flags)>
 
@@ -228,6 +171,58 @@
     return ns;
 }
 
+/*
+
+=item C<static PMC * internal_ns_keyed(PARROT_INTERP, PMC *base_ns, PMC
+*pmc_key, int flags)>
+
+internal_ns_keyed: Internal function to do keyed namespace lookup relative to a
+given namespace PMC.  Understands String, Key, and array PMCs containing
+strings.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC *
+internal_ns_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN(PMC *pmc_key), int flags)
+{
+    ASSERT_ARGS(internal_ns_keyed)
+
+    if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) {
+        STRING * const str_key = VTABLE_get_string(interp, pmc_key);
+        return internal_ns_keyed_str(interp, base_ns, str_key, flags);
+    }
+    else if (pmc_key->vtable->base_type == enum_class_Key)
+        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
+    else {
+        /* array of strings */
+        STRING * const isans = CONST_STRING(interp, "NameSpace");
+        const INTVAL n = VTABLE_elements(interp, pmc_key);
+        INTVAL i;
+        PMC *ns = base_ns;
+
+        for (i = 0; i < n; ++i) {
+            if (!pmc_key)
+                Parrot_ex_throw_from_c_args(interp, NULL, 1,
+                    "Passed a NULL pmc_key into VTABLE_get_string_keyed_int");
+            else {
+                STRING * const part = VTABLE_get_string_keyed_int(interp, pmc_key, i);
+                PMC *sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
+
+                if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, isans)) {
+                    sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
+                    if (PMC_IS_NULL(sub_ns))
+                        return PMCNULL;
+                }
+                ns = sub_ns;
+            }
+        }
+        return ns;
+    }
+}
 
 /*
 


More information about the parrot-commits mailing list