| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 6059a2a65317b2d9dfba4505ad2ca835e339523e..952f931d1db88ae960c4d9503517afca73e21e84 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -5061,6 +5061,16 @@ void HOptimizedGraphBuilder::VisitLiteral(Literal* expr) {
|
| }
|
|
|
|
|
| +void HOptimizedGraphBuilder::VisitStringLiteral(StringLiteral* expr) {
|
| + VisitLiteral(expr);
|
| +}
|
| +
|
| +
|
| +void HOptimizedGraphBuilder::VisitNumberLiteral(NumberLiteral* expr) {
|
| + VisitLiteral(expr);
|
| +}
|
| +
|
| +
|
| void HOptimizedGraphBuilder::VisitRegExpLiteral(RegExpLiteral* expr) {
|
| ASSERT(!HasStackOverflow());
|
| ASSERT(current_block() != NULL);
|
| @@ -5220,12 +5230,13 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
|
| // Fall through.
|
| case ObjectLiteral::Property::COMPUTED:
|
| - if (key->value()->IsInternalizedString()) {
|
| + if (key->IsStringLiteral()) {
|
| if (property->emit_store()) {
|
| CHECK_ALIVE(VisitForValue(value));
|
| HValue* value = Pop();
|
| Handle<Map> map = property->GetReceiverType();
|
| - Handle<String> name = property->key()->AsPropertyName();
|
| + Handle<String> name =
|
| + property->key()->AsStringLiteral()->AsPropertyName();
|
| HInstruction* store;
|
| if (map.is_null()) {
|
| // If we don't know the monomorphic type, do a generic store.
|
| @@ -6051,8 +6062,8 @@ void HOptimizedGraphBuilder::BuildStore(Expression* expr,
|
| HValue* value = Pop();
|
| HValue* object = Pop();
|
|
|
| - Literal* key = prop->key()->AsLiteral();
|
| - Handle<String> name = Handle<String>::cast(key->value());
|
| + StringLiteral* key = prop->key()->AsStringLiteral();
|
| + Handle<String> name = key->string();
|
| ASSERT(!name.is_null());
|
|
|
| HInstruction* instr = BuildNamedAccess(STORE, ast_id, return_id, expr,
|
| @@ -6808,7 +6819,7 @@ bool HOptimizedGraphBuilder::TryArgumentsAccess(Property* expr) {
|
|
|
| HInstruction* result = NULL;
|
| if (expr->key()->IsPropertyName()) {
|
| - Handle<String> name = expr->key()->AsLiteral()->AsPropertyName();
|
| + Handle<String> name = expr->key()->AsStringLiteral()->AsPropertyName();
|
| if (!name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("length"))) return false;
|
|
|
| if (function_state()->outer() == NULL) {
|
| @@ -6912,7 +6923,7 @@ void HOptimizedGraphBuilder::BuildLoad(Property* expr,
|
| instr = New<HLoadFunctionPrototype>(function);
|
|
|
| } else if (expr->key()->IsPropertyName()) {
|
| - Handle<String> name = expr->key()->AsLiteral()->AsPropertyName();
|
| + Handle<String> name = expr->key()->AsStringLiteral()->AsPropertyName();
|
| HValue* object = Pop();
|
|
|
| instr = BuildNamedAccess(LOAD, ast_id, expr->LoadId(), expr,
|
| @@ -8251,7 +8262,7 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
| ComputeReceiverTypes(expr, receiver, &types, zone());
|
|
|
| if (prop->key()->IsPropertyName() && types->length() > 0) {
|
| - Handle<String> name = prop->key()->AsLiteral()->AsPropertyName();
|
| + Handle<String> name = prop->key()->AsStringLiteral()->AsPropertyName();
|
| PropertyAccessInfo info(this, LOAD, ToType(types->first()), name);
|
| if (!info.CanAccessAsMonomorphic(types)) {
|
| HandlePolymorphicCallNamed(expr, receiver, types, name);
|
| @@ -8885,7 +8896,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
| CHECK_ALIVE(VisitForValue(arguments->at(kObjectArg)));
|
| HValue* obj = Pop();
|
|
|
| - if (arguments->at(kArrayIdArg)->node_type() != AstNode::kLiteral) {
|
| + if (arguments->at(kArrayIdArg)->AsAnyLiteral() == NULL) {
|
| // This should never happen in real use, but can happen when fuzzing.
|
| // Just bail out.
|
| Bailout(kNeedSmiLiteral);
|
| @@ -8912,7 +8923,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
| HValue* byte_offset;
|
| bool is_zero_byte_offset;
|
|
|
| - if (arguments->at(kByteOffsetArg)->node_type() == AstNode::kLiteral
|
| + if (arguments->at(kByteOffsetArg)->IsNumberLiteral()
|
| && Smi::FromInt(0) ==
|
| *static_cast<Literal*>(arguments->at(kByteOffsetArg))->value()) {
|
| byte_offset = Add<HConstant>(static_cast<int32_t>(0));
|
| @@ -9772,9 +9783,8 @@ static bool IsClassOfTest(CompareOperation* expr) {
|
| if (expr->op() != Token::EQ_STRICT) return false;
|
| CallRuntime* call = expr->left()->AsCallRuntime();
|
| if (call == NULL) return false;
|
| - Literal* literal = expr->right()->AsLiteral();
|
| + StringLiteral* literal = expr->right()->AsStringLiteral();
|
| if (literal == NULL) return false;
|
| - if (!literal->value()->IsString()) return false;
|
| if (!call->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_ClassOf"))) {
|
| return false;
|
| }
|
| @@ -9980,8 +9990,8 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| ASSERT(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| - Literal* literal = expr->right()->AsLiteral();
|
| - Handle<String> rhs = Handle<String>::cast(literal->value());
|
| + StringLiteral* literal = expr->right()->AsStringLiteral();
|
| + Handle<String> rhs = literal->string();
|
| HClassOfTestAndBranch* instr = New<HClassOfTestAndBranch>(value, rhs);
|
| return ast_context()->ReturnControl(instr, expr->id());
|
| }
|
| @@ -10824,8 +10834,9 @@ void HOptimizedGraphBuilder::GenerateValueOf(CallRuntime* call) {
|
|
|
| void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) {
|
| ASSERT(call->arguments()->length() == 2);
|
| - ASSERT_NE(NULL, call->arguments()->at(1)->AsLiteral());
|
| - Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->value()));
|
| + ASSERT_NE(NULL, call->arguments()->at(1)->AsNumberLiteral());
|
| + Smi* index =
|
| + Smi::cast(*(call->arguments()->at(1)->AsNumberLiteral()->value()));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* date = Pop();
|
| HDateField* result = New<HDateField>(date, index);
|
|
|