| 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 6786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6797 CONVERT_ARG_HANDLE_CHECKED(String, s, 0); | 6797 CONVERT_ARG_HANDLE_CHECKED(String, s, 0); |
| 6798 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]); | 6798 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]); |
| 6799 | 6799 |
| 6800 s = String::Flatten(s); | 6800 s = String::Flatten(s); |
| 6801 const int length = static_cast<int>(Min<uint32_t>(s->length(), limit)); | 6801 const int length = static_cast<int>(Min<uint32_t>(s->length(), limit)); |
| 6802 | 6802 |
| 6803 Handle<FixedArray> elements; | 6803 Handle<FixedArray> elements; |
| 6804 int position = 0; | 6804 int position = 0; |
| 6805 if (s->IsFlat() && s->IsOneByteRepresentation()) { | 6805 if (s->IsFlat() && s->IsOneByteRepresentation()) { |
| 6806 // Try using cached chars where possible. | 6806 // Try using cached chars where possible. |
| 6807 Object* obj; | 6807 elements = isolate->factory()->NewUninitializedFixedArray(length); |
| 6808 { MaybeObject* maybe_obj = | 6808 |
| 6809 isolate->heap()->AllocateUninitializedFixedArray(length); | |
| 6810 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | |
| 6811 } | |
| 6812 elements = Handle<FixedArray>(FixedArray::cast(obj), isolate); | |
| 6813 DisallowHeapAllocation no_gc; | 6809 DisallowHeapAllocation no_gc; |
| 6814 String::FlatContent content = s->GetFlatContent(); | 6810 String::FlatContent content = s->GetFlatContent(); |
| 6815 if (content.IsAscii()) { | 6811 if (content.IsAscii()) { |
| 6816 Vector<const uint8_t> chars = content.ToOneByteVector(); | 6812 Vector<const uint8_t> chars = content.ToOneByteVector(); |
| 6817 // Note, this will initialize all elements (not only the prefix) | 6813 // Note, this will initialize all elements (not only the prefix) |
| 6818 // to prevent GC from seeing partially initialized array. | 6814 // to prevent GC from seeing partially initialized array. |
| 6819 position = CopyCachedAsciiCharsToArray(isolate->heap(), | 6815 position = CopyCachedAsciiCharsToArray(isolate->heap(), |
| 6820 chars.start(), | 6816 chars.start(), |
| 6821 *elements, | 6817 *elements, |
| 6822 length); | 6818 length); |
| (...skipping 1155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7978 for (int i = 0; i < argument_count; ++i) { | 7974 for (int i = 0; i < argument_count; ++i) { |
| 7979 elements->set(i, *(parameters - i - 1)); | 7975 elements->set(i, *(parameters - i - 1)); |
| 7980 } | 7976 } |
| 7981 } | 7977 } |
| 7982 } | 7978 } |
| 7983 return *result; | 7979 return *result; |
| 7984 } | 7980 } |
| 7985 | 7981 |
| 7986 | 7982 |
| 7987 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewStrictArgumentsFast) { | 7983 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewStrictArgumentsFast) { |
| 7988 SealHandleScope shs(isolate); | 7984 HandleScope scope(isolate); |
| 7989 ASSERT(args.length() == 3); | 7985 ASSERT(args.length() == 3); |
| 7986 CONVERT_ARG_HANDLE_CHECKED(JSFunction, callee, 0) |
| 7987 Object** parameters = reinterpret_cast<Object**>(args[1]); |
| 7988 CONVERT_SMI_ARG_CHECKED(length, 2); |
| 7990 | 7989 |
| 7991 JSFunction* callee = JSFunction::cast(args[0]); | 7990 Handle<JSObject> result = |
| 7992 Object** parameters = reinterpret_cast<Object**>(args[1]); | 7991 isolate->factory()->NewArgumentsObject(callee, length); |
| 7993 const int length = args.smi_at(2); | |
| 7994 | 7992 |
| 7995 Object* result; | |
| 7996 { MaybeObject* maybe_result = | |
| 7997 isolate->heap()->AllocateArgumentsObject(callee, length); | |
| 7998 if (!maybe_result->ToObject(&result)) return maybe_result; | |
| 7999 } | |
| 8000 // Allocate the elements if needed. | |
| 8001 if (length > 0) { | 7993 if (length > 0) { |
| 8002 // Allocate the fixed array. | 7994 Handle<FixedArray> array = |
| 8003 FixedArray* array; | 7995 isolate->factory()->NewUninitializedFixedArray(length); |
| 8004 { MaybeObject* maybe_obj = | |
| 8005 isolate->heap()->AllocateUninitializedFixedArray(length); | |
| 8006 if (!maybe_obj->To(&array)) return maybe_obj; | |
| 8007 } | |
| 8008 | |
| 8009 DisallowHeapAllocation no_gc; | 7996 DisallowHeapAllocation no_gc; |
| 8010 WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); | 7997 WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); |
| 8011 for (int i = 0; i < length; i++) { | 7998 for (int i = 0; i < length; i++) { |
| 8012 array->set(i, *--parameters, mode); | 7999 array->set(i, *--parameters, mode); |
| 8013 } | 8000 } |
| 8014 JSObject::cast(result)->set_elements(array); | 8001 result->set_elements(*array); |
| 8015 } | 8002 } |
| 8016 return result; | 8003 return *result; |
| 8017 } | 8004 } |
| 8018 | 8005 |
| 8019 | 8006 |
| 8020 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosureFromStubFailure) { | 8007 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosureFromStubFailure) { |
| 8021 HandleScope scope(isolate); | 8008 HandleScope scope(isolate); |
| 8022 ASSERT(args.length() == 1); | 8009 ASSERT(args.length() == 1); |
| 8023 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 0); | 8010 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 0); |
| 8024 Handle<Context> context(isolate->context()); | 8011 Handle<Context> context(isolate->context()); |
| 8025 PretenureFlag pretenure_flag = NOT_TENURED; | 8012 PretenureFlag pretenure_flag = NOT_TENURED; |
| 8026 Handle<JSFunction> result = | 8013 Handle<JSFunction> result = |
| (...skipping 7052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15079 } | 15066 } |
| 15080 } | 15067 } |
| 15081 | 15068 |
| 15082 | 15069 |
| 15083 void Runtime::OutOfMemory() { | 15070 void Runtime::OutOfMemory() { |
| 15084 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); | 15071 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); |
| 15085 UNREACHABLE(); | 15072 UNREACHABLE(); |
| 15086 } | 15073 } |
| 15087 | 15074 |
| 15088 } } // namespace v8::internal | 15075 } } // namespace v8::internal |
| OLD | NEW |