| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 Handle<JSFunction> function) { | 565 Handle<JSFunction> function) { |
| 566 // Compute the check type and the map. | 566 // Compute the check type and the map. |
| 567 InlineCacheHolderFlag cache_holder = | 567 InlineCacheHolderFlag cache_holder = |
| 568 IC::GetCodeCacheForObject(*object, *holder); | 568 IC::GetCodeCacheForObject(*object, *holder); |
| 569 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); | 569 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); |
| 570 | 570 |
| 571 // Compute check type based on receiver/holder. | 571 // Compute check type based on receiver/holder. |
| 572 CheckType check = RECEIVER_MAP_CHECK; | 572 CheckType check = RECEIVER_MAP_CHECK; |
| 573 if (object->IsString()) { | 573 if (object->IsString()) { |
| 574 check = STRING_CHECK; | 574 check = STRING_CHECK; |
| 575 } else if (object->IsSymbol()) { |
| 576 check = SYMBOL_CHECK; |
| 575 } else if (object->IsNumber()) { | 577 } else if (object->IsNumber()) { |
| 576 check = NUMBER_CHECK; | 578 check = NUMBER_CHECK; |
| 577 } else if (object->IsBoolean()) { | 579 } else if (object->IsBoolean()) { |
| 578 check = BOOLEAN_CHECK; | 580 check = BOOLEAN_CHECK; |
| 579 } | 581 } |
| 580 | 582 |
| 581 Code::Flags flags = | 583 Code::Flags flags = |
| 582 Code::ComputeMonomorphicFlags(kind, Code::CONSTANT_FUNCTION, extra_state, | 584 Code::ComputeMonomorphicFlags(kind, Code::CONSTANT_FUNCTION, extra_state, |
| 583 cache_holder, argc); | 585 cache_holder, argc); |
| 584 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), | 586 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 606 Handle<JSObject> holder, | 608 Handle<JSObject> holder, |
| 607 PropertyIndex index) { | 609 PropertyIndex index) { |
| 608 // Compute the check type and the map. | 610 // Compute the check type and the map. |
| 609 InlineCacheHolderFlag cache_holder = | 611 InlineCacheHolderFlag cache_holder = |
| 610 IC::GetCodeCacheForObject(*object, *holder); | 612 IC::GetCodeCacheForObject(*object, *holder); |
| 611 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); | 613 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); |
| 612 | 614 |
| 613 // TODO(1233596): We cannot do receiver map check for non-JS objects | 615 // TODO(1233596): We cannot do receiver map check for non-JS objects |
| 614 // because they may be represented as immediates without a | 616 // because they may be represented as immediates without a |
| 615 // map. Instead, we check against the map in the holder. | 617 // map. Instead, we check against the map in the holder. |
| 616 if (object->IsNumber() || object->IsBoolean() || object->IsString()) { | 618 if (object->IsNumber() || object->IsSymbol() || |
| 619 object->IsBoolean() || object->IsString()) { |
| 617 object = holder; | 620 object = holder; |
| 618 } | 621 } |
| 619 | 622 |
| 620 Code::Flags flags = | 623 Code::Flags flags = |
| 621 Code::ComputeMonomorphicFlags(kind, Code::FIELD, extra_state, | 624 Code::ComputeMonomorphicFlags(kind, Code::FIELD, extra_state, |
| 622 cache_holder, argc); | 625 cache_holder, argc); |
| 623 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), | 626 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), |
| 624 isolate_); | 627 isolate_); |
| 625 if (probe->IsCode()) return Handle<Code>::cast(probe); | 628 if (probe->IsCode()) return Handle<Code>::cast(probe); |
| 626 | 629 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 644 Handle<Object> object, | 647 Handle<Object> object, |
| 645 Handle<JSObject> holder) { | 648 Handle<JSObject> holder) { |
| 646 // Compute the check type and the map. | 649 // Compute the check type and the map. |
| 647 InlineCacheHolderFlag cache_holder = | 650 InlineCacheHolderFlag cache_holder = |
| 648 IC::GetCodeCacheForObject(*object, *holder); | 651 IC::GetCodeCacheForObject(*object, *holder); |
| 649 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); | 652 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*object, cache_holder)); |
| 650 | 653 |
| 651 // TODO(1233596): We cannot do receiver map check for non-JS objects | 654 // TODO(1233596): We cannot do receiver map check for non-JS objects |
| 652 // because they may be represented as immediates without a | 655 // because they may be represented as immediates without a |
| 653 // map. Instead, we check against the map in the holder. | 656 // map. Instead, we check against the map in the holder. |
| 654 if (object->IsNumber() || object->IsBoolean() || object->IsString()) { | 657 if (object->IsNumber() || object->IsSymbol() || |
| 658 object->IsBoolean() || object->IsString()) { |
| 655 object = holder; | 659 object = holder; |
| 656 } | 660 } |
| 657 | 661 |
| 658 Code::Flags flags = | 662 Code::Flags flags = |
| 659 Code::ComputeMonomorphicFlags(kind, Code::INTERCEPTOR, extra_state, | 663 Code::ComputeMonomorphicFlags(kind, Code::INTERCEPTOR, extra_state, |
| 660 cache_holder, argc); | 664 cache_holder, argc); |
| 661 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), | 665 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags), |
| 662 isolate_); | 666 isolate_); |
| 663 if (probe->IsCode()) return Handle<Code>::cast(probe); | 667 if (probe->IsCode()) return Handle<Code>::cast(probe); |
| 664 | 668 |
| (...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1754 Handle<FunctionTemplateInfo>( | 1758 Handle<FunctionTemplateInfo>( |
| 1755 FunctionTemplateInfo::cast(signature->receiver())); | 1759 FunctionTemplateInfo::cast(signature->receiver())); |
| 1756 } | 1760 } |
| 1757 } | 1761 } |
| 1758 | 1762 |
| 1759 is_simple_api_call_ = true; | 1763 is_simple_api_call_ = true; |
| 1760 } | 1764 } |
| 1761 | 1765 |
| 1762 | 1766 |
| 1763 } } // namespace v8::internal | 1767 } } // namespace v8::internal |
| OLD | NEW |