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

Side by Side Diff: src/factory.cc

Issue 2900703002: [es2015] Precompute the descriptive string for symbols. (Closed)
Patch Set: Address feedback. Created 3 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/factory.h ('k') | src/heap-symbols.h » ('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/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
11 #include "src/bootstrapper.h" 11 #include "src/bootstrapper.h"
12 #include "src/compiler.h" 12 #include "src/compiler.h"
13 #include "src/conversions.h" 13 #include "src/conversions.h"
14 #include "src/isolate-inl.h" 14 #include "src/isolate-inl.h"
15 #include "src/macro-assembler.h" 15 #include "src/macro-assembler.h"
16 #include "src/objects/frame-array-inl.h" 16 #include "src/objects/frame-array-inl.h"
17 #include "src/objects/module-info.h" 17 #include "src/objects/module-info.h"
18 #include "src/objects/scope-info.h" 18 #include "src/objects/scope-info.h"
19 #include "src/string-builder.h"
19 20
20 namespace v8 { 21 namespace v8 {
21 namespace internal { 22 namespace internal {
22 23
23 24
24 // Calls the FUNCTION_CALL function and retries it up to three times 25 // Calls the FUNCTION_CALL function and retries it up to three times
25 // to guarantee that any allocations performed during the call will 26 // to guarantee that any allocations performed during the call will
26 // succeed if there's enough memory. 27 // succeed if there's enough memory.
27 // 28 //
28 // Warning: Do not use the identifiers __object__, __maybe_object__, 29 // Warning: Do not use the identifiers __object__, __maybe_object__,
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 return iterator; 903 return iterator;
903 } 904 }
904 905
905 Handle<Symbol> Factory::NewSymbol() { 906 Handle<Symbol> Factory::NewSymbol() {
906 CALL_HEAP_FUNCTION( 907 CALL_HEAP_FUNCTION(
907 isolate(), 908 isolate(),
908 isolate()->heap()->AllocateSymbol(), 909 isolate()->heap()->AllocateSymbol(),
909 Symbol); 910 Symbol);
910 } 911 }
911 912
913 MaybeHandle<Symbol> Factory::NewSymbol(Handle<Object> name) {
914 DCHECK(name->IsString() || name->IsUndefined(isolate()));
915 Handle<Symbol> symbol = NewSymbol();
916 if (name->IsString()) {
917 // Compute the descriptive string for the {symbol}.
918 Handle<String> descriptive_string;
919 IncrementalStringBuilder builder(isolate());
920 builder.AppendCString("Symbol(");
921 builder.AppendString(Handle<String>::cast(name));
922 builder.AppendCharacter(')');
923 ASSIGN_RETURN_ON_EXCEPTION(isolate(), descriptive_string, builder.Finish(),
924 Symbol);
925
926 // Make sure those strings are flattened.
927 name = String::Flatten(Handle<String>::cast(name), TENURED);
928 descriptive_string = String::Flatten(descriptive_string, TENURED);
929
930 symbol->set_name(String::cast(*name));
931 symbol->set_descriptive_string(*descriptive_string);
932 }
933 return symbol;
934 }
912 935
913 Handle<Symbol> Factory::NewPrivateSymbol() { 936 Handle<Symbol> Factory::NewPrivateSymbol() {
914 Handle<Symbol> symbol = NewSymbol(); 937 Handle<Symbol> symbol = NewSymbol();
915 symbol->set_is_private(true); 938 symbol->set_is_private(true);
916 return symbol; 939 return symbol;
917 } 940 }
918 941
942 MaybeHandle<Symbol> Factory::NewPrivateSymbol(Handle<Object> name) {
943 Handle<Symbol> symbol;
944 ASSIGN_RETURN_ON_EXCEPTION(isolate(), symbol, NewSymbol(name), Symbol);
945 symbol->set_is_private(true);
946 return symbol;
947 }
948
919 Handle<JSPromise> Factory::NewJSPromise() { 949 Handle<JSPromise> Factory::NewJSPromise() {
920 Handle<JSFunction> constructor( 950 Handle<JSFunction> constructor(
921 isolate()->native_context()->promise_function(), isolate()); 951 isolate()->native_context()->promise_function(), isolate());
922 DCHECK(constructor->has_initial_map()); 952 DCHECK(constructor->has_initial_map());
923 Handle<Map> map(constructor->initial_map(), isolate()); 953 Handle<Map> map(constructor->initial_map(), isolate());
924 954
925 DCHECK(!map->is_prototype_map()); 955 DCHECK(!map->is_prototype_map());
926 Handle<JSObject> promise_obj = NewJSObjectFromMap(map); 956 Handle<JSObject> promise_obj = NewJSObjectFromMap(map);
927 Handle<JSPromise> promise = Handle<JSPromise>::cast(promise_obj); 957 Handle<JSPromise> promise = Handle<JSPromise>::cast(promise_obj);
928 promise->set_status(v8::Promise::kPending); 958 promise->set_status(v8::Promise::kPending);
(...skipping 2023 matching lines...) Expand 10 before | Expand all | Expand 10 after
2952 Handle<AccessorInfo> prototype = 2982 Handle<AccessorInfo> prototype =
2953 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); 2983 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs);
2954 Descriptor d = Descriptor::AccessorConstant( 2984 Descriptor d = Descriptor::AccessorConstant(
2955 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs); 2985 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs);
2956 map->AppendDescriptor(&d); 2986 map->AppendDescriptor(&d);
2957 } 2987 }
2958 } 2988 }
2959 2989
2960 } // namespace internal 2990 } // namespace internal
2961 } // namespace v8 2991 } // namespace v8
OLDNEW
« no previous file with comments | « src/factory.h ('k') | src/heap-symbols.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698