[svn:parrot] r47874 - branches/hash_allocator/src/pmc
whiteknight at svn.parrot.org
whiteknight at svn.parrot.org
Sat Jun 26 18:40:53 UTC 2010
Author: whiteknight
Date: Sat Jun 26 18:40:53 2010
New Revision: 47874
URL: https://trac.parrot.org/parrot/changeset/47874
Log:
[hash] miniparrot builds, hangs
Modified:
branches/hash_allocator/src/pmc/unmanagedstruct.pmc
Modified: branches/hash_allocator/src/pmc/unmanagedstruct.pmc
==============================================================================
--- branches/hash_allocator/src/pmc/unmanagedstruct.pmc Sat Jun 26 17:12:09 2010 (r47873)
+++ branches/hash_allocator/src/pmc/unmanagedstruct.pmc Sat Jun 26 18:40:53 2010 (r47874)
@@ -23,6 +23,7 @@
*/
#include "parrot/compiler.h"
+#include "pmc/pmc_orderedhash.h"
/* HEADERIZER HFILE: none */
/* HEADERIZER BEGIN: static */
@@ -222,7 +223,6 @@
key_2_idx(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key))
{
ASSERT_ARGS(key_2_idx)
- int ix = 0;
if (!PARROT_UNMANAGEDSTRUCT(pmc)->init)
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
@@ -232,27 +232,18 @@
PMC * const types = PARROT_UNMANAGEDSTRUCT(pmc)->init;
if (types->vtable->base_type == enum_class_OrderedHash) {
- Hash * const hash = (Hash *)VTABLE_get_pointer(interp,
- VTABLE_get_pmc(interp, types));
- HashBucket * const b = parrot_hash_get_bucket(interp, hash,
- hash_key_from_string(interp, hash, VTABLE_get_string(interp, key)));
-
- if (!b)
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
- "key doesn't exist");
-
- ix = b - hash->buckets;
+ PMC * const hash = VTABLE_get_pmc(interp, types);
+ PMC * target = VTABLE_get_pmc_keyed(interp, hash, key);
+ INTVAL i = -1;
+ while (!PMC_IS_NULL(target)) {
+ target = VTABLE_get_pmc_keyed_int(interp, target, ORDERED_HASH_ITEM_PREV);
+ i++;
+ }
+ return i;
}
- else
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
- "unhandled type aggregate");
-
- ix /= 3;
}
else
- ix = VTABLE_get_integer(interp, key);
-
- return ix;
+ return VTABLE_get_integer(interp, key);
}
/*
More information about the parrot-commits
mailing list