diff -r 387d76b1e981 -r 10936f3a2ba3 src/BytecodeCompiler.cpp --- a/src/BytecodeCompiler.cpp Sat Sep 15 17:39:45 2012 -0700 +++ b/src/BytecodeCompiler.cpp Sat Sep 15 18:25:54 2012 -0700 @@ -783,10 +783,17 @@ if (type->isArray()) { Local map(zone_, ArrayMap::Attach(zone_, type)); __ note_position(node->pos()); + + Opcode op; + if (type->isFixedLength()) + op = OP_NEWFIXED; + else + op = OP_NEWEMPTY; + if (var->scope()->kind() == Scope::GLOBAL) - __ newarray(map, Heap::Tenure_Old); + __ newarray(op, map, Heap::Tenure_Old); else - __ newarray(map, Heap::Tenure_Default); + __ newarray(op, map, Heap::Tenure_Default); if (node->initialization()) { node->initialization()->accept(this); @@ -929,9 +936,9 @@ // Natives cannot escape array references, so we can allocate // them on the LIFO stack. if (funType->isNative()) - __ newarray(map, Heap::Tenure_Stack); + __ newarray(OP_NEWFIXED, map, Heap::Tenure_Stack); else - __ newarray(map, Heap::Tenure_Default); + __ newarray(OP_NEWFIXED, map, Heap::Tenure_Default); __ dup(); __ object(array); __ copyarray();