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: { |