diff -r bbb498ccb4ac -r 26e3035cdffc src/compiler/HIR.cpp --- a/src/compiler/HIR.cpp Sat Dec 22 23:18:57 2012 -0800 +++ b/src/compiler/HIR.cpp Mon Dec 24 02:49:20 2012 -0800 @@ -19,6 +19,7 @@ #include "AST.h" #include "HIR.h" #include "BytecodeEmitter.h" +#include "../Strings.h" #include "../Heap-inl.h" #include "../Handles-inl.h" @@ -39,6 +40,7 @@ void visitFloat(HFloat *hir); void visitInteger(HInteger *hir); + void visitArray(HArray *hir); void visitCall(HCall *call); void visitStore(HStore *store); void visitBinary(HBinary *binary); @@ -69,6 +71,18 @@ } void +HIRTranslator::visitArray(HArray *hir) +{ + __ object(hir->array()); + + if (!hir->type()->isConst()) { + // If the type isn't const, we have to assume a consumer may modify + // the array, and therefore we have to duplicate it here. + __ duparray(); + } +} + +void HIRTranslator::visitCall(HCall *call) { Local fun(zone_, FunctionType::cast(call->callee()->type()));