Index: test/cctest/test-usecounters.cc |
diff --git a/test/cctest/test-usecounters.cc b/test/cctest/test-usecounters.cc |
index 8d4628c9f70f3e912acd02a3ca495898ffeff404..32a84513a4b07fdc8bac96305a437df23b1fea60 100644 |
--- a/test/cctest/test-usecounters.cc |
+++ b/test/cctest/test-usecounters.cc |
@@ -71,3 +71,50 @@ TEST(DefineGetterSetterThrowUseCount) { |
"a.__defineSetter__('b', ()=>{});"); |
CHECK_EQ(2, use_counts[v8::Isolate::kDefineGetterOrSetterWouldThrow]); |
} |
+ |
+TEST(AssigmentExpressionLHSIsCall) { |
+ v8::Isolate* isolate = CcTest::isolate(); |
+ v8::HandleScope scope(isolate); |
+ LocalContext env; |
+ int use_counts[v8::Isolate::kUseCounterFeatureCount] = {}; |
+ global_use_counts = use_counts; |
+ CcTest::isolate()->SetUseCounterCallback(MockUseCounterCallback); |
+ |
+ // AssignmentExpressions whose LHS is not a call do not increment counters |
+ CompileRun("function f(){ a = 0; a()[b] = 0; }"); |
+ CHECK_EQ(0, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ CompileRun("function f(){ ++a; ++a()[b]; }"); |
+ CHECK_EQ(0, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ CompileRun("function f(){ 'use strict'; a = 0; a()[b] = 0; }"); |
+ CHECK_EQ(0, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ CompileRun("function f(){ 'use strict'; ++a; ++a()[b]; }"); |
+ CHECK_EQ(0, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ |
+ // AssignmentExpressions whose LHS is a call increment appropriate counters |
+ CompileRun("function f(){ a() = 0; }"); |
+ CHECK_EQ(1, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ CompileRun("function f(){ 'use strict'; a() = 0; }"); |
+ CHECK_EQ(1, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(1, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ |
+ // UpdateExpressions whose LHS is a call increment appropriate counters |
+ CompileRun("function f(){ ++a(); }"); |
+ CHECK_EQ(2, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(1, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+ CompileRun("function f(){ 'use strict'; ++a(); }"); |
+ CHECK_EQ(2, |
+ use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInNonstrict]); |
+ CHECK_EQ(2, use_counts[v8::Isolate::kAssigmentExpressionLHSIsCallInStrict]); |
+} |