| 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/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" | |
| 20 | 19 |
| 21 namespace v8 { | 20 namespace v8 { |
| 22 namespace internal { | 21 namespace internal { |
| 23 | 22 |
| 24 | 23 |
| 25 // Calls the FUNCTION_CALL function and retries it up to three times | 24 // Calls the FUNCTION_CALL function and retries it up to three times |
| 26 // to guarantee that any allocations performed during the call will | 25 // to guarantee that any allocations performed during the call will |
| 27 // succeed if there's enough memory. | 26 // succeed if there's enough memory. |
| 28 // | 27 // |
| 29 // Warning: Do not use the identifiers __object__, __maybe_object__, | 28 // Warning: Do not use the identifiers __object__, __maybe_object__, |
| (...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 return iterator; | 902 return iterator; |
| 904 } | 903 } |
| 905 | 904 |
| 906 Handle<Symbol> Factory::NewSymbol() { | 905 Handle<Symbol> Factory::NewSymbol() { |
| 907 CALL_HEAP_FUNCTION( | 906 CALL_HEAP_FUNCTION( |
| 908 isolate(), | 907 isolate(), |
| 909 isolate()->heap()->AllocateSymbol(), | 908 isolate()->heap()->AllocateSymbol(), |
| 910 Symbol); | 909 Symbol); |
| 911 } | 910 } |
| 912 | 911 |
| 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 } | |
| 935 | 912 |
| 936 Handle<Symbol> Factory::NewPrivateSymbol() { | 913 Handle<Symbol> Factory::NewPrivateSymbol() { |
| 937 Handle<Symbol> symbol = NewSymbol(); | 914 Handle<Symbol> symbol = NewSymbol(); |
| 938 symbol->set_is_private(true); | 915 symbol->set_is_private(true); |
| 939 return symbol; | 916 return symbol; |
| 940 } | 917 } |
| 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 | 918 |
| 949 Handle<JSPromise> Factory::NewJSPromise() { | 919 Handle<JSPromise> Factory::NewJSPromise() { |
| 950 Handle<JSFunction> constructor( | 920 Handle<JSFunction> constructor( |
| 951 isolate()->native_context()->promise_function(), isolate()); | 921 isolate()->native_context()->promise_function(), isolate()); |
| 952 DCHECK(constructor->has_initial_map()); | 922 DCHECK(constructor->has_initial_map()); |
| 953 Handle<Map> map(constructor->initial_map(), isolate()); | 923 Handle<Map> map(constructor->initial_map(), isolate()); |
| 954 | 924 |
| 955 DCHECK(!map->is_prototype_map()); | 925 DCHECK(!map->is_prototype_map()); |
| 956 Handle<JSObject> promise_obj = NewJSObjectFromMap(map); | 926 Handle<JSObject> promise_obj = NewJSObjectFromMap(map); |
| 957 Handle<JSPromise> promise = Handle<JSPromise>::cast(promise_obj); | 927 Handle<JSPromise> promise = Handle<JSPromise>::cast(promise_obj); |
| (...skipping 2024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2982 Handle<AccessorInfo> prototype = | 2952 Handle<AccessorInfo> prototype = |
| 2983 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); | 2953 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); |
| 2984 Descriptor d = Descriptor::AccessorConstant( | 2954 Descriptor d = Descriptor::AccessorConstant( |
| 2985 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs); | 2955 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs); |
| 2986 map->AppendDescriptor(&d); | 2956 map->AppendDescriptor(&d); |
| 2987 } | 2957 } |
| 2988 } | 2958 } |
| 2989 | 2959 |
| 2990 } // namespace internal | 2960 } // namespace internal |
| 2991 } // namespace v8 | 2961 } // namespace v8 |
| OLD | NEW |