src/BytecodeCompiler.cpp
changeset 185 10936f3a2ba3
parent 184 387d76b1e981
child 187 9308d52205a0
     1.1 --- a/src/BytecodeCompiler.cpp	Sat Sep 15 17:39:45 2012 -0700
     1.2 +++ b/src/BytecodeCompiler.cpp	Sat Sep 15 18:25:54 2012 -0700
     1.3 @@ -783,10 +783,17 @@
     1.4      if (type->isArray()) {
     1.5          Local<ArrayMap> map(zone_, ArrayMap::Attach(zone_, type));
     1.6          __ note_position(node->pos());
     1.7 +
     1.8 +        Opcode op;
     1.9 +        if (type->isFixedLength())
    1.10 +            op = OP_NEWFIXED;
    1.11 +        else
    1.12 +            op = OP_NEWEMPTY;
    1.13 +
    1.14          if (var->scope()->kind() == Scope::GLOBAL)
    1.15 -            __ newarray(map, Heap::Tenure_Old);
    1.16 +            __ newarray(op, map, Heap::Tenure_Old);
    1.17          else
    1.18 -            __ newarray(map, Heap::Tenure_Default);
    1.19 +            __ newarray(op, map, Heap::Tenure_Default);
    1.20  
    1.21          if (node->initialization()) {
    1.22              node->initialization()->accept(this);
    1.23 @@ -929,9 +936,9 @@
    1.24                  // Natives cannot escape array references, so we can allocate
    1.25                  // them on the LIFO stack.
    1.26                  if (funType->isNative())
    1.27 -                    __ newarray(map, Heap::Tenure_Stack);
    1.28 +                    __ newarray(OP_NEWFIXED, map, Heap::Tenure_Stack);
    1.29                  else
    1.30 -                    __ newarray(map, Heap::Tenure_Default);
    1.31 +                    __ newarray(OP_NEWFIXED, map, Heap::Tenure_Default);
    1.32                  __ dup();
    1.33                  __ object(array);
    1.34                  __ copyarray();