Commit dd4cd1fe authored by adamk's avatar adamk Committed by Commit bot

Fix Map/Set creation via the API with nosnap build

The Map and Set maps get overwritten when collection.js executes, so in
a nosnap build we have to wait until it runs before we grab the maps.
To facilitate that, store the functions in the native context as well.

Review URL: https://codereview.chromium.org/1161363002

Cr-Commit-Position: refs/heads/master@{#28743}
parent 4f5337a2
......@@ -1225,14 +1225,14 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> global_object,
Handle<JSFunction> js_map_fun = InstallFunction(
global, "Map", JS_MAP_TYPE, JSMap::kSize,
isolate->initial_object_prototype(), Builtins::kIllegal);
native_context()->set_js_map_map(js_map_fun->initial_map());
native_context()->set_js_map_fun(*js_map_fun);
}
{ // -- S e t
Handle<JSFunction> js_set_fun = InstallFunction(
global, "Set", JS_SET_TYPE, JSSet::kSize,
isolate->initial_object_prototype(), Builtins::kIllegal);
native_context()->set_js_set_map(js_set_fun->initial_map());
native_context()->set_js_set_fun(*js_set_fun);
}
{ // Set up the iterator result object
......@@ -2801,6 +2801,10 @@ bool Genesis::ConfigureGlobalObjects(
JSArray::cast(native_context()->array_function()->prototype()));
native_context()->set_array_buffer_map(
native_context()->array_buffer_fun()->initial_map());
native_context()->set_js_map_map(
native_context()->js_map_fun()->initial_map());
native_context()->set_js_set_map(
native_context()->js_set_fun()->initial_map());
return true;
}
......
......@@ -187,7 +187,9 @@ enum BindingFlags {
V(STRONG_GENERATOR_FUNCTION_MAP_INDEX, Map, strong_generator_function_map) \
V(GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, generator_object_prototype_map) \
V(ITERATOR_RESULT_MAP_INDEX, Map, iterator_result_map) \
V(JS_MAP_FUN_INDEX, JSFunction, js_map_fun) \
V(JS_MAP_MAP_INDEX, Map, js_map_map) \
V(JS_SET_FUN_INDEX, JSFunction, js_set_fun) \
V(JS_SET_MAP_INDEX, Map, js_set_map) \
V(MAP_FROM_ARRAY_INDEX, JSFunction, map_from_array) \
V(SET_FROM_ARRAY_INDEX, JSFunction, set_from_array) \
......@@ -431,7 +433,9 @@ class Context: public FixedArray {
STRONG_GENERATOR_FUNCTION_MAP_INDEX,
GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX,
ITERATOR_RESULT_MAP_INDEX,
JS_MAP_FUN_INDEX,
JS_MAP_MAP_INDEX,
JS_SET_FUN_INDEX,
JS_SET_MAP_INDEX,
MAP_FROM_ARRAY_INDEX,
SET_FROM_ARRAY_INDEX,
......
......@@ -21376,6 +21376,7 @@ TEST(Map) {
v8::Local<v8::Map> map = v8::Map::New(isolate);
CHECK(map->IsObject());
CHECK(map->IsMap());
CHECK(map->GetPrototype()->StrictEquals(CompileRun("Map.prototype")));
CHECK_EQ(0, map->Size());
v8::Local<v8::Value> val = CompileRun("new Map([[1, 2], [3, 4]])");
......@@ -21407,6 +21408,7 @@ TEST(Set) {
v8::Local<v8::Set> set = v8::Set::New(isolate);
CHECK(set->IsObject());
CHECK(set->IsSet());
CHECK(set->GetPrototype()->StrictEquals(CompileRun("Set.prototype")));
CHECK_EQ(0, set->Size());
v8::Local<v8::Value> val = CompileRun("new Set([1, 2])");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment