diff --git a/src/array-iterator.js b/src/array-iterator.js index 9698a07b04..7c71e28100 100644 --- a/src/array-iterator.js +++ b/src/array-iterator.js @@ -10,6 +10,15 @@ var $arrayValues; %CheckIsBootstrapping(); +// ----------------------------------------------------------------------- +// Imports + +var arrayIterationKindSymbol = + utils.GetPrivateSymbol("array_iteration_kind_symbol"); +var arrayIteratorNextIndexSymbol = + utils.GetPrivateSymbol("array_iterator_next_symbol"); +var arrayIteratorObjectSymbol = + utils.GetPrivateSymbol("array_iterator_object_symbol"); var GlobalArray = global.Array; macro TYPED_ARRAYS(FUNCTION) @@ -30,10 +39,7 @@ endmacro TYPED_ARRAYS(COPY_FROM_GLOBAL) -var arrayIteratorObjectSymbol = GLOBAL_PRIVATE("ArrayIterator#object"); -var arrayIteratorNextIndexSymbol = GLOBAL_PRIVATE("ArrayIterator#next"); -var arrayIterationKindSymbol = GLOBAL_PRIVATE("ArrayIterator#kind"); - +// ----------------------------------------------------------------------- function ArrayIterator() {} diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index dfedc7c9aa..30e10e63b5 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -13,6 +13,7 @@ #include "src/extensions/gc-extension.h" #include "src/extensions/statistics-extension.h" #include "src/extensions/trigger-failure-extension.h" +#include "src/heap/heap.h" #include "src/snapshot/natives.h" #include "src/snapshot/snapshot.h" #include "third_party/fdlibm/fdlibm.h" @@ -1795,8 +1796,6 @@ void Bootstrapper::ImportNatives(Isolate* isolate, Handle container) { INSTALL_NATIVE(JSFunction, "URIError", uri_error_function); INSTALL_NATIVE(JSFunction, "MakeError", make_error_function); - INSTALL_NATIVE(Symbol, "promiseStatus", promise_status); - INSTALL_NATIVE(Symbol, "promiseValue", promise_value); INSTALL_NATIVE(JSFunction, "PromiseCreate", promise_create); INSTALL_NATIVE(JSFunction, "PromiseResolve", promise_resolve); INSTALL_NATIVE(JSFunction, "PromiseReject", promise_reject); @@ -1907,6 +1906,21 @@ bool Bootstrapper::InstallJSBuiltins(Isolate* isolate, } +void Bootstrapper::ExportPrivateSymbols(Isolate* isolate, + Handle container) { + HandleScope scope(isolate); +#define EXPORT_PRIVATE_SYMBOL(NAME) \ + Handle NAME##_name = \ + isolate->factory()->NewStringFromAsciiChecked(#NAME); \ + JSObject::AddProperty(container, NAME##_name, isolate->factory()->NAME(), \ + NONE); + + PRIVATE_SYMBOL_LIST(EXPORT_PRIVATE_SYMBOL) + +#undef EXPORT_PRIVATE_SYMBOL +} + + #define EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(id) \ void Genesis::InitializeGlobal_##id() {} @@ -2789,24 +2803,6 @@ bool Genesis::InstallSpecialObjects(Handle native_context) { JSObject::AddProperty(global, natives_key, natives, DONT_ENUM); } - // Expose the stack trace symbol to native JS. - RETURN_ON_EXCEPTION_VALUE(isolate, - JSObject::SetOwnPropertyIgnoreAttributes( - handle(native_context->builtins(), isolate), - factory->InternalizeOneByteString( - STATIC_CHAR_VECTOR("$stackTraceSymbol")), - factory->stack_trace_symbol(), NONE), - false); - - // Expose the internal error symbol to native JS - RETURN_ON_EXCEPTION_VALUE(isolate, - JSObject::SetOwnPropertyIgnoreAttributes( - handle(native_context->builtins(), isolate), - factory->InternalizeOneByteString( - STATIC_CHAR_VECTOR("$internalErrorSymbol")), - factory->internal_error_symbol(), NONE), - false); - // Expose the debug global object in global if a name for it is specified. if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) { // If loading fails we just bail out without installing the diff --git a/src/bootstrapper.h b/src/bootstrapper.h index 4a6503eae6..610610ba2b 100644 --- a/src/bootstrapper.h +++ b/src/bootstrapper.h @@ -123,6 +123,8 @@ class Bootstrapper final { static void ImportExperimentalNatives(Isolate* isolate, Handle container); static bool InstallJSBuiltins(Isolate* isolate, Handle container); + static void ExportPrivateSymbols(Isolate* isolate, + Handle container); private: Isolate* isolate_; diff --git a/src/collection.js b/src/collection.js index 6d43384e1c..07d7c5c61b 100644 --- a/src/collection.js +++ b/src/collection.js @@ -16,6 +16,7 @@ var $getExistingHash; var GlobalMap = global.Map; var GlobalObject = global.Object; var GlobalSet = global.Set; +var hashCodeSymbol = utils.GetPrivateSymbol("hash_code_symbol"); var IntRandom; utils.Import(function(from) { @@ -90,8 +91,6 @@ function ComputeIntegerHash(key, seed) { } %SetForceInlineFlag(ComputeIntegerHash); -var hashCodeSymbol = GLOBAL_PRIVATE("hash_code_symbol"); - function GetExistingHash(key) { if (%_IsSmi(key)) { return ComputeIntegerHash(key, 0); diff --git a/src/contexts.h b/src/contexts.h index 9e6fc0e4f5..edc5091a93 100644 --- a/src/contexts.h +++ b/src/contexts.h @@ -160,8 +160,6 @@ enum BindingFlags { V(TYPE_ERROR_FUNCTION_INDEX, JSFunction, type_error_function) \ V(URI_ERROR_FUNCTION_INDEX, JSFunction, uri_error_function) \ V(MAKE_ERROR_FUNCTION_INDEX, JSFunction, make_error_function) \ - V(PROMISE_STATUS_INDEX, Symbol, promise_status) \ - V(PROMISE_VALUE_INDEX, Symbol, promise_value) \ V(PROMISE_CREATE_INDEX, JSFunction, promise_create) \ V(PROMISE_RESOLVE_INDEX, JSFunction, promise_resolve) \ V(PROMISE_REJECT_INDEX, JSFunction, promise_reject) \ diff --git a/src/debug/mirrors.js b/src/debug/mirrors.js index f47a2d058e..1b45b93d8d 100644 --- a/src/debug/mirrors.js +++ b/src/debug/mirrors.js @@ -13,6 +13,8 @@ var GlobalArray = global.Array; var IsNaN = global.isNaN; var JSONStringify = global.JSON.stringify; var MathMin = global.Math.min; +var promiseStatusSymbol = utils.GetPrivateSymbol("promise_status_symbol"); +var promiseValueSymbol = utils.GetPrivateSymbol("promise_value_symbol"); var ToBoolean; var ToString; @@ -109,7 +111,7 @@ function ClearMirrorCache(value) { function ObjectIsPromise(value) { try { return IS_SPEC_OBJECT(value) && - !IS_UNDEFINED(%DebugGetProperty(value, builtins.$promiseStatus)); + !IS_UNDEFINED(%DebugGetProperty(value, promiseStatusSymbol)); } catch (e) { return false; } @@ -1326,7 +1328,7 @@ inherits(PromiseMirror, ObjectMirror); function PromiseGetStatus_(value) { - var status = %DebugGetProperty(value, builtins.$promiseStatus); + var status = %DebugGetProperty(value, promiseStatusSymbol); if (status == 0) return "pending"; if (status == 1) return "resolved"; return "rejected"; @@ -1334,7 +1336,7 @@ function PromiseGetStatus_(value) { function PromiseGetValue_(value) { - return %DebugGetProperty(value, builtins.$promiseValue); + return %DebugGetProperty(value, promiseValueSymbol); } diff --git a/src/heap/heap.cc b/src/heap/heap.cc index eb5a609705..fbffd9f18b 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -3392,19 +3392,6 @@ void Heap::CreateInitialObjects() { } -void Heap::AddPrivateGlobalSymbols(Handle private_intern_table) { -#define ADD_SYMBOL_TO_PRIVATE_INTERN_TABLE(name_arg) \ - { \ - Handle symbol(Symbol::cast(roots_[k##name_arg##RootIndex])); \ - Handle name_arg##d(String::cast(symbol->name())); \ - JSObject::AddProperty(Handle::cast(private_intern_table), \ - name_arg##d, symbol, NONE); \ - } - PRIVATE_SYMBOL_LIST(ADD_SYMBOL_TO_PRIVATE_INTERN_TABLE) -#undef ADD_SYMBOL_TO_PRIVATE_INTERN_TABLE -} - - bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) { switch (root_index) { case kStoreBufferTopRootIndex: diff --git a/src/heap/heap.h b/src/heap/heap.h index 80d29c4550..8691b1ae93 100644 --- a/src/heap/heap.h +++ b/src/heap/heap.h @@ -266,9 +266,6 @@ namespace internal { V(WeakSet_string, "WeakSet") \ V(for_string, "for") \ V(for_api_string, "for_api") \ - V(for_intern_string, "for_intern") \ - V(private_api_string, "private_api") \ - V(private_intern_string, "private_intern") \ V(Date_string, "Date") \ V(char_at_string, "CharAt") \ V(undefined_string, "undefined") \ @@ -299,31 +296,47 @@ namespace internal { V(Error_string, "Error") \ V(RegExp_string, "RegExp") -#define PRIVATE_SYMBOL_LIST(V) \ - V(nonextensible_symbol) \ - V(sealed_symbol) \ - V(hash_code_symbol) \ - V(frozen_symbol) \ - V(nonexistent_symbol) \ - V(elements_transition_symbol) \ - V(observed_symbol) \ - V(uninitialized_symbol) \ - V(megamorphic_symbol) \ - V(premonomorphic_symbol) \ - V(stack_trace_symbol) \ - V(detailed_stack_trace_symbol) \ - V(normal_ic_symbol) \ - V(home_object_symbol) \ - V(intl_initialized_marker_symbol) \ - V(intl_impl_object_symbol) \ - V(promise_debug_marker_symbol) \ - V(promise_has_handler_symbol) \ - V(class_start_position_symbol) \ - V(class_end_position_symbol) \ - V(error_start_pos_symbol) \ - V(error_end_pos_symbol) \ - V(error_script_symbol) \ - V(internal_error_symbol) +#define PRIVATE_SYMBOL_LIST(V) \ + V(array_iteration_kind_symbol) \ + V(array_iterator_next_symbol) \ + V(array_iterator_object_symbol) \ + V(call_site_function_symbol) \ + V(call_site_position_symbol) \ + V(call_site_receiver_symbol) \ + V(call_site_strict_symbol) \ + V(class_end_position_symbol) \ + V(class_start_position_symbol) \ + V(detailed_stack_trace_symbol) \ + V(elements_transition_symbol) \ + V(error_end_pos_symbol) \ + V(error_script_symbol) \ + V(error_start_pos_symbol) \ + V(formatted_stack_trace_symbol) \ + V(frozen_symbol) \ + V(hash_code_symbol) \ + V(home_object_symbol) \ + V(internal_error_symbol) \ + V(intl_impl_object_symbol) \ + V(intl_initialized_marker_symbol) \ + V(megamorphic_symbol) \ + V(nonexistent_symbol) \ + V(nonextensible_symbol) \ + V(normal_ic_symbol) \ + V(observed_symbol) \ + V(premonomorphic_symbol) \ + V(promise_debug_marker_symbol) \ + V(promise_has_handler_symbol) \ + V(promise_on_resolve_symbol) \ + V(promise_on_reject_symbol) \ + V(promise_raw_symbol) \ + V(promise_status_symbol) \ + V(promise_value_symbol) \ + V(sealed_symbol) \ + V(stack_trace_symbol) \ + V(string_iterator_iterated_string_symbol) \ + V(string_iterator_next_index_symbol) \ + V(uninitialized_symbol) + #define PUBLIC_SYMBOL_LIST(V) \ V(has_instance_symbol, symbolHasInstance, Symbol.hasInstance) \ @@ -1805,8 +1818,6 @@ class Heap { static const ConstantStringTable constant_string_table[]; static const StructTable struct_table[]; - void AddPrivateGlobalSymbols(Handle private_intern_table); - struct GCCallbackPair { GCCallbackPair(v8::Isolate::GCCallback callback, GCType gc_type, bool pass_isolate) diff --git a/src/isolate.cc b/src/isolate.cc index b6c5da02ac..6ff7d47db6 100644 --- a/src/isolate.cc +++ b/src/isolate.cc @@ -2561,9 +2561,6 @@ Handle Isolate::GetSymbolRegistry() { SetUpSubregistry(registry, map, "for"); SetUpSubregistry(registry, map, "for_api"); SetUpSubregistry(registry, map, "keyFor"); - SetUpSubregistry(registry, map, "private_api"); - heap()->AddPrivateGlobalSymbols( - SetUpSubregistry(registry, map, "private_intern")); } return Handle::cast(factory()->symbol_registry()); } diff --git a/src/macros.py b/src/macros.py index 49b2cad8bd..2cf9372410 100644 --- a/src/macros.py +++ b/src/macros.py @@ -159,14 +159,11 @@ macro SHOULD_CREATE_WRAPPER(functionName, receiver) = (!IS_SPEC_OBJECT(receiver) macro HAS_INDEX(array, index, is_array) = ((is_array && %_HasFastPackedElements(%IS_VAR(array))) ? (index < array.length) : (index in array)); # Private names. -macro GLOBAL_PRIVATE(name) = (%CreateGlobalPrivateSymbol(name)); -macro NEW_PRIVATE(name) = (%CreatePrivateSymbol(name)); macro IS_PRIVATE(sym) = (%SymbolIsPrivate(sym)); macro HAS_PRIVATE(obj, sym) = (%HasOwnProperty(obj, sym)); macro HAS_DEFINED_PRIVATE(obj, sym) = (!IS_UNDEFINED(obj[sym])); macro GET_PRIVATE(obj, sym) = (obj[sym]); macro SET_PRIVATE(obj, sym, val) = (obj[sym] = val); -macro DELETE_PRIVATE(obj, sym) = (delete obj[sym]); # Constants. The compiler constant folds them. define NAN = $NaN; diff --git a/src/messages.cc b/src/messages.cc index 6683443e52..908ee08e4b 100644 --- a/src/messages.cc +++ b/src/messages.cc @@ -138,37 +138,50 @@ base::SmartArrayPointer MessageHandler::GetLocalizedMessage( } -Handle CallSite::GetFileName(Isolate* isolate) { - Handle script(fun_->shared()->script(), isolate); - if (script->IsScript()) { - return Handle(Handle