| Index: src/ast.cc
|
| diff --git a/src/ast.cc b/src/ast.cc
|
| index 303c442f8434301165ec8afd2106637cc410e8ac..024513b7775636b3f5e1b78e0fb6ae1a46d252fb 100644
|
| --- a/src/ast.cc
|
| +++ b/src/ast.cc
|
| @@ -55,14 +55,13 @@ bool Expression::IsUndefinedLiteral(Isolate* isolate) const {
|
| // The global identifier "undefined" is immutable. Everything
|
| // else could be reassigned.
|
| return var != NULL && var->location() == Variable::UNALLOCATED &&
|
| - String::Equals(var_proxy->name(),
|
| - isolate->factory()->undefined_string());
|
| + ParserSymbolTable::SymbolMatches(var_proxy->raw_name(), "undefined", 9);
|
| }
|
|
|
|
|
| VariableProxy::VariableProxy(Zone* zone, Variable* var, int position)
|
| : Expression(zone, position),
|
| - name_(var->name()),
|
| + raw_name_(var->raw_name()),
|
| var_(NULL), // Will be set by the call to BindTo.
|
| is_this_(var->is_this()),
|
| is_trivial_(false),
|
| @@ -73,19 +72,17 @@ VariableProxy::VariableProxy(Zone* zone, Variable* var, int position)
|
|
|
|
|
| VariableProxy::VariableProxy(Zone* zone,
|
| - Handle<String> name,
|
| + ParserSymbolTable::Symbol* raw_name,
|
| bool is_this,
|
| Interface* interface,
|
| int position)
|
| : Expression(zone, position),
|
| - name_(name),
|
| + raw_name_(raw_name),
|
| var_(NULL),
|
| is_this_(is_this),
|
| is_trivial_(false),
|
| is_lvalue_(false),
|
| interface_(interface) {
|
| - // Names must be canonicalized for fast equality checks.
|
| - ASSERT(name->IsInternalizedString());
|
| }
|
|
|
|
|
| @@ -93,7 +90,7 @@ void VariableProxy::BindTo(Variable* var) {
|
| ASSERT(var_ == NULL); // must be bound only once
|
| ASSERT(var != NULL); // must bind
|
| ASSERT(!FLAG_harmony_modules || interface_->IsUnified(var->interface()));
|
| - ASSERT((is_this() && var->is_this()) || name_.is_identical_to(var->name()));
|
| + ASSERT((is_this() && var->is_this()) || raw_name_ == var->raw_name());
|
| // Ideally CONST-ness should match. However, this is very hard to achieve
|
| // because we don't know the exact semantics of conflicting (const and
|
| // non-const) multiple variable declarations, const vars introduced via
|
| @@ -185,10 +182,7 @@ ObjectLiteralProperty::ObjectLiteralProperty(
|
| emit_store_ = true;
|
| key_ = key;
|
| value_ = value;
|
| - Handle<Object> k = key->value();
|
| - if (k->IsInternalizedString() &&
|
| - String::Equals(Handle<String>::cast(k),
|
| - zone->isolate()->factory()->proto_string())) {
|
| + if (ParserSymbolTable::SymbolMatches(key->string(), "__proto__", 9)) {
|
| kind_ = PROTOTYPE;
|
| } else if (value_->AsMaterializedLiteral() != NULL) {
|
| kind_ = MATERIALIZED_LITERAL;
|
| @@ -1122,9 +1116,10 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) {
|
| // optimize them.
|
| add_flag(kDontInline);
|
| } else if (node->function()->intrinsic_type == Runtime::INLINE &&
|
| - (node->name()->IsOneByteEqualTo(
|
| - STATIC_ASCII_VECTOR("_ArgumentsLength")) ||
|
| - node->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_Arguments")))) {
|
| + (ParserSymbolTable::SymbolMatches(node->raw_name(),
|
| + "_ArgumentsLength", 16) ||
|
| + ParserSymbolTable::SymbolMatches(node->raw_name(), "_Arguments",
|
| + 9))) {
|
| // Don't inline the %_ArgumentsLength or %_Arguments because their
|
| // implementation will not work. There is no stack frame to get them
|
| // from.
|
|
|