OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 1683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 | 1694 |
1695 CONVERT_ARG_CHECKED(JSFunction, target, 0); | 1695 CONVERT_ARG_CHECKED(JSFunction, target, 0); |
1696 Handle<Object> code = args.at<Object>(1); | 1696 Handle<Object> code = args.at<Object>(1); |
1697 | 1697 |
1698 Handle<Context> context(target->context()); | 1698 Handle<Context> context(target->context()); |
1699 | 1699 |
1700 if (!code->IsNull()) { | 1700 if (!code->IsNull()) { |
1701 RUNTIME_ASSERT(code->IsJSFunction()); | 1701 RUNTIME_ASSERT(code->IsJSFunction()); |
1702 Handle<JSFunction> fun = Handle<JSFunction>::cast(code); | 1702 Handle<JSFunction> fun = Handle<JSFunction>::cast(code); |
1703 Handle<SharedFunctionInfo> shared(fun->shared()); | 1703 Handle<SharedFunctionInfo> shared(fun->shared()); |
1704 SetExpectedNofProperties(target, shared->expected_nof_properties()); | |
1705 | 1704 |
1706 if (!EnsureCompiled(shared, KEEP_EXCEPTION)) { | 1705 if (!EnsureCompiled(shared, KEEP_EXCEPTION)) { |
1707 return Failure::Exception(); | 1706 return Failure::Exception(); |
1708 } | 1707 } |
1709 // Set the code, scope info, formal parameter count, | 1708 // Set the code, scope info, formal parameter count, |
1710 // and the length of the target function. | 1709 // and the length of the target function. |
1711 target->shared()->set_code(shared->code()); | 1710 target->shared()->set_code(shared->code()); |
1712 target->set_code(shared->code()); | 1711 target->set_code(shared->code()); |
1713 target->shared()->set_scope_info(shared->scope_info()); | 1712 target->shared()->set_scope_info(shared->scope_info()); |
1714 target->shared()->set_length(shared->length()); | 1713 target->shared()->set_length(shared->length()); |
(...skipping 24 matching lines...) Expand all Loading... |
1739 // It's okay to skip the write barrier here because the literals | 1738 // It's okay to skip the write barrier here because the literals |
1740 // are guaranteed to be in old space. | 1739 // are guaranteed to be in old space. |
1741 target->set_literals(*literals, SKIP_WRITE_BARRIER); | 1740 target->set_literals(*literals, SKIP_WRITE_BARRIER); |
1742 } | 1741 } |
1743 | 1742 |
1744 target->set_context(*context); | 1743 target->set_context(*context); |
1745 return *target; | 1744 return *target; |
1746 } | 1745 } |
1747 | 1746 |
1748 | 1747 |
| 1748 static Object* Runtime_SetExpectedNumberOfProperties(Arguments args) { |
| 1749 HandleScope scope; |
| 1750 ASSERT(args.length() == 2); |
| 1751 CONVERT_ARG_CHECKED(JSFunction, function, 0); |
| 1752 CONVERT_SMI_CHECKED(num, args[1]); |
| 1753 RUNTIME_ASSERT(num >= 0); |
| 1754 SetExpectedNofProperties(function, num); |
| 1755 return Heap::undefined_value(); |
| 1756 } |
| 1757 |
| 1758 |
1749 static Object* CharFromCode(Object* char_code) { | 1759 static Object* CharFromCode(Object* char_code) { |
1750 uint32_t code; | 1760 uint32_t code; |
1751 if (char_code->ToArrayIndex(&code)) { | 1761 if (char_code->ToArrayIndex(&code)) { |
1752 if (code <= 0xffff) { | 1762 if (code <= 0xffff) { |
1753 return Heap::LookupSingleCharacterStringFromCode(code); | 1763 return Heap::LookupSingleCharacterStringFromCode(code); |
1754 } | 1764 } |
1755 } | 1765 } |
1756 return Heap::empty_string(); | 1766 return Heap::empty_string(); |
1757 } | 1767 } |
1758 | 1768 |
(...skipping 8949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10708 } else { | 10718 } else { |
10709 // Handle last resort GC and make sure to allow future allocations | 10719 // Handle last resort GC and make sure to allow future allocations |
10710 // to grow the heap without causing GCs (if possible). | 10720 // to grow the heap without causing GCs (if possible). |
10711 Counters::gc_last_resort_from_js.Increment(); | 10721 Counters::gc_last_resort_from_js.Increment(); |
10712 Heap::CollectAllGarbage(false); | 10722 Heap::CollectAllGarbage(false); |
10713 } | 10723 } |
10714 } | 10724 } |
10715 | 10725 |
10716 | 10726 |
10717 } } // namespace v8::internal | 10727 } } // namespace v8::internal |
OLD | NEW |