OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // TODO(jochen): Remove this after the setting is turned on globally. | 5 // TODO(jochen): Remove this after the setting is turned on globally. |
6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
7 | 7 |
8 #include "src/compiler/js-graph.h" | 8 #include "src/compiler/js-graph.h" |
9 #include "src/compiler/js-typed-lowering.h" | 9 #include "src/compiler/js-typed-lowering.h" |
10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 R.CheckHandle(R.isolate->factory()->undefined_string(), r); | 537 R.CheckHandle(R.isolate->factory()->undefined_string(), r); |
538 } | 538 } |
539 | 539 |
540 { // ToString(null) => "null" | 540 { // ToString(null) => "null" |
541 Node* r = R.ReduceUnop(op, Type::Null()); | 541 Node* r = R.ReduceUnop(op, Type::Null()); |
542 R.CheckHandle(R.isolate->factory()->null_string(), r); | 542 R.CheckHandle(R.isolate->factory()->null_string(), r); |
543 } | 543 } |
544 | 544 |
545 { // ToString(boolean) | 545 { // ToString(boolean) |
546 Node* r = R.ReduceUnop(op, Type::Boolean()); | 546 Node* r = R.ReduceUnop(op, Type::Boolean()); |
547 // TODO(titzer): could be a branch | 547 CHECK_EQ(IrOpcode::kSelect, r->opcode()); |
548 CHECK_EQ(IrOpcode::kJSToString, r->opcode()); | |
549 } | 548 } |
550 | 549 |
551 { // ToString(number) | 550 { // ToString(number) |
552 Node* r = R.ReduceUnop(op, Type::Number()); | 551 Node* r = R.ReduceUnop(op, Type::Number()); |
553 // TODO(titzer): could remove effects | 552 // TODO(titzer): could remove effects |
554 CHECK_EQ(IrOpcode::kJSToString, r->opcode()); | 553 CHECK_EQ(IrOpcode::kJSToString, r->opcode()); |
555 } | 554 } |
556 | 555 |
557 { // ToString(string) | 556 { // ToString(string) |
558 Node* r = R.ReduceUnop(op, Type::String()); | 557 Node* r = R.ReduceUnop(op, Type::String()); |
559 CHECK_EQ(IrOpcode::kParameter, r->opcode()); // No-op | 558 CHECK_EQ(IrOpcode::kParameter, r->opcode()); // No-op |
560 } | 559 } |
561 | 560 |
562 { // ToString(object) | 561 { // ToString(object) |
563 Node* r = R.ReduceUnop(op, Type::Object()); | 562 Node* r = R.ReduceUnop(op, Type::Object()); |
564 CHECK_EQ(IrOpcode::kJSToString, r->opcode()); // No reduction. | 563 CHECK_EQ(IrOpcode::kJSToString, r->opcode()); // No reduction. |
565 } | 564 } |
566 } | 565 } |
567 | 566 |
568 | 567 |
569 TEST(JSToString_replacement) { | 568 TEST(JSToString_replacement) { |
570 JSTypedLoweringTester R; | 569 JSTypedLoweringTester R; |
571 | 570 |
572 Type* types[] = {Type::Null(), Type::Undefined(), Type::String()}; | 571 Type* types[] = {Type::Null(), Type::Undefined(), Type::String()}; |
573 | 572 |
574 for (size_t i = 0; i < arraysize(types); i++) { | 573 for (size_t i = 0; i < arraysize(types); i++) { |
575 Node* n = R.Parameter(types[i]); | 574 Node* n = R.Parameter(types[i]); |
576 Node* c = R.graph.NewNode(R.javascript.ToString(), n, R.context(), | 575 Node* c = |
577 R.start(), R.start()); | 576 R.graph.NewNode(R.javascript.ToString(), n, R.context(), |
| 577 R.EmptyFrameState(R.context()), R.start(), R.start()); |
578 Node* effect_use = R.UseForEffect(c); | 578 Node* effect_use = R.UseForEffect(c); |
579 Node* add = R.graph.NewNode(R.simplified.ReferenceEqual(Type::Any()), n, c); | 579 Node* add = R.graph.NewNode(R.simplified.ReferenceEqual(Type::Any()), n, c); |
580 | 580 |
581 R.CheckEffectInput(c, effect_use); | 581 R.CheckEffectInput(c, effect_use); |
582 Node* r = R.reduce(c); | 582 Node* r = R.reduce(c); |
583 | 583 |
584 if (types[i]->Is(Type::String())) { | 584 if (types[i]->Is(Type::String())) { |
585 CHECK_EQ(n, r); | 585 CHECK_EQ(n, r); |
586 } else { | 586 } else { |
587 CHECK_EQ(IrOpcode::kHeapConstant, r->opcode()); | 587 CHECK_EQ(IrOpcode::kHeapConstant, r->opcode()); |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 CHECK_EQ(p1, r->InputAt(1)); | 1260 CHECK_EQ(p1, r->InputAt(1)); |
1261 } | 1261 } |
1262 } | 1262 } |
1263 } | 1263 } |
1264 } | 1264 } |
1265 } | 1265 } |
1266 | 1266 |
1267 } // namespace compiler | 1267 } // namespace compiler |
1268 } // namespace internal | 1268 } // namespace internal |
1269 } // namespace v8 | 1269 } // namespace v8 |
OLD | NEW |