| Index: src/ast.cc
|
| diff --git a/src/ast.cc b/src/ast.cc
|
| index dbbba830adb445082b32a7db3482afddad05fe39..d332f4a3cbcf15c8de64e998896f25b06b31532a 100644
|
| --- a/src/ast.cc
|
| +++ b/src/ast.cc
|
| @@ -55,13 +55,14 @@ bool Expression::IsUndefinedLiteral(Isolate* isolate) const {
|
| // The global identifier "undefined" is immutable. Everything
|
| // else could be reassigned.
|
| return var != NULL && var->location() == Variable::UNALLOCATED &&
|
| - var_proxy->raw_name()->IsOneByteEqualTo("undefined");
|
| + String::Equals(var_proxy->name(),
|
| + isolate->factory()->undefined_string());
|
| }
|
|
|
|
|
| VariableProxy::VariableProxy(Zone* zone, Variable* var, int position)
|
| : Expression(zone, position),
|
| - name_(var->raw_name()),
|
| + name_(var->name()),
|
| var_(NULL), // Will be set by the call to BindTo.
|
| is_this_(var->is_this()),
|
| is_trivial_(false),
|
| @@ -72,7 +73,7 @@ VariableProxy::VariableProxy(Zone* zone, Variable* var, int position)
|
|
|
|
|
| VariableProxy::VariableProxy(Zone* zone,
|
| - const AstString* name,
|
| + Handle<String> name,
|
| bool is_this,
|
| Interface* interface,
|
| int position)
|
| @@ -83,6 +84,8 @@ VariableProxy::VariableProxy(Zone* zone,
|
| is_trivial_(false),
|
| is_lvalue_(false),
|
| interface_(interface) {
|
| + // Names must be canonicalized for fast equality checks.
|
| + ASSERT(name->IsInternalizedString());
|
| }
|
|
|
|
|
| @@ -90,7 +93,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_ == var->raw_name());
|
| + ASSERT((is_this() && var->is_this()) || name_.is_identical_to(var->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
|
| @@ -177,13 +180,15 @@ void FunctionLiteral::InitializeSharedInfo(
|
| }
|
|
|
|
|
| -ObjectLiteralProperty::ObjectLiteralProperty(Zone* zone,
|
| - AstValueFactory* ast_value_factory,
|
| - Literal* key, Expression* value) {
|
| +ObjectLiteralProperty::ObjectLiteralProperty(
|
| + Zone* zone, Literal* key, Expression* value) {
|
| emit_store_ = true;
|
| key_ = key;
|
| value_ = value;
|
| - if (key->raw_value()->EqualsString(ast_value_factory->proto_string())) {
|
| + Handle<Object> k = key->value();
|
| + if (k->IsInternalizedString() &&
|
| + String::Equals(Handle<String>::cast(k),
|
| + zone->isolate()->factory()->proto_string())) {
|
| kind_ = PROTOTYPE;
|
| } else if (value_->AsMaterializedLiteral() != NULL) {
|
| kind_ = MATERIALIZED_LITERAL;
|
| @@ -1117,8 +1122,9 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) {
|
| // optimize them.
|
| add_flag(kDontInline);
|
| } else if (node->function()->intrinsic_type == Runtime::INLINE &&
|
| - (node->raw_name()->IsOneByteEqualTo("_ArgumentsLength") ||
|
| - node->raw_name()->IsOneByteEqualTo("_Arguments"))) {
|
| + (node->name()->IsOneByteEqualTo(
|
| + STATIC_ASCII_VECTOR("_ArgumentsLength")) ||
|
| + node->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_Arguments")))) {
|
| // Don't inline the %_ArgumentsLength or %_Arguments because their
|
| // implementation will not work. There is no stack frame to get them
|
| // from.
|
| @@ -1133,17 +1139,17 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) {
|
|
|
|
|
| Handle<String> Literal::ToString() {
|
| - if (value_->IsString()) return value_->AsString()->string();
|
| + if (value_->IsString()) return Handle<String>::cast(value_);
|
| ASSERT(value_->IsNumber());
|
| char arr[100];
|
| Vector<char> buffer(arr, ARRAY_SIZE(arr));
|
| const char* str;
|
| - if (value()->IsSmi()) {
|
| + if (value_->IsSmi()) {
|
| // Optimization only, the heap number case would subsume this.
|
| - SNPrintF(buffer, "%d", Smi::cast(*value())->value());
|
| + SNPrintF(buffer, "%d", Smi::cast(*value_)->value());
|
| str = arr;
|
| } else {
|
| - str = DoubleToCString(value()->Number(), buffer);
|
| + str = DoubleToCString(value_->Number(), buffer);
|
| }
|
| return isolate_->factory()->NewStringFromAsciiChecked(str);
|
| }
|
|
|