diff -r fc91c4a3dfe2 -r a85a0303bcb8 src/BytecodeCompiler.cpp --- a/src/BytecodeCompiler.cpp Sat Aug 04 23:58:23 2012 -0700 +++ b/src/BytecodeCompiler.cpp Sun Aug 05 00:31:20 2012 -0700 @@ -539,11 +539,7 @@ node->right()->accept(this); __ note_position(node->pos()); __ bounds(); - - if (node->type()->isArray()) - __ getarray_o(); - else - __ getarray(node->type()); + __ getarray(node->type()); } void @@ -741,15 +737,15 @@ static inline ArrayMap * BuildArrayMap(Zone *zone, Handle type) { - Local contained(zone); - if (type->levels() > 1) { - Local containedType(zone, type->contained()); - contained = BuildArrayMap(zone, containedType); - if (!contained) - return NULL; - } + if (type->newMap()) + return ArrayMap::cast(type->newMap()); - return ArrayMap::New(zone, type, contained); + Local map(zone, ArrayMap::New(zone, type)); + if (!map) + return NULL; + + type->setNewMap(map); + return map; } void