| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/base/utils/random-number-generator.h" | 5 #include "src/base/utils/random-number-generator.h" |
| 6 #include "src/builtins/builtins-promise.h" | 6 #include "src/builtins/builtins-promise.h" |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/code-stub-assembler.h" | 8 #include "src/code-stub-assembler.h" |
| 9 #include "src/compiler/node.h" | 9 #include "src/compiler/node.h" |
| 10 #include "src/isolate.h" | 10 #include "src/isolate.h" |
| (...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1499 Handle<SeqTwoByteString>::cast(string2)->GetChars()[4]); | 1499 Handle<SeqTwoByteString>::cast(string2)->GetChars()[4]); |
| 1500 } | 1500 } |
| 1501 | 1501 |
| 1502 TEST(Arguments) { | 1502 TEST(Arguments) { |
| 1503 Isolate* isolate(CcTest::InitIsolateOnce()); | 1503 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 1504 | 1504 |
| 1505 const int kNumParams = 4; | 1505 const int kNumParams = 4; |
| 1506 CodeAssemblerTester data(isolate, kNumParams); | 1506 CodeAssemblerTester data(isolate, kNumParams); |
| 1507 CodeStubAssembler m(data.state()); | 1507 CodeStubAssembler m(data.state()); |
| 1508 | 1508 |
| 1509 CodeStubArguments arguments(&m, m.Int32Constant(3)); | 1509 CodeStubArguments arguments(&m, m.IntPtrConstant(3)); |
| 1510 | 1510 |
| 1511 CSA_ASSERT( | 1511 CSA_ASSERT( |
| 1512 &m, m.WordEqual(arguments.AtIndex(0), m.SmiConstant(Smi::FromInt(12)))); | 1512 &m, m.WordEqual(arguments.AtIndex(0), m.SmiConstant(Smi::FromInt(12)))); |
| 1513 CSA_ASSERT( | 1513 CSA_ASSERT( |
| 1514 &m, m.WordEqual(arguments.AtIndex(1), m.SmiConstant(Smi::FromInt(13)))); | 1514 &m, m.WordEqual(arguments.AtIndex(1), m.SmiConstant(Smi::FromInt(13)))); |
| 1515 CSA_ASSERT( | 1515 CSA_ASSERT( |
| 1516 &m, m.WordEqual(arguments.AtIndex(2), m.SmiConstant(Smi::FromInt(14)))); | 1516 &m, m.WordEqual(arguments.AtIndex(2), m.SmiConstant(Smi::FromInt(14)))); |
| 1517 | 1517 |
| 1518 m.Return(arguments.GetReceiver()); | 1518 m.Return(arguments.GetReceiver()); |
| 1519 | 1519 |
| 1520 Handle<Code> code = data.GenerateCode(); | 1520 Handle<Code> code = data.GenerateCode(); |
| 1521 CHECK(!code.is_null()); | 1521 CHECK(!code.is_null()); |
| 1522 | 1522 |
| 1523 FunctionTester ft(code, kNumParams); | 1523 FunctionTester ft(code, kNumParams); |
| 1524 Handle<Object> result = ft.Call(isolate->factory()->undefined_value(), | 1524 Handle<Object> result = ft.Call(isolate->factory()->undefined_value(), |
| 1525 Handle<Smi>(Smi::FromInt(12), isolate), | 1525 Handle<Smi>(Smi::FromInt(12), isolate), |
| 1526 Handle<Smi>(Smi::FromInt(13), isolate), | 1526 Handle<Smi>(Smi::FromInt(13), isolate), |
| 1527 Handle<Smi>(Smi::FromInt(14), isolate)) | 1527 Handle<Smi>(Smi::FromInt(14), isolate)) |
| 1528 .ToHandleChecked(); | 1528 .ToHandleChecked(); |
| 1529 CHECK_EQ(*isolate->factory()->undefined_value(), *result); | 1529 CHECK_EQ(*isolate->factory()->undefined_value(), *result); |
| 1530 } | 1530 } |
| 1531 | 1531 |
| 1532 TEST(ArgumentsForEach) { | 1532 TEST(ArgumentsForEach) { |
| 1533 Isolate* isolate(CcTest::InitIsolateOnce()); | 1533 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 1534 | 1534 |
| 1535 const int kNumParams = 4; | 1535 const int kNumParams = 4; |
| 1536 CodeAssemblerTester data(isolate, kNumParams); | 1536 CodeAssemblerTester data(isolate, kNumParams); |
| 1537 CodeStubAssembler m(data.state()); | 1537 CodeStubAssembler m(data.state()); |
| 1538 | 1538 |
| 1539 CodeStubArguments arguments(&m, m.Int32Constant(3)); | 1539 CodeStubArguments arguments(&m, m.IntPtrConstant(3)); |
| 1540 | 1540 |
| 1541 CodeAssemblerVariable sum(&m, MachineRepresentation::kTagged); | 1541 CodeAssemblerVariable sum(&m, MachineRepresentation::kTagged); |
| 1542 CodeAssemblerVariableList list({&sum}, m.zone()); | 1542 CodeAssemblerVariableList list({&sum}, m.zone()); |
| 1543 | 1543 |
| 1544 sum.Bind(m.SmiConstant(0)); | 1544 sum.Bind(m.SmiConstant(0)); |
| 1545 | 1545 |
| 1546 arguments.ForEach( | 1546 arguments.ForEach( |
| 1547 list, [&m, &sum](Node* arg) { sum.Bind(m.SmiAdd(sum.value(), arg)); }); | 1547 list, [&m, &sum](Node* arg) { sum.Bind(m.SmiAdd(sum.value(), arg)); }); |
| 1548 | 1548 |
| 1549 m.Return(sum.value()); | 1549 m.Return(sum.value()); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1609 typedef CodeAssemblerVariable Variable; | 1609 typedef CodeAssemblerVariable Variable; |
| 1610 typedef CodeAssemblerLabel Label; | 1610 typedef CodeAssemblerLabel Label; |
| 1611 Handle<JSArray> array = isolate->factory()->NewJSArray( | 1611 Handle<JSArray> array = isolate->factory()->NewJSArray( |
| 1612 kind_, 2, initial_size, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); | 1612 kind_, 2, initial_size, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); |
| 1613 JSObject::SetElement(isolate, array, 0, | 1613 JSObject::SetElement(isolate, array, 0, |
| 1614 Handle<Smi>(Smi::FromInt(1), isolate), SLOPPY) | 1614 Handle<Smi>(Smi::FromInt(1), isolate), SLOPPY) |
| 1615 .Check(); | 1615 .Check(); |
| 1616 JSObject::SetElement(isolate, array, 1, | 1616 JSObject::SetElement(isolate, array, 1, |
| 1617 Handle<Smi>(Smi::FromInt(2), isolate), SLOPPY) | 1617 Handle<Smi>(Smi::FromInt(2), isolate), SLOPPY) |
| 1618 .Check(); | 1618 .Check(); |
| 1619 CodeStubArguments args(this, Int32Constant(kNumParams)); | 1619 CodeStubArguments args(this, IntPtrConstant(kNumParams)); |
| 1620 Variable arg_index(this, MachineType::PointerRepresentation()); | 1620 Variable arg_index(this, MachineType::PointerRepresentation()); |
| 1621 Label bailout(this); | 1621 Label bailout(this); |
| 1622 arg_index.Bind(IntPtrConstant(0)); | 1622 arg_index.Bind(IntPtrConstant(0)); |
| 1623 Node* length = BuildAppendJSArray( | 1623 Node* length = BuildAppendJSArray( |
| 1624 kind_, HeapConstant(Handle<HeapObject>(isolate->context(), isolate)), | 1624 kind_, HeapConstant(Handle<HeapObject>(isolate->context(), isolate)), |
| 1625 HeapConstant(array), args, arg_index, &bailout); | 1625 HeapConstant(array), args, arg_index, &bailout); |
| 1626 Return(length); | 1626 Return(length); |
| 1627 | 1627 |
| 1628 Bind(&bailout); | 1628 Bind(&bailout); |
| 1629 Return(SmiTag(IntPtrAdd(arg_index.value(), IntPtrConstant(2)))); | 1629 Return(SmiTag(IntPtrAdd(arg_index.value(), IntPtrConstant(2)))); |
| (...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2455 m.Return(m.SmiConstant(0)); | 2455 m.Return(m.SmiConstant(0)); |
| 2456 | 2456 |
| 2457 Handle<Code> code = data.GenerateCode(); | 2457 Handle<Code> code = data.GenerateCode(); |
| 2458 CHECK(!code.is_null()); | 2458 CHECK(!code.is_null()); |
| 2459 FunctionTester ft(code, kNumParams); | 2459 FunctionTester ft(code, kNumParams); |
| 2460 CHECK_EQ(1, Handle<Smi>::cast(ft.Call().ToHandleChecked())->value()); | 2460 CHECK_EQ(1, Handle<Smi>::cast(ft.Call().ToHandleChecked())->value()); |
| 2461 } | 2461 } |
| 2462 | 2462 |
| 2463 } // namespace internal | 2463 } // namespace internal |
| 2464 } // namespace v8 | 2464 } // namespace v8 |
| OLD | NEW |