Index: test/cctest/interpreter/test-bytecode-generator.cc |
diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc |
index 3c50bea829c429e9b83d0d5e2824542f47027040..e13c4a08817ffa1135c61a580a2b3fecf8e50799 100644 |
--- a/test/cctest/interpreter/test-bytecode-generator.cc |
+++ b/test/cctest/interpreter/test-bytecode-generator.cc |
@@ -485,7 +485,40 @@ TEST(PropertyLoads) { |
B(Return) // |
}, |
1, |
- {"name"}}}; |
+ {"name"}}, |
+ {"function f(a) { \"use strict\"; return a.name; }\nf({name : \"test\"})", |
+ 1 * kPointerSize, |
+ 2, |
+ 12, |
+ { |
+ // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
+ // expression, or any other unused literal expression. |
+ B(LdaConstant), U8(0), // |
+ B(Ldar), R(helper.kLastParamIndex), // |
+ B(Star), R(0), // |
+ B(LdaConstant), U8(1), // |
+ B(LoadICStrict), R(0), U8(vector->GetIndex(slot1)), // |
+ B(Return) // |
+ }, |
+ 2, |
+ {"use strict", "name"}}, |
+ {"function f(a, b) { \"use strict\"; return a[b]; }\n" |
+ "f({arg : \"test\"}, \"arg\")", |
+ 1 * kPointerSize, |
+ 3, |
+ 12, |
+ { |
+ // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
+ // expression, or any other unused literal expression. |
+ B(LdaConstant), U8(0), // |
+ B(Ldar), R(helper.kLastParamIndex - 1), // |
+ B(Star), R(0), // |
+ B(Ldar), R(helper.kLastParamIndex), // |
+ B(KeyedLoadICStrict), R(0), U8(vector->GetIndex(slot1)), // |
+ B(Return) // |
+ }, |
+ 1, |
+ {"use strict"}}}; |
for (size_t i = 0; i < arraysize(snippets); i++) { |
Handle<BytecodeArray> bytecode_array = |
helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); |
@@ -590,7 +623,47 @@ TEST(PropertyStores) { |
B(Return) // |
}, |
1, |
- {"name"}}}; |
+ {"name"}}, |
+ {"function f(a) { \"use strict\"; a.name = \"val\"; }\n" |
+ "f({name : \"test\"})", |
+ 2 * kPointerSize, |
+ 2, |
+ 18, |
+ { |
+ // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
+ // expression, or any other unused literal expression. |
+ B(LdaConstant), U8(0), // |
+ B(Ldar), R(helper.kLastParamIndex), // |
+ B(Star), R(0), // |
+ B(LdaConstant), U8(1), // |
+ B(Star), R(1), // |
+ B(LdaConstant), U8(2), // |
+ B(StoreICStrict), R(0), R(1), U8(vector->GetIndex(slot1)), // |
+ B(LdaUndefined), // |
+ B(Return) // |
+ }, |
+ 3, |
+ {"use strict", "name", "val"}}, |
+ {"function f(a, b) { \"use strict\"; a[b] = \"val\"; }\n" |
+ "f({arg : \"test\"}, \"arg\")", |
+ 2 * kPointerSize, |
+ 3, |
+ 18, |
+ { |
+ // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
+ // expression, or any other unused literal expression. |
+ B(LdaConstant), U8(0), // |
+ B(Ldar), R(helper.kLastParamIndex - 1), // |
+ B(Star), R(0), // |
+ B(Ldar), R(helper.kLastParamIndex), // |
+ B(Star), R(1), // |
+ B(LdaConstant), U8(1), // |
+ B(KeyedStoreICStrict), R(0), R(1), U8(vector->GetIndex(slot1)), // |
+ B(LdaUndefined), // |
+ B(Return) // |
+ }, |
+ 2, |
+ {"use strict", "val"}}}; |
for (size_t i = 0; i < arraysize(snippets); i++) { |
Handle<BytecodeArray> bytecode_array = |
helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); |