OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 isolate, value, | 266 isolate, value, |
267 CreateLiteralBoilerplate(isolate, literals, array), | 267 CreateLiteralBoilerplate(isolate, literals, array), |
268 Object); | 268 Object); |
269 } | 269 } |
270 MaybeHandle<Object> maybe_result; | 270 MaybeHandle<Object> maybe_result; |
271 uint32_t element_index = 0; | 271 uint32_t element_index = 0; |
272 StoreMode mode = value->IsJSObject() ? FORCE_FIELD : ALLOW_AS_CONSTANT; | 272 StoreMode mode = value->IsJSObject() ? FORCE_FIELD : ALLOW_AS_CONSTANT; |
273 if (key->IsInternalizedString()) { | 273 if (key->IsInternalizedString()) { |
274 if (Handle<String>::cast(key)->AsArrayIndex(&element_index)) { | 274 if (Handle<String>::cast(key)->AsArrayIndex(&element_index)) { |
275 // Array index as string (uint32). | 275 // Array index as string (uint32). |
276 maybe_result = JSObject::SetOwnElement( | 276 if (value->IsUninitialized()) { |
277 boilerplate, element_index, value, SLOPPY); | 277 maybe_result = value; |
| 278 } else { |
| 279 maybe_result = JSObject::SetOwnElement( |
| 280 boilerplate, element_index, value, SLOPPY); |
| 281 } |
278 } else { | 282 } else { |
279 Handle<String> name(String::cast(*key)); | 283 Handle<String> name(String::cast(*key)); |
280 ASSERT(!name->AsArrayIndex(&element_index)); | 284 ASSERT(!name->AsArrayIndex(&element_index)); |
281 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( | 285 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( |
282 boilerplate, name, value, NONE, | 286 boilerplate, name, value, NONE, |
283 value_type, mode); | 287 value_type, mode); |
284 } | 288 } |
285 } else if (key->ToArrayIndex(&element_index)) { | 289 } else if (key->ToArrayIndex(&element_index)) { |
286 // Array index (uint32). | 290 // Array index (uint32). |
287 maybe_result = JSObject::SetOwnElement( | 291 if (value->IsUninitialized()) { |
288 boilerplate, element_index, value, SLOPPY); | 292 maybe_result = value; |
| 293 } else { |
| 294 maybe_result = JSObject::SetOwnElement( |
| 295 boilerplate, element_index, value, SLOPPY); |
| 296 } |
289 } else { | 297 } else { |
290 // Non-uint32 number. | 298 // Non-uint32 number. |
291 ASSERT(key->IsNumber()); | 299 ASSERT(key->IsNumber()); |
292 double num = key->Number(); | 300 double num = key->Number(); |
293 char arr[100]; | 301 char arr[100]; |
294 Vector<char> buffer(arr, ARRAY_SIZE(arr)); | 302 Vector<char> buffer(arr, ARRAY_SIZE(arr)); |
295 const char* str = DoubleToCString(num, buffer); | 303 const char* str = DoubleToCString(num, buffer); |
296 Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str); | 304 Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str); |
297 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( | 305 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( |
298 boilerplate, name, value, NONE, | 306 boilerplate, name, value, NONE, |
(...skipping 1789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2088 Handle<Map> old_map(object->map()); | 2096 Handle<Map> old_map(object->map()); |
2089 RUNTIME_ASSERT(!old_map->is_access_check_needed()); | 2097 RUNTIME_ASSERT(!old_map->is_access_check_needed()); |
2090 // Copy map so it won't interfere constructor's initial map. | 2098 // Copy map so it won't interfere constructor's initial map. |
2091 Handle<Map> new_map = Map::Copy(old_map); | 2099 Handle<Map> new_map = Map::Copy(old_map); |
2092 new_map->set_is_access_check_needed(true); | 2100 new_map->set_is_access_check_needed(true); |
2093 JSObject::MigrateToMap(object, new_map); | 2101 JSObject::MigrateToMap(object, new_map); |
2094 return isolate->heap()->undefined_value(); | 2102 return isolate->heap()->undefined_value(); |
2095 } | 2103 } |
2096 | 2104 |
2097 | 2105 |
2098 // Transform getter or setter into something DefineAccessor can handle. | |
2099 static Handle<Object> InstantiateAccessorComponent(Isolate* isolate, | |
2100 Handle<Object> component) { | |
2101 if (component->IsUndefined()) return isolate->factory()->null_value(); | |
2102 Handle<FunctionTemplateInfo> info = | |
2103 Handle<FunctionTemplateInfo>::cast(component); | |
2104 return Utils::OpenHandle(*Utils::ToLocal(info)->GetFunction()); | |
2105 } | |
2106 | |
2107 | |
2108 RUNTIME_FUNCTION(Runtime_SetAccessorProperty) { | |
2109 HandleScope scope(isolate); | |
2110 ASSERT(args.length() == 5); | |
2111 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | |
2112 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | |
2113 CONVERT_ARG_HANDLE_CHECKED(Object, getter, 2); | |
2114 CONVERT_ARG_HANDLE_CHECKED(Object, setter, 3); | |
2115 CONVERT_SMI_ARG_CHECKED(attribute, 4); | |
2116 RUNTIME_ASSERT(getter->IsUndefined() || getter->IsFunctionTemplateInfo()); | |
2117 RUNTIME_ASSERT(setter->IsUndefined() || setter->IsFunctionTemplateInfo()); | |
2118 RUNTIME_ASSERT(PropertyDetails::AttributesField::is_valid( | |
2119 static_cast<PropertyAttributes>(attribute))); | |
2120 JSObject::DefineAccessor(object, | |
2121 name, | |
2122 InstantiateAccessorComponent(isolate, getter), | |
2123 InstantiateAccessorComponent(isolate, setter), | |
2124 static_cast<PropertyAttributes>(attribute)); | |
2125 return isolate->heap()->undefined_value(); | |
2126 } | |
2127 | |
2128 | |
2129 static Object* ThrowRedeclarationError(Isolate* isolate, Handle<String> name) { | 2106 static Object* ThrowRedeclarationError(Isolate* isolate, Handle<String> name) { |
2130 HandleScope scope(isolate); | 2107 HandleScope scope(isolate); |
2131 Handle<Object> args[1] = { name }; | 2108 Handle<Object> args[1] = { name }; |
2132 Handle<Object> error = isolate->factory()->NewTypeError( | 2109 Handle<Object> error = isolate->factory()->NewTypeError( |
2133 "var_redeclaration", HandleVector(args, 1)); | 2110 "var_redeclaration", HandleVector(args, 1)); |
2134 return isolate->Throw(*error); | 2111 return isolate->Throw(*error); |
2135 } | 2112 } |
2136 | 2113 |
2137 | 2114 |
2138 RUNTIME_FUNCTION(RuntimeHidden_DeclareGlobals) { | 2115 RUNTIME_FUNCTION(RuntimeHidden_DeclareGlobals) { |
(...skipping 2891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5030 return obj->IsUndefined() || obj->IsSpecFunction() || obj->IsNull(); | 5007 return obj->IsUndefined() || obj->IsSpecFunction() || obj->IsNull(); |
5031 } | 5008 } |
5032 | 5009 |
5033 | 5010 |
5034 // Implements part of 8.12.9 DefineOwnProperty. | 5011 // Implements part of 8.12.9 DefineOwnProperty. |
5035 // There are 3 cases that lead here: | 5012 // There are 3 cases that lead here: |
5036 // Step 4b - define a new accessor property. | 5013 // Step 4b - define a new accessor property. |
5037 // Steps 9c & 12 - replace an existing data property with an accessor property. | 5014 // Steps 9c & 12 - replace an existing data property with an accessor property. |
5038 // Step 12 - update an existing accessor property with an accessor or generic | 5015 // Step 12 - update an existing accessor property with an accessor or generic |
5039 // descriptor. | 5016 // descriptor. |
5040 RUNTIME_FUNCTION(Runtime_DefineOrRedefineAccessorProperty) { | 5017 RUNTIME_FUNCTION(Runtime_DefineAccessorPropertyUnchecked) { |
5041 HandleScope scope(isolate); | 5018 HandleScope scope(isolate); |
5042 ASSERT(args.length() == 5); | 5019 ASSERT(args.length() == 5); |
5043 CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); | 5020 CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); |
5044 RUNTIME_ASSERT(!obj->IsNull()); | 5021 RUNTIME_ASSERT(!obj->IsNull()); |
5045 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | 5022 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); |
5046 CONVERT_ARG_HANDLE_CHECKED(Object, getter, 2); | 5023 CONVERT_ARG_HANDLE_CHECKED(Object, getter, 2); |
5047 RUNTIME_ASSERT(IsValidAccessor(getter)); | 5024 RUNTIME_ASSERT(IsValidAccessor(getter)); |
5048 CONVERT_ARG_HANDLE_CHECKED(Object, setter, 3); | 5025 CONVERT_ARG_HANDLE_CHECKED(Object, setter, 3); |
5049 RUNTIME_ASSERT(IsValidAccessor(setter)); | 5026 RUNTIME_ASSERT(IsValidAccessor(setter)); |
5050 CONVERT_SMI_ARG_CHECKED(unchecked, 4); | 5027 CONVERT_SMI_ARG_CHECKED(unchecked, 4); |
5051 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | 5028 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
5052 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); | 5029 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); |
5053 | 5030 |
5054 bool fast = obj->HasFastProperties(); | 5031 bool fast = obj->HasFastProperties(); |
5055 // DefineAccessor checks access rights. | 5032 // DefineAccessor checks access rights. |
5056 JSObject::DefineAccessor(obj, name, getter, setter, attr); | 5033 JSObject::DefineAccessor(obj, name, getter, setter, attr); |
5057 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 5034 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
5058 if (fast) JSObject::TransformToFastProperties(obj, 0); | 5035 if (fast) JSObject::TransformToFastProperties(obj, 0); |
5059 return isolate->heap()->undefined_value(); | 5036 return isolate->heap()->undefined_value(); |
5060 } | 5037 } |
5061 | 5038 |
5062 | 5039 |
5063 // Implements part of 8.12.9 DefineOwnProperty. | 5040 // Implements part of 8.12.9 DefineOwnProperty. |
5064 // There are 3 cases that lead here: | 5041 // There are 3 cases that lead here: |
5065 // Step 4a - define a new data property. | 5042 // Step 4a - define a new data property. |
5066 // Steps 9b & 12 - replace an existing accessor property with a data property. | 5043 // Steps 9b & 12 - replace an existing accessor property with a data property. |
5067 // Step 12 - update an existing data property with a data or generic | 5044 // Step 12 - update an existing data property with a data or generic |
5068 // descriptor. | 5045 // descriptor. |
5069 RUNTIME_FUNCTION(Runtime_DefineOrRedefineDataProperty) { | 5046 RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) { |
5070 HandleScope scope(isolate); | 5047 HandleScope scope(isolate); |
5071 ASSERT(args.length() == 4); | 5048 ASSERT(args.length() == 4); |
5072 CONVERT_ARG_HANDLE_CHECKED(JSObject, js_object, 0); | 5049 CONVERT_ARG_HANDLE_CHECKED(JSObject, js_object, 0); |
5073 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | 5050 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); |
5074 CONVERT_ARG_HANDLE_CHECKED(Object, obj_value, 2); | 5051 CONVERT_ARG_HANDLE_CHECKED(Object, obj_value, 2); |
5075 CONVERT_SMI_ARG_CHECKED(unchecked, 3); | 5052 CONVERT_SMI_ARG_CHECKED(unchecked, 3); |
5076 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | 5053 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
5077 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); | 5054 PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); |
5078 | 5055 |
5079 // Check access rights if needed. | 5056 // Check access rights if needed. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5117 ALLOW_AS_CONSTANT, | 5094 ALLOW_AS_CONSTANT, |
5118 JSReceiver::PERFORM_EXTENSIBILITY_CHECK, | 5095 JSReceiver::PERFORM_EXTENSIBILITY_CHECK, |
5119 JSReceiver::MAY_BE_STORE_FROM_KEYED, | 5096 JSReceiver::MAY_BE_STORE_FROM_KEYED, |
5120 JSObject::DONT_FORCE_FIELD)); | 5097 JSObject::DONT_FORCE_FIELD)); |
5121 return *result; | 5098 return *result; |
5122 } | 5099 } |
5123 | 5100 |
5124 Handle<Object> result; | 5101 Handle<Object> result; |
5125 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 5102 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
5126 isolate, result, | 5103 isolate, result, |
5127 Runtime::ForceSetObjectProperty( | 5104 Runtime::DefineObjectProperty( |
5128 js_object, name, obj_value, attr, | 5105 js_object, name, obj_value, attr, |
5129 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED)); | 5106 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED)); |
5130 return *result; | 5107 return *result; |
5131 } | 5108 } |
5132 | 5109 |
5133 | 5110 |
5134 // Return property without being observable by accessors or interceptors. | 5111 // Return property without being observable by accessors or interceptors. |
5135 RUNTIME_FUNCTION(Runtime_GetDataProperty) { | 5112 RUNTIME_FUNCTION(Runtime_GetDataProperty) { |
5136 HandleScope scope(isolate); | 5113 HandleScope scope(isolate); |
5137 ASSERT(args.length() == 2); | 5114 ASSERT(args.length() == 2); |
5138 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 5115 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
5139 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); | 5116 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); |
5140 return *JSObject::GetDataProperty(object, key); | 5117 return *JSObject::GetDataProperty(object, key); |
5141 } | 5118 } |
5142 | 5119 |
5143 | 5120 |
5144 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, | 5121 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
5145 Handle<Object> object, | 5122 Handle<Object> object, |
5146 Handle<Object> key, | 5123 Handle<Object> key, |
5147 Handle<Object> value, | 5124 Handle<Object> value, |
5148 PropertyAttributes attr, | 5125 StrictMode strict_mode, |
5149 StrictMode strict_mode) { | 5126 PropertyAttributes attrs) { |
5150 SetPropertyMode set_mode = attr == NONE ? SET_PROPERTY : DEFINE_PROPERTY; | |
5151 | |
5152 if (object->IsUndefined() || object->IsNull()) { | 5127 if (object->IsUndefined() || object->IsNull()) { |
5153 Handle<Object> args[2] = { key, object }; | 5128 Handle<Object> args[2] = { key, object }; |
5154 Handle<Object> error = | 5129 Handle<Object> error = |
5155 isolate->factory()->NewTypeError("non_object_property_store", | 5130 isolate->factory()->NewTypeError("non_object_property_store", |
5156 HandleVector(args, 2)); | 5131 HandleVector(args, 2)); |
5157 return isolate->Throw<Object>(error); | 5132 return isolate->Throw<Object>(error); |
5158 } | 5133 } |
5159 | 5134 |
5160 if (object->IsJSProxy()) { | 5135 if (object->IsJSProxy()) { |
5161 Handle<Object> name_object; | 5136 Handle<Object> name_object; |
5162 if (key->IsSymbol()) { | 5137 if (key->IsSymbol()) { |
5163 name_object = key; | 5138 name_object = key; |
5164 } else { | 5139 } else { |
5165 ASSIGN_RETURN_ON_EXCEPTION( | 5140 ASSIGN_RETURN_ON_EXCEPTION( |
5166 isolate, name_object, Execution::ToString(isolate, key), Object); | 5141 isolate, name_object, Execution::ToString(isolate, key), Object); |
5167 } | 5142 } |
5168 Handle<Name> name = Handle<Name>::cast(name_object); | 5143 Handle<Name> name = Handle<Name>::cast(name_object); |
5169 return JSReceiver::SetProperty(Handle<JSProxy>::cast(object), name, value, | 5144 return JSReceiver::SetProperty(Handle<JSProxy>::cast(object), name, value, |
5170 attr, | 5145 attrs, strict_mode); |
5171 strict_mode); | |
5172 } | 5146 } |
5173 | 5147 |
5174 // If the object isn't a JavaScript object, we ignore the store. | 5148 // If the object isn't a JavaScript object, we ignore the store. |
5175 if (!object->IsJSObject()) return value; | 5149 if (!object->IsJSObject()) return value; |
5176 | 5150 |
5177 Handle<JSObject> js_object = Handle<JSObject>::cast(object); | 5151 Handle<JSObject> js_object = Handle<JSObject>::cast(object); |
5178 | 5152 |
5179 // Check if the given key is an array index. | 5153 // Check if the given key is an array index. |
5180 uint32_t index; | 5154 uint32_t index; |
5181 if (key->ToArrayIndex(&index)) { | 5155 if (key->ToArrayIndex(&index)) { |
(...skipping 11 matching lines...) Expand all Loading... |
5193 JSObject::ValidateElements(js_object); | 5167 JSObject::ValidateElements(js_object); |
5194 if (js_object->HasExternalArrayElements() || | 5168 if (js_object->HasExternalArrayElements() || |
5195 js_object->HasFixedTypedArrayElements()) { | 5169 js_object->HasFixedTypedArrayElements()) { |
5196 if (!value->IsNumber() && !value->IsUndefined()) { | 5170 if (!value->IsNumber() && !value->IsUndefined()) { |
5197 ASSIGN_RETURN_ON_EXCEPTION( | 5171 ASSIGN_RETURN_ON_EXCEPTION( |
5198 isolate, value, Execution::ToNumber(isolate, value), Object); | 5172 isolate, value, Execution::ToNumber(isolate, value), Object); |
5199 } | 5173 } |
5200 } | 5174 } |
5201 | 5175 |
5202 MaybeHandle<Object> result = JSObject::SetElement( | 5176 MaybeHandle<Object> result = JSObject::SetElement( |
5203 js_object, index, value, attr, strict_mode, true, set_mode); | 5177 js_object, index, value, attrs, strict_mode, true, SET_PROPERTY); |
5204 JSObject::ValidateElements(js_object); | 5178 JSObject::ValidateElements(js_object); |
5205 | 5179 |
5206 return result.is_null() ? result : value; | 5180 return result.is_null() ? result : value; |
5207 } | 5181 } |
5208 | 5182 |
5209 if (key->IsName()) { | 5183 if (key->IsName()) { |
5210 Handle<Name> name = Handle<Name>::cast(key); | 5184 Handle<Name> name = Handle<Name>::cast(key); |
5211 if (name->AsArrayIndex(&index)) { | 5185 if (name->AsArrayIndex(&index)) { |
5212 if (js_object->HasExternalArrayElements()) { | 5186 if (js_object->HasExternalArrayElements()) { |
5213 if (!value->IsNumber() && !value->IsUndefined()) { | 5187 if (!value->IsNumber() && !value->IsUndefined()) { |
5214 ASSIGN_RETURN_ON_EXCEPTION( | 5188 ASSIGN_RETURN_ON_EXCEPTION( |
5215 isolate, value, Execution::ToNumber(isolate, value), Object); | 5189 isolate, value, Execution::ToNumber(isolate, value), Object); |
5216 } | 5190 } |
5217 } | 5191 } |
5218 return JSObject::SetElement(js_object, index, value, attr, | 5192 return JSObject::SetElement(js_object, index, value, attrs, |
5219 strict_mode, true, set_mode); | 5193 strict_mode, true, SET_PROPERTY); |
5220 } else { | 5194 } else { |
5221 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); | 5195 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
5222 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); | 5196 return JSReceiver::SetProperty( |
| 5197 js_object, name, value, attrs, strict_mode); |
5223 } | 5198 } |
5224 } | 5199 } |
5225 | 5200 |
5226 // Call-back into JavaScript to convert the key to a string. | 5201 // Call-back into JavaScript to convert the key to a string. |
5227 Handle<Object> converted; | 5202 Handle<Object> converted; |
5228 ASSIGN_RETURN_ON_EXCEPTION( | 5203 ASSIGN_RETURN_ON_EXCEPTION( |
5229 isolate, converted, Execution::ToString(isolate, key), Object); | 5204 isolate, converted, Execution::ToString(isolate, key), Object); |
5230 Handle<String> name = Handle<String>::cast(converted); | 5205 Handle<String> name = Handle<String>::cast(converted); |
5231 | 5206 |
5232 if (name->AsArrayIndex(&index)) { | 5207 if (name->AsArrayIndex(&index)) { |
5233 return JSObject::SetElement(js_object, index, value, attr, | 5208 return JSObject::SetElement(js_object, index, value, attrs, |
5234 strict_mode, true, set_mode); | 5209 strict_mode, true, SET_PROPERTY); |
5235 } else { | 5210 } else { |
5236 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); | 5211 return JSReceiver::SetProperty(js_object, name, value, attrs, strict_mode); |
5237 } | 5212 } |
5238 } | 5213 } |
5239 | 5214 |
5240 | 5215 |
5241 MaybeHandle<Object> Runtime::ForceSetObjectProperty( | 5216 MaybeHandle<Object> Runtime::DefineObjectProperty( |
5242 Handle<JSObject> js_object, | 5217 Handle<JSObject> js_object, |
5243 Handle<Object> key, | 5218 Handle<Object> key, |
5244 Handle<Object> value, | 5219 Handle<Object> value, |
5245 PropertyAttributes attr, | 5220 PropertyAttributes attr, |
5246 JSReceiver::StoreFromKeyed store_from_keyed) { | 5221 JSReceiver::StoreFromKeyed store_from_keyed) { |
5247 Isolate* isolate = js_object->GetIsolate(); | 5222 Isolate* isolate = js_object->GetIsolate(); |
5248 // Check if the given key is an array index. | 5223 // Check if the given key is an array index. |
5249 uint32_t index; | 5224 uint32_t index; |
5250 if (key->ToArrayIndex(&index)) { | 5225 if (key->ToArrayIndex(&index)) { |
5251 // In Firefox/SpiderMonkey, Safari and Opera you can access the characters | 5226 // In Firefox/SpiderMonkey, Safari and Opera you can access the characters |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5336 RUNTIME_ASSERT(args.length() == 3); | 5311 RUNTIME_ASSERT(args.length() == 3); |
5337 | 5312 |
5338 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 5313 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
5339 CONVERT_ARG_HANDLE_CHECKED(String, key, 1); | 5314 CONVERT_ARG_HANDLE_CHECKED(String, key, 1); |
5340 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 5315 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
5341 RUNTIME_ASSERT(key->IsUniqueName()); | 5316 RUNTIME_ASSERT(key->IsUniqueName()); |
5342 return *JSObject::SetHiddenProperty(object, key, value); | 5317 return *JSObject::SetHiddenProperty(object, key, value); |
5343 } | 5318 } |
5344 | 5319 |
5345 | 5320 |
5346 RUNTIME_FUNCTION(Runtime_SetProperty) { | 5321 RUNTIME_FUNCTION(Runtime_AddProperty) { |
5347 HandleScope scope(isolate); | 5322 HandleScope scope(isolate); |
5348 RUNTIME_ASSERT(args.length() == 4 || args.length() == 5); | 5323 RUNTIME_ASSERT(args.length() == 4); |
5349 | 5324 |
5350 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | 5325 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
5351 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 5326 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
5352 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 5327 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
5353 CONVERT_SMI_ARG_CHECKED(unchecked_attributes, 3); | 5328 CONVERT_SMI_ARG_CHECKED(unchecked_attributes, 3); |
5354 RUNTIME_ASSERT( | 5329 RUNTIME_ASSERT( |
5355 (unchecked_attributes & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | 5330 (unchecked_attributes & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
5356 // Compute attributes. | 5331 // Compute attributes. |
5357 PropertyAttributes attributes = | 5332 PropertyAttributes attributes = |
5358 static_cast<PropertyAttributes>(unchecked_attributes); | 5333 static_cast<PropertyAttributes>(unchecked_attributes); |
5359 | 5334 |
5360 StrictMode strict_mode = SLOPPY; | 5335 #ifdef DEBUG |
5361 if (args.length() == 5) { | 5336 if (key->IsName()) { |
5362 CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode_arg, 4); | 5337 LookupIterator it(object, Handle<Name>::cast(key), |
5363 strict_mode = strict_mode_arg; | 5338 LookupIterator::CHECK_OWN); |
| 5339 JSReceiver::GetPropertyAttributes(&it); |
| 5340 RUNTIME_ASSERT(!it.IsFound()); |
| 5341 } else { |
| 5342 uint32_t index = 0; |
| 5343 RUNTIME_ASSERT(key->ToArrayIndex(&index)); |
| 5344 RUNTIME_ASSERT(!JSReceiver::HasOwnElement(object, index)); |
5364 } | 5345 } |
| 5346 #endif |
5365 | 5347 |
5366 Handle<Object> result; | 5348 Handle<Object> result; |
5367 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 5349 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
5368 isolate, result, | 5350 isolate, result, |
5369 Runtime::SetObjectProperty( | 5351 Runtime::DefineObjectProperty(object, key, value, attributes)); |
5370 isolate, object, key, value, attributes, strict_mode)); | |
5371 return *result; | 5352 return *result; |
5372 } | 5353 } |
5373 | 5354 |
| 5355 |
| 5356 RUNTIME_FUNCTION(Runtime_SetProperty) { |
| 5357 HandleScope scope(isolate); |
| 5358 RUNTIME_ASSERT(args.length() == 4); |
| 5359 |
| 5360 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); |
| 5361 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 5362 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
| 5363 CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode_arg, 3); |
| 5364 StrictMode strict_mode = strict_mode_arg; |
| 5365 |
| 5366 Handle<Object> result; |
| 5367 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 5368 isolate, result, |
| 5369 Runtime::SetObjectProperty(isolate, object, key, value, strict_mode)); |
| 5370 return *result; |
| 5371 } |
| 5372 |
5374 | 5373 |
5375 RUNTIME_FUNCTION(Runtime_TransitionElementsKind) { | 5374 RUNTIME_FUNCTION(Runtime_TransitionElementsKind) { |
5376 HandleScope scope(isolate); | 5375 HandleScope scope(isolate); |
5377 RUNTIME_ASSERT(args.length() == 2); | 5376 RUNTIME_ASSERT(args.length() == 2); |
5378 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); | 5377 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); |
5379 CONVERT_ARG_HANDLE_CHECKED(Map, map, 1); | 5378 CONVERT_ARG_HANDLE_CHECKED(Map, map, 1); |
5380 JSObject::TransitionElementsKind(array, map->elements_kind()); | 5379 JSObject::TransitionElementsKind(array, map->elements_kind()); |
5381 return *array; | 5380 return *array; |
5382 } | 5381 } |
5383 | 5382 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5514 | 5513 |
5515 | 5514 |
5516 RUNTIME_FUNCTION(Runtime_DebugPromiseHandleEpilogue) { | 5515 RUNTIME_FUNCTION(Runtime_DebugPromiseHandleEpilogue) { |
5517 ASSERT(args.length() == 0); | 5516 ASSERT(args.length() == 0); |
5518 SealHandleScope shs(isolate); | 5517 SealHandleScope shs(isolate); |
5519 isolate->debug()->PromiseHandleEpilogue(); | 5518 isolate->debug()->PromiseHandleEpilogue(); |
5520 return isolate->heap()->undefined_value(); | 5519 return isolate->heap()->undefined_value(); |
5521 } | 5520 } |
5522 | 5521 |
5523 | 5522 |
5524 // Set an own property, even if it is READ_ONLY. If the property does not | |
5525 // exist, it will be added with attributes NONE. | |
5526 RUNTIME_FUNCTION(Runtime_IgnoreAttributesAndSetProperty) { | |
5527 HandleScope scope(isolate); | |
5528 RUNTIME_ASSERT(args.length() == 3 || args.length() == 4); | |
5529 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | |
5530 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | |
5531 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | |
5532 // Compute attributes. | |
5533 PropertyAttributes attributes = NONE; | |
5534 if (args.length() == 4) { | |
5535 CONVERT_SMI_ARG_CHECKED(unchecked_value, 3); | |
5536 // Only attribute bits should be set. | |
5537 RUNTIME_ASSERT( | |
5538 (unchecked_value & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | |
5539 attributes = static_cast<PropertyAttributes>(unchecked_value); | |
5540 } | |
5541 Handle<Object> result; | |
5542 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
5543 isolate, result, | |
5544 JSObject::SetOwnPropertyIgnoreAttributes( | |
5545 object, name, value, attributes)); | |
5546 return *result; | |
5547 } | |
5548 | |
5549 | |
5550 RUNTIME_FUNCTION(Runtime_DeleteProperty) { | 5523 RUNTIME_FUNCTION(Runtime_DeleteProperty) { |
5551 HandleScope scope(isolate); | 5524 HandleScope scope(isolate); |
5552 ASSERT(args.length() == 3); | 5525 ASSERT(args.length() == 3); |
5553 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); | 5526 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); |
5554 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); | 5527 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); |
5555 CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode, 2); | 5528 CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode, 2); |
5556 JSReceiver::DeleteMode delete_mode = strict_mode == STRICT | 5529 JSReceiver::DeleteMode delete_mode = strict_mode == STRICT |
5557 ? JSReceiver::STRICT_DELETION : JSReceiver::NORMAL_DELETION; | 5530 ? JSReceiver::STRICT_DELETION : JSReceiver::NORMAL_DELETION; |
5558 Handle<Object> result; | 5531 Handle<Object> result; |
5559 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 5532 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
(...skipping 5837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11397 | 11370 |
11398 HandleScope scope(isolate); | 11371 HandleScope scope(isolate); |
11399 Handle<Object> value(i < frame_inspector->GetParametersCount() | 11372 Handle<Object> value(i < frame_inspector->GetParametersCount() |
11400 ? frame_inspector->GetParameter(i) | 11373 ? frame_inspector->GetParameter(i) |
11401 : isolate->heap()->undefined_value(), | 11374 : isolate->heap()->undefined_value(), |
11402 isolate); | 11375 isolate); |
11403 ASSERT(!value->IsTheHole()); | 11376 ASSERT(!value->IsTheHole()); |
11404 | 11377 |
11405 RETURN_ON_EXCEPTION( | 11378 RETURN_ON_EXCEPTION( |
11406 isolate, | 11379 isolate, |
11407 Runtime::SetObjectProperty(isolate, target, name, value, NONE, SLOPPY), | 11380 Runtime::SetObjectProperty(isolate, target, name, value, SLOPPY), |
11408 JSObject); | 11381 JSObject); |
11409 } | 11382 } |
11410 | 11383 |
11411 // Second fill all stack locals. | 11384 // Second fill all stack locals. |
11412 for (int i = 0; i < scope_info->StackLocalCount(); ++i) { | 11385 for (int i = 0; i < scope_info->StackLocalCount(); ++i) { |
11413 if (scope_info->LocalIsSynthetic(i)) continue; | 11386 if (scope_info->LocalIsSynthetic(i)) continue; |
11414 Handle<String> name(scope_info->StackLocalName(i)); | 11387 Handle<String> name(scope_info->StackLocalName(i)); |
11415 Handle<Object> value(frame_inspector->GetExpression(i), isolate); | 11388 Handle<Object> value(frame_inspector->GetExpression(i), isolate); |
11416 if (value->IsTheHole()) continue; | 11389 if (value->IsTheHole()) continue; |
11417 | 11390 |
11418 RETURN_ON_EXCEPTION( | 11391 RETURN_ON_EXCEPTION( |
11419 isolate, | 11392 isolate, |
11420 Runtime::SetObjectProperty(isolate, target, name, value, NONE, SLOPPY), | 11393 Runtime::SetObjectProperty(isolate, target, name, value, SLOPPY), |
11421 JSObject); | 11394 JSObject); |
11422 } | 11395 } |
11423 | 11396 |
11424 return target; | 11397 return target; |
11425 } | 11398 } |
11426 | 11399 |
11427 | 11400 |
11428 static void UpdateStackLocalsFromMaterializedObject(Isolate* isolate, | 11401 static void UpdateStackLocalsFromMaterializedObject(Isolate* isolate, |
11429 Handle<JSObject> target, | 11402 Handle<JSObject> target, |
11430 Handle<JSFunction> function, | 11403 Handle<JSFunction> function, |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11499 | 11472 |
11500 for (int i = 0; i < keys->length(); i++) { | 11473 for (int i = 0; i < keys->length(); i++) { |
11501 // Names of variables introduced by eval are strings. | 11474 // Names of variables introduced by eval are strings. |
11502 ASSERT(keys->get(i)->IsString()); | 11475 ASSERT(keys->get(i)->IsString()); |
11503 Handle<String> key(String::cast(keys->get(i))); | 11476 Handle<String> key(String::cast(keys->get(i))); |
11504 Handle<Object> value; | 11477 Handle<Object> value; |
11505 ASSIGN_RETURN_ON_EXCEPTION( | 11478 ASSIGN_RETURN_ON_EXCEPTION( |
11506 isolate, value, Object::GetPropertyOrElement(ext, key), JSObject); | 11479 isolate, value, Object::GetPropertyOrElement(ext, key), JSObject); |
11507 RETURN_ON_EXCEPTION( | 11480 RETURN_ON_EXCEPTION( |
11508 isolate, | 11481 isolate, |
11509 Runtime::SetObjectProperty( | 11482 Runtime::SetObjectProperty(isolate, target, key, value, SLOPPY), |
11510 isolate, target, key, value, NONE, SLOPPY), | |
11511 JSObject); | 11483 JSObject); |
11512 } | 11484 } |
11513 } | 11485 } |
11514 } | 11486 } |
11515 | 11487 |
11516 return target; | 11488 return target; |
11517 } | 11489 } |
11518 | 11490 |
11519 | 11491 |
11520 MUST_USE_RESULT static MaybeHandle<JSObject> MaterializeLocalScope( | 11492 MUST_USE_RESULT static MaybeHandle<JSObject> MaterializeLocalScope( |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11605 // Function context extension. These are variables introduced by eval. | 11577 // Function context extension. These are variables introduced by eval. |
11606 if (function_context->closure() == *function) { | 11578 if (function_context->closure() == *function) { |
11607 if (function_context->has_extension() && | 11579 if (function_context->has_extension() && |
11608 !function_context->IsNativeContext()) { | 11580 !function_context->IsNativeContext()) { |
11609 Handle<JSObject> ext(JSObject::cast(function_context->extension())); | 11581 Handle<JSObject> ext(JSObject::cast(function_context->extension())); |
11610 | 11582 |
11611 if (JSReceiver::HasProperty(ext, variable_name)) { | 11583 if (JSReceiver::HasProperty(ext, variable_name)) { |
11612 // We don't expect this to do anything except replacing | 11584 // We don't expect this to do anything except replacing |
11613 // property value. | 11585 // property value. |
11614 Runtime::SetObjectProperty(isolate, ext, variable_name, new_value, | 11586 Runtime::SetObjectProperty(isolate, ext, variable_name, new_value, |
11615 NONE, SLOPPY).Assert(); | 11587 SLOPPY).Assert(); |
11616 return true; | 11588 return true; |
11617 } | 11589 } |
11618 } | 11590 } |
11619 } | 11591 } |
11620 } | 11592 } |
11621 | 11593 |
11622 return default_result; | 11594 return default_result; |
11623 } | 11595 } |
11624 | 11596 |
11625 | 11597 |
(...skipping 30 matching lines...) Expand all Loading... |
11656 for (int i = 0; i < keys->length(); i++) { | 11628 for (int i = 0; i < keys->length(); i++) { |
11657 HandleScope scope(isolate); | 11629 HandleScope scope(isolate); |
11658 // Names of variables introduced by eval are strings. | 11630 // Names of variables introduced by eval are strings. |
11659 ASSERT(keys->get(i)->IsString()); | 11631 ASSERT(keys->get(i)->IsString()); |
11660 Handle<String> key(String::cast(keys->get(i))); | 11632 Handle<String> key(String::cast(keys->get(i))); |
11661 Handle<Object> value; | 11633 Handle<Object> value; |
11662 ASSIGN_RETURN_ON_EXCEPTION( | 11634 ASSIGN_RETURN_ON_EXCEPTION( |
11663 isolate, value, Object::GetPropertyOrElement(ext, key), JSObject); | 11635 isolate, value, Object::GetPropertyOrElement(ext, key), JSObject); |
11664 RETURN_ON_EXCEPTION( | 11636 RETURN_ON_EXCEPTION( |
11665 isolate, | 11637 isolate, |
11666 Runtime::SetObjectProperty( | 11638 Runtime::DefineObjectProperty(closure_scope, key, value, NONE), |
11667 isolate, closure_scope, key, value, NONE, SLOPPY), | |
11668 JSObject); | 11639 JSObject); |
11669 } | 11640 } |
11670 } | 11641 } |
11671 | 11642 |
11672 return closure_scope; | 11643 return closure_scope; |
11673 } | 11644 } |
11674 | 11645 |
11675 | 11646 |
11676 // This method copies structure of MaterializeClosure method above. | 11647 // This method copies structure of MaterializeClosure method above. |
11677 static bool SetClosureVariableValue(Isolate* isolate, | 11648 static bool SetClosureVariableValue(Isolate* isolate, |
(...skipping 10 matching lines...) Expand all Loading... |
11688 isolate, scope_info, context, variable_name, new_value)) { | 11659 isolate, scope_info, context, variable_name, new_value)) { |
11689 return true; | 11660 return true; |
11690 } | 11661 } |
11691 | 11662 |
11692 // Properties from the function context extension. This will | 11663 // Properties from the function context extension. This will |
11693 // be variables introduced by eval. | 11664 // be variables introduced by eval. |
11694 if (context->has_extension()) { | 11665 if (context->has_extension()) { |
11695 Handle<JSObject> ext(JSObject::cast(context->extension())); | 11666 Handle<JSObject> ext(JSObject::cast(context->extension())); |
11696 if (JSReceiver::HasProperty(ext, variable_name)) { | 11667 if (JSReceiver::HasProperty(ext, variable_name)) { |
11697 // We don't expect this to do anything except replacing property value. | 11668 // We don't expect this to do anything except replacing property value. |
11698 Runtime::SetObjectProperty(isolate, ext, variable_name, new_value, | 11669 Runtime::DefineObjectProperty( |
11699 NONE, SLOPPY).Assert(); | 11670 ext, variable_name, new_value, NONE).Assert(); |
11700 return true; | 11671 return true; |
11701 } | 11672 } |
11702 } | 11673 } |
11703 | 11674 |
11704 return false; | 11675 return false; |
11705 } | 11676 } |
11706 | 11677 |
11707 | 11678 |
11708 // Create a plain JSObject which materializes the scope for the specified | 11679 // Create a plain JSObject which materializes the scope for the specified |
11709 // catch context. | 11680 // catch context. |
11710 MUST_USE_RESULT static MaybeHandle<JSObject> MaterializeCatchScope( | 11681 MUST_USE_RESULT static MaybeHandle<JSObject> MaterializeCatchScope( |
11711 Isolate* isolate, | 11682 Isolate* isolate, |
11712 Handle<Context> context) { | 11683 Handle<Context> context) { |
11713 ASSERT(context->IsCatchContext()); | 11684 ASSERT(context->IsCatchContext()); |
11714 Handle<String> name(String::cast(context->extension())); | 11685 Handle<String> name(String::cast(context->extension())); |
11715 Handle<Object> thrown_object(context->get(Context::THROWN_OBJECT_INDEX), | 11686 Handle<Object> thrown_object(context->get(Context::THROWN_OBJECT_INDEX), |
11716 isolate); | 11687 isolate); |
11717 Handle<JSObject> catch_scope = | 11688 Handle<JSObject> catch_scope = |
11718 isolate->factory()->NewJSObject(isolate->object_function()); | 11689 isolate->factory()->NewJSObject(isolate->object_function()); |
11719 RETURN_ON_EXCEPTION( | 11690 RETURN_ON_EXCEPTION( |
11720 isolate, | 11691 isolate, |
11721 Runtime::SetObjectProperty(isolate, catch_scope, name, thrown_object, | 11692 Runtime::DefineObjectProperty(catch_scope, name, thrown_object, NONE), |
11722 NONE, SLOPPY), | |
11723 JSObject); | 11693 JSObject); |
11724 return catch_scope; | 11694 return catch_scope; |
11725 } | 11695 } |
11726 | 11696 |
11727 | 11697 |
11728 static bool SetCatchVariableValue(Isolate* isolate, | 11698 static bool SetCatchVariableValue(Isolate* isolate, |
11729 Handle<Context> context, | 11699 Handle<Context> context, |
11730 Handle<String> variable_name, | 11700 Handle<String> variable_name, |
11731 Handle<Object> new_value) { | 11701 Handle<Object> new_value) { |
11732 ASSERT(context->IsCatchContext()); | 11702 ASSERT(context->IsCatchContext()); |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12775 target, isolate->factory()->arguments_string())) { | 12745 target, isolate->factory()->arguments_string())) { |
12776 return target; | 12746 return target; |
12777 } | 12747 } |
12778 | 12748 |
12779 // FunctionGetArguments can't throw an exception. | 12749 // FunctionGetArguments can't throw an exception. |
12780 Handle<JSObject> arguments = Handle<JSObject>::cast( | 12750 Handle<JSObject> arguments = Handle<JSObject>::cast( |
12781 Accessors::FunctionGetArguments(function)); | 12751 Accessors::FunctionGetArguments(function)); |
12782 Handle<String> arguments_str = isolate->factory()->arguments_string(); | 12752 Handle<String> arguments_str = isolate->factory()->arguments_string(); |
12783 RETURN_ON_EXCEPTION( | 12753 RETURN_ON_EXCEPTION( |
12784 isolate, | 12754 isolate, |
12785 Runtime::SetObjectProperty( | 12755 Runtime::DefineObjectProperty(target, arguments_str, arguments, NONE), |
12786 isolate, target, arguments_str, arguments, ::NONE, SLOPPY), | |
12787 JSObject); | 12756 JSObject); |
12788 return target; | 12757 return target; |
12789 } | 12758 } |
12790 | 12759 |
12791 | 12760 |
12792 // Compile and evaluate source for the given context. | 12761 // Compile and evaluate source for the given context. |
12793 static MaybeHandle<Object> DebugEvaluate(Isolate* isolate, | 12762 static MaybeHandle<Object> DebugEvaluate(Isolate* isolate, |
12794 Handle<Context> context, | 12763 Handle<Context> context, |
12795 Handle<Object> context_extension, | 12764 Handle<Object> context_extension, |
12796 Handle<Object> receiver, | 12765 Handle<Object> receiver, |
(...skipping 2312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15109 } | 15078 } |
15110 return NULL; | 15079 return NULL; |
15111 } | 15080 } |
15112 | 15081 |
15113 | 15082 |
15114 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { | 15083 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { |
15115 return &(kIntrinsicFunctions[static_cast<int>(id)]); | 15084 return &(kIntrinsicFunctions[static_cast<int>(id)]); |
15116 } | 15085 } |
15117 | 15086 |
15118 } } // namespace v8::internal | 15087 } } // namespace v8::internal |
OLD | NEW |