Chromium Code Reviews| Index: src/interpreter/bytecode-generator.cc |
| diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc |
| index d611cafd3a3b8bc18281cef25cdff6cd3242fd4b..f406b245652cccaf6f3d63245f6b4bdbb876537a 100644 |
| --- a/src/interpreter/bytecode-generator.cc |
| +++ b/src/interpreter/bytecode-generator.cc |
| @@ -1831,8 +1831,14 @@ void BytecodeGenerator::BuildVariableLoad(Variable* variable, |
| break; |
| } |
| case VariableLocation::UNALLOCATED: { |
| - builder()->LoadGlobal(variable->name(), feedback_index(slot), |
| - typeof_mode); |
| + // The global identifier "undefined" is immutable. Everything |
| + // else could be reassigned. |
| + if (variable->raw_name()->IsOneByteEqualTo("undefined")) { |
|
mythria
2016/12/05 17:48:12
I took this logic from here: https://cs.chromium.o
rmcilroy
2016/12/05 19:08:09
It's possibly slow to check IsOneByteEqualTo each
mythria
2016/12/06 10:13:27
Nice one. Done.
|
| + builder()->LoadUndefined(); |
| + } else { |
| + builder()->LoadGlobal(variable->name(), feedback_index(slot), |
| + typeof_mode); |
| + } |
| break; |
| } |
| case VariableLocation::CONTEXT: { |