diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-08-18 16:59:21 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-08-18 16:59:30 -0700 |
commit | 05e6f318c6ecccea73698367010e51812c5b3862 (patch) | |
tree | 965d1c3bcdd518dd7411d8f39dd45189e1526d3d /deps/v8/src/x64/full-codegen-x64.cc | |
parent | 63607a0304e99259d3b7a24c44f7d29384b93cb4 (diff) | |
download | node-new-05e6f318c6ecccea73698367010e51812c5b3862.tar.gz |
Upgrade V8 to 3.5.6
Diffstat (limited to 'deps/v8/src/x64/full-codegen-x64.cc')
-rw-r--r-- | deps/v8/src/x64/full-codegen-x64.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/deps/v8/src/x64/full-codegen-x64.cc b/deps/v8/src/x64/full-codegen-x64.cc index 0f7e5b3d79..d0c71be12f 100644 --- a/deps/v8/src/x64/full-codegen-x64.cc +++ b/deps/v8/src/x64/full-codegen-x64.cc @@ -712,8 +712,10 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable, __ push(rsi); __ Push(variable->name()); // Declaration nodes are always introduced in one of two modes. - ASSERT(mode == Variable::VAR || mode == Variable::CONST); - PropertyAttributes attr = (mode == Variable::VAR) ? NONE : READ_ONLY; + ASSERT(mode == Variable::VAR || + mode == Variable::CONST || + mode == Variable::LET); + PropertyAttributes attr = (mode == Variable::CONST) ? READ_ONLY : NONE; __ Push(Smi::FromInt(attr)); // Push initial value, if any. // Note: For variables we must not push an initial value (such as @@ -3971,6 +3973,10 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, __ j(equal, if_true); __ CompareRoot(rax, Heap::kFalseValueRootIndex); Split(equal, if_true, if_false, fall_through); + } else if (FLAG_harmony_typeof && + check->Equals(isolate()->heap()->null_symbol())) { + __ CompareRoot(rax, Heap::kNullValueRootIndex); + Split(equal, if_true, if_false, fall_through); } else if (check->Equals(isolate()->heap()->undefined_symbol())) { __ CompareRoot(rax, Heap::kUndefinedValueRootIndex); __ j(equal, if_true); @@ -3987,8 +3993,10 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, Split(above_equal, if_true, if_false, fall_through); } else if (check->Equals(isolate()->heap()->object_symbol())) { __ JumpIfSmi(rax, if_false); - __ CompareRoot(rax, Heap::kNullValueRootIndex); - __ j(equal, if_true); + if (!FLAG_harmony_typeof) { + __ CompareRoot(rax, Heap::kNullValueRootIndex); + __ j(equal, if_true); + } __ CmpObjectType(rax, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, rdx); __ j(below, if_false); __ CmpInstanceType(rdx, LAST_NONCALLABLE_SPEC_OBJECT_TYPE); |