[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