Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(678)

Side by Side Diff: src/factory.cc

Issue 2028983002: Introduce IsUndefined(Isolate*) and IsTheHole(Isolate*) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase master Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/elements.cc ('k') | src/frames.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/allocation-site-scopes.h" 7 #include "src/allocation-site-scopes.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/conversions.h" 10 #include "src/conversions.h"
(...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1229 } 1229 }
1230 1230
1231 1231
1232 Handle<JSFunction> Factory::NewFunction(Handle<Map> map, 1232 Handle<JSFunction> Factory::NewFunction(Handle<Map> map,
1233 Handle<String> name, 1233 Handle<String> name,
1234 MaybeHandle<Code> code) { 1234 MaybeHandle<Code> code) {
1235 Handle<Context> context(isolate()->native_context()); 1235 Handle<Context> context(isolate()->native_context());
1236 Handle<SharedFunctionInfo> info = 1236 Handle<SharedFunctionInfo> info =
1237 NewSharedFunctionInfo(name, code, map->is_constructor()); 1237 NewSharedFunctionInfo(name, code, map->is_constructor());
1238 DCHECK(is_sloppy(info->language_mode())); 1238 DCHECK(is_sloppy(info->language_mode()));
1239 DCHECK(!map->IsUndefined()); 1239 DCHECK(!map->IsUndefined(isolate()));
1240 DCHECK( 1240 DCHECK(
1241 map.is_identical_to(isolate()->sloppy_function_map()) || 1241 map.is_identical_to(isolate()->sloppy_function_map()) ||
1242 map.is_identical_to(isolate()->sloppy_function_without_prototype_map()) || 1242 map.is_identical_to(isolate()->sloppy_function_without_prototype_map()) ||
1243 map.is_identical_to( 1243 map.is_identical_to(
1244 isolate()->sloppy_function_with_readonly_prototype_map()) || 1244 isolate()->sloppy_function_with_readonly_prototype_map()) ||
1245 map.is_identical_to(isolate()->strict_function_map()) || 1245 map.is_identical_to(isolate()->strict_function_map()) ||
1246 map.is_identical_to(isolate()->strict_function_without_prototype_map()) || 1246 map.is_identical_to(isolate()->strict_function_without_prototype_map()) ||
1247 // TODO(titzer): wasm_function_map() could be undefined here. ugly. 1247 // TODO(titzer): wasm_function_map() could be undefined here. ugly.
1248 (*map == context->get(Context::WASM_FUNCTION_MAP_INDEX)) || 1248 (*map == context->get(Context::WASM_FUNCTION_MAP_INDEX)) ||
1249 map.is_identical_to(isolate()->proxy_function_map())); 1249 map.is_identical_to(isolate()->proxy_function_map()));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 Handle<JSFunction> function = 1295 Handle<JSFunction> function =
1296 NewFunction(name, code, prototype, read_only_prototype, is_strict); 1296 NewFunction(name, code, prototype, read_only_prototype, is_strict);
1297 1297
1298 ElementsKind elements_kind = 1298 ElementsKind elements_kind =
1299 type == JS_ARRAY_TYPE ? FAST_SMI_ELEMENTS : FAST_HOLEY_SMI_ELEMENTS; 1299 type == JS_ARRAY_TYPE ? FAST_SMI_ELEMENTS : FAST_HOLEY_SMI_ELEMENTS;
1300 Handle<Map> initial_map = NewMap(type, instance_size, elements_kind); 1300 Handle<Map> initial_map = NewMap(type, instance_size, elements_kind);
1301 // TODO(littledan): Why do we have this is_generator test when 1301 // TODO(littledan): Why do we have this is_generator test when
1302 // NewFunctionPrototype already handles finding an appropriately 1302 // NewFunctionPrototype already handles finding an appropriately
1303 // shared prototype? 1303 // shared prototype?
1304 if (!function->shared()->is_resumable()) { 1304 if (!function->shared()->is_resumable()) {
1305 if (prototype->IsTheHole()) { 1305 if (prototype->IsTheHole(isolate())) {
1306 prototype = NewFunctionPrototype(function); 1306 prototype = NewFunctionPrototype(function);
1307 } else if (install_constructor) { 1307 } else if (install_constructor) {
1308 JSObject::AddProperty(Handle<JSObject>::cast(prototype), 1308 JSObject::AddProperty(Handle<JSObject>::cast(prototype),
1309 constructor_string(), function, DONT_ENUM); 1309 constructor_string(), function, DONT_ENUM);
1310 } 1310 }
1311 } 1311 }
1312 1312
1313 JSFunction::SetInitialMap(function, initial_map, 1313 JSFunction::SetInitialMap(function, initial_map,
1314 Handle<JSReceiver>::cast(prototype)); 1314 Handle<JSReceiver>::cast(prototype));
1315 1315
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 number_string_cache()->set(hash * 2, *number); 2213 number_string_cache()->set(hash * 2, *number);
2214 number_string_cache()->set(hash * 2 + 1, *string); 2214 number_string_cache()->set(hash * 2 + 1, *string);
2215 } 2215 }
2216 2216
2217 2217
2218 Handle<String> Factory::NumberToString(Handle<Object> number, 2218 Handle<String> Factory::NumberToString(Handle<Object> number,
2219 bool check_number_string_cache) { 2219 bool check_number_string_cache) {
2220 isolate()->counters()->number_to_string_runtime()->Increment(); 2220 isolate()->counters()->number_to_string_runtime()->Increment();
2221 if (check_number_string_cache) { 2221 if (check_number_string_cache) {
2222 Handle<Object> cached = GetNumberStringCache(number); 2222 Handle<Object> cached = GetNumberStringCache(number);
2223 if (!cached->IsUndefined()) return Handle<String>::cast(cached); 2223 if (!cached->IsUndefined(isolate())) return Handle<String>::cast(cached);
2224 } 2224 }
2225 2225
2226 char arr[100]; 2226 char arr[100];
2227 Vector<char> buffer(arr, arraysize(arr)); 2227 Vector<char> buffer(arr, arraysize(arr));
2228 const char* str; 2228 const char* str;
2229 if (number->IsSmi()) { 2229 if (number->IsSmi()) {
2230 int num = Handle<Smi>::cast(number)->value(); 2230 int num = Handle<Smi>::cast(number)->value();
2231 str = IntToCString(num, buffer); 2231 str = IntToCString(num, buffer);
2232 } else { 2232 } else {
2233 double num = Handle<HeapNumber>::cast(number)->value(); 2233 double num = Handle<HeapNumber>::cast(number)->value();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 } 2319 }
2320 *is_result_from_cache = true; 2320 *is_result_from_cache = true;
2321 if (number_of_properties == 0) { 2321 if (number_of_properties == 0) {
2322 // Reuse the initial map of the Object function if the literal has no 2322 // Reuse the initial map of the Object function if the literal has no
2323 // predeclared properties. 2323 // predeclared properties.
2324 return handle(context->object_function()->initial_map(), isolate()); 2324 return handle(context->object_function()->initial_map(), isolate());
2325 } 2325 }
2326 2326
2327 int cache_index = number_of_properties - 1; 2327 int cache_index = number_of_properties - 1;
2328 Handle<Object> maybe_cache(context->map_cache(), isolate()); 2328 Handle<Object> maybe_cache(context->map_cache(), isolate());
2329 if (maybe_cache->IsUndefined()) { 2329 if (maybe_cache->IsUndefined(isolate())) {
2330 // Allocate the new map cache for the native context. 2330 // Allocate the new map cache for the native context.
2331 maybe_cache = NewFixedArray(kMapCacheSize, TENURED); 2331 maybe_cache = NewFixedArray(kMapCacheSize, TENURED);
2332 context->set_map_cache(*maybe_cache); 2332 context->set_map_cache(*maybe_cache);
2333 } else { 2333 } else {
2334 // Check to see whether there is a matching element in the cache. 2334 // Check to see whether there is a matching element in the cache.
2335 Handle<FixedArray> cache = Handle<FixedArray>::cast(maybe_cache); 2335 Handle<FixedArray> cache = Handle<FixedArray>::cast(maybe_cache);
2336 Object* result = cache->get(cache_index); 2336 Object* result = cache->get(cache_index);
2337 if (result->IsWeakCell()) { 2337 if (result->IsWeakCell()) {
2338 WeakCell* cell = WeakCell::cast(result); 2338 WeakCell* cell = WeakCell::cast(result);
2339 if (!cell->cleared()) { 2339 if (!cell->cleared()) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 } 2394 }
2395 2395
2396 2396
2397 Handle<Object> Factory::ToBoolean(bool value) { 2397 Handle<Object> Factory::ToBoolean(bool value) {
2398 return value ? true_value() : false_value(); 2398 return value ? true_value() : false_value();
2399 } 2399 }
2400 2400
2401 2401
2402 } // namespace internal 2402 } // namespace internal
2403 } // namespace v8 2403 } // namespace v8
OLDNEW
« no previous file with comments | « src/elements.cc ('k') | src/frames.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698