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 #include "src/factory.h" | 5 #include "src/factory.h" |
6 | 6 |
7 #include "src/conversions.h" | 7 #include "src/conversions.h" |
8 #include "src/isolate-inl.h" | 8 #include "src/isolate-inl.h" |
9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
10 | 10 |
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1326 // Each function prototype gets a fresh map to avoid unwanted sharing of | 1326 // Each function prototype gets a fresh map to avoid unwanted sharing of |
1327 // maps between prototypes of different constructors. | 1327 // maps between prototypes of different constructors. |
1328 Handle<JSFunction> object_function(native_context->object_function()); | 1328 Handle<JSFunction> object_function(native_context->object_function()); |
1329 ASSERT(object_function->has_initial_map()); | 1329 ASSERT(object_function->has_initial_map()); |
1330 new_map = Map::Copy(handle(object_function->initial_map())); | 1330 new_map = Map::Copy(handle(object_function->initial_map())); |
1331 } | 1331 } |
1332 | 1332 |
1333 Handle<JSObject> prototype = NewJSObjectFromMap(new_map); | 1333 Handle<JSObject> prototype = NewJSObjectFromMap(new_map); |
1334 | 1334 |
1335 if (!function->shared()->is_generator()) { | 1335 if (!function->shared()->is_generator()) { |
1336 JSObject::SetOwnPropertyIgnoreAttributes(prototype, | 1336 JSObject::AddProperty(prototype, constructor_string(), function, DONT_ENUM); |
1337 constructor_string(), | |
1338 function, | |
1339 DONT_ENUM).Assert(); | |
1340 } | 1337 } |
1341 | 1338 |
1342 return prototype; | 1339 return prototype; |
1343 } | 1340 } |
1344 | 1341 |
1345 | 1342 |
1346 Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo( | 1343 Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo( |
1347 Handle<SharedFunctionInfo> info, | 1344 Handle<SharedFunctionInfo> info, |
1348 Handle<Context> context, | 1345 Handle<Context> context, |
1349 PretenureFlag pretenure) { | 1346 PretenureFlag pretenure) { |
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2152 result->shared()->set_construct_stub(*construct_stub); | 2149 result->shared()->set_construct_stub(*construct_stub); |
2153 result->shared()->DontAdaptArguments(); | 2150 result->shared()->DontAdaptArguments(); |
2154 | 2151 |
2155 if (obj->remove_prototype()) { | 2152 if (obj->remove_prototype()) { |
2156 ASSERT(result->shared()->IsApiFunction()); | 2153 ASSERT(result->shared()->IsApiFunction()); |
2157 ASSERT(!result->has_initial_map()); | 2154 ASSERT(!result->has_initial_map()); |
2158 ASSERT(!result->has_prototype()); | 2155 ASSERT(!result->has_prototype()); |
2159 return result; | 2156 return result; |
2160 } | 2157 } |
2161 | 2158 |
2162 JSObject::SetOwnPropertyIgnoreAttributes( | 2159 if (prototype->IsTheHole()) { |
2163 handle(JSObject::cast(result->prototype())), | 2160 #ifdef DEBUG |
2164 constructor_string(), | 2161 LookupIterator it(handle(JSObject::cast(result->prototype())), |
2165 result, | 2162 constructor_string(), |
2166 DONT_ENUM).Assert(); | 2163 LookupIterator::CHECK_OWN_REAL); |
| 2164 MaybeHandle<Object> maybe_prop = Object::GetProperty(&it); |
| 2165 ASSERT(it.IsFound()); |
| 2166 ASSERT(maybe_prop.ToHandleChecked().is_identical_to(result)); |
| 2167 #endif |
| 2168 } else { |
| 2169 JSObject::AddProperty(handle(JSObject::cast(result->prototype())), |
| 2170 constructor_string(), result, DONT_ENUM); |
| 2171 } |
2167 | 2172 |
2168 // Down from here is only valid for API functions that can be used as a | 2173 // Down from here is only valid for API functions that can be used as a |
2169 // constructor (don't set the "remove prototype" flag). | 2174 // constructor (don't set the "remove prototype" flag). |
2170 | 2175 |
2171 Handle<Map> map(result->initial_map()); | 2176 Handle<Map> map(result->initial_map()); |
2172 | 2177 |
2173 // Mark as undetectable if needed. | 2178 // Mark as undetectable if needed. |
2174 if (obj->undetectable()) { | 2179 if (obj->undetectable()) { |
2175 map->set_is_undetectable(); | 2180 map->set_is_undetectable(); |
2176 } | 2181 } |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2360 return Handle<Object>::null(); | 2365 return Handle<Object>::null(); |
2361 } | 2366 } |
2362 | 2367 |
2363 | 2368 |
2364 Handle<Object> Factory::ToBoolean(bool value) { | 2369 Handle<Object> Factory::ToBoolean(bool value) { |
2365 return value ? true_value() : false_value(); | 2370 return value ? true_value() : false_value(); |
2366 } | 2371 } |
2367 | 2372 |
2368 | 2373 |
2369 } } // namespace v8::internal | 2374 } } // namespace v8::internal |
OLD | NEW |