[svn:parrot] r48486 - trunk/src

chromatic at svn.parrot.org chromatic at svn.parrot.org
Sat Aug 14 00:49:03 UTC 2010


Author: chromatic
Date: Sat Aug 14 00:49:03 2010
New Revision: 48486
URL: https://trac.parrot.org/parrot/changeset/48486

Log:
[HLL] Optimized HLL typemap fetches.

Modified:
   trunk/src/hll.c

Modified: trunk/src/hll.c
==============================================================================
--- trunk/src/hll.c	Sat Aug 14 00:49:00 2010	(r48485)
+++ trunk/src/hll.c	Sat Aug 14 00:49:03 2010	(r48486)
@@ -364,8 +364,6 @@
 Parrot_get_HLL_type(PARROT_INTERP, INTVAL hll_id, INTVAL core_type)
 {
     ASSERT_ARGS(Parrot_get_HLL_type)
-    PMC    *entry, *type_hash, *hll_info;
-    INTVAL  n, id;
 
     if (hll_id == PARROT_HLL_NONE || hll_id == 0)
         return core_type;
@@ -373,26 +371,28 @@
     if (hll_id < 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
             "no such HLL ID (%vd)", hll_id);
+    else {
+        PMC * const hll_info = interp->HLL_info;
+        INTVAL  id;
+        PMC    *entry, *type_hash;
 
-    hll_info = interp->HLL_info;
-    n        = VTABLE_elements(interp, hll_info);
+        START_READ_HLL_INFO(interp, hll_info);
+        entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
+        END_READ_HLL_INFO(interp, hll_info);
 
-    if (hll_id >= n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
-            "no such HLL ID (%vd)", hll_id);
-
-    START_READ_HLL_INFO(interp, hll_info);
-    entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
-    END_READ_HLL_INFO(interp, hll_info);
+        if (PMC_IS_NULL(entry))
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_GLOBAL_NOT_FOUND, "no such HLL ID (%vd)", hll_id);
 
-    type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
+        type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
 
-    if (PMC_IS_NULL(type_hash))
-        return core_type;
+        if (PMC_IS_NULL(type_hash))
+            return core_type;
 
-    id = VTABLE_get_integer_keyed_int(interp, type_hash, core_type);
+        id = VTABLE_get_integer_keyed_int(interp, type_hash, core_type);
 
-    return id ? id : core_type;
+        return id ? id : core_type;
+    }
 }
 
 /*
@@ -412,6 +412,8 @@
 {
     ASSERT_ARGS(Parrot_get_ctx_HLL_type)
     const INTVAL hll_id = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
+    if (!hll_id || hll_id == PARROT_HLL_NONE)
+        return core_type;
 
     return Parrot_get_HLL_type(interp, hll_id, core_type);
 }


More information about the parrot-commits mailing list